BIND 10 trac2472, updated. 7c8b1108b5df315e79aaa5b6ab21a655b24168cd [2472] Add getType() method and update message when backend is started
BIND 10 source code commits
bind10-changes at lists.isc.org
Tue Nov 13 12:24:12 UTC 2012
The branch, trac2472 has been updated
via 7c8b1108b5df315e79aaa5b6ab21a655b24168cd (commit)
via 238254d39204ae3b2e6fba3f540b14132ff1bc43 (commit)
from fa362e401a2f5830a3a7bd130dda2d8f0fae3972 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 7c8b1108b5df315e79aaa5b6ab21a655b24168cd
Author: Stephen Morris <stephen at isc.org>
Date: Tue Nov 13 12:14:55 2012 +0000
[2472] Add getType() method and update message when backend is started
The message when the DHCPv6 database backend is started now includes
both the type and the name of the database.
commit 238254d39204ae3b2e6fba3f540b14132ff1bc43
Author: Stephen Morris <stephen at isc.org>
Date: Tue Nov 13 12:06:48 2012 +0000
[2472] Use MySQL for lease manager backend (if present)
Parameters are hard-coded for the moment.
-----------------------------------------------------------------------
Summary of changes:
src/bin/dhcp6/ctrl_dhcp6_srv.cc | 18 ++++++++--
src/bin/dhcp6/dhcp6_messages.mes | 18 +++++-----
src/bin/dhcp6/dhcp6_srv.cc | 1 +
src/lib/dhcp/lease_mgr.h | 16 +++++++--
src/lib/dhcp/memfile_lease_mgr.h | 22 ++++++++++--
src/lib/dhcp/mysql_lease_mgr.cc | 5 +--
src/lib/dhcp/mysql_lease_mgr.h | 13 +++++++
src/lib/dhcp/tests/lease_mgr_unittest.cc | 40 +++++++++++++++-------
src/lib/dhcp/tests/memfile_lease_mgr_unittest.cc | 8 +++++
src/lib/dhcp/tests/mysql_lease_mgr_unittest.cc | 4 +++
10 files changed, 115 insertions(+), 30 deletions(-)
-----------------------------------------------------------------------
diff --git a/src/bin/dhcp6/ctrl_dhcp6_srv.cc b/src/bin/dhcp6/ctrl_dhcp6_srv.cc
index 7370583..555c9ec 100644
--- a/src/bin/dhcp6/ctrl_dhcp6_srv.cc
+++ b/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
}
diff --git a/src/bin/dhcp6/dhcp6_messages.mes b/src/bin/dhcp6/dhcp6_messages.mes
index 5f9cd02..96649d5 100644
--- a/src/bin/dhcp6/dhcp6_messages.mes
+++ b/src/bin/dhcp6/dhcp6_messages.mes
@@ -30,7 +30,7 @@ from the BIND 10 control system by the IPv6 DHCP server.
A debug message indicating that the IPv6 DHCP server has received an
updated configuration from the BIND 10 configuration system.
-% DHCP6_DB_BACKEND_STARTED Lease database started (backend type: %1)
+% DHCP6_DB_BACKEND_STARTED lease database started (type: %1, name: %2)
This informational message is printed every time DHCPv6 is started.
It indicates what database backend type is being to store lease and
other information.
@@ -47,7 +47,7 @@ interfaces and is therefore shutting down.
A debug message issued during startup, this indicates that the IPv6 DHCP
server is about to open sockets on the specified port.
-% DHCP6_LEASE_ADVERT Lease %1 advertised (client duid=%2, iaid=%3)
+% DHCP6_LEASE_ADVERT lease %1 advertised (client duid=%2, iaid=%3)
This debug message indicates that the server successfully advertised
a lease. It is up to the client to choose one server out of othe advertised
and continue allocation with that server. This is a normal behavior and
@@ -154,14 +154,16 @@ the response will only contain generic configuration parameters and no
addresses or prefixes.
% DHCP6_NO_SUBNET_DEF_OPT failed to find subnet for address %1 when adding default options
-This warning message indicates that when attempting to add default options to a response,
-the server found that it was not configured to support the subnet from which the DHCPv6
-request was received. The packet has been ignored.
+This warning message indicates that when attempting to add default options
+to a response, the server found that it was not configured to support
+the subnet from which the DHCPv6 request was received. The packet has
+been ignored.
% DHCP6_NO_SUBNET_REQ_OPT failed to find subnet for address %1 when adding requested options
-This warning message indicates that when attempting to add requested options to a response,
-the server found that it was not configured to support the subnet from which the DHCPv6
-request was received. The packet has been ignored.
+This warning message indicates that when attempting to add requested
+options to a response, the server found that it was not configured
+to support the subnet from which the DHCPv6 request was received.
+The packet has been ignored.
% DHCP6_CONFIG_LOAD_FAIL failed to load configuration: %1
This critical error message indicates that the initial DHCPv6
diff --git a/src/bin/dhcp6/dhcp6_srv.cc b/src/bin/dhcp6/dhcp6_srv.cc
index 1c76b75..82a4777 100644
--- a/src/bin/dhcp6/dhcp6_srv.cc
+++ b/src/bin/dhcp6/dhcp6_srv.cc
@@ -80,6 +80,7 @@ Dhcpv6Srv::Dhcpv6Srv(uint16_t port, const char* dbconfig)
// Instantiate LeaseMgr
LeaseMgrFactory::create(dbconfig);
LOG_INFO(dhcp6_logger, DHCP6_DB_BACKEND_STARTED)
+ .arg(LeaseMgrFactory::instance().getType())
.arg(LeaseMgrFactory::instance().getName());
// Instantiate allocation engine
diff --git a/src/lib/dhcp/lease_mgr.h b/src/lib/dhcp/lease_mgr.h
index 40c20cd..7819aad 100644
--- a/src/lib/dhcp/lease_mgr.h
+++ b/src/lib/dhcp/lease_mgr.h
@@ -505,14 +505,26 @@ public:
/// @return true if deletion was successful, false if no such lease exists
virtual bool deleteLease6(const isc::asiolink::IOAddress& addr) = 0;
+ /// @brief Return backend type
+ ///
+ /// Returns the type of the backend (e.g. "mysql", "memfile" etc.)
+ ///
+ /// @return Type of the backend.
+ virtual std::string getType() const = 0;
+
/// @brief Returns backend name.
///
- /// Each backend have specific name, e.g. "mysql" or "sqlite".
+ /// If the backend is a database, this is the name of the database or the
+ /// file. Otherwise it is just the same as the type.
+ ///
+ /// @return Name of the backend.
virtual std::string getName() const = 0;
/// @brief Returns description of the backend.
///
/// This description may be multiline text that describes the backend.
+ ///
+ /// @return Description of the backend.
virtual std::string getDescription() const = 0;
/// @brief Returns backend version.
@@ -548,7 +560,7 @@ public:
/// is currently postponed.
/// @brief returns value of the parameter
- std::string getParameter(const std::string& name) const;
+ virtual std::string getParameter(const std::string& name) const;
private:
/// @brief list of parameters passed in dbconfig
diff --git a/src/lib/dhcp/memfile_lease_mgr.h b/src/lib/dhcp/memfile_lease_mgr.h
index cb02360..2f66e8c 100644
--- a/src/lib/dhcp/memfile_lease_mgr.h
+++ b/src/lib/dhcp/memfile_lease_mgr.h
@@ -188,15 +188,31 @@ public:
/// @return true if deletion was successful, false if no such lease exists
bool deleteLease6(const isc::asiolink::IOAddress& addr);
+ /// @brief Return backend type
+ ///
+ /// Returns the type of the backend.
+ ///
+ /// @return Type of the backend.
+ virtual std::string getType() const {
+ return (std::string("memfile"));
+ }
+
/// @brief Returns backend name.
///
- /// Each backend have specific name, e.g. "mysql" or "sqlite".
- std::string getName() const { return ("memfile"); }
+ /// As there is no variation, in this case we return the type of the
+ /// backend.
+ ///
+ /// @return Name of the backend.
+ virtual std::string getName() const {
+ return ("memfile");
+ }
/// @brief Returns description of the backend.
///
/// This description may be multiline text that describes the backend.
- std::string getDescription() const;
+ ///
+ /// @return Description of the backend.
+ virtual std::string getDescription() const;
/// @brief Returns backend version.
virtual std::pair<uint32_t, uint32_t> getVersion() const {
diff --git a/src/lib/dhcp/mysql_lease_mgr.cc b/src/lib/dhcp/mysql_lease_mgr.cc
index f030cd3..78013d7 100644
--- a/src/lib/dhcp/mysql_lease_mgr.cc
+++ b/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_));
}
diff --git a/src/lib/dhcp/mysql_lease_mgr.h b/src/lib/dhcp/mysql_lease_mgr.h
index 8712c33..e3f1a7a 100644
--- a/src/lib/dhcp/mysql_lease_mgr.h
+++ b/src/lib/dhcp/mysql_lease_mgr.h
@@ -239,14 +239,27 @@ public:
/// failed.
virtual bool deleteLease6(const isc::asiolink::IOAddress& addr);
+ /// @brief Return backend type
+ ///
+ /// Returns the type of the backend (e.g. "mysql", "memfile" etc.)
+ ///
+ /// @return Type of the backend.
+ virtual std::string getType() const {
+ return (std::string("mysql"));
+ }
+
/// @brief Returns backend name.
///
/// Each backend have specific name, e.g. "mysql" or "sqlite".
+ ///
+ /// @return Name of the backend.
virtual std::string getName() const;
/// @brief Returns description of the backend.
///
/// This description may be multiline text that describes the backend.
+ ///
+ /// @return Description of the backend.
virtual std::string getDescription() const;
/// @brief Returns backend version.
diff --git a/src/lib/dhcp/tests/lease_mgr_unittest.cc b/src/lib/dhcp/tests/lease_mgr_unittest.cc
index 64ce9b1..7ad2036 100644
--- a/src/lib/dhcp/tests/lease_mgr_unittest.cc
+++ b/src/lib/dhcp/tests/lease_mgr_unittest.cc
@@ -134,7 +134,7 @@ public:
/// @param addr address of the searched lease
///
/// @return smart pointer to the lease (or NULL if a lease is not found)
- Lease6Ptr getLease6(const isc::asiolink::IOAddress&) const {
+ virtual Lease6Ptr getLease6(const isc::asiolink::IOAddress&) const {
return (Lease6Ptr());
}
@@ -144,7 +144,7 @@ public:
/// @param iaid IA identifier
///
/// @return collection of IPv6 leases
- Lease6Collection getLease6(const DUID&, uint32_t) const {
+ virtual Lease6Collection getLease6(const DUID&, uint32_t) const {
return (Lease6Collection());
}
@@ -155,7 +155,7 @@ public:
/// @param subnet_id identifier of the subnet the lease must belong to
///
/// @return smart pointer to the lease (or NULL if a lease is not found)
- Lease6Ptr getLease6(const DUID&, uint32_t, SubnetID) const {
+ virtual Lease6Ptr getLease6(const DUID&, uint32_t, SubnetID) const {
return (Lease6Ptr());
}
@@ -164,21 +164,21 @@ public:
/// @param lease4 The lease to be updated.
///
/// If no such lease is present, an exception will be thrown.
- void updateLease4(const Lease4Ptr&) {}
+ virtual void updateLease4(const Lease4Ptr&) {}
/// @brief Updates IPv4 lease.
///
/// @param lease4 The lease to be updated.
///
/// If no such lease is present, an exception will be thrown.
- void updateLease6(const Lease6Ptr&) {}
+ virtual void updateLease6(const Lease6Ptr&) {}
/// @brief Deletes a lease.
///
/// @param addr IPv4 address of the lease to be deleted.
///
/// @return true if deletion was successful, false if no such lease exists
- bool deleteLease4(const isc::asiolink::IOAddress&) {
+ virtual bool deleteLease4(const isc::asiolink::IOAddress&) {
return (false);
}
@@ -187,35 +187,49 @@ public:
/// @param addr IPv4 address of the lease to be deleted.
///
/// @return true if deletion was successful, false if no such lease exists
- bool deleteLease6(const isc::asiolink::IOAddress&) {
+ virtual bool deleteLease6(const isc::asiolink::IOAddress&) {
return (false);
}
+ /// @brief Returns backend type.
+ ///
+ /// Returns the type of the backend (e.g. "mysql", "memfile" etc.)
+ ///
+ /// @return Type of the backend.
+ virtual std::string getType() const {
+ return (std::string("concrete"));
+ }
+
/// @brief Returns backend name.
///
- /// Each backend have specific name, e.g. "mysql" or "sqlite".
- std::string getName() const {
+ /// If the backend is a database, this is the name of the database or the
+ /// file. Otherwise it is just the same as the type.
+ ///
+ /// @return Name of the backend.
+ virtual std::string getName() const {
return (std::string("concrete"));
}
/// @brief Returns description of the backend.
///
/// This description may be multiline text that describes the backend.
- std::string getDescription() const {
+ ///
+ /// @return Description of the backend.
+ virtual std::string getDescription() const {
return (std::string("This is a dummy concrete backend implementation."));
}
/// @brief Returns backend version.
- std::pair<uint32_t, uint32_t> getVersion() const {
+ virtual std::pair<uint32_t, uint32_t> getVersion() const {
return (make_pair(uint32_t(0), uint32_t(0)));
}
/// @brief Commit transactions
- void commit() {
+ virtual void commit() {
}
/// @brief Rollback transactions
- void rollback() {
+ virtual void rollback() {
}
};
diff --git a/src/lib/dhcp/tests/memfile_lease_mgr_unittest.cc b/src/lib/dhcp/tests/memfile_lease_mgr_unittest.cc
index c625a16..f25ceab 100644
--- a/src/lib/dhcp/tests/memfile_lease_mgr_unittest.cc
+++ b/src/lib/dhcp/tests/memfile_lease_mgr_unittest.cc
@@ -45,6 +45,14 @@ TEST_F(MemfileLeaseMgrTest, constructor) {
ASSERT_NO_THROW(lease_mgr.reset(new Memfile_LeaseMgr(pmap)));
}
+TEST_F(MemfileLeaseMgrTest, GetTypeAndName) {
+ const LeaseMgr::ParameterMap pmap; // Empty parameter map
+ boost::scoped_ptr<Memfile_LeaseMgr> lease_mgr(new Memfile_LeaseMgr(pmap));
+
+ EXPECT_EQ(std::string("memfile"), lease_mgr->getType());
+ EXPECT_EQ(std::string("memfile"), lease_mgr->getName());
+}
+
// There's no point in calling any other methods in LeaseMgr, as they
// are purely virtual, so we would only call Memfile_LeaseMgr methods.
// Those methods are just stubs that does not return anything.
diff --git a/src/lib/dhcp/tests/mysql_lease_mgr_unittest.cc b/src/lib/dhcp/tests/mysql_lease_mgr_unittest.cc
index a9b09ff..fc43bb5 100644
--- a/src/lib/dhcp/tests/mysql_lease_mgr_unittest.cc
+++ b/src/lib/dhcp/tests/mysql_lease_mgr_unittest.cc
@@ -470,6 +470,10 @@ TEST(MySqlOpenTest, OpenDatabase) {
destroySchema();
}
+TEST_F(MySqlLeaseMgrTest, GetType) {
+ EXPECT_EQ(std::string("mysql"), lmptr_->getType());
+}
+
// @brief Check conversion functions
TEST_F(MySqlLeaseMgrTest, CheckTimeConversion) {
const time_t cltt = time(NULL);
More information about the bind10-changes
mailing list