]> granicus.if.org Git - icinga2/commitdiff
DB IDO: Add failover_timeout attribute
authorMichael Friedrich <michael.friedrich@netways.de>
Fri, 15 Aug 2014 15:13:32 +0000 (17:13 +0200)
committerMichael Friedrich <michael.friedrich@netways.de>
Fri, 15 Aug 2014 15:21:12 +0000 (17:21 +0200)
refs #6827

components/db_ido_mysql/idomysqlconnection.cpp
components/db_ido_pgsql/idopgsqlconnection.cpp
doc/4-monitoring-remote-systems.md
doc/6-configuring-icinga-2.md
lib/db_ido/db_ido-type.conf
lib/db_ido/dbconnection.cpp
lib/db_ido/dbconnection.hpp
lib/db_ido/dbconnection.ti

index a7097ad118debc51ef68adb73428b38a39267672..fb6d61fa68d74a79d4205c82e52c990f4cb73350 100644 (file)
@@ -275,7 +275,7 @@ void IdoMysqlConnection::Reconnect(void)
                                Log(LogNotice, "IdoMysqlConnection", "Last update by '" +
                                    endpoint_name + "' was " + Convert::ToString(status_update_age) + "s ago.");
 
-                               if (status_update_age < 60) {
+                               if (status_update_age < GetFailoverTimeout()) {
                                        mysql_close(&m_Connection);
                                        m_Connected = false;
 
index a8378503701babdbc032ddd16cbbb364267af01f..9fe413dfb34361e732dfe474866a6d730c46b91c 100644 (file)
@@ -271,7 +271,7 @@ void IdoPgsqlConnection::Reconnect(void)
                                Log(LogNotice, "IdoPgsqlConnection", "Last update by '" +
                                    endpoint_name + "' was " + Convert::ToString(status_update_age) + "s ago.");
 
-                               if (status_update_age < 60) {
+                               if (status_update_age < GetFailoverTimeout()) {
                                        PQfinish(m_Connection);
                                        m_Connection = NULL;
 
index 8a082842d3fa5ef013c127aea1bcb04bd0f1b39c..e95bd1c0fd7c86547cff7c83bf1b59d8c94d3a42 100644 (file)
@@ -516,7 +516,8 @@ by running the following query:
     (1 Zeile)
 
 This is useful when the cluster connection between endpoints breaks, and prevents
-data duplication in split-brain-scenarios.
+data duplication in split-brain-scenarios. The failover timeout can be set for the
+`failover_timeout` attribute, but not lower than 60 seconds.
 
 
 ### <a id="cluster-scenarios"></a> Cluster Scenarios
index 20399795b9688ec1b65c3d2c73db69cc8c6e7029..97f18a40ce13ad8ea6fbcb6578eb4c969e80c8fd 100644 (file)
@@ -1273,6 +1273,7 @@ Attributes:
   instance\_name  |**Optional.** Unique identifier for the local Icinga 2 instance. Defaults to "default".
   instance\_description|**Optional.** Description for the Icinga 2 instance.
   enable_ha       |**Optional.** Enable the high availability functionality. Only valid in a [cluster setup](#high-availability-db-ido). Defaults to "true".
+  failover_timeout | **Optional.** Set the failover timeout in a [HA cluster](#high-availability-db-ido). Must not be lower than 60s". Defaults to "60s".
   cleanup         |**Optional.** Dictionary with items for historical table cleanup.
   categories      |**Optional.** The types of information that should be written to the database.
 
@@ -1361,6 +1362,7 @@ Attributes:
   instance\_name  |**Optional.** Unique identifier for the local Icinga 2 instance. Defaults to "default".
   instance\_description|**Optional.** Description for the Icinga 2 instance.
   enable_ha       |**Optional.** Enable the high availability functionality. Only valid in a [cluster setup](#high-availability-db-ido). Defaults to "true".
+  failover_timeout | **Optional.** Set the failover timeout in a [HA cluster](#high-availability-db-ido). Must not be lower than 60s". Defaults to "60s".
   cleanup         |**Optional.** Dictionary with items for historical table cleanup.
   categories      |**Optional.** The types of information that should be written to the database.
 
index 780e52c6944d0e388fda999146e0ea39da54e423..b9e6847f1ae2d3652e8d7ee0caeb7d76e7353ff5 100644 (file)
@@ -18,6 +18,8 @@
  ******************************************************************************/
 
 %type DbConnection {
+        %validator "ValidateFailoverTimeout"
+
        %attribute %string "table_prefix",
 
        %attribute %dictionary "cleanup" {
@@ -41,4 +43,6 @@
        %attribute %number "categories",
 
         %attribute %number "enable_ha",
+
+        %attribute %number "failover_timeout",
 }
index 47a59f1b7c2699a4f26155f607f378ad66dd5f21..4c641ab8065dd3b3ea30f214390590ed56d311ae 100644 (file)
 #include "icinga/icingaapplication.hpp"
 #include "icinga/host.hpp"
 #include "icinga/service.hpp"
+#include "config/configcompilercontext.hpp"
 #include "base/dynamictype.hpp"
 #include "base/convert.hpp"
 #include "base/objectlock.hpp"
 #include "base/utility.hpp"
 #include "base/initialize.hpp"
 #include "base/logger_fwd.hpp"
+#include "base/scriptfunction.hpp"
 #include <boost/foreach.hpp>
 
 using namespace icinga;
 
 REGISTER_TYPE(DbConnection);
+REGISTER_SCRIPTFUNCTION(ValidateFailoverTimeout, &DbConnection::ValidateFailoverTimeout);
 
 Timer::Ptr DbConnection::m_ProgramStatusTimer;
 
@@ -410,3 +413,12 @@ void DbConnection::PrepareDatabase(void)
                FillIDCache(type);
        }
 }
+
+void DbConnection::ValidateFailoverTimeout(const String& location, const Dictionary::Ptr& attrs)
+{
+       Value failover_timeout = attrs->Get("failover_timeout");
+       if (failover_timeout < 60) {
+                ConfigCompilerContext::GetInstance()->AddMessage(true, "Validation failed for " +
+                    location + ": Failover timeout minimum is 60s.");
+       }
+}
index b71f920e3153783c49b00c6933ee8c566de86481..e800bfdcbc932cc2bd09a4a171eca7f87ac97561 100644 (file)
@@ -63,6 +63,8 @@ public:
        void SetStatusUpdate(const DbObject::Ptr& dbobj, bool hasupdate);
        bool GetStatusUpdate(const DbObject::Ptr& dbobj) const;
 
+        static void ValidateFailoverTimeout(const String& location, const Dictionary::Ptr& attrs);
+
 protected:
         virtual void OnConfigLoaded(void);
        virtual void Start(void);
index da9f0c327bfa88507fa3d1898ff36c12eb96dc1f..33a1c6821a21600e09bbfdc60c1acf1892470659 100644 (file)
@@ -25,6 +25,10 @@ abstract class DbConnection : DynamicObject
        [config] bool enable_ha {
                default {{{ return true; }}}
        };
+
+       [config] double failover_timeout {
+               default {{{ return 60; }}}
+       };
 };
 
 }