Kea 2.7.6
isc::dhcp::LeaseMgrFactory Class Reference

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 TrackingLeaseMgrinstance ()
 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.
 

Detailed Description

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.

Todo
: Will need to develop some form of registration mechanism for user-supplied backends (so that there is no need to modify the code).

Definition at line 43 of file lease_mgr_factory.h.

Member Typedef Documentation

◆ DBVersion

std::function<std::string ()> isc::dhcp::LeaseMgrFactory::DBVersion

Type of lease mgr version.

Definition at line 116 of file lease_mgr_factory.h.

◆ 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.

Constructor & Destructor Documentation

◆ ~LeaseMgrFactory()

isc::dhcp::LeaseMgrFactory::~LeaseMgrFactory ( )
inline

Definition at line 45 of file lease_mgr_factory.h.

References destroy().

+ Here is the call graph for this function:

Member Function Documentation

◆ create()

void isc::dhcp::LeaseMgrFactory::create ( const std::string & dbaccess)
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.

Note
When called, the current lease manager is always destroyed and a new one created - even if the parameters are the same.

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".

Parameters
dbaccessDatabase 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.
Exceptions
isc::InvalidParameterdbaccess string does not contain the "type" keyword.
isc::dhcp::InvalidTypeThe "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().

+ Here is the call graph for this function:

◆ deregisterFactory()

bool isc::dhcp::LeaseMgrFactory::deregisterFactory ( const std::string & db_type,
bool no_log = false )
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.

Parameters
db_typedatabase type
no_logdo not log (default false)
Returns
true if the factory was successfully removed from the map, false if it was not found.

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().

◆ destroy()

void isc::dhcp::LeaseMgrFactory::destroy ( )
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().

◆ getDBVersions()

std::list< std::string > isc::dhcp::LeaseMgrFactory::getDBVersions ( )
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().

+ Here is the call graph for this function:

◆ haveInstance()

bool isc::dhcp::LeaseMgrFactory::haveInstance ( )
static

Indicates if the lease manager has been instantiated.

Returns
True if the lease manager instance exists, false otherwise.

Definition at line 119 of file lease_mgr_factory.cc.

Referenced by isc::dhcp::Allocator::~Allocator(), recreate(), and isc::dhcp::SrvConfig::updateStatistics().

◆ instance()

TrackingLeaseMgr & isc::dhcp::LeaseMgrFactory::instance ( )
static

Return current lease manager.

Returns an instance of the "current" lease manager. An exception will be thrown if none is available.

Exceptions
isc::dhcp::NoLeaseManagerNo 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().

◆ logRegistered()

void isc::dhcp::LeaseMgrFactory::logRegistered ( )
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().

◆ recreate()

void isc::dhcp::LeaseMgrFactory::recreate ( const std::string & dbaccess,
bool preserve_callbacks = true )
static

Recreate an instance of a lease manager with optionally preserving registered callbacks.

Parameters
dbaccessDatabase 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_callbacksa 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().

+ Here is the call graph for this function:

◆ registeredFactory()

bool isc::dhcp::LeaseMgrFactory::registeredFactory ( const std::string & db_type)
static

Check if a lease mgr factory was registered.

Parameters
db_typedatabase type
Returns
true if a factory was registered for db_type, false if not.

Definition at line 179 of file lease_mgr_factory.cc.

◆ registerFactory()

bool isc::dhcp::LeaseMgrFactory::registerFactory ( const std::string & db_type,
const Factory & factory,
bool no_log = false,
DBVersion db_version = DBVersion() )
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.

Parameters
db_typedatabase type
factorylease mgr factory
no_logdo not log (default false)
db_versionlease mgr version
Returns
true if the factory was successfully added to the map, false if it already exists.

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().


The documentation for this class was generated from the following files: