Kea
1.9.9-git
|
Implementation of the MySqlHostDataSource. More...
Public Member Functions | |
MySqlHostDataSourceImpl (const DatabaseConnection::ParameterMap ¶meters) | |
Constructor. More... | |
~MySqlHostDataSourceImpl () | |
Destructor. More... | |
void | addOption (MySqlHostContextPtr &ctx, const MySqlHostDataSourceImpl::StatementIndex &stindex, const OptionDescriptor &opt_desc, const std::string &opt_space, const Optional< SubnetID > &subnet_id, const HostID &host_id) |
Inserts a single DHCP option into the database. More... | |
void | addOptions (MySqlHostContextPtr &ctx, const StatementIndex &stindex, const ConstCfgOptionPtr &options_cfg, const uint64_t host_id) |
Inserts multiple options into the database. More... | |
void | addResv (MySqlHostContextPtr &ctx, const IPv6Resrv &resv, const HostID &id) |
Inserts IPv6 Reservation into ipv6_reservation table. More... | |
void | addStatement (MySqlHostContextPtr &ctx, MySqlHostDataSourceImpl::StatementIndex stindex, std::vector< MYSQL_BIND > &bind) |
Executes statements which inserts a row into one of the tables. More... | |
void | checkError (MySqlHostContextPtr &ctx, const int status, const StatementIndex index, const char *what) const |
Check Error and Throw Exception. More... | |
void | checkReadOnly (MySqlHostContextPtr &ctx) const |
Throws exception if database is read only. More... | |
MySqlHostContextPtr | createContext () const |
Create a new context. More... | |
bool | delStatement (MySqlHostContextPtr &ctx, StatementIndex stindex, MYSQL_BIND *bind) |
Executes statements that delete records. More... | |
ConstHostPtr | getHost (MySqlHostContextPtr &ctx, const SubnetID &subnet_id, const Host::IdentifierType &identifier_type, const uint8_t *identifier_begin, const size_t identifier_len, StatementIndex stindex, boost::shared_ptr< MySqlHostExchange > exchange) const |
Retrieves a host by subnet and client's unique identifier. More... | |
void | getHostCollection (MySqlHostContextPtr &ctx, StatementIndex stindex, MYSQL_BIND *bind, boost::shared_ptr< MySqlHostExchange > exchange, ConstHostCollection &result, bool single) const |
Creates collection of Host objects with associated information such as IPv6 reservations and/or DHCP options. More... | |
std::pair< uint32_t, uint32_t > | getVersion () const |
Returns backend version. More... | |
Static Public Member Functions | |
static bool | dbReconnect (ReconnectCtlPtr db_reconnect_ctl) |
Attempts to reconnect the server to the host DB backend manager. More... | |
Public Attributes | |
bool | ip_reservations_unique_ |
Holds the setting whether the IP reservations must be unique or may be non-unique. More... | |
DatabaseConnection::ParameterMap | parameters_ |
The parameters. More... | |
MySqlHostContextPoolPtr | pool_ |
The pool of contexts. More... | |
std::string | timer_name_ |
Timer name used to register database reconnect timer. More... | |
bool | unusable_ |
Indicates if there is at least one connection that can no longer be used for normal operations. More... | |
Static Public Attributes | |
static const StatementIndex | WRITE_STMTS_BEGIN = INSERT_HOST_NON_UNIQUE_IP |
Index of first statement performing write to the database. More... | |
Implementation of the MySqlHostDataSource.
Definition at line 2015 of file mysql_host_data_source.cc.
Statement Tags.
The contents of the enum are indexes into the list of SQL statements. It is assumed that the order is such that the indices of statements reading the database are less than those of statements modifying the database.
Definition at line 2026 of file mysql_host_data_source.cc.
isc::dhcp::MySqlHostDataSourceImpl::MySqlHostDataSourceImpl | ( | const DatabaseConnection::ParameterMap & | parameters | ) |
Constructor.
This constructor opens database connection and initializes prepared statements used in the queries.
Definition at line 2781 of file mysql_host_data_source.cc.
References createContext(), getVersion(), isc_throw, isc::db::MYSQL_SCHEMA_VERSION_MAJOR, isc::db::MYSQL_SCHEMA_VERSION_MINOR, pool_, and timer_name_.
isc::dhcp::MySqlHostDataSourceImpl::~MySqlHostDataSourceImpl | ( | ) |
Destructor.
Definition at line 2852 of file mysql_host_data_source.cc.
void isc::dhcp::MySqlHostDataSourceImpl::addOption | ( | MySqlHostContextPtr & | ctx, |
const MySqlHostDataSourceImpl::StatementIndex & | stindex, | ||
const OptionDescriptor & | opt_desc, | ||
const std::string & | opt_space, | ||
const Optional< SubnetID > & | subnet_id, | ||
const HostID & | host_id | ||
) |
Inserts a single DHCP option into the database.
ctx | Context |
stindex | Index of a statement being executed. |
opt_desc | Option descriptor holding information about an option to be inserted into the database. |
opt_space | Option space name. |
subnet_id | Subnet identifier. |
host_id | Host identifier. |
Definition at line 2998 of file mysql_host_data_source.cc.
References addStatement().
Referenced by addOptions().
void isc::dhcp::MySqlHostDataSourceImpl::addOptions | ( | MySqlHostContextPtr & | ctx, |
const StatementIndex & | stindex, | ||
const ConstCfgOptionPtr & | options_cfg, | ||
const uint64_t | host_id | ||
) |
Inserts multiple options into the database.
ctx | Context |
stindex | Index of a statement being executed. |
options_cfg | An object holding a collection of options to be inserted into the database. |
host_id | Host identifier retrieved using mysql_insert_id . |
Definition at line 3010 of file mysql_host_data_source.cc.
References addOption().
void isc::dhcp::MySqlHostDataSourceImpl::addResv | ( | MySqlHostContextPtr & | ctx, |
const IPv6Resrv & | resv, | ||
const HostID & | id | ||
) |
Inserts IPv6 Reservation into ipv6_reservation table.
ctx | Context |
resv | IPv6 Reservation to be added |
id | ID of a host owning this reservation |
Definition at line 2988 of file mysql_host_data_source.cc.
References addStatement(), INSERT_V6_RESRV_NON_UNIQUE, INSERT_V6_RESRV_UNIQUE, and ip_reservations_unique_.
void isc::dhcp::MySqlHostDataSourceImpl::addStatement | ( | MySqlHostContextPtr & | ctx, |
MySqlHostDataSourceImpl::StatementIndex | stindex, | ||
std::vector< MYSQL_BIND > & | bind | ||
) |
Executes statements which inserts a row into one of the tables.
ctx | Context |
stindex | Index of a statement being executed. |
bind | Vector of MYSQL_BIND objects to be used when making the query. |
isc::db::DuplicateEntry | Database throws duplicate entry error |
Definition at line 2937 of file mysql_host_data_source.cc.
References checkError(), isc_throw, and isc::db::MysqlExecuteStatement().
Referenced by addOption(), and addResv().
void isc::dhcp::MySqlHostDataSourceImpl::checkError | ( | MySqlHostContextPtr & | ctx, |
const int | status, | ||
const StatementIndex | index, | ||
const char * | what | ||
) | const |
Check Error and Throw Exception.
This method invokes db::MySqlConnection::checkError.
ctx | Context |
status | Status code: non-zero implies an error |
index | Index of statement that caused the error |
what | High-level description of the error |
isc::dhcp::DbOperationError | An operation on the open database has failed. |
Definition at line 3034 of file mysql_host_data_source.cc.
Referenced by addStatement(), delStatement(), and getHostCollection().
void isc::dhcp::MySqlHostDataSourceImpl::checkReadOnly | ( | MySqlHostContextPtr & | ctx | ) | const |
Throws exception if database is read only.
This method should be called by the methods which write to the database. If the backend is operating in read-only mode this method will throw exception.
ctx | Context |
DbReadOnly | if backend is operating in read only mode. |
Definition at line 3151 of file mysql_host_data_source.cc.
References isc_throw.
MySqlHostContextPtr isc::dhcp::MySqlHostDataSourceImpl::createContext | ( | ) | const |
Create a new context.
The database is opened with all the SQL commands pre-compiled.
isc::dhcp::NoDatabaseName | Mandatory database name not given. |
isc::db::DbOperationError | An operation on the open database has failed. |
Definition at line 2810 of file mysql_host_data_source.cc.
References dbReconnect(), isc::dhcp::dhcpsrv_logger, isc::dhcp::DHCPSRV_MYSQL_HOST_DB_READONLY, isc::dhcp::HostMgr::getIOService(), LOG_INFO, parameters_, timer_name_, and WRITE_STMTS_BEGIN.
Referenced by isc::dhcp::MySqlHostDataSource::MySqlHostContextAlloc::MySqlHostContextAlloc(), and MySqlHostDataSourceImpl().
|
static |
Attempts to reconnect the server to the host DB backend manager.
This is a self-rescheduling function that attempts to reconnect to the server's host DB backends after connectivity to one or more have been lost. Upon entry it will attempt to reconnect via HostDataSourceFactory::add. If this is successful, DHCP servicing is re-enabled and server returns to normal operation.
If reconnection fails and the maximum number of retries has not been exhausted, it will schedule a call to itself to occur at the configured retry interval. DHCP service remains disabled.
If the maximum number of retries has been exhausted an error is logged and the server shuts down.
This function is passed to the connection recovery mechanism. It will be invoked when a connection loss is detected.
db_reconnect_ctl | pointer to the ReconnectCtl containing the configured reconnect parameters. |
Definition at line 2856 of file mysql_host_data_source.cc.
References isc::dhcp::HostMgr::addBackend(), isc::dhcp::HostMgr::delBackend(), isc::dhcp::dhcpsrv_logger, isc::dhcp::DHCPSRV_MYSQL_HOST_DB_RECONNECT_ATTEMPT_FAILED, isc::dhcp::DHCPSRV_MYSQL_HOST_DB_RECONNECT_ATTEMPT_SCHEDULE, isc::dhcp::DHCPSRV_MYSQL_HOST_DB_RECONNECT_FAILED, isc::dhcp::CfgMgr::getCurrentCfg(), isc::dhcp::TimerMgr::instance(), isc::dhcp::CfgMgr::instance(), isc::db::DatabaseConnection::invokeDbFailedCallback(), isc::db::DatabaseConnection::invokeDbLostCallback(), isc::db::DatabaseConnection::invokeDbRecoveredCallback(), LOG_ERROR, LOG_INFO, isc::asiolink::IntervalTimer::ONE_SHOT, and isc::db::DatabaseConnection::parse().
Referenced by createContext().
bool isc::dhcp::MySqlHostDataSourceImpl::delStatement | ( | MySqlHostContextPtr & | ctx, |
StatementIndex | stindex, | ||
MYSQL_BIND * | bind | ||
) |
Executes statements that delete records.
ctx | Context |
stindex | Index of a statement being executed. |
bind | Vector of MYSQL_BIND objects to be used when making the query. |
Definition at line 2967 of file mysql_host_data_source.cc.
References checkError(), and isc::db::MysqlExecuteStatement().
ConstHostPtr isc::dhcp::MySqlHostDataSourceImpl::getHost | ( | MySqlHostContextPtr & | ctx, |
const SubnetID & | subnet_id, | ||
const Host::IdentifierType & | identifier_type, | ||
const uint8_t * | identifier_begin, | ||
const size_t | identifier_len, | ||
StatementIndex | stindex, | ||
boost::shared_ptr< MySqlHostExchange > | exchange | ||
) | const |
Retrieves a host by subnet and client's unique identifier.
This method is used by both MySqlHostDataSource::get4 and MySqlHOstDataSource::get6 methods.
ctx | Context |
subnet_id | Subnet identifier. |
identifier_type | Identifier type. |
identifier_begin | Pointer to a beginning of a buffer containing an identifier. |
identifier_len | Identifier length. |
stindex | Statement index. |
exchange | Pointer to the exchange object used for the particular query. |
Definition at line 3106 of file mysql_host_data_source.cc.
References getHostCollection(), and isc::db::MLM_TRUE.
void isc::dhcp::MySqlHostDataSourceImpl::getHostCollection | ( | MySqlHostContextPtr & | ctx, |
StatementIndex | stindex, | ||
MYSQL_BIND * | bind, | ||
boost::shared_ptr< MySqlHostExchange > | exchange, | ||
ConstHostCollection & | result, | ||
bool | single | ||
) | const |
Creates collection of Host objects with associated information such as IPv6 reservations and/or DHCP options.
This method performs a query which returns host information from the 'hosts' table. The query may also use LEFT JOIN clause to retrieve information from other tables, e.g. ipv6_reservations, dhcp4_options and dhcp6_options. Whether IPv6 reservations and/or options are assigned to the Host objects depends on the type of the exchange object.
ctx | Context | |
stindex | Statement index. | |
bind | Pointer to an array of MySQL bindings. | |
exchange | Pointer to the exchange object used for the particular query. | |
[out] | result | Reference to the collection of hosts returned. |
single | A boolean value indicating if a single host is expected to be returned, or multiple hosts. |
Definition at line 3042 of file mysql_host_data_source.cc.
References checkError(), isc_throw, isc::db::MLM_MYSQL_FETCH_FAILURE, isc::db::MLM_MYSQL_FETCH_SUCCESS, isc::db::MysqlExecuteStatement(), and isc::Exception::what().
Referenced by getHost().
std::pair< uint32_t, uint32_t > isc::dhcp::MySqlHostDataSourceImpl::getVersion | ( | ) | const |
Returns backend version.
The method is called by the constructor before opening the database to verify that the schema version is correct.
isc::dhcp::DbOperationError | An operation on the open database has failed. |
Definition at line 2929 of file mysql_host_data_source.cc.
References isc::dhcp::DHCPSRV_DBG_TRACE_DETAIL, isc::dhcp::dhcpsrv_logger, isc::dhcp::DHCPSRV_MYSQL_HOST_DB_GET_VERSION, isc::db::MySqlConnection::getVersion(), LOG_DEBUG, and parameters_.
Referenced by MySqlHostDataSourceImpl().
bool isc::dhcp::MySqlHostDataSourceImpl::ip_reservations_unique_ |
Holds the setting whether the IP reservations must be unique or may be non-unique.
Definition at line 2263 of file mysql_host_data_source.cc.
Referenced by addResv().
DatabaseConnection::ParameterMap isc::dhcp::MySqlHostDataSourceImpl::parameters_ |
The parameters.
Definition at line 2259 of file mysql_host_data_source.cc.
Referenced by createContext(), and getVersion().
MySqlHostContextPoolPtr isc::dhcp::MySqlHostDataSourceImpl::pool_ |
The pool of contexts.
Definition at line 2266 of file mysql_host_data_source.cc.
Referenced by isc::dhcp::MySqlHostDataSource::MySqlHostContextAlloc::MySqlHostContextAlloc(), and MySqlHostDataSourceImpl().
std::string isc::dhcp::MySqlHostDataSourceImpl::timer_name_ |
Timer name used to register database reconnect timer.
Definition at line 2273 of file mysql_host_data_source.cc.
Referenced by createContext(), and MySqlHostDataSourceImpl().
bool isc::dhcp::MySqlHostDataSourceImpl::unusable_ |
Indicates if there is at least one connection that can no longer be used for normal operations.
Definition at line 2270 of file mysql_host_data_source.cc.
|
static |
Index of first statement performing write to the database.
This value is used to mark border line between queries and other statements and statements performing write operation on the database, such as INSERT, DELETE, UPDATE.
Definition at line 2061 of file mysql_host_data_source.cc.
Referenced by createContext().