From: Marcin Siodelski Date: Thu, 3 Sep 2015 09:35:25 +0000 (+0200) Subject: [3965] deleteExpiredReclaimed returns number of deleted leases. X-Git-Tag: trac3238_base~1^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=31c483f12303a4584c25dad7cd08f979f6fba8fb;p=thirdparty%2Fkea.git [3965] deleteExpiredReclaimed returns number of deleted leases. --- diff --git a/src/lib/dhcpsrv/lease_mgr.h b/src/lib/dhcpsrv/lease_mgr.h index 8166c52c2f..40edc9513d 100644 --- a/src/lib/dhcpsrv/lease_mgr.h +++ b/src/lib/dhcpsrv/lease_mgr.h @@ -369,14 +369,18 @@ public: /// @param secs Number of seconds since expiration of leases before /// they can be removed. Leases which have expired later than this /// time will not be deleted. - virtual void deleteExpiredReclaimedLeases4(const uint32_t secs) = 0; + /// + /// @return Number of leases deleted. + virtual uint64_t deleteExpiredReclaimedLeases4(const uint32_t secs) = 0; /// @brief Deletes all expired and reclaimed DHCPv6 leases. /// /// @param secs Number of seconds since expiration of leases before /// they can be removed. Leases which have expired later than this /// time will not be deleted. - virtual void deleteExpiredReclaimedLeases6(const uint32_t secs) = 0; + /// + /// @return Number of leases deleted. + virtual uint64_t deleteExpiredReclaimedLeases6(const uint32_t secs) = 0; /// @brief Return backend type /// diff --git a/src/lib/dhcpsrv/memfile_lease_mgr.cc b/src/lib/dhcpsrv/memfile_lease_mgr.cc index a90a0963c9..46e06d15c0 100644 --- a/src/lib/dhcpsrv/memfile_lease_mgr.cc +++ b/src/lib/dhcpsrv/memfile_lease_mgr.cc @@ -646,27 +646,29 @@ Memfile_LeaseMgr::deleteLease(const isc::asiolink::IOAddress& addr) { } } -void +uint64_t Memfile_LeaseMgr::deleteExpiredReclaimedLeases4(const uint32_t secs) { LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_MEMFILE_DELETE_EXPIRED_RECLAIMED4) .arg(secs); - deleteExpiredReclaimedLeases(secs, V4, storage4_, - lease_file4_); + return (deleteExpiredReclaimedLeases< + Lease4StorageExpirationIndex, Lease4 + >(secs, V4, storage4_, lease_file4_)); } -void +uint64_t Memfile_LeaseMgr::deleteExpiredReclaimedLeases6(const uint32_t secs) { LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_MEMFILE_DELETE_EXPIRED_RECLAIMED6) .arg(secs); - deleteExpiredReclaimedLeases(secs, V6, storage6_, - lease_file6_); + return (deleteExpiredReclaimedLeases< + Lease6StorageExpirationIndex, Lease6 + >(secs, V6, storage6_, lease_file6_)); } template -void +uint64_t Memfile_LeaseMgr::deleteExpiredReclaimedLeases(const uint32_t secs, const Universe& universe, StorageType& storage, @@ -722,6 +724,8 @@ Memfile_LeaseMgr::deleteExpiredReclaimedLeases(const uint32_t secs, // Erase leases from memory. index.erase(lower_limit, upper_limit); } + // Return number of leases deleted. + return (num_leases); } diff --git a/src/lib/dhcpsrv/memfile_lease_mgr.h b/src/lib/dhcpsrv/memfile_lease_mgr.h index 1a78c0b613..b85b59194c 100644 --- a/src/lib/dhcpsrv/memfile_lease_mgr.h +++ b/src/lib/dhcpsrv/memfile_lease_mgr.h @@ -319,14 +319,18 @@ public: /// @param secs Number of seconds since expiration of leases before /// they can be removed. Leases which have expired later than this /// time will not be deleted. - virtual void deleteExpiredReclaimedLeases4(const uint32_t secs); + /// + /// @return Number of leases deleted. + virtual uint64_t deleteExpiredReclaimedLeases4(const uint32_t secs); /// @brief Deletes all expired-reclaimed DHCPv6 leases. /// /// @param secs Number of seconds since expiration of leases before /// they can be removed. Leases which have expired later than this /// time will not be deleted. - virtual void deleteExpiredReclaimedLeases6(const uint32_t secs); + /// + /// @return Number of leases deleted. + virtual uint64_t deleteExpiredReclaimedLeases6(const uint32_t secs); private: @@ -346,6 +350,8 @@ private: /// @param lease_file Reference to a DHCPv4 or DHCPv6 lease file /// instance where leases should be marked as deleted. /// + /// @return Number of leases deleted. + /// /// @tparam IndexType Index type to be used to search for the /// expired-reclaimed leases, i.e. /// @c Lease4StorageExpirationIndex or @c Lease6StorageExpirationIndex. @@ -356,10 +362,10 @@ private: /// DHCPv6 lease file type. template - void deleteExpiredReclaimedLeases(const uint32_t secs, - const Universe& universe, - StorageType& storage, - LeaseFileType& lease_file) const; + uint64_t deleteExpiredReclaimedLeases(const uint32_t secs, + const Universe& universe, + StorageType& storage, + LeaseFileType& lease_file) const; public: diff --git a/src/lib/dhcpsrv/mysql_lease_mgr.cc b/src/lib/dhcpsrv/mysql_lease_mgr.cc index df57b8f1a0..68f00755b3 100644 --- a/src/lib/dhcpsrv/mysql_lease_mgr.cc +++ b/src/lib/dhcpsrv/mysql_lease_mgr.cc @@ -2086,13 +2086,13 @@ MySqlLeaseMgr::deleteLease(const isc::asiolink::IOAddress& addr) { } } -void +uint64_t MySqlLeaseMgr::deleteExpiredReclaimedLeases4(const uint32_t) { isc_throw(NotImplemented, "MySqlLeaseMgr::deleteExpiredReclaimedLeases4" " is not implemented"); } -void +uint64_t MySqlLeaseMgr::deleteExpiredReclaimedLeases6(const uint32_t) { isc_throw(NotImplemented, "MySqlLeaseMgr::deleteExpiredReclaimedLeases6" " is not implemented"); diff --git a/src/lib/dhcpsrv/mysql_lease_mgr.h b/src/lib/dhcpsrv/mysql_lease_mgr.h index c650d3ec1a..e23fcc6e53 100644 --- a/src/lib/dhcpsrv/mysql_lease_mgr.h +++ b/src/lib/dhcpsrv/mysql_lease_mgr.h @@ -386,14 +386,18 @@ public: /// @param secs Number of seconds since expiration of leases before /// they can be removed. Leases which have expired later than this /// time will not be deleted. - virtual void deleteExpiredReclaimedLeases4(const uint32_t secs); + /// + /// @return Number of leases deleted. + virtual uint64_t deleteExpiredReclaimedLeases4(const uint32_t secs); /// @brief Deletes all expired-reclaimed DHCPv6 leases. /// /// @param secs Number of seconds since expiration of leases before /// they can be removed. Leases which have expired later than this /// time will not be deleted. - virtual void deleteExpiredReclaimedLeases6(const uint32_t secs); + /// + /// @return Number of leases deleted. + virtual uint64_t deleteExpiredReclaimedLeases6(const uint32_t secs); /// @brief Return backend type /// diff --git a/src/lib/dhcpsrv/pgsql_lease_mgr.cc b/src/lib/dhcpsrv/pgsql_lease_mgr.cc index 1db8ecb026..4d30b4539b 100644 --- a/src/lib/dhcpsrv/pgsql_lease_mgr.cc +++ b/src/lib/dhcpsrv/pgsql_lease_mgr.cc @@ -1507,13 +1507,13 @@ PgSqlLeaseMgr::deleteLease(const isc::asiolink::IOAddress& addr) { return (deleteLeaseCommon(DELETE_LEASE6, bind_array)); } -void +uint64_t PgSqlLeaseMgr::deleteExpiredReclaimedLeases4(const uint32_t) { isc_throw(NotImplemented, "PgSqlLeaseMgr::deleteExpiredReclaimedLeases4" " is not implemented"); } -void +uint64_t PgSqlLeaseMgr::deleteExpiredReclaimedLeases6(const uint32_t) { isc_throw(NotImplemented, "PgSqlLeaseMgr::deleteExpiredReclaimedLeases6" " is not implemented"); diff --git a/src/lib/dhcpsrv/pgsql_lease_mgr.h b/src/lib/dhcpsrv/pgsql_lease_mgr.h index 9f6ffbe553..afaaf9325e 100644 --- a/src/lib/dhcpsrv/pgsql_lease_mgr.h +++ b/src/lib/dhcpsrv/pgsql_lease_mgr.h @@ -391,14 +391,18 @@ public: /// @param secs Number of seconds since expiration of leases before /// they can be removed. Leases which have expired later than this /// time will not be deleted. - virtual void deleteExpiredReclaimedLeases4(const uint32_t secs); + /// + /// @return Number of leases deleted. + virtual uint64_t deleteExpiredReclaimedLeases4(const uint32_t secs); /// @brief Deletes all expired-reclaimed DHCPv6 leases. /// /// @param secs Number of seconds since expiration of leases before /// they can be removed. Leases which have expired later than this /// time will not be deleted. - virtual void deleteExpiredReclaimedLeases6(const uint32_t secs); + /// + /// @return Number of leases deleted. + virtual uint64_t deleteExpiredReclaimedLeases6(const uint32_t secs); /// @brief Return backend type /// diff --git a/src/lib/dhcpsrv/tests/generic_lease_mgr_unittest.cc b/src/lib/dhcpsrv/tests/generic_lease_mgr_unittest.cc index cdd5940cb6..43d2b7c98b 100644 --- a/src/lib/dhcpsrv/tests/generic_lease_mgr_unittest.cc +++ b/src/lib/dhcpsrv/tests/generic_lease_mgr_unittest.cc @@ -1924,7 +1924,11 @@ GenericLeaseMgrTest::testDeleteExpiredReclaimedLeases4() { // Delete expired and reclaimed leases which have expired earlier than // 15 seconds ago. This should affect leases with index 2, 3, 4 etc. - ASSERT_NO_THROW(lmptr_->deleteExpiredReclaimedLeases4(lease_affinity_time)); + uint64_t deleted_num; + uint64_t should_delete_num = 0; + ASSERT_NO_THROW( + deleted_num = lmptr_->deleteExpiredReclaimedLeases4(lease_affinity_time) + ); for (size_t i = 0; i < leases.size(); ++i) { // Obtain lease from the server. @@ -1936,6 +1940,7 @@ GenericLeaseMgrTest::testDeleteExpiredReclaimedLeases4() { ((leases[i]->getExpirationTime() + lease_affinity_time) < current_time)) { EXPECT_FALSE(lease) << "The following lease should have been" " deleted: " << leases[i]->toText(); + ++should_delete_num; } else { // If the lease is not reclaimed or it has expired less than @@ -1944,10 +1949,16 @@ GenericLeaseMgrTest::testDeleteExpiredReclaimedLeases4() { " deleted: " << leases[i]->toText(); } } + // Check that the number of leases deleted is correct. + EXPECT_EQ(deleted_num, should_delete_num); // Make sure we can make another attempt, when there are no more leases // to be deleted. - ASSERT_NO_THROW(lmptr_->deleteExpiredReclaimedLeases4(lease_affinity_time)); + ASSERT_NO_THROW( + deleted_num = lmptr_->deleteExpiredReclaimedLeases4(lease_affinity_time) + ); + // No lease should have been deleted. + EXPECT_EQ(0, deleted_num); // Reopen the database. This to ensure that the leases have been deleted // from the persistent storage. @@ -2013,7 +2024,11 @@ GenericLeaseMgrTest::testDeleteExpiredReclaimedLeases6() { // Delete expired and reclaimed leases which have expired earlier than // 15 seconds ago. This should affect leases with index 2, 3, 4 etc. - ASSERT_NO_THROW(lmptr_->deleteExpiredReclaimedLeases6(lease_affinity_time)); + uint64_t deleted_num; + uint64_t should_delete_num = 0; + ASSERT_NO_THROW( + deleted_num = lmptr_->deleteExpiredReclaimedLeases6(lease_affinity_time) + ); for (size_t i = 0; i < leases.size(); ++i) { // Obtain lease from the server. @@ -2025,6 +2040,7 @@ GenericLeaseMgrTest::testDeleteExpiredReclaimedLeases6() { ((leases[i]->getExpirationTime() + lease_affinity_time) < current_time)) { EXPECT_FALSE(lease) << "The following lease should have been" " deleted: " << leases[i]->toText(); + ++should_delete_num; } else { // If the lease is not reclaimed or it has expired less than @@ -2033,10 +2049,16 @@ GenericLeaseMgrTest::testDeleteExpiredReclaimedLeases6() { " deleted: " << leases[i]->toText(); } } + // Check that the number of deleted leases is correct. + EXPECT_EQ(should_delete_num, deleted_num); // Make sure we can make another attempt, when there are no more leases // to be deleted. - ASSERT_NO_THROW(lmptr_->deleteExpiredReclaimedLeases6(lease_affinity_time)); + ASSERT_NO_THROW( + deleted_num = lmptr_->deleteExpiredReclaimedLeases6(lease_affinity_time) + ); + // No lease should have been deleted. + EXPECT_EQ(0, deleted_num); // Reopen the database. This to ensure that the leases have been deleted // from the persistent storage. diff --git a/src/lib/dhcpsrv/tests/lease_mgr_unittest.cc b/src/lib/dhcpsrv/tests/lease_mgr_unittest.cc index 01ff896c2d..6d6777c7ac 100644 --- a/src/lib/dhcpsrv/tests/lease_mgr_unittest.cc +++ b/src/lib/dhcpsrv/tests/lease_mgr_unittest.cc @@ -219,7 +219,7 @@ public: /// @param secs Number of seconds since expiration of leases before /// they can be removed. Leases which have expired later than this /// time will not be deleted. - virtual void deleteExpiredReclaimedLeases4(const uint32_t) { + virtual uint64_t deleteExpiredReclaimedLeases4(const uint32_t) { isc_throw(NotImplemented, "ConcreteLeaseMgr::deleteExpiredReclaimedLeases4" " is not implemented"); } @@ -229,7 +229,7 @@ public: /// @param secs Number of seconds since expiration of leases before /// they can be removed. Leases which have expired later than this /// time will not be deleted. - virtual void deleteExpiredReclaimedLeases6(const uint32_t) { + virtual uint64_t deleteExpiredReclaimedLeases6(const uint32_t) { isc_throw(NotImplemented, "ConcreteLeaseMgr::deleteExpiredReclaimedLeases6" " is not implemented"); }