Fixed bug with not generated xx_UNREACHABLE events after server restart
authorzev <zev@netxms.org>
Mon, 25 Sep 2017 15:29:43 +0000 (18:29 +0300)
committerzev <zev@netxms.org>
Mon, 25 Sep 2017 16:10:33 +0000 (19:10 +0300)
ChangeLog
include/netxmsdb.h
sql/schema.in
src/server/core/node.cpp
src/server/tools/nxdbmgr/upgrade.cpp

index 0b12003..fcbb6a1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -31,6 +31,7 @@
 - Fixed mail sender address encoding
 - Fixed bug with lost agent connectivity after tunnel reconnect
 - Zone ID now referenced as Zone UIN (unique identification number) to avoid confusion with zone object ID
+- Fixed bug with not generated xx_UNREACHABLE events after server restart
 - NXSL:
        - New class "InetAddress"
        - New attribute "ipAddressList" for class "Interface"
index c7836ed..f70a042 100644 (file)
@@ -23,6 +23,6 @@
 #ifndef _netxmsdb_h
 #define _netxmsdb_h
 
-#define DB_FORMAT_VERSION   503
+#define DB_FORMAT_VERSION   504
 
 #endif
index 5268c21..bf9b672 100644 (file)
@@ -332,6 +332,8 @@ CREATE TABLE nodes
   port_numbering_scheme integer null,
   agent_comp_mode char(1) not null, // compression mode for agent
   capabilities integer null,
+  fail_time_snmp integer not null,
+  fail_time_agent integer not null,
   PRIMARY KEY(id)
 ) TABLE_TYPE;
 
index 52d7e49..6647cf4 100644 (file)
@@ -300,7 +300,7 @@ bool Node::loadFromDatabase(DB_HANDLE hdb, UINT32 dwId)
       _T("last_agent_comm_time,syslog_msg_count,snmp_trap_count,")
       _T("node_type,node_subtype,ssh_login,ssh_password,ssh_proxy,")
       _T("port_rows,port_numbering_scheme,agent_comp_mode,")
-      _T("tunnel_id,lldp_id,capabilities FROM nodes WHERE id=?"));
+      _T("tunnel_id,lldp_id,capabilities,fail_time_snmp,fail_time_agent FROM nodes WHERE id=?"));
    if (hStmt == NULL)
       return false;
 
@@ -406,6 +406,8 @@ bool Node::loadFromDatabase(DB_HANDLE hdb, UINT32 dwId)
    if ((m_lldpNodeId != NULL) && (*m_lldpNodeId == 0))
       safe_free_and_null(m_lldpNodeId);
    m_capabilities = DBGetFieldULong(hResult, 0, 48);
+   m_failTimeSNMP = DBGetFieldLong(hResult, 0, 49);
+   m_failTimeAgent = DBGetFieldLong(hResult, 0, 50);
 
    DBFreeResult(hResult);
    DBFreeStatement(hStmt);
@@ -504,7 +506,7 @@ BOOL Node::saveToDatabase(DB_HANDLE hdb)
          _T("agent_cache_mode=?,snmp_sys_contact=?,snmp_sys_location=?,last_agent_comm_time=?,")
          _T("syslog_msg_count=?,snmp_trap_count=?,node_type=?,node_subtype=?,ssh_login=?,ssh_password=?,")
          _T("ssh_proxy=?,chassis_id=?,port_rows=?,port_numbering_scheme=?,agent_comp_mode=?,tunnel_id=?,")
-         _T("lldp_id=? WHERE id=?"));
+         _T("lldp_id=?,fail_time_snmp=?,fail_time_agent=? WHERE id=?"));
    }
    else
    {
@@ -515,8 +517,8 @@ BOOL Node::saveToDatabase(DB_HANDLE hdb)
         _T("snmp_sys_name,bridge_base_addr,down_since,driver_name,rack_image,rack_position,rack_height,rack_id,boot_time,")
         _T("agent_cache_mode,snmp_sys_contact,snmp_sys_location,last_agent_comm_time,syslog_msg_count,snmp_trap_count,")
         _T("node_type,node_subtype,ssh_login,ssh_password,ssh_proxy,chassis_id,port_rows,port_numbering_scheme,agent_comp_mode,")
-        _T("tunnel_id,lldp_id,id) ")
-        _T("VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"));
+        _T("tunnel_id,lldp_id,fail_time_snmp,fail_time_agent,id) ")
+        _T("VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"));
    }
    if (hStmt == NULL)
    {
@@ -585,7 +587,9 @@ BOOL Node::saveToDatabase(DB_HANDLE hdb)
    DBBind(hStmt, 48, DB_SQLTYPE_VARCHAR, _itot(m_agentCompressionMode, compressionMode, 10), DB_BIND_STATIC, 1);
    DBBind(hStmt, 49, DB_SQLTYPE_VARCHAR, m_tunnelId);
    DBBind(hStmt, 50, DB_SQLTYPE_VARCHAR, m_lldpNodeId, DB_BIND_STATIC);
-   DBBind(hStmt, 51, DB_SQLTYPE_INTEGER, m_id);
+   DBBind(hStmt, 51, DB_SQLTYPE_INTEGER, (LONG)m_failTimeSNMP);
+   DBBind(hStmt, 52, DB_SQLTYPE_INTEGER, (LONG)m_failTimeAgent);
+   DBBind(hStmt, 53, DB_SQLTYPE_INTEGER, m_id);
 
    BOOL bResult = DBExecute(hStmt);
    DBFreeStatement(hStmt);
index 66ac9a9..cbe16ab 100644 (file)
@@ -645,6 +645,20 @@ BOOL moveFlagsFromOldTables(const TCHAR *tableName)
 }
 
 /**
+ * Upgrade from V503 to V504
+ */
+static BOOL H_UpgradeFromV503(int currVersion, int newVersion)
+{
+   static const TCHAR *batch =
+            _T("ALTER TABLE nodes ADD fail_time_snmp integer\n")
+            _T("ALTER TABLE nodes ADD fail_time_agent integer\n")
+            _T("<END>");
+   CHK_EXEC(SQLBatch(batch));
+   CHK_EXEC(SetSchemaVersion(504));
+   return TRUE;
+}
+
+/**
  * Move single flag
  */
 inline void MoveFlag(UINT32 oldVar, UINT32 *newVar, UINT32 oldFlag, UINT32 newFlag)
@@ -12260,6 +12274,7 @@ static struct
    { 500, 501, H_UpgradeFromV500 },
    { 501, 502, H_UpgradeFromV501 },
    { 502, 503, H_UpgradeFromV502 },
+   { 503, 504, H_UpgradeFromV503 },
    { 0, 0, NULL }
 };