mirror of
https://gitlab.isc.org/isc-projects/kea
synced 2025-09-05 00:15:17 +00:00
[#2869] Finished delete cascade
This commit is contained in:
@@ -3525,9 +3525,7 @@ MySqlLeaseMgr::deleteLease(const Lease6Ptr& lease) {
|
|||||||
// Check success case first as it is the most likely outcome.
|
// Check success case first as it is the most likely outcome.
|
||||||
if (affected_rows == 1) {
|
if (affected_rows == 1) {
|
||||||
// Delete references from extended info tables.
|
// Delete references from extended info tables.
|
||||||
if (getExtendedInfoTablesEnabled()) {
|
// Performed by the delete cascade.
|
||||||
deleteExtendedInfo6(lease->addr_);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Run installed callbacks.
|
// Run installed callbacks.
|
||||||
if (hasCallbacks()) {
|
if (hasCallbacks()) {
|
||||||
|
@@ -2706,9 +2706,7 @@ PgSqlLeaseMgr::deleteLease(const Lease6Ptr& lease) {
|
|||||||
// Check success case first as it is the most likely outcome.
|
// Check success case first as it is the most likely outcome.
|
||||||
if (affected_rows == 1) {
|
if (affected_rows == 1) {
|
||||||
// Delete references from extended info tables.
|
// Delete references from extended info tables.
|
||||||
if (getExtendedInfoTablesEnabled()) {
|
// Performed by the delete cascade.
|
||||||
deleteExtendedInfo6(lease->addr_);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Run installed callbacks.
|
// Run installed callbacks.
|
||||||
if (hasCallbacks()) {
|
if (hasCallbacks()) {
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#include <asiolink/io_address.h>
|
#include <asiolink/io_address.h>
|
||||||
#include <cc/data.h>
|
#include <cc/data.h>
|
||||||
#include <dhcpsrv/testutils/generic_extended_info_unittest.h>
|
#include <dhcpsrv/testutils/generic_lease_extended_info_unittest.h>
|
||||||
#include <mysql/testutils/mysql_schema.h>
|
#include <mysql/testutils/mysql_schema.h>
|
||||||
#include <dhcpsrv/mysql_lease_mgr.h>
|
#include <dhcpsrv/mysql_lease_mgr.h>
|
||||||
|
|
||||||
@@ -172,6 +172,15 @@ TEST_F(MySqlExtendedInfoTest, enableTablesMultiThreading) {
|
|||||||
testEnableTables();
|
testEnableTables();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(MySqlExtendedInfoTest, deleteCascade) {
|
||||||
|
testDeleteCascade();
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(MySqlExtendedInfoTest, deleteCascadeMultiThreading) {
|
||||||
|
MultiThreadingTest mt(true);
|
||||||
|
testDeleteCascade();
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(MySqlExtendedInfoTest, getLeases6ByRelayId) {
|
TEST_F(MySqlExtendedInfoTest, getLeases6ByRelayId) {
|
||||||
testGetLeases6ByRelayId();
|
testGetLeases6ByRelayId();
|
||||||
}
|
}
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#include <asiolink/io_address.h>
|
#include <asiolink/io_address.h>
|
||||||
#include <cc/data.h>
|
#include <cc/data.h>
|
||||||
#include <dhcpsrv/testutils/generic_extended_info_unittest.h>
|
#include <dhcpsrv/testutils/generic_lease_extended_info_unittest.h>
|
||||||
#include <pgsql/testutils/pgsql_schema.h>
|
#include <pgsql/testutils/pgsql_schema.h>
|
||||||
#include <dhcpsrv/pgsql_lease_mgr.h>
|
#include <dhcpsrv/pgsql_lease_mgr.h>
|
||||||
|
|
||||||
@@ -172,6 +172,15 @@ TEST_F(PgSqlExtendedInfoTest, enableTablesMultiThreading) {
|
|||||||
testEnableTables();
|
testEnableTables();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(PgSqlExtendedInfoTest, deleteCascade) {
|
||||||
|
testDeleteCascade();
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(PgSqlExtendedInfoTest, deleteCascadeMultiThreading) {
|
||||||
|
MultiThreadingTest mt(true);
|
||||||
|
testDeleteCascade();
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(PgSqlExtendedInfoTest, getLeases6ByRelayId) {
|
TEST_F(PgSqlExtendedInfoTest, getLeases6ByRelayId) {
|
||||||
testGetLeases6ByRelayId();
|
testGetLeases6ByRelayId();
|
||||||
}
|
}
|
||||||
|
@@ -27,7 +27,7 @@ libdhcpsrvtest_la_SOURCES += lease_file_io.cc lease_file_io.h
|
|||||||
libdhcpsrvtest_la_SOURCES += test_config_backend.h
|
libdhcpsrvtest_la_SOURCES += test_config_backend.h
|
||||||
libdhcpsrvtest_la_SOURCES += test_config_backend_dhcp4.cc test_config_backend_dhcp4.h
|
libdhcpsrvtest_la_SOURCES += test_config_backend_dhcp4.cc test_config_backend_dhcp4.h
|
||||||
libdhcpsrvtest_la_SOURCES += test_config_backend_dhcp6.cc test_config_backend_dhcp6.h
|
libdhcpsrvtest_la_SOURCES += test_config_backend_dhcp6.cc test_config_backend_dhcp6.h
|
||||||
libdhcpsrvtest_la_SOURCES += generic_extended_info_unittest.h
|
libdhcpsrvtest_la_SOURCES += generic_lease_extended_info_unittest.h
|
||||||
|
|
||||||
if HAVE_MYSQL
|
if HAVE_MYSQL
|
||||||
libdhcpsrvtest_la_SOURCES += mysql_generic_backend_unittest.cc mysql_generic_backend_unittest.h
|
libdhcpsrvtest_la_SOURCES += mysql_generic_backend_unittest.cc mysql_generic_backend_unittest.h
|
||||||
|
@@ -105,7 +105,8 @@ public:
|
|||||||
std::vector<uint8_t> duid_data = createFromString(DUIDS[i]);
|
std::vector<uint8_t> duid_data = createFromString(DUIDS[i]);
|
||||||
DuidPtr duid(new DUID(duid_data));
|
DuidPtr duid(new DUID(duid_data));
|
||||||
asiolink::IOAddress addr(ADDRESS6[i]);
|
asiolink::IOAddress addr(ADDRESS6[i]);
|
||||||
ASSERT_NO_THROW(lease.reset(new Lease6(((i % 2) ? Lease::TYPE_NA : Lease::TYPE_PD), addr, duid,
|
ASSERT_NO_THROW(lease.reset(new Lease6(((i % 2) ? Lease::TYPE_NA : Lease::TYPE_PD),
|
||||||
|
addr, duid,
|
||||||
123, 1000, 2000,
|
123, 1000, 2000,
|
||||||
static_cast<SubnetID>(i))));
|
static_cast<SubnetID>(i))));
|
||||||
leases6.push_back(lease);
|
leases6.push_back(lease);
|
||||||
@@ -179,6 +180,9 @@ public:
|
|||||||
/// @brief Test initLease6 with tables.
|
/// @brief Test initLease6 with tables.
|
||||||
void testEnableTables();
|
void testEnableTables();
|
||||||
|
|
||||||
|
/// @brief Test delete cascade on tables.
|
||||||
|
void testDeleteCascade();
|
||||||
|
|
||||||
/// @brief Test getLeases6ByRelayId.
|
/// @brief Test getLeases6ByRelayId.
|
||||||
void testGetLeases6ByRelayId();
|
void testGetLeases6ByRelayId();
|
||||||
|
|
||||||
@@ -1027,6 +1031,46 @@ GenericExtendedInfoTest<NakedLeaseMgrType>::testEnableTables() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// @brief Verifies that the delete cascade feature works as expected,
|
||||||
|
/// i.e. that deleteLease() does not require an explicit call to
|
||||||
|
/// deleteExtendedInfo6().
|
||||||
|
template<typename NakedLeaseMgrType> void
|
||||||
|
GenericExtendedInfoTest<NakedLeaseMgrType>::testDeleteCascade() {
|
||||||
|
// Lease manager is created with empty tables.
|
||||||
|
start(true);
|
||||||
|
initLease6();
|
||||||
|
EXPECT_EQ(0, lease_mgr_->byRelayId6size());
|
||||||
|
EXPECT_EQ(0, lease_mgr_->byRemoteId6size());
|
||||||
|
|
||||||
|
// Create parameter values.
|
||||||
|
asiolink::IOAddress lease_addr(ADDRESS6[0]);
|
||||||
|
std::vector<uint8_t> relay_id_data0 = createFromString(DUIDS[0]);
|
||||||
|
DUID relay_id0(relay_id_data0);
|
||||||
|
std::vector<uint8_t> relay_id_data1 = createFromString(DUIDS[1]);
|
||||||
|
DUID relay_id1(relay_id_data1);
|
||||||
|
std::vector<uint8_t> remote_id0 = createFromString(DUIDS[2]);
|
||||||
|
std::vector<uint8_t> remote_id1 = createFromString(DUIDS[3]);
|
||||||
|
|
||||||
|
// Fill the table.
|
||||||
|
EXPECT_NO_THROW(lease_mgr_->addRelayId6(lease_addr, relay_id_data0));
|
||||||
|
EXPECT_NO_THROW(lease_mgr_->addRelayId6(lease_addr, relay_id_data1));
|
||||||
|
EXPECT_NO_THROW(lease_mgr_->addRemoteId6(lease_addr, remote_id0));
|
||||||
|
EXPECT_NO_THROW(lease_mgr_->addRemoteId6(lease_addr, remote_id1));
|
||||||
|
EXPECT_EQ(2, lease_mgr_->byRelayId6size());
|
||||||
|
EXPECT_EQ(2, lease_mgr_->byRemoteId6size());
|
||||||
|
|
||||||
|
// Remove the first lease.
|
||||||
|
EXPECT_NO_THROW(lease_mgr_->deleteLease(leases6[0]));
|
||||||
|
|
||||||
|
// Check the first lease was gone.
|
||||||
|
EXPECT_FALSE(lease_mgr_->getLease6(Lease::TYPE_NA, lease_addr));
|
||||||
|
EXPECT_FALSE(lease_mgr_->getLease6(Lease::TYPE_PD, lease_addr));
|
||||||
|
|
||||||
|
// Check tables are now empty.
|
||||||
|
EXPECT_EQ(0, lease_mgr_->byRelayId6size());
|
||||||
|
EXPECT_EQ(0, lease_mgr_->byRemoteId6size());
|
||||||
|
}
|
||||||
|
|
||||||
/// @brief Verifies that getLeases6ByRelayId works as expected.
|
/// @brief Verifies that getLeases6ByRelayId works as expected.
|
||||||
template<typename NakedLeaseMgrType> void
|
template<typename NakedLeaseMgrType> void
|
||||||
GenericExtendedInfoTest<NakedLeaseMgrType>::testGetLeases6ByRelayId() {
|
GenericExtendedInfoTest<NakedLeaseMgrType>::testGetLeases6ByRelayId() {
|
@@ -5832,6 +5832,18 @@ UPDATE dhcp6_global_parameter
|
|||||||
SET name = 'ddns-conflict-resolution-mode', value = 'no-check-with-dhcid', parameter_type = 4
|
SET name = 'ddns-conflict-resolution-mode', value = 'no-check-with-dhcid', parameter_type = 4
|
||||||
WHERE name = 'ddns-use-conflict-resolution' and value = 'false';
|
WHERE name = 'ddns-use-conflict-resolution' and value = 'false';
|
||||||
|
|
||||||
|
-- Add a constraint on lease6_relay_id that any lease_addr must map to
|
||||||
|
-- a lease6 address.
|
||||||
|
ALTER TABLE lease6_relay_id
|
||||||
|
ADD CONSTRAINT fk_lease6_relay_id_addr FOREIGN KEY (lease_addr)
|
||||||
|
REFERENCES lease6 (address) ON DELETE CASCADE ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- Add a constraint on lease6_remote_id that any lease_addr must map to
|
||||||
|
-- a lease6 address.
|
||||||
|
ALTER TABLE lease6_remote_id
|
||||||
|
ADD CONSTRAINT fk_lease6_remote_id_addr FOREIGN KEY (lease_addr)
|
||||||
|
REFERENCES lease6 (address) ON DELETE CASCADE ON UPDATE NO ACTION;
|
||||||
|
|
||||||
-- Update the schema version number.
|
-- Update the schema version number.
|
||||||
UPDATE schema_version
|
UPDATE schema_version
|
||||||
SET version = '20', minor = '0';
|
SET version = '20', minor = '0';
|
||||||
|
@@ -73,6 +73,18 @@ UPDATE dhcp6_global_parameter
|
|||||||
SET name = 'ddns-conflict-resolution-mode', value = 'no-check-with-dhcid', parameter_type = 4
|
SET name = 'ddns-conflict-resolution-mode', value = 'no-check-with-dhcid', parameter_type = 4
|
||||||
WHERE name = 'ddns-use-conflict-resolution' and value = 'false';
|
WHERE name = 'ddns-use-conflict-resolution' and value = 'false';
|
||||||
|
|
||||||
|
-- Add a constraint on lease6_relay_id that any lease_addr must map to
|
||||||
|
-- a lease6 address.
|
||||||
|
ALTER TABLE lease6_relay_id
|
||||||
|
ADD CONSTRAINT fk_lease6_relay_id_addr FOREIGN KEY (lease_addr)
|
||||||
|
REFERENCES lease6 (address) ON DELETE CASCADE ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- Add a constraint on lease6_remote_id that any lease_addr must map to
|
||||||
|
-- a lease6 address.
|
||||||
|
ALTER TABLE lease6_remote_id
|
||||||
|
ADD CONSTRAINT fk_lease6_remote_id_addr FOREIGN KEY (lease_addr)
|
||||||
|
REFERENCES lease6 (address) ON DELETE CASCADE ON UPDATE NO ACTION;
|
||||||
|
|
||||||
-- Update the schema version number.
|
-- Update the schema version number.
|
||||||
UPDATE schema_version
|
UPDATE schema_version
|
||||||
SET version = '20', minor = '0';
|
SET version = '20', minor = '0';
|
||||||
|
Reference in New Issue
Block a user