Browse Source

[2472] Use MySQL for lease manager backend (if present)

Parameters are hard-coded for the moment.
Stephen Morris 12 years ago
parent
commit
238254d392
2 changed files with 19 additions and 4 deletions
  1. 16 2
      src/bin/dhcp6/ctrl_dhcp6_srv.cc
  2. 3 2
      src/lib/dhcp/mysql_lease_mgr.cc

+ 16 - 2
src/bin/dhcp6/ctrl_dhcp6_srv.cc

@@ -39,9 +39,23 @@ using namespace isc::log;
 using namespace isc::util;
 using namespace std;
 
+namespace {
+// @todo: Replace the next line by extraction from configuration parameters
+// This is the "dbconfig" string for the MySQL database.  It is likely
+// that a long-term solution will be to create the instance of the lease manager
+// somewhere other than the Dhcpv6Srv constructor, to give time to extract
+// the connection string from the configuration database.
+#ifdef HAVE_MYSQL
+const char* DBCONFIG = "type=mysql name=kea user=kea password=kea host=localhost";
+#else
+const char* DBCONFIG = "type=memfile";
+#endif
+};
+
 namespace isc {
 namespace dhcp {
 
+
 ControlledDhcpv6Srv* ControlledDhcpv6Srv::server_ = NULL;
 
 ConstElementPtr
@@ -149,8 +163,8 @@ void ControlledDhcpv6Srv::disconnectSession() {
     IfaceMgr::instance().set_session_socket(IfaceMgr::INVALID_SOCKET, NULL);
 }
 
-ControlledDhcpv6Srv::ControlledDhcpv6Srv(uint16_t port /*= DHCP6_SERVER_PORT*/)
-    :Dhcpv6Srv(port), cc_session_(NULL), config_session_(NULL) {
+ControlledDhcpv6Srv::ControlledDhcpv6Srv(uint16_t port)
+    : Dhcpv6Srv(port, DBCONFIG), cc_session_(NULL), config_session_(NULL) {
     server_ = this; // remember this instance for use in callback
 }
 

+ 3 - 2
src/lib/dhcp/mysql_lease_mgr.cc

@@ -447,8 +447,9 @@ MySqlLeaseMgr::MySqlLeaseMgr(const LeaseMgr::ParameterMap& parameters)
     // Open the database
     openDatabase();
 
-    // Disable autocommit
-    my_bool result = mysql_autocommit(mysql_, 0);
+    // Enable autocommit.  For maximum speed, the global parameter
+    // innodb_flush_log_at_trx_commit should be set to 2.
+    my_bool result = mysql_autocommit(mysql_, 1);
     if (result != 0) {
         isc_throw(DbOperationError, mysql_error(mysql_));
     }