mirror of
https://gitlab.isc.org/isc-projects/kea
synced 2025-09-01 14:35:29 +00:00
[#3814] implemented lease wipe for db
This commit is contained in:
@@ -91,12 +91,10 @@ This library provides the following commands:
|
||||
- :isccmd:`lease6-update` - updates (replaces) an existing IPv6 lease.
|
||||
|
||||
- :isccmd:`lease4-wipe` - removes all leases from a specific IPv4 subnet or
|
||||
from all subnets. This command is deprecated and it will be removed
|
||||
in the future.
|
||||
from all subnets.
|
||||
|
||||
- :isccmd:`lease6-wipe` - removes all leases from a specific IPv6 subnet or
|
||||
from all subnets. This command is deprecated and it will be removed
|
||||
in the future.
|
||||
from all subnets.
|
||||
|
||||
- :isccmd:`lease4-resend-ddns` - resends a request to update DNS entries for
|
||||
an existing lease.
|
||||
@@ -967,11 +965,6 @@ response, modifying it to the required outcome, and then issuing the
|
||||
The ``lease4-wipe``, ``lease6-wipe`` Commands
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. warning::
|
||||
|
||||
The :isccmd:`lease4-wipe` and :isccmd:`lease6-wipe` commands are deprecated
|
||||
and they will be removed in the future.
|
||||
|
||||
:isccmd:`lease4-wipe` and :isccmd:`lease6-wipe` are designed to remove all leases
|
||||
associated with a given subnet. This administrative task is expected to
|
||||
be used when an existing subnet is being retired. The leases
|
||||
|
@@ -70,10 +70,10 @@ The following commands are currently supported:
|
||||
The ``subnet4-list`` Command
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
This command is used to list all currently configured subnets. Each
|
||||
subnet is returned with a subnet identifier and
|
||||
subnet prefix. To retrieve
|
||||
detailed information about the subnet, use the :isccmd:`subnet4-get` command.
|
||||
This command is used to list all currently configured subnets. Each subnet
|
||||
is returned with a subnet identifier, subnet prefix and shared network name,
|
||||
if available. To retrieve detailed information about the subnet, use the
|
||||
:isccmd:`subnet4-get` command.
|
||||
|
||||
This command has a simple structure:
|
||||
|
||||
@@ -115,10 +115,10 @@ error description.
|
||||
The ``subnet6-list`` Command
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
This command is used to list all currently configured subnets. Each
|
||||
subnet is returned with a subnet identifier and
|
||||
subnet prefix. To retrieve
|
||||
detailed information about the subnet, use the :isccmd:`subnet6-get` command.
|
||||
This command is used to list all currently configured subnets. Each subnet
|
||||
is returned with a subnet identifier, subnet prefix and shared network name,
|
||||
if available. To retrieve detailed information about the subnet, use the
|
||||
:isccmd:`subnet6-get` command.
|
||||
|
||||
This command has a simple structure:
|
||||
|
||||
|
@@ -2373,8 +2373,7 @@ LeaseCmdsImpl::lease4WipeHandler(CalloutHandle& handle) {
|
||||
}
|
||||
|
||||
stringstream tmp;
|
||||
tmp << "Deleted " << num << " IPv4 lease(s) from subnet(s)" << ids.str()
|
||||
<< " WARNING: lease4-wipe is deprecated!";
|
||||
tmp << "Deleted " << num << " IPv4 lease(s) from subnet(s)" << ids.str();
|
||||
ConstElementPtr response = createAnswer(num ? CONTROL_RESULT_SUCCESS
|
||||
: CONTROL_RESULT_EMPTY, tmp.str());
|
||||
setResponse(handle, response);
|
||||
@@ -2382,14 +2381,12 @@ LeaseCmdsImpl::lease4WipeHandler(CalloutHandle& handle) {
|
||||
LOG_ERROR(lease_cmds_logger, LEASE_CMDS_WIPE4_FAILED)
|
||||
.arg(cmd_args_ ? cmd_args_->str() : "<no args>")
|
||||
.arg(ex.what());
|
||||
LOG_WARN(lease_cmds_logger, LEASE_CMDS_WIPE4_DEPRECATED);
|
||||
setErrorResponse(handle, ex.what());
|
||||
return (1);
|
||||
}
|
||||
|
||||
LOG_INFO(lease_cmds_logger, LEASE_CMDS_WIPE4)
|
||||
.arg(cmd_args_ ? cmd_args_->str() : "<no args>");
|
||||
LOG_WARN(lease_cmds_logger, LEASE_CMDS_WIPE4_DEPRECATED);
|
||||
return (0);
|
||||
}
|
||||
|
||||
@@ -2529,8 +2526,7 @@ LeaseCmdsImpl::lease6WipeHandler(CalloutHandle& handle) {
|
||||
}
|
||||
|
||||
stringstream tmp;
|
||||
tmp << "Deleted " << num << " IPv6 lease(s) from subnet(s)" << ids.str()
|
||||
<< " WARNING: lease6-wipe is deprecated!";
|
||||
tmp << "Deleted " << num << " IPv6 lease(s) from subnet(s)" << ids.str();
|
||||
ConstElementPtr response = createAnswer(num ? CONTROL_RESULT_SUCCESS
|
||||
: CONTROL_RESULT_EMPTY, tmp.str());
|
||||
setResponse(handle, response);
|
||||
@@ -2538,14 +2534,12 @@ LeaseCmdsImpl::lease6WipeHandler(CalloutHandle& handle) {
|
||||
LOG_ERROR(lease_cmds_logger, LEASE_CMDS_WIPE6_FAILED)
|
||||
.arg(cmd_args_ ? cmd_args_->str() : "<no args>")
|
||||
.arg(ex.what());
|
||||
LOG_WARN(lease_cmds_logger, LEASE_CMDS_WIPE6_DEPRECATED);
|
||||
setErrorResponse(handle, ex.what());
|
||||
return (1);
|
||||
}
|
||||
|
||||
LOG_INFO(lease_cmds_logger, LEASE_CMDS_WIPE6)
|
||||
.arg(cmd_args_ ? cmd_args_->str() : "<no args>");
|
||||
LOG_WARN(lease_cmds_logger, LEASE_CMDS_WIPE6_DEPRECATED);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
@@ -37,10 +37,8 @@ extern const isc::log::MessageID LEASE_CMDS_UPDATE6 = "LEASE_CMDS_UPDATE6";
|
||||
extern const isc::log::MessageID LEASE_CMDS_UPDATE6_CONFLICT = "LEASE_CMDS_UPDATE6_CONFLICT";
|
||||
extern const isc::log::MessageID LEASE_CMDS_UPDATE6_FAILED = "LEASE_CMDS_UPDATE6_FAILED";
|
||||
extern const isc::log::MessageID LEASE_CMDS_WIPE4 = "LEASE_CMDS_WIPE4";
|
||||
extern const isc::log::MessageID LEASE_CMDS_WIPE4_DEPRECATED = "LEASE_CMDS_WIPE4_DEPRECATED";
|
||||
extern const isc::log::MessageID LEASE_CMDS_WIPE4_FAILED = "LEASE_CMDS_WIPE4_FAILED";
|
||||
extern const isc::log::MessageID LEASE_CMDS_WIPE6 = "LEASE_CMDS_WIPE6";
|
||||
extern const isc::log::MessageID LEASE_CMDS_WIPE6_DEPRECATED = "LEASE_CMDS_WIPE6_DEPRECATED";
|
||||
extern const isc::log::MessageID LEASE_CMDS_WIPE6_FAILED = "LEASE_CMDS_WIPE6_FAILED";
|
||||
|
||||
namespace {
|
||||
@@ -79,10 +77,8 @@ const char* values[] = {
|
||||
"LEASE_CMDS_UPDATE6_CONFLICT", "lease6-update command failed due to conflict (parameters: %1, reason: %2)",
|
||||
"LEASE_CMDS_UPDATE6_FAILED", "lease6-add command failed (parameters: %1, reason: %2)",
|
||||
"LEASE_CMDS_WIPE4", "lease4-wipe command successful (parameters: %1)",
|
||||
"LEASE_CMDS_WIPE4_DEPRECATED", "lease4-wipe command is deprecated and it will be removed in the future.",
|
||||
"LEASE_CMDS_WIPE4_FAILED", "lease4-wipe command failed (parameters: %1, reason: %2)",
|
||||
"LEASE_CMDS_WIPE6", "lease6-wipe command successful (parameters: %1)",
|
||||
"LEASE_CMDS_WIPE6_DEPRECATED", "lease6-wipe command is deprecated and it will be removed in the future.",
|
||||
"LEASE_CMDS_WIPE6_FAILED", "lease6-wipe command failed (parameters: %1, reason: %2)",
|
||||
NULL
|
||||
};
|
||||
|
@@ -38,10 +38,8 @@ extern const isc::log::MessageID LEASE_CMDS_UPDATE6;
|
||||
extern const isc::log::MessageID LEASE_CMDS_UPDATE6_CONFLICT;
|
||||
extern const isc::log::MessageID LEASE_CMDS_UPDATE6_FAILED;
|
||||
extern const isc::log::MessageID LEASE_CMDS_WIPE4;
|
||||
extern const isc::log::MessageID LEASE_CMDS_WIPE4_DEPRECATED;
|
||||
extern const isc::log::MessageID LEASE_CMDS_WIPE4_FAILED;
|
||||
extern const isc::log::MessageID LEASE_CMDS_WIPE6;
|
||||
extern const isc::log::MessageID LEASE_CMDS_WIPE6_DEPRECATED;
|
||||
extern const isc::log::MessageID LEASE_CMDS_WIPE6_FAILED;
|
||||
|
||||
#endif // LEASE_CMDS_MESSAGES_H
|
||||
|
@@ -155,9 +155,6 @@ parameters passed are logged.
|
||||
The lease4-wipe command has been successful. Parameters of the command
|
||||
are logged.
|
||||
|
||||
% LEASE_CMDS_WIPE4_DEPRECATED lease4-wipe command is deprecated and it will be removed in the future.
|
||||
The lease4-wipe command is deprecated and it will be removed in the future.
|
||||
|
||||
% LEASE_CMDS_WIPE4_FAILED lease4-wipe command failed (parameters: %1, reason: %2)
|
||||
The lease4-wipe command has failed. Both the reason as well as the
|
||||
parameters passed are logged.
|
||||
@@ -166,9 +163,6 @@ parameters passed are logged.
|
||||
The lease6-wipe command has been successful. Parameters of the command
|
||||
are logged.
|
||||
|
||||
% LEASE_CMDS_WIPE6_DEPRECATED lease6-wipe command is deprecated and it will be removed in the future.
|
||||
The lease6-wipe command is deprecated and it will be removed in the future.
|
||||
|
||||
% LEASE_CMDS_WIPE6_FAILED lease6-wipe command failed (parameters: %1, reason: %2)
|
||||
The lease6-wipe command has failed. Both the reason as well as the
|
||||
parameters passed are logged.
|
||||
|
@@ -2859,8 +2859,7 @@ void Lease4CmdsTest::testLease4Wipe() {
|
||||
" \"subnet-id\": 44"
|
||||
" }\n"
|
||||
"}";
|
||||
string exp_rsp = "Deleted 2 IPv4 lease(s) from subnet(s) 44"
|
||||
" WARNING: lease4-wipe is deprecated!";
|
||||
string exp_rsp = "Deleted 2 IPv4 lease(s) from subnet(s) 44";
|
||||
|
||||
// The status expected is success. The lease should be deleted.
|
||||
testCommand(cmd, CONTROL_RESULT_SUCCESS, exp_rsp);
|
||||
@@ -2894,8 +2893,7 @@ void Lease4CmdsTest::testLease4WipeAll() {
|
||||
" \"subnet-id\": 0"
|
||||
" }\n"
|
||||
"}";
|
||||
string exp_rsp = "Deleted 4 IPv4 lease(s) from subnet(s) 44 88"
|
||||
" WARNING: lease4-wipe is deprecated!";
|
||||
string exp_rsp = "Deleted 4 IPv4 lease(s) from subnet(s) 44 88";
|
||||
|
||||
// The status expected is success. The lease should be deleted.
|
||||
testCommand(cmd, CONTROL_RESULT_SUCCESS, exp_rsp);
|
||||
@@ -2926,8 +2924,7 @@ void Lease4CmdsTest::testLease4WipeAllNoArgs() {
|
||||
"{\n"
|
||||
" \"command\": \"lease4-wipe\"\n"
|
||||
"}";
|
||||
string exp_rsp = "Deleted 4 IPv4 lease(s) from subnet(s) 44 88"
|
||||
" WARNING: lease4-wipe is deprecated!";
|
||||
string exp_rsp = "Deleted 4 IPv4 lease(s) from subnet(s) 44 88";
|
||||
|
||||
// The status expected is success. The lease should be deleted.
|
||||
testCommand(cmd, CONTROL_RESULT_SUCCESS, exp_rsp);
|
||||
@@ -2961,8 +2958,7 @@ void Lease4CmdsTest::testLease4WipeNoLeases() {
|
||||
" \"subnet-id\": 44"
|
||||
" }\n"
|
||||
"}";
|
||||
string exp_rsp = "Deleted 0 IPv4 lease(s) from subnet(s) 44"
|
||||
" WARNING: lease4-wipe is deprecated!";
|
||||
string exp_rsp = "Deleted 0 IPv4 lease(s) from subnet(s) 44";
|
||||
testCommand(cmd, CONTROL_RESULT_EMPTY, exp_rsp);
|
||||
|
||||
checkLease4Stats(44, 0, 0);
|
||||
@@ -2986,8 +2982,7 @@ void Lease4CmdsTest::testLease4WipeNoLeasesAll() {
|
||||
" \"subnet-id\": 0"
|
||||
" }\n"
|
||||
"}";
|
||||
string exp_rsp = "Deleted 0 IPv4 lease(s) from subnet(s) 44 88"
|
||||
" WARNING: lease4-wipe is deprecated!";
|
||||
string exp_rsp = "Deleted 0 IPv4 lease(s) from subnet(s) 44 88";
|
||||
testCommand(cmd, CONTROL_RESULT_EMPTY, exp_rsp);
|
||||
|
||||
checkLease4Stats(44, 0, 0);
|
||||
|
@@ -3249,8 +3249,7 @@ void Lease6CmdsTest::testLease6Wipe() {
|
||||
" \"subnet-id\": 66\n"
|
||||
" }\n"
|
||||
"}";
|
||||
string exp_rsp = "Deleted 2 IPv6 lease(s) from subnet(s) 66"
|
||||
" WARNING: lease6-wipe is deprecated!";
|
||||
string exp_rsp = "Deleted 2 IPv6 lease(s) from subnet(s) 66";
|
||||
|
||||
// The status expected is success. The lease should be deleted.
|
||||
testCommand(cmd, CONTROL_RESULT_SUCCESS, exp_rsp);
|
||||
@@ -3284,8 +3283,7 @@ void Lease6CmdsTest::testLease6WipeAll() {
|
||||
" \"subnet-id\": 0\n"
|
||||
" }\n"
|
||||
"}";
|
||||
string exp_rsp = "Deleted 4 IPv6 lease(s) from subnet(s) 66 99"
|
||||
" WARNING: lease6-wipe is deprecated!";
|
||||
string exp_rsp = "Deleted 4 IPv6 lease(s) from subnet(s) 66 99";
|
||||
|
||||
// The status expected is success. The lease should be deleted.
|
||||
testCommand(cmd, CONTROL_RESULT_SUCCESS, exp_rsp);
|
||||
@@ -3316,8 +3314,7 @@ void Lease6CmdsTest::testLease6WipeAllNoArgs() {
|
||||
"{\n"
|
||||
" \"command\": \"lease6-wipe\"\n"
|
||||
"}";
|
||||
string exp_rsp = "Deleted 4 IPv6 lease(s) from subnet(s) 66 99"
|
||||
" WARNING: lease6-wipe is deprecated!";
|
||||
string exp_rsp = "Deleted 4 IPv6 lease(s) from subnet(s) 66 99";
|
||||
|
||||
// The status expected is success. The lease should be deleted.
|
||||
testCommand(cmd, CONTROL_RESULT_SUCCESS, exp_rsp);
|
||||
@@ -3351,8 +3348,7 @@ void Lease6CmdsTest::testLease6WipeNoLeases() {
|
||||
" \"subnet-id\": 66"
|
||||
" }\n"
|
||||
"}";
|
||||
string exp_rsp = "Deleted 0 IPv6 lease(s) from subnet(s) 66"
|
||||
" WARNING: lease6-wipe is deprecated!";
|
||||
string exp_rsp = "Deleted 0 IPv6 lease(s) from subnet(s) 66";
|
||||
testCommand(cmd, CONTROL_RESULT_EMPTY, exp_rsp);
|
||||
|
||||
checkLease6Stats(66, 0, 0, 0, 0);
|
||||
@@ -3376,8 +3372,7 @@ void Lease6CmdsTest::testLease6WipeNoLeasesAll() {
|
||||
" \"subnet-id\": 0"
|
||||
" }\n"
|
||||
"}";
|
||||
string exp_rsp = "Deleted 0 IPv6 lease(s) from subnet(s) 66 99"
|
||||
" WARNING: lease6-wipe is deprecated!";
|
||||
string exp_rsp = "Deleted 0 IPv6 lease(s) from subnet(s) 66 99";
|
||||
testCommand(cmd, CONTROL_RESULT_EMPTY, exp_rsp);
|
||||
|
||||
checkLease6Stats(66, 0, 0, 0, 0);
|
||||
|
@@ -1,4 +1,4 @@
|
||||
// File created from src/hooks/dhcp/mysql/mysql_lb_messages.mes
|
||||
// File created from ../src/hooks/dhcp/mysql/mysql_lb_messages.mes
|
||||
|
||||
#include <cstddef>
|
||||
#include <log/message_types.h>
|
||||
@@ -17,6 +17,8 @@ extern const isc::log::MessageID MYSQL_LB_DB_RECONNECT_ATTEMPT_FAILED = "MYSQL_L
|
||||
extern const isc::log::MessageID MYSQL_LB_DB_RECONNECT_ATTEMPT_SCHEDULE = "MYSQL_LB_DB_RECONNECT_ATTEMPT_SCHEDULE";
|
||||
extern const isc::log::MessageID MYSQL_LB_DB_RECONNECT_FAILED = "MYSQL_LB_DB_RECONNECT_FAILED";
|
||||
extern const isc::log::MessageID MYSQL_LB_DELETED_EXPIRED_RECLAIMED = "MYSQL_LB_DELETED_EXPIRED_RECLAIMED";
|
||||
extern const isc::log::MessageID MYSQL_LB_DELETED_SUBNET4_ID = "MYSQL_LB_DELETED_SUBNET4_ID";
|
||||
extern const isc::log::MessageID MYSQL_LB_DELETED_SUBNET6_ID = "MYSQL_LB_DELETED_SUBNET6_ID";
|
||||
extern const isc::log::MessageID MYSQL_LB_DELETE_ADDR4 = "MYSQL_LB_DELETE_ADDR4";
|
||||
extern const isc::log::MessageID MYSQL_LB_DELETE_ADDR6 = "MYSQL_LB_DELETE_ADDR6";
|
||||
extern const isc::log::MessageID MYSQL_LB_DELETE_EXPIRED_RECLAIMED4 = "MYSQL_LB_DELETE_EXPIRED_RECLAIMED4";
|
||||
@@ -75,6 +77,8 @@ const char* values[] = {
|
||||
"MYSQL_LB_DB_RECONNECT_ATTEMPT_SCHEDULE", "scheduling attempt %1 of %2 in %3 milliseconds",
|
||||
"MYSQL_LB_DB_RECONNECT_FAILED", "maximum number of database reconnect attempts: %1, has been exhausted without success",
|
||||
"MYSQL_LB_DELETED_EXPIRED_RECLAIMED", "deleted %1 reclaimed leases from the database",
|
||||
"MYSQL_LB_DELETED_SUBNET4_ID", "deleted %1 leases that match Subnet ID %2.",
|
||||
"MYSQL_LB_DELETED_SUBNET6_ID", "deleted %1 leases that match Subnet ID %2.",
|
||||
"MYSQL_LB_DELETE_ADDR4", "deleting lease for address %1",
|
||||
"MYSQL_LB_DELETE_ADDR6", "deleting lease for address %1",
|
||||
"MYSQL_LB_DELETE_EXPIRED_RECLAIMED4", "deleting reclaimed IPv4 leases that expired more than %1 seconds ago",
|
||||
|
@@ -1,4 +1,4 @@
|
||||
// File created from src/hooks/dhcp/mysql/mysql_lb_messages.mes
|
||||
// File created from ../src/hooks/dhcp/mysql/mysql_lb_messages.mes
|
||||
|
||||
#ifndef MYSQL_LB_MESSAGES_H
|
||||
#define MYSQL_LB_MESSAGES_H
|
||||
@@ -18,6 +18,8 @@ extern const isc::log::MessageID MYSQL_LB_DB_RECONNECT_ATTEMPT_FAILED;
|
||||
extern const isc::log::MessageID MYSQL_LB_DB_RECONNECT_ATTEMPT_SCHEDULE;
|
||||
extern const isc::log::MessageID MYSQL_LB_DB_RECONNECT_FAILED;
|
||||
extern const isc::log::MessageID MYSQL_LB_DELETED_EXPIRED_RECLAIMED;
|
||||
extern const isc::log::MessageID MYSQL_LB_DELETED_SUBNET4_ID;
|
||||
extern const isc::log::MessageID MYSQL_LB_DELETED_SUBNET6_ID;
|
||||
extern const isc::log::MessageID MYSQL_LB_DELETE_ADDR4;
|
||||
extern const isc::log::MessageID MYSQL_LB_DELETE_ADDR6;
|
||||
extern const isc::log::MessageID MYSQL_LB_DELETE_EXPIRED_RECLAIMED4;
|
||||
|
@@ -78,6 +78,16 @@ leases which have expired longer than a specified period of time.
|
||||
The argument is the amount of time Kea waits after a reclaimed
|
||||
lease expires before considering its removal.
|
||||
|
||||
% MYSQL_LB_DELETED_SUBNET4_ID deleted %1 leases that match Subnet ID %2.
|
||||
Logged at debug log level 50.
|
||||
A debug message issued when the server is removing leases which match
|
||||
respective Subnet ID.
|
||||
|
||||
% MYSQL_LB_DELETED_SUBNET6_ID deleted %1 leases that match Subnet ID %2.
|
||||
Logged at debug log level 50.
|
||||
A debug message issued when the server is removing leases which match
|
||||
respective Subnet ID.
|
||||
|
||||
% MYSQL_LB_GET4 obtaining all IPv4 leases
|
||||
Logged at debug log level 50.
|
||||
A debug message issued when the server is attempting to obtain all IPv4
|
||||
|
@@ -92,11 +92,15 @@ boost::array<TaggedStatement, MySqlLeaseMgr::NUM_STATEMENTS>
|
||||
tagged_statements = { {
|
||||
{MySqlLeaseMgr::DELETE_LEASE4,
|
||||
"DELETE FROM lease4 WHERE address = ? AND expire = ?"},
|
||||
{MySqlLeaseMgr::DELETE_LEASE4_SUBID,
|
||||
"DELETE FROM lease4 WHERE subnet_id = ?"},
|
||||
{MySqlLeaseMgr::DELETE_LEASE4_STATE_EXPIRED,
|
||||
"DELETE FROM lease4 "
|
||||
"WHERE state = ? AND expire < ?"},
|
||||
{MySqlLeaseMgr::DELETE_LEASE6,
|
||||
"DELETE FROM lease6 WHERE address = ? AND expire = ?"},
|
||||
{MySqlLeaseMgr::DELETE_LEASE6_SUBID,
|
||||
"DELETE FROM lease6 WHERE subnet_id = ?"},
|
||||
{MySqlLeaseMgr::DELETE_LEASE6_STATE_EXPIRED,
|
||||
"DELETE FROM lease6 "
|
||||
"WHERE state = ? AND expire < ?"},
|
||||
@@ -3828,13 +3832,39 @@ MySqlLeaseMgr::startSubnetRangeLeaseStatsQuery6(const SubnetID& first_subnet_id,
|
||||
}
|
||||
|
||||
size_t
|
||||
MySqlLeaseMgr::wipeLeases4(const SubnetID& /*subnet_id*/) {
|
||||
isc_throw(NotImplemented, "wipeLeases4 is not implemented for MySQL backend");
|
||||
MySqlLeaseMgr::wipeLeasesCommon(const SubnetID& subnet_id, StatementIndex statement_index) {
|
||||
// Set up the WHERE clause value
|
||||
MYSQL_BIND inbind[1];
|
||||
memset(inbind, 0, sizeof(inbind));
|
||||
|
||||
// Subnet ID.
|
||||
uint32_t subnet = static_cast<uint32_t>(subnet_id);
|
||||
inbind[0].buffer_type = MYSQL_TYPE_LONG;
|
||||
inbind[0].buffer = reinterpret_cast<char*>(&subnet);
|
||||
inbind[0].is_unsigned = MLM_TRUE;
|
||||
|
||||
// Get a context
|
||||
MySqlLeaseContextAlloc get_context(*this);
|
||||
MySqlLeaseContextPtr ctx = get_context.ctx_;
|
||||
|
||||
// Get the number of deleted leases and log it.
|
||||
return (deleteLeaseCommon(ctx, statement_index, inbind));
|
||||
}
|
||||
|
||||
size_t
|
||||
MySqlLeaseMgr::wipeLeases6(const SubnetID& /*subnet_id*/) {
|
||||
isc_throw(NotImplemented, "wipeLeases6 is not implemented for MySQL backend");
|
||||
MySqlLeaseMgr::wipeLeases4(const SubnetID& subnet_id) {
|
||||
uint64_t deleted_leases = wipeLeasesCommon(subnet_id, DELETE_LEASE4_SUBID);
|
||||
LOG_DEBUG(mysql_lb_logger, MYSQL_LB_DBG_TRACE_DETAIL, MYSQL_LB_DELETED_SUBNET4_ID)
|
||||
.arg(deleted_leases).arg(subnet_id);
|
||||
return (deleted_leases);
|
||||
}
|
||||
|
||||
size_t
|
||||
MySqlLeaseMgr::wipeLeases6(const SubnetID& subnet_id) {
|
||||
uint64_t deleted_leases = wipeLeasesCommon(subnet_id, DELETE_LEASE6_SUBID);
|
||||
LOG_DEBUG(mysql_lb_logger, MYSQL_LB_DBG_TRACE_DETAIL, MYSQL_LB_DELETED_SUBNET6_ID)
|
||||
.arg(deleted_leases).arg(subnet_id);;
|
||||
return (deleted_leases);
|
||||
}
|
||||
|
||||
// Miscellaneous database methods.
|
||||
|
@@ -734,8 +734,10 @@ public:
|
||||
/// statements
|
||||
enum StatementIndex {
|
||||
DELETE_LEASE4, // Delete from lease4 by address
|
||||
DELETE_LEASE4_SUBID, // Delete from lease4 by subnet ID
|
||||
DELETE_LEASE4_STATE_EXPIRED, // Delete expired lease4 in a given state
|
||||
DELETE_LEASE6, // Delete from lease6 by address
|
||||
DELETE_LEASE6_SUBID, // Delete from lease6 by subnet ID
|
||||
DELETE_LEASE6_STATE_EXPIRED, // Delete expired lease6 in a given state
|
||||
GET_LEASE4, // Get all IPv4 leases
|
||||
GET_LEASE4_ADDR, // Get lease4 by address
|
||||
@@ -985,6 +987,17 @@ private:
|
||||
StatementIndex stindex,
|
||||
MYSQL_BIND* bind);
|
||||
|
||||
/// @brief Removes all leases matching subnet ID.
|
||||
///
|
||||
/// This rather dangerous method is able to remove all leases from specified
|
||||
/// subnet.
|
||||
///
|
||||
/// @param subnet_id identifier of the subnet
|
||||
/// @param statement_index One of the @c DELETE_LEASE4_SUBID or
|
||||
/// @c DELETE_LEASE6_SUBID.
|
||||
/// @return number of leases removed.
|
||||
virtual size_t wipeLeasesCommon(const SubnetID& subnet_id, StatementIndex statement_index);
|
||||
|
||||
/// @brief Delete expired-reclaimed leases.
|
||||
///
|
||||
/// @param secs Number of seconds since expiration of leases before
|
||||
|
@@ -952,23 +952,23 @@ TEST_F(MySqlLeaseMgrTest, recountLeaseStats6MultiThreading) {
|
||||
}
|
||||
|
||||
/// @brief Tests that leases from specific subnet can be removed.
|
||||
TEST_F(MySqlLeaseMgrTest, DISABLED_wipeLeases4) {
|
||||
TEST_F(MySqlLeaseMgrTest, wipeLeases4) {
|
||||
testWipeLeases4();
|
||||
}
|
||||
|
||||
/// @brief Tests that leases from specific subnet can be removed.
|
||||
TEST_F(MySqlLeaseMgrTest, DISABLED_wipeLeases4MultiThreading) {
|
||||
TEST_F(MySqlLeaseMgrTest, wipeLeases4MultiThreading) {
|
||||
MultiThreadingTest mt(true);
|
||||
testWipeLeases4();
|
||||
}
|
||||
|
||||
/// @brief Tests that leases from specific subnet can be removed.
|
||||
TEST_F(MySqlLeaseMgrTest, DISABLED_wipeLeases6) {
|
||||
TEST_F(MySqlLeaseMgrTest, wipeLeases6) {
|
||||
testWipeLeases6();
|
||||
}
|
||||
|
||||
/// @brief Tests that leases from specific subnet can be removed.
|
||||
TEST_F(MySqlLeaseMgrTest, DISABLED_wipeLeases6MultiThreading) {
|
||||
TEST_F(MySqlLeaseMgrTest, wipeLeases6MultiThreading) {
|
||||
MultiThreadingTest mt(true);
|
||||
testWipeLeases6();
|
||||
}
|
||||
|
@@ -1,4 +1,4 @@
|
||||
// File created from src/hooks/dhcp/pgsql/pgsql_lb_messages.mes
|
||||
// File created from ../src/hooks/dhcp/pgsql/pgsql_lb_messages.mes
|
||||
|
||||
#include <cstddef>
|
||||
#include <log/message_types.h>
|
||||
@@ -16,6 +16,8 @@ extern const isc::log::MessageID PGSQL_LB_DB = "PGSQL_LB_DB";
|
||||
extern const isc::log::MessageID PGSQL_LB_DB_RECONNECT_ATTEMPT_FAILED = "PGSQL_LB_DB_RECONNECT_ATTEMPT_FAILED";
|
||||
extern const isc::log::MessageID PGSQL_LB_DB_RECONNECT_ATTEMPT_SCHEDULE = "PGSQL_LB_DB_RECONNECT_ATTEMPT_SCHEDULE";
|
||||
extern const isc::log::MessageID PGSQL_LB_DB_RECONNECT_FAILED = "PGSQL_LB_DB_RECONNECT_FAILED";
|
||||
extern const isc::log::MessageID PGSQL_LB_DELETED_SUBNET4_ID = "PGSQL_LB_DELETED_SUBNET4_ID";
|
||||
extern const isc::log::MessageID PGSQL_LB_DELETED_SUBNET6_ID = "PGSQL_LB_DELETED_SUBNET6_ID";
|
||||
extern const isc::log::MessageID PGSQL_LB_DELETE_ADDR4 = "PGSQL_LB_DELETE_ADDR4";
|
||||
extern const isc::log::MessageID PGSQL_LB_DELETE_ADDR6 = "PGSQL_LB_DELETE_ADDR6";
|
||||
extern const isc::log::MessageID PGSQL_LB_DELETE_EXPIRED_RECLAIMED4 = "PGSQL_LB_DELETE_EXPIRED_RECLAIMED4";
|
||||
@@ -71,6 +73,8 @@ const char* values[] = {
|
||||
"PGSQL_LB_DB_RECONNECT_ATTEMPT_FAILED", "database reconnect failed: %1",
|
||||
"PGSQL_LB_DB_RECONNECT_ATTEMPT_SCHEDULE", "scheduling attempt %1 of %2 in %3 milliseconds",
|
||||
"PGSQL_LB_DB_RECONNECT_FAILED", "maximum number of database reconnect attempts: %1, has been exhausted without success",
|
||||
"PGSQL_LB_DELETED_SUBNET4_ID", "deleted %1 leases that match Subnet ID %2.",
|
||||
"PGSQL_LB_DELETED_SUBNET6_ID", "deleted %1 leases that match Subnet ID %2.",
|
||||
"PGSQL_LB_DELETE_ADDR4", "deleting lease for address %1",
|
||||
"PGSQL_LB_DELETE_ADDR6", "deleting lease for address %1",
|
||||
"PGSQL_LB_DELETE_EXPIRED_RECLAIMED4", "deleting reclaimed IPv4 leases that expired more than %1 seconds ago",
|
||||
|
@@ -1,4 +1,4 @@
|
||||
// File created from src/hooks/dhcp/pgsql/pgsql_lb_messages.mes
|
||||
// File created from ../src/hooks/dhcp/pgsql/pgsql_lb_messages.mes
|
||||
|
||||
#ifndef PGSQL_LB_MESSAGES_H
|
||||
#define PGSQL_LB_MESSAGES_H
|
||||
@@ -17,6 +17,8 @@ extern const isc::log::MessageID PGSQL_LB_DB;
|
||||
extern const isc::log::MessageID PGSQL_LB_DB_RECONNECT_ATTEMPT_FAILED;
|
||||
extern const isc::log::MessageID PGSQL_LB_DB_RECONNECT_ATTEMPT_SCHEDULE;
|
||||
extern const isc::log::MessageID PGSQL_LB_DB_RECONNECT_FAILED;
|
||||
extern const isc::log::MessageID PGSQL_LB_DELETED_SUBNET4_ID;
|
||||
extern const isc::log::MessageID PGSQL_LB_DELETED_SUBNET6_ID;
|
||||
extern const isc::log::MessageID PGSQL_LB_DELETE_ADDR4;
|
||||
extern const isc::log::MessageID PGSQL_LB_DELETE_ADDR6;
|
||||
extern const isc::log::MessageID PGSQL_LB_DELETE_EXPIRED_RECLAIMED4;
|
||||
|
@@ -72,6 +72,16 @@ leases which have expired longer than a specified period of time.
|
||||
The argument is the amount of time Kea waits after a reclaimed
|
||||
lease expires before considering its removal.
|
||||
|
||||
% PGSQL_LB_DELETED_SUBNET4_ID deleted %1 leases that match Subnet ID %2.
|
||||
Logged at debug log level 50.
|
||||
A debug message issued when the server is removing leases which match
|
||||
respective Subnet ID.
|
||||
|
||||
% PGSQL_LB_DELETED_SUBNET6_ID deleted %1 leases that match Subnet ID %2.
|
||||
Logged at debug log level 50.
|
||||
A debug message issued when the server is removing leases which match
|
||||
respective Subnet ID.
|
||||
|
||||
% PGSQL_LB_GET4 obtaining all IPv4 leases
|
||||
Logged at debug log level 50.
|
||||
A debug message issued when the server is attempting to obtain all IPv4
|
||||
|
@@ -48,6 +48,11 @@ PgSqlTaggedStatement tagged_statements[] = {
|
||||
"delete_lease4",
|
||||
"DELETE FROM lease4 WHERE address = $1 AND expire = $2" },
|
||||
|
||||
// DELETE_LEASE4_SUBID
|
||||
{ 1, { OID_INT8 },
|
||||
"delete_lease4_subid",
|
||||
"DELETE FROM lease4 WHERE subnet_id = $1" },
|
||||
|
||||
// DELETE_LEASE4_STATE_EXPIRED
|
||||
{ 2, { OID_INT8, OID_TIMESTAMP },
|
||||
"delete_lease4_state_expired",
|
||||
@@ -57,7 +62,12 @@ PgSqlTaggedStatement tagged_statements[] = {
|
||||
// DELETE_LEASE6
|
||||
{ 2, { OID_VARCHAR, OID_TIMESTAMP },
|
||||
"delete_lease6",
|
||||
"DELETE FROM lease6 WHERE address = cast($1 as inet) AND expire = $2"},
|
||||
"DELETE FROM lease6 WHERE address = cast($1 as inet) AND expire = $2" },
|
||||
|
||||
// DELETE_LEASE6_SUBID
|
||||
{ 1, { OID_INT8 },
|
||||
"delete_lease6_subid",
|
||||
"DELETE FROM lease6 WHERE subnet_id = $1" },
|
||||
|
||||
// DELETE_LEASE6_STATE_EXPIRED
|
||||
{ 2, { OID_INT8, OID_TIMESTAMP },
|
||||
@@ -301,7 +311,7 @@ PgSqlTaggedStatement tagged_statements[] = {
|
||||
"hwaddr, hwtype, hwaddr_source, "
|
||||
"state, user_context, pool_id "
|
||||
"FROM lease6 "
|
||||
"ORDER BY address "},
|
||||
"ORDER BY address" },
|
||||
|
||||
// GET_LEASE6_ADDR
|
||||
{ 2, { OID_VARCHAR, OID_INT2 },
|
||||
@@ -312,7 +322,7 @@ PgSqlTaggedStatement tagged_statements[] = {
|
||||
"hwaddr, hwtype, hwaddr_source, "
|
||||
"state, user_context, pool_id "
|
||||
"FROM lease6 "
|
||||
"WHERE address = cast($1 as inet) AND lease_type = $2"},
|
||||
"WHERE address = cast($1 as inet) AND lease_type = $2" },
|
||||
|
||||
// GET_LEASE6_DUID_IAID
|
||||
{ 3, { OID_BYTEA, OID_INT8, OID_INT2 },
|
||||
@@ -348,7 +358,7 @@ PgSqlTaggedStatement tagged_statements[] = {
|
||||
"FROM lease6 "
|
||||
"WHERE address > cast($1 as inet) "
|
||||
"ORDER BY address "
|
||||
"LIMIT $2"},
|
||||
"LIMIT $2" },
|
||||
|
||||
// GET_LEASE6_UCTX_PAGE
|
||||
{ 2, { OID_VARCHAR, OID_INT8 },
|
||||
@@ -2977,13 +2987,35 @@ PgSqlLeaseMgr::startSubnetRangeLeaseStatsQuery6(const SubnetID& first_subnet_id,
|
||||
}
|
||||
|
||||
size_t
|
||||
PgSqlLeaseMgr::wipeLeases4(const SubnetID& /*subnet_id*/) {
|
||||
isc_throw(NotImplemented, "wipeLeases4 is not implemented for PostgreSQL backend");
|
||||
PgSqlLeaseMgr::wipeLeasesCommon(const SubnetID& subnet_id, StatementIndex statement_index) {
|
||||
PsqlBindArray bind_array;
|
||||
|
||||
// Subnet ID.
|
||||
std::string subnet_str = boost::lexical_cast<std::string>(subnet_id);
|
||||
bind_array.add(subnet_str);
|
||||
|
||||
// Get a context
|
||||
PgSqlLeaseContextAlloc get_context(*this);
|
||||
PgSqlLeaseContextPtr ctx = get_context.ctx_;
|
||||
|
||||
// Delete leases.
|
||||
return (deleteLeaseCommon(ctx, statement_index, bind_array));
|
||||
}
|
||||
|
||||
size_t
|
||||
PgSqlLeaseMgr::wipeLeases6(const SubnetID& /*subnet_id*/) {
|
||||
isc_throw(NotImplemented, "wipeLeases6 is not implemented for PostgreSQL backend");
|
||||
PgSqlLeaseMgr::wipeLeases4(const SubnetID& subnet_id) {
|
||||
uint64_t deleted_leases = wipeLeasesCommon(subnet_id, DELETE_LEASE4_SUBID);
|
||||
LOG_DEBUG(pgsql_lb_logger, PGSQL_LB_DBG_TRACE_DETAIL, PGSQL_LB_DELETED_SUBNET4_ID)
|
||||
.arg(deleted_leases).arg(subnet_id);
|
||||
return (deleted_leases);
|
||||
}
|
||||
|
||||
size_t
|
||||
PgSqlLeaseMgr::wipeLeases6(const SubnetID& subnet_id) {
|
||||
uint64_t deleted_leases = wipeLeasesCommon(subnet_id, DELETE_LEASE6_SUBID);
|
||||
LOG_DEBUG(pgsql_lb_logger, PGSQL_LB_DBG_TRACE_DETAIL, PGSQL_LB_DELETED_SUBNET6_ID)
|
||||
.arg(deleted_leases).arg(subnet_id);
|
||||
return (deleted_leases);
|
||||
}
|
||||
|
||||
std::string
|
||||
|
@@ -709,8 +709,10 @@ public:
|
||||
/// statements
|
||||
enum StatementIndex {
|
||||
DELETE_LEASE4, // Delete from lease4 by address
|
||||
DELETE_LEASE4_SUBID, // Delete from lease4 by subnet ID
|
||||
DELETE_LEASE4_STATE_EXPIRED, // Delete expired lease4 in a given state
|
||||
DELETE_LEASE6, // Delete from lease6 by address
|
||||
DELETE_LEASE6_SUBID, // Delete from lease6 by subnet ID
|
||||
DELETE_LEASE6_STATE_EXPIRED, // Delete expired lease6 in a given state
|
||||
GET_LEASE4, // Get all IPv4 leases
|
||||
GET_LEASE4_ADDR, // Get lease4 by address
|
||||
@@ -959,6 +961,17 @@ private:
|
||||
StatementIndex stindex,
|
||||
db::PsqlBindArray& bind_array);
|
||||
|
||||
/// @brief Removes all leases matching subnet ID.
|
||||
///
|
||||
/// This rather dangerous method is able to remove all leases from specified
|
||||
/// subnet.
|
||||
///
|
||||
/// @param subnet_id identifier of the subnet
|
||||
/// @param statement_index One of the @c DELETE_LEASE4_SUBID or
|
||||
/// @c DELETE_LEASE6_SUBID.
|
||||
/// @return number of leases removed.
|
||||
virtual size_t wipeLeasesCommon(const SubnetID& subnet_id, StatementIndex statement_index);
|
||||
|
||||
/// @brief Delete expired-reclaimed leases.
|
||||
///
|
||||
/// @param secs Number of seconds since expiration of leases before
|
||||
|
@@ -919,23 +919,23 @@ TEST_F(PgSqlLeaseMgrTest, recountLeaseStats6MultiThreading) {
|
||||
}
|
||||
|
||||
/// @brief Tests that leases from specific subnet can be removed.
|
||||
TEST_F(PgSqlLeaseMgrTest, DISABLED_wipeLeases4) {
|
||||
TEST_F(PgSqlLeaseMgrTest, wipeLeases4) {
|
||||
testWipeLeases4();
|
||||
}
|
||||
|
||||
/// @brief Tests that leases from specific subnet can be removed.
|
||||
TEST_F(PgSqlLeaseMgrTest, DISABLED_wipeLeases4MultiThreading) {
|
||||
TEST_F(PgSqlLeaseMgrTest, wipeLeases4MultiThreading) {
|
||||
MultiThreadingTest mt(true);
|
||||
testWipeLeases4();
|
||||
}
|
||||
|
||||
/// @brief Tests that leases from specific subnet can be removed.
|
||||
TEST_F(PgSqlLeaseMgrTest, DISABLED_wipeLeases6) {
|
||||
TEST_F(PgSqlLeaseMgrTest, wipeLeases6) {
|
||||
testWipeLeases6();
|
||||
}
|
||||
|
||||
/// @brief Tests that leases from specific subnet can be removed.
|
||||
TEST_F(PgSqlLeaseMgrTest, DISABLED_wipeLeases6MultiThreading) {
|
||||
TEST_F(PgSqlLeaseMgrTest, wipeLeases6MultiThreading) {
|
||||
MultiThreadingTest mt(true);
|
||||
testWipeLeases6();
|
||||
}
|
||||
|
@@ -225,7 +225,7 @@ but no subnet was found.
|
||||
|
||||
% SUBNET_CMDS_SUBNET6_LIST_FAILED failed to return a list of IPv6 subnets: %1
|
||||
This error message is issued when the Subnet Commands hooks library fails
|
||||
to return a list of IPv4 subnets requested with 'subnet6-list' command. The
|
||||
to return a list of IPv6 subnets requested with 'subnet6-list' command. The
|
||||
reason for failure is provided within the error message. The error message
|
||||
will be returned to the controlling client with the error status code.
|
||||
|
||||
|
@@ -2,8 +2,7 @@
|
||||
"access": "write",
|
||||
"avail": "1.3.0",
|
||||
"brief": [
|
||||
"This command removes all leases associated with a given subnet.",
|
||||
"This command is deprecated and it will be removed in the future."
|
||||
"This command removes all leases associated with a given subnet."
|
||||
],
|
||||
"cmd-syntax": [
|
||||
"{",
|
||||
|
@@ -2,8 +2,7 @@
|
||||
"access": "write",
|
||||
"avail": "1.3.0",
|
||||
"brief": [
|
||||
"This command removes all leases associated with a given subnet.",
|
||||
"This command is deprecated and it will be removed in the future."
|
||||
"This command removes all leases associated with a given subnet."
|
||||
],
|
||||
"cmd-comment": [
|
||||
"Note: not all backends support this command."
|
||||
|
Reference in New Issue
Block a user