]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[3965] deleteExpiredReclaimed returns number of deleted leases.
authorMarcin Siodelski <marcin@isc.org>
Thu, 3 Sep 2015 09:35:25 +0000 (11:35 +0200)
committerMarcin Siodelski <marcin@isc.org>
Thu, 3 Sep 2015 09:35:25 +0000 (11:35 +0200)
src/lib/dhcpsrv/lease_mgr.h
src/lib/dhcpsrv/memfile_lease_mgr.cc
src/lib/dhcpsrv/memfile_lease_mgr.h
src/lib/dhcpsrv/mysql_lease_mgr.cc
src/lib/dhcpsrv/mysql_lease_mgr.h
src/lib/dhcpsrv/pgsql_lease_mgr.cc
src/lib/dhcpsrv/pgsql_lease_mgr.h
src/lib/dhcpsrv/tests/generic_lease_mgr_unittest.cc
src/lib/dhcpsrv/tests/lease_mgr_unittest.cc

index 8166c52c2f020013329f83781c4242d65cbd5ace..40edc9513dc972149428653a4cc3eb486d4707f0 100644 (file)
@@ -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
     ///
index a90a0963c9cf3e02abb0c6b03ca36902a416e877..46e06d15c00cfcce7ddeb2fcbf5d612808868deb 100644 (file)
@@ -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<Lease4StorageExpirationIndex, Lease4>(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<Lease6StorageExpirationIndex, Lease6>(secs, V6, storage6_,
-                                                                       lease_file6_);
+    return (deleteExpiredReclaimedLeases<
+            Lease6StorageExpirationIndex, Lease6
+            >(secs, V6, storage6_, lease_file6_));
 }
 
 template<typename IndexType, typename LeaseType, typename StorageType,
          typename LeaseFileType>
-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);
 }
 
 
index 1a78c0b613aa2fc83bef8e4f818816b928b87198..b85b59194cd0f72db089636b4693d8d7e36a5f2a 100644 (file)
@@ -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<typename IndexType, typename LeaseType, typename StorageType,
              typename LeaseFileType>
-    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:
 
index df57b8f1a079996393fd1e4f8d3894603ce9deb9..68f00755b3bd916f7d8d0381a20553ba7f891b7c 100644 (file)
@@ -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");
index c650d3ec1a60c26ed1f561f760663f4e651ba593..e23fcc6e53cb18404087f338005c8994aa176ced 100644 (file)
@@ -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
     ///
index 1db8ecb026630942bb124881e9f10d8f566ae981..4d30b4539b7d0c94ddcca890b1d64fac790d6b4d 100644 (file)
@@ -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");
index 9f6ffbe5539766bf319fb9d519422a98847004f1..afaaf9325ebf80838ebd94b37310796082c07647 100644 (file)
@@ -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
     ///
index cdd5940cb681b7da101fef9fdc7f9bfe9684022c..43d2b7c98bb0d334c489873b0395fb8af5c1cd90 100644 (file)
@@ -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.
index 01ff896c2d7c28e3404d1037852884b4a7147541..6d6777c7ac57993fc23395dbe54413e799f8094e 100644 (file)
@@ -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");
     }