Kea 2.7.6
|
Lease Manager Factory. More...
#include <lease_mgr_factory.h>
Public Types | |
typedef std::function< std::string()> | DBVersion |
Type of lease mgr version. | |
typedef std::function< TrackingLeaseMgrPtr(const db::DatabaseConnection::ParameterMap &)> | Factory |
Type of lease mgr factory. | |
Public Member Functions | |
~LeaseMgrFactory () | |
Static Public Member Functions | |
static void | create (const std::string &dbaccess) |
Create an instance of a lease manager. | |
static bool | deregisterFactory (const std::string &db_type, bool no_log=false) |
Deregister a lease mgr factory. | |
static void | destroy () |
Destroy lease manager. | |
static std::list< std::string > | getDBVersions () |
Return extended version info for registered backends. | |
static bool | haveInstance () |
Indicates if the lease manager has been instantiated. | |
static TrackingLeaseMgr & | instance () |
Return current lease manager. | |
static void | logRegistered () |
Logs out all registered backends. | |
static void | recreate (const std::string &dbaccess, bool preserve_callbacks=true) |
Recreate an instance of a lease manager with optionally preserving registered callbacks. | |
static bool | registeredFactory (const std::string &db_type) |
Check if a lease mgr factory was registered. | |
static bool | registerFactory (const std::string &db_type, const Factory &factory, bool no_log=false, DBVersion db_version=DBVersion()) |
Register a lease mgr factory. | |
Lease Manager Factory.
This class comprises nothing but static methods used to create a lease manager. It analyzes the database information passed to the creation function and instantiates an appropriate lease manager based on the type requested.
Strictly speaking these functions could be stand-alone functions. However, it is convenient to encapsulate them in a class for naming purposes.
Definition at line 43 of file lease_mgr_factory.h.
std::function<std::string ()> isc::dhcp::LeaseMgrFactory::DBVersion |
Type of lease mgr version.
Definition at line 116 of file lease_mgr_factory.h.
std::function<TrackingLeaseMgrPtr (const db::DatabaseConnection::ParameterMap&)> isc::dhcp::LeaseMgrFactory::Factory |
Type of lease mgr factory.
A factory takes a parameter map and returns a pointer to a lease mgr. In case of failure it must throw and not return null.
Definition at line 113 of file lease_mgr_factory.h.
|
inline |
Definition at line 45 of file lease_mgr_factory.h.
References destroy().
|
static |
Create an instance of a lease manager.
Each database backend has its own lease manager type. This static method sets the "current" lease manager to be a manager of the appropriate type. The actual lease manager is returned by the "instance" method.
dbaccess is a generic way of passing parameters. Parameters are passed in the "name=value" format, separated by spaces. The data MUST include a keyword/value pair of the form "type=dbtype" giving the database type, e.q. "mysql" or "sqlite3".
dbaccess | Database access parameters. These are in the form of "keyword=value" pairs, separated by spaces. They are backend- -end specific, although must include the "type" keyword which gives the backend in use. |
isc::InvalidParameter | dbaccess string does not contain the "type" keyword. |
isc::dhcp::InvalidType | The "type" keyword in dbaccess does not identify a supported backend. |
Definition at line 43 of file lease_mgr_factory.cc.
References isc::dhcp::dhcpsrv_logger, isc::dhcp::DHCPSRV_NOTYPE_DB, isc::dhcp::DHCPSRV_UNKNOWN_DB, isc_throw, LOG_ERROR, isc::db::DatabaseConnection::parse(), and isc::db::DatabaseConnection::redactedAccessString().
Referenced by recreate().
|
static |
Deregister a lease mgr factory.
Disassociate the factory to a database type in the map. The no_log is to avoid logging during global object deinitialization.
db_type | database type |
no_log | do not log (default false) |
Definition at line 163 of file lease_mgr_factory.cc.
References isc::dhcp::DHCPSRV_DBG_TRACE, isc::dhcp::DHCPSRV_LEASE_MGR_BACKEND_DEREGISTER, isc::dhcp::dhcpsrv_logger, and LOG_DEBUG.
Referenced by isc::dhcp::MemfileLeaseMgrInit::~MemfileLeaseMgrInit().
|
static |
Destroy lease manager.
Destroys the current lease manager object. This should have the effect of closing the database connection. The method is a no-op if no lease manager is available.
Definition at line 89 of file lease_mgr_factory.cc.
References isc::dhcp::DHCPSRV_CLOSE_DB, isc::dhcp::DHCPSRV_DBG_TRACE, isc::dhcp::dhcpsrv_logger, and LOG_DEBUG.
Referenced by isc::dhcp::ControlledDhcpv4Srv::~ControlledDhcpv4Srv(), isc::dhcp::ControlledDhcpv6Srv::~ControlledDhcpv6Srv(), isc::dhcp::Dhcpv4Srv::~Dhcpv4Srv(), isc::dhcp::Dhcpv6Srv::~Dhcpv6Srv(), ~LeaseMgrFactory(), isc::dhcp::ControlledDhcpv4Srv::processConfig(), isc::dhcp::ControlledDhcpv6Srv::processConfig(), and recreate().
|
static |
Return extended version info for registered backends.
Definition at line 200 of file lease_mgr_factory.cc.
References version().
Referenced by isc::dhcp::Dhcpv4Srv::getVersion(), and isc::dhcp::Dhcpv6Srv::getVersion().
|
static |
Indicates if the lease manager has been instantiated.
Definition at line 119 of file lease_mgr_factory.cc.
Referenced by isc::dhcp::Allocator::~Allocator(), recreate(), and isc::dhcp::SrvConfig::updateStatistics().
|
static |
Return current lease manager.
Returns an instance of the "current" lease manager. An exception will be thrown if none is available.
isc::dhcp::NoLeaseManager | No lease manager is available: use create() to create one before calling this method. |
Definition at line 124 of file lease_mgr_factory.cc.
References isc_throw.
Referenced by isc::dhcp::Allocator::~Allocator(), isc::lease_cmds::LeaseCmdsImpl::addOrUpdate4(), isc::lease_cmds::LeaseCmdsImpl::addOrUpdate6(), isc::dhcp::AllocEngine::allocateLeases6(), isc::dhcp::Dhcpv4Srv::assignLease(), isc::dhcp::Dhcpv6Srv::checkDynamicSubnetChange(), isc::dhcp::Dhcpv6Srv::declineIA(), isc::dhcp::Dhcpv4Srv::declineLease(), isc::dhcp::Dhcpv6Srv::declineLease(), isc::dhcp::AllocEngine::deleteExpiredReclaimedLeases4(), isc::dhcp::AllocEngine::deleteExpiredReclaimedLeases6(), isc::lease_cmds::LeaseCmdsImpl::getIPv6LeaseForDelete(), isc::lease_cmds::LeaseCmdsImpl::lease4DelHandler(), isc::lease_cmds::LeaseCmdsImpl::lease4ResendDdnsHandler(), isc::lease_cmds::LeaseCmdsImpl::lease4WipeHandler(), isc::lease_cmds::LeaseCmdsImpl::lease6BulkApplyHandler(), isc::lease_cmds::LeaseCmdsImpl::lease6DelHandler(), isc::lease_cmds::LeaseCmdsImpl::lease6ResendDdnsHandler(), isc::lease_cmds::LeaseCmdsImpl::lease6WipeHandler(), isc::lease_cmds::LeaseCmdsImpl::leaseAddHandler(), isc::lease_cmds::LeaseCmdsImpl::leaseGetAllHandler(), isc::lease_cmds::LeaseCmdsImpl::leaseGetByClientIdHandler(), isc::lease_cmds::LeaseCmdsImpl::leaseGetByDuidHandler(), isc::lease_cmds::LeaseCmdsImpl::leaseGetByHostnameHandler(), isc::lease_cmds::LeaseCmdsImpl::leaseGetByHwAddressHandler(), isc::lease_cmds::LeaseCmdsImpl::leaseGetHandler(), isc::lease_cmds::LeaseCmdsImpl::leaseGetPageHandler(), isc::lease_cmds::LeaseCmdsImpl::leaseWriteHandler(), isc::stat_cmds::LeaseStatCmdsImpl::makeResultSet4(), isc::stat_cmds::LeaseStatCmdsImpl::makeResultSet6(), isc::dhcp::Dhcpv4Srv::postAllocateNameUpdate(), isc::dhcp::Dhcpv4Srv::processDecline(), isc::dhcp::Dhcpv4Srv::processRelease(), isc::dhcp::AllocEngine::reclaimExpiredLeases4Internal(), isc::dhcp::AllocEngine::reclaimExpiredLeases6Internal(), isc::dhcp::Dhcpv4Srv::recoverStashedAgentOption(), recreate(), isc::dhcp::Dhcpv6Srv::releaseIA_NA(), isc::dhcp::Dhcpv6Srv::releaseIA_PD(), isc::dhcp::AllocEngine::renewLeases6(), isc::dhcp::Dhcpv4Srv::serverDecline(), isc::dhcp::CfgSubnets4::updateStatistics(), and isc::dhcp::CfgSubnets6::updateStatistics().
|
static |
Logs out all registered backends.
We need a dedicated method for this, because we sometimes can't log the backend type when doing early initialization for backends initialized statically.
Definition at line 185 of file lease_mgr_factory.cc.
References isc::dhcp::DHCPSRV_LEASE_MGR_BACKENDS_REGISTERED, isc::dhcp::dhcpsrv_logger, and LOG_INFO.
Referenced by isc::dhcp::configureDhcp4Server(), and isc::dhcp::configureDhcp6Server().
|
static |
Recreate an instance of a lease manager with optionally preserving registered callbacks.
dbaccess | Database access parameters. These are in the form of "keyword=value" pairs, separated by spaces. They are backend- -end specific, although must include the "type" keyword which gives the backend in use. |
preserve_callbacks | a boolean flag indicating if all registered TrackingLeaseMgr callbacks should be copied to the new instance. |
Definition at line 100 of file lease_mgr_factory.cc.
References isc::dhcp::TrackingLeaseMgr::callbacks_, create(), destroy(), haveInstance(), and instance().
Referenced by isc::dhcp::CfgDbAccess::createManagers().
|
static |
Check if a lease mgr factory was registered.
db_type | database type |
Definition at line 179 of file lease_mgr_factory.cc.
|
static |
Register a lease mgr factory.
Associate the factory to a database type in the map. The no_log is to avoid logging before the logger is initialized as when called at global object initialization.
db_type | database type |
factory | lease mgr factory |
no_log | do not log (default false) |
db_version | lease mgr version |
Definition at line 133 of file lease_mgr_factory.cc.
References isc::dhcp::DHCPSRV_DBG_TRACE, isc::dhcp::DHCPSRV_LEASE_MGR_BACKEND_REGISTER, isc::dhcp::dhcpsrv_logger, and LOG_DEBUG.
Referenced by isc::dhcp::MemfileLeaseMgrInit::MemfileLeaseMgrInit().