]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[5649] Implemented syncing timeout configuration for HA.
authorMarcin Siodelski <marcin@isc.org>
Thu, 14 Jun 2018 10:05:00 +0000 (12:05 +0200)
committerMarcin Siodelski <marcin@isc.org>
Thu, 14 Jun 2018 10:05:00 +0000 (12:05 +0200)
src/hooks/dhcp/high_availability/ha_config.cc
src/hooks/dhcp/high_availability/ha_config.h
src/hooks/dhcp/high_availability/ha_config_parser.cc
src/hooks/dhcp/high_availability/ha_service.cc
src/hooks/dhcp/high_availability/tests/ha_config_unittest.cc

index 3f73d167e043aeea8640251eb4d8842e88911492..77bd58672d790c350a64e0cea43df64340c50d3f 100644 (file)
@@ -78,8 +78,9 @@ HAConfig::PeerConfig::roleToString(const HAConfig::PeerConfig::Role& role) {
 
 HAConfig::HAConfig()
     : this_server_name_(), ha_mode_(HOT_STANDBY), send_lease_updates_(true),
-      sync_leases_(true), heartbeat_delay_(10), max_response_delay_(60),
-      max_ack_delay_(10), max_unacked_clients_(10), peers_() {
+      sync_leases_(true), sync_timeout_(60000), heartbeat_delay_(10000),
+      max_response_delay_(60000), max_ack_delay_(10000), max_unacked_clients_(10),
+      peers_() {
 }
 
 HAConfig::PeerConfigPtr
index 6d78c96601babcf3316f9d9fc4bb891d46450fd6..12146ad6cfd94c994d9983645fb4381dcb1d22b4 100644 (file)
@@ -252,6 +252,20 @@ public:
         sync_leases_ = sync_leases;
     }
 
+    /// @brief Returns timeout for lease database synchronization.
+    ///
+    /// @return Timeout in milliseconds.
+    long getSyncTimeout() const {
+        return (sync_timeout_);
+    }
+
+    /// @brief Sets new lease database syncing timeout in milliseconds.
+    ///
+    /// @param sync_timeout new timeout for lease database synchornization.
+    void setSyncTimeout(const long sync_timeout) {
+        sync_timeout_ = sync_timeout;
+    }
+
     /// @brief Returns heartbeat delay in milliseconds.
     ///
     /// This value indicates the delay in sending a heartbeat command after
@@ -377,6 +391,7 @@ private:
     HAMode ha_mode_;               ///< Mode of operation.
     bool send_lease_updates_;      ///< Send lease updates to partner?
     bool sync_leases_;             ///< Synchronize databases on startup?
+    long sync_timeout_;            ///< Timeout for syncing lease database (ms)
     uint32_t heartbeat_delay_;     ///< Heartbeat delay in milliseconds.
     uint32_t max_response_delay_;  ///< Max delay in response to heartbeats.
     uint32_t max_ack_delay_;       ///< Maximum DHCP message ack delay.
index 88b8aea6104c8e4dd5640004ad2499eefb13adc7..551f1a9113bc30e7d917dcf173b0ee30585945d1 100644 (file)
@@ -20,6 +20,7 @@ namespace {
 const SimpleDefaults HA_CONFIG_DEFAULTS = {
     { "send-lease-updates", Element::boolean, "true" },
     { "sync-leases", Element::boolean, "true" },
+    { "sync-timeout", Element::integer, "60000" },
     { "heartbeat-delay", Element::integer, "10000" },
     { "max-response-delay", Element::integer, "60000" },
     { "max-ack-delay", Element::integer, "10000" },
@@ -109,6 +110,10 @@ HAConfigParser::parseInternal(const HAConfigPtr& config_storage,
     // Get 'sync-leases'.
     config_storage->setSyncLeases(getBoolean(c, "sync-leases"));
 
+    // Get 'sync-timeout'.
+    uint16_t sync_timeout = getAndValidateInteger<uint16_t>(c, "sync-timeout");
+    config_storage->setSyncTimeout(sync_timeout);
+
     // Get 'heartbeat-delay'.
     uint16_t heartbeat_delay = getAndValidateInteger<uint16_t>(c, "heartbeat-delay");
     config_storage->setHeartbeatDelay(heartbeat_delay);
index 84cbf1511db57c836070bd5db7ad4eeac77c70d9..f4e04cf818434636815c67d606814b6cf0fc4d19 100644 (file)
@@ -1215,7 +1215,7 @@ HAService::asyncSyncLeases(http::HttpClient& http_client,
                 post_sync_action(error_message.empty(),
                                  error_message);
             }
-    });
+    }, HttpClient::RequestTimeout(config_->getSyncTimeout()));
 }
 
 ConstElementPtr
index c84eea4f6072c946f8aa165f30f154571b3ffcad..25dd017bd75d6d7a70abf1e7a1e7d3d59d97ecdd 100644 (file)
@@ -63,6 +63,7 @@ TEST_F(HAConfigTest, configureLoadBalancing) {
         "        \"mode\": \"load-balancing\","
         "        \"send-lease-updates\": false,"
         "        \"sync-leases\": false,"
+        "        \"sync-timeout\": 20000,"
         "        \"heartbeat-delay\": 8,"
         "        \"max-response-delay\": 11,"
         "        \"max-ack-delay\": 5,"
@@ -95,6 +96,7 @@ TEST_F(HAConfigTest, configureLoadBalancing) {
     EXPECT_EQ(HAConfig::LOAD_BALANCING, impl->getConfig()->getHAMode());
     EXPECT_FALSE(impl->getConfig()->amSendingLeaseUpdates());
     EXPECT_FALSE(impl->getConfig()->amSyncingLeases());
+    EXPECT_EQ(20000, impl->getConfig()->getSyncTimeout());
     EXPECT_EQ(8, impl->getConfig()->getHeartbeatDelay());
     EXPECT_EQ(11, impl->getConfig()->getMaxResponseDelay());
     EXPECT_EQ(5, impl->getConfig()->getMaxAckDelay());
@@ -161,6 +163,7 @@ TEST_F(HAConfigTest, configureHotStandby) {
     EXPECT_EQ(HAConfig::HOT_STANDBY, impl->getConfig()->getHAMode());
     EXPECT_TRUE(impl->getConfig()->amSendingLeaseUpdates());
     EXPECT_TRUE(impl->getConfig()->amSyncingLeases());
+    EXPECT_EQ(60000, impl->getConfig()->getSyncTimeout());
     EXPECT_EQ(10000, impl->getConfig()->getHeartbeatDelay());
     EXPECT_EQ(10000, impl->getConfig()->getMaxAckDelay());
     EXPECT_EQ(10, impl->getConfig()->getMaxUnackedClients());