]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#1621] addressed comments
authorRazvan Becheriu <razvan@isc.org>
Thu, 18 Mar 2021 21:32:07 +0000 (23:32 +0200)
committerRazvan Becheriu <razvan@isc.org>
Mon, 29 Mar 2021 18:11:29 +0000 (21:11 +0300)
src/hooks/dhcp/mysql_cb/mysql_cb_impl.cc
src/lib/database/database_connection.h
src/lib/dhcpsrv/mysql_host_data_source.cc
src/lib/dhcpsrv/mysql_lease_mgr.cc
src/lib/dhcpsrv/mysql_lease_mgr.h
src/lib/dhcpsrv/pgsql_host_data_source.cc
src/lib/dhcpsrv/pgsql_lease_mgr.cc
src/lib/dhcpsrv/pgsql_lease_mgr.h
src/lib/mysql/mysql_connection.h
src/lib/pgsql/pgsql_connection.h

index 6b1acb9b14d3166fe828e6e0f1af3fee2cf63705..c9b596939a11bae27fdeb3104c61c86d4f4bdf04 100644 (file)
@@ -48,7 +48,7 @@ MySqlConfigBackendImpl::
 MySqlConfigBackendImpl(const DatabaseConnection::ParameterMap& parameters,
                        const DbCallback db_reconnect_callback)
     : conn_(parameters,
-            IOServiceAccessCallbackPtr(new IOServiceAccessCallback(MySqlConfigBackendImpl::getIOService)),
+            IOServiceAccessorPtr(new IOServiceAccessor(MySqlConfigBackendImpl::getIOService)),
             db_reconnect_callback), timer_name_(""),
       audit_revision_created_(false), parameters_(parameters) {
     // Test schema version first.
index 5ae2b2209de549aa888aecddd762d63ce037c1bd..3d69895e95cf70419a9d59006423631119e40062 100644 (file)
@@ -172,12 +172,17 @@ typedef boost::shared_ptr<ReconnectCtl> ReconnectCtlPtr;
 /// @brief Defines a callback prototype for propagating events upward
 typedef std::function<bool (ReconnectCtlPtr db_reconnect_ctl)> DbCallback;
 
-/// @brief Callback which returns the IOService that can be used to recover the
+/// @brief Function which returns the IOService that can be used to recover the
 /// connection.
-typedef std::function<isc::asiolink::IOServicePtr ()> IOServiceAccessCallback;
-
-/// @brief Pointer to an instance of IOServiceAccessCallbackPtr
-typedef boost::shared_ptr<IOServiceAccessCallback> IOServiceAccessCallbackPtr;
+///
+/// This accessor is used to lazy retrieve the IOService when the connection is
+/// lost. It is useful to retrieve it at a later time to support hook libraries
+/// which create managers on load and set IOService later on by using the
+/// dhcp4_srv_configured and dhcp6_srv_configured hooks.
+typedef std::function<isc::asiolink::IOServicePtr ()> IOServiceAccessor;
+
+/// @brief Pointer to an instance of IOServiceAccessor
+typedef boost::shared_ptr<IOServiceAccessor> IOServiceAccessorPtr;
 
 /// @brief Common database connection class.
 ///
index e2e482213d741cdd5a301811198009d32c7c753e..df50155e4d80bd36665a4c2d9a6b04a83c4b293e 100644 (file)
@@ -1951,10 +1951,10 @@ public:
     /// @brief Constructor
     ///
     /// @param parameters See MySqlHostMgr constructor.
-    /// @param io_service_access_callback The IOService access callback.
+    /// @param io_service_accessor The IOService accessor function.
     /// @param db_reconnect_callback The connection recovery callback.
     MySqlHostContext(const DatabaseConnection::ParameterMap& parameters,
-                     IOServiceAccessCallbackPtr io_service_access_callback,
+                     IOServiceAccessorPtr io_service_accessor,
                      db::DbCallback db_reconnect_callback);
 
     /// The exchange objects are used for transfer of data to/from the database.
@@ -2731,9 +2731,9 @@ TaggedStatementArray tagged_statements = { {
 // MySqlHostContext Constructor
 
 MySqlHostContext::MySqlHostContext(const DatabaseConnection::ParameterMap& parameters,
-                                   IOServiceAccessCallbackPtr io_service_access_callback,
+                                   IOServiceAccessorPtr io_service_accessor,
                                    db::DbCallback db_reconnect_callback)
-    : conn_(parameters, io_service_access_callback, db_reconnect_callback),
+    : conn_(parameters, io_service_accessor, db_reconnect_callback),
       is_readonly_(true) {
 }
 
@@ -2808,7 +2808,7 @@ MySqlHostDataSourceImpl::MySqlHostDataSourceImpl(const DatabaseConnection::Param
 MySqlHostContextPtr
 MySqlHostDataSourceImpl::createContext() const {
     MySqlHostContextPtr ctx(new MySqlHostContext(parameters_,
-        IOServiceAccessCallbackPtr(new IOServiceAccessCallback(&HostMgr::getIOService)),
+        IOServiceAccessorPtr(new IOServiceAccessor(&HostMgr::getIOService)),
         &MySqlHostDataSourceImpl::dbReconnect));
 
     // Open the database.
index 2c9abe76a5c444fad3574d2894df49087624ec5b..f7668540ea989b89d95447cd06201607a87e570f 100644 (file)
@@ -1737,9 +1737,9 @@ bool MySqlLeaseStatsQuery::negative_count_ = false;
 // MySqlLeaseContext Constructor
 
 MySqlLeaseContext::MySqlLeaseContext(const DatabaseConnection::ParameterMap& parameters,
-                                     IOServiceAccessCallbackPtr io_service_access_callback,
+                                     IOServiceAccessorPtr io_service_accessor,
                                      DbCallback db_reconnect_callback)
-    : conn_(parameters, io_service_access_callback, db_reconnect_callback) {
+    : conn_(parameters, io_service_accessor, db_reconnect_callback) {
 }
 
 // MySqlLeaseContextAlloc Constructor and Destructor
@@ -1881,7 +1881,7 @@ MySqlLeaseMgr::dbReconnect(ReconnectCtlPtr db_reconnect_ctl) {
 MySqlLeaseContextPtr
 MySqlLeaseMgr::createContext() const {
     MySqlLeaseContextPtr ctx(new MySqlLeaseContext(parameters_,
-        IOServiceAccessCallbackPtr(new IOServiceAccessCallback(&LeaseMgr::getIOService)),
+        IOServiceAccessorPtr(new IOServiceAccessor(&LeaseMgr::getIOService)),
         &MySqlLeaseMgr::dbReconnect));
 
     // Open the database.
index 6b428e45609bf4fc24a6d10e623ba48e9e5852d6..edad80c4a6da2f47d87a4904a3fdea9c479bebd8 100644 (file)
@@ -44,10 +44,10 @@ public:
     /// @brief Constructor
     ///
     /// @param parameters See MySqlLeaseMgr constructor.
-    /// @param io_service_access_callback The IOService access callback.
+    /// @param io_service_accessor The IOService accessor function.
     /// @param db_reconnect_callback The connection recovery callback.
     MySqlLeaseContext(const db::DatabaseConnection::ParameterMap& parameters,
-                      db::IOServiceAccessCallbackPtr io_service_access_callback,
+                      db::IOServiceAccessorPtr io_service_accessor,
                       db::DbCallback db_reconnect_callback);
 
     /// The exchange objects are used for transfer of data to/from the database.
index 6fec6459a97d597775a73879e90bd27398193f79..1f5164494dd6006a2288589abbdc899524e7bf57 100644 (file)
@@ -1313,10 +1313,10 @@ public:
     /// @brief Constructor
     ///
     /// @param parameters See PgSqlHostMgr constructor.
-    /// @param io_service_access_callback The IOService access callback.
+    /// @param io_service_accessor The IOService accessor function.
     /// @param db_reconnect_callback The connection recovery callback.
     PgSqlHostContext(const DatabaseConnection::ParameterMap& parameters,
-                     IOServiceAccessCallbackPtr io_service_access_callback,
+                     IOServiceAccessorPtr io_service_accessor,
                      db::DbCallback db_reconnect_callback);
 
     /// The exchange objects are used for transfer of data to/from the database.
@@ -2172,9 +2172,9 @@ TaggedStatementArray tagged_statements = { {
 // PgSqlHostContext Constructor
 
 PgSqlHostContext::PgSqlHostContext(const DatabaseConnection::ParameterMap& parameters,
-                                   IOServiceAccessCallbackPtr io_service_access_callback,
+                                   IOServiceAccessorPtr io_service_accessor,
                                    db::DbCallback db_reconnect_callback)
-    : conn_(parameters, io_service_access_callback, db_reconnect_callback),
+    : conn_(parameters, io_service_accessor, db_reconnect_callback),
       is_readonly_(true) {
 }
 
@@ -2249,7 +2249,7 @@ PgSqlHostDataSourceImpl::PgSqlHostDataSourceImpl(const DatabaseConnection::Param
 PgSqlHostContextPtr
 PgSqlHostDataSourceImpl::createContext() const {
     PgSqlHostContextPtr ctx(new PgSqlHostContext(parameters_,
-        IOServiceAccessCallbackPtr(new IOServiceAccessCallback(&HostMgr::getIOService)),
+        IOServiceAccessorPtr(new IOServiceAccessor(&HostMgr::getIOService)),
         &PgSqlHostDataSourceImpl::dbReconnect));
 
     // Open the database.
index eed79d2eecf13db3baa4a642af6f2a0eedd4388b..8b009f7e27fc9f7a6a14e7d2f07331a1e024dca4 100644 (file)
@@ -1171,9 +1171,9 @@ bool PgSqlLeaseStatsQuery::negative_count_ = false;
 // PgSqlLeaseContext Constructor
 
 PgSqlLeaseContext::PgSqlLeaseContext(const DatabaseConnection::ParameterMap& parameters,
-                                     IOServiceAccessCallbackPtr io_service_access_callback,
+                                     IOServiceAccessorPtr io_service_accessor,
                                      DbCallback db_reconnect_callback)
-    : conn_(parameters, io_service_access_callback, db_reconnect_callback) {
+    : conn_(parameters, io_service_accessor, db_reconnect_callback) {
 }
 
 // PgSqlLeaseContextAlloc Constructor and Destructor
@@ -1315,7 +1315,7 @@ PgSqlLeaseMgr::dbReconnect(ReconnectCtlPtr db_reconnect_ctl) {
 PgSqlLeaseContextPtr
 PgSqlLeaseMgr::createContext() const {
     PgSqlLeaseContextPtr ctx(new PgSqlLeaseContext(parameters_,
-        IOServiceAccessCallbackPtr(new IOServiceAccessCallback(&LeaseMgr::getIOService)),
+        IOServiceAccessorPtr(new IOServiceAccessor(&LeaseMgr::getIOService)),
         &PgSqlLeaseMgr::dbReconnect));
 
     // Open the database.
index f4200589540ed12f89179328db949e2276c0ecd3..6ea58ca0c16a36f814cccf6bcd18a6880c56a6ac 100644 (file)
@@ -43,10 +43,10 @@ public:
     /// @brief Constructor
     ///
     /// @param parameters See PgSqlLeaseMgr constructor.
-    /// @param io_service_access_callback The IOService access callback.
+    /// @param io_service_accessor The IOService accessor function.
     /// @param db_reconnect_callback The connection recovery callback.
     PgSqlLeaseContext(const db::DatabaseConnection::ParameterMap& parameters,
-                      db::IOServiceAccessCallbackPtr io_service_access_callback,
+                      db::IOServiceAccessorPtr io_service_accessor,
                       db::DbCallback db_reconnect_callback);
 
     /// The exchange objects are used for transfer of data to/from the database.
index 43e804eb5704a2bf62a29fca622ce0a04ba13ee2..dff65e9d3b46bf9256de8734f640ec08e189f9af 100644 (file)
@@ -241,13 +241,12 @@ public:
     /// Initialize MySqlConnection object with parameters needed for connection.
     ///
     /// @param parameters Specify the connection details.
-    /// @param io_access_callback The IOService access callback.
+    /// @param io_accessor The IOService accessor function.
     /// @param callback The connection recovery callback.
     MySqlConnection(const ParameterMap& parameters,
-                    IOServiceAccessCallbackPtr io_access_callback = IOServiceAccessCallbackPtr(),
+                    IOServiceAccessorPtr io_accessor = IOServiceAccessorPtr(),
                     DbCallback callback = DbCallback())
-        : DatabaseConnection(parameters),
-          io_service_access_callback_(io_access_callback),
+        : DatabaseConnection(parameters), io_service_accessor_(io_accessor),
           io_service_(), callback_(callback) {
     }
 
@@ -659,9 +658,9 @@ public:
     /// @note The recover function must be run on the IO Service thread.
     void startRecoverDbConnection() {
         if (callback_) {
-            if (!io_service_ && io_service_access_callback_) {
-                io_service_ = (*io_service_access_callback_)();
-                io_service_access_callback_.reset();
+            if (!io_service_ && io_service_accessor_) {
+                io_service_ = (*io_service_accessor_)();
+                io_service_accessor_.reset();
             }
 
             if (io_service_) {
@@ -688,9 +687,14 @@ public:
     /// and will be from MySqlHostDataSource.
     MySqlHolder mysql_;
 
-    /// @brief Callback which returns the IOService that can be used to recover
-    /// the connection.
-    IOServiceAccessCallbackPtr io_service_access_callback_;
+    /// @brief Accessor function which returns the IOService that can be used to
+    /// recover the connection.
+    ///
+    /// This accessor is used to lazy retrieve the IOService when the connection
+    /// is lost. It is useful to retrieve it at a later time to support hook
+    /// libraries which create managers on load and set IOService later on by
+    /// using the dhcp4_srv_configured and dhcp6_srv_configured hooks.
+    IOServiceAccessorPtr io_service_accessor_;
 
     /// @brief IOService object, used for all ASIO operations.
     isc::asiolink::IOServicePtr io_service_;
index c2503b77ea59bf35e17f6272e18021a26692a67e..e338446e1292a22332b9ecf44e5ada7426402ab5 100644 (file)
@@ -307,13 +307,12 @@ public:
     /// Initialize PgSqlConnection object with parameters needed for connection.
     ///
     /// @param parameters Specify the connection details.
-    /// @param io_access_callback The IOService access callback.
+    /// @param io_accessor The IOService accessor function.
     /// @param callback The connection recovery callback.
     PgSqlConnection(const ParameterMap& parameters,
-                    IOServiceAccessCallbackPtr io_access_callback = IOServiceAccessCallbackPtr(),
+                    IOServiceAccessorPtr io_accessor = IOServiceAccessorPtr(),
                     DbCallback callback = DbCallback())
-        : DatabaseConnection(parameters),
-          io_service_access_callback_(io_access_callback),
+        : DatabaseConnection(parameters), io_service_accessor_(io_accessor),
           io_service_(), callback_(callback) {
     }
 
@@ -427,9 +426,9 @@ public:
     /// @note The recover function must be run on the IO Service thread.
     void startRecoverDbConnection() {
         if (callback_) {
-            if (!io_service_ && io_service_access_callback_) {
-                io_service_ = (*io_service_access_callback_)();
-                io_service_access_callback_.reset();
+            if (!io_service_ && io_service_accessor_) {
+                io_service_ = (*io_service_accessor_)();
+                io_service_accessor_.reset();
             }
 
             if (io_service_) {
@@ -459,9 +458,14 @@ public:
         return (conn_);
     }
 
-    /// @brief Callback which returns the IOService that can be used to recover
-    /// the connection.
-    IOServiceAccessCallbackPtr io_service_access_callback_;
+    /// @brief Accessor function which returns the IOService that can be used to
+    /// recover the connection.
+    ///
+    /// This accessor is used to lazy retrieve the IOService when the connection
+    /// is lost. It is useful to retrieve it at a later time to support hook
+    /// libraries which create managers on load and set IOService later on by
+    /// using the dhcp4_srv_configured and dhcp6_srv_configured hooks.
+    IOServiceAccessorPtr io_service_accessor_;
 
     /// @brief IOService object, used for all ASIO operations.
     isc::asiolink::IOServicePtr io_service_;