server do not retry SNMP requests on agent proxy transport; default SNMP timeout...
authorVictor Kirhenshtein <victor@netxms.org>
Sat, 12 Dec 2015 18:33:43 +0000 (20:33 +0200)
committerVictor Kirhenshtein <victor@netxms.org>
Sat, 12 Dec 2015 18:33:43 +0000 (20:33 +0200)
include/nxsnmp.h
sql/setup.in
src/agent/core/nxagentd.cpp
src/server/core/interface.cpp
src/server/core/main.cpp
src/server/libnxsrv/snmpproxy.cpp
src/snmp/libnxsnmp/transport.cpp
src/snmp/libnxsnmp/util.cpp

index 8b54487..bba373e 100644 (file)
@@ -619,6 +619,7 @@ protected:
        SNMP_Engine *m_contextEngine;
        bool m_enableEngineIdAutoupdate;
        bool m_updatePeerOnRecv;
+       bool m_reliable;
        int m_snmpVersion;
 
 public:
index 73d1825..94fdd50 100644 (file)
@@ -135,7 +135,7 @@ INSERT INTO config (var_name,var_value,is_visible,need_server_restart) VALUES ('
 INSERT INTO config (var_name,var_value,is_visible,need_server_restart) VALUES ('SMTPRetryCount','1',1,0);
 INSERT INTO config (var_name,var_value,is_visible,need_server_restart) VALUES ('SNMPPorts','161',1,0);
 INSERT INTO config (var_name,var_value,is_visible,need_server_restart) VALUES ('SMTPServer','localhost',1,0);
-INSERT INTO config (var_name,var_value,is_visible,need_server_restart) VALUES ('SNMPRequestTimeout','2000',1,1);
+INSERT INTO config (var_name,var_value,is_visible,need_server_restart) VALUES ('SNMPRequestTimeout','1500',1,1);
 INSERT INTO config (var_name,var_value,is_visible,need_server_restart) VALUES ('SNMPTrapLogRetentionTime','90',1,0);
 INSERT INTO config (var_name,var_value,is_visible,need_server_restart) VALUES ('SNMPTrapPort','162',1,1);
 INSERT INTO config (var_name,var_value,is_visible,need_server_restart) VALUES ('StatusCalculationAlgorithm','1',1,1);
index 8540068..3abaa90 100644 (file)
@@ -151,7 +151,7 @@ UINT16 g_wListenPort = AGENT_LISTEN_PORT;
 ObjectArray<ServerInfo> g_serverList(8, 8, true);
 UINT32 g_dwServerCount = 0;
 UINT32 g_dwExecTimeout = 2000;     // External process execution timeout in milliseconds
-UINT32 g_dwSNMPTimeout = 3000;
+UINT32 g_dwSNMPTimeout = 1500;
 time_t g_tmAgentStartTime;
 UINT32 g_dwStartupDelay = 0;
 UINT32 g_dwMaxSessions = 32;
index e2cfb9c..bc3971a 100644 (file)
@@ -791,9 +791,10 @@ void Interface::icmpStatusPoll(UINT32 rqId, UINT32 nodeIcmpProxy, Cluster *clust
                }
             }
 
+            DbgPrintf(7, _T("Interface::StatusPoll(%d,%s): response time %d"), m_id, m_name, (int)value);
                                if (value >= 0)
                                {
-               m_pingTime = value;
+               m_pingTime = (UINT32)value;
                                        if (value < 10000)
                                        {
                                                *adminState = IF_ADMIN_STATE_UP;
index f245a7c..b7031f9 100644 (file)
@@ -334,7 +334,7 @@ static void LoadGlobalConfig()
        g_thresholdRepeatInterval = ConfigReadInt(_T("ThresholdRepeatInterval"), 0);
        g_requiredPolls = ConfigReadInt(_T("PollCountForStatusChange"), 1);
 
-       UINT32 snmpTimeout = ConfigReadInt(_T("SNMPRequestTimeout"), 2000);
+       UINT32 snmpTimeout = ConfigReadInt(_T("SNMPRequestTimeout"), 1500);
    SnmpSetDefaultTimeout(snmpTimeout);
 }
 
index b0a8923..387b495 100644 (file)
@@ -28,6 +28,7 @@
  */
 SNMP_ProxyTransport::SNMP_ProxyTransport(AgentConnection *conn, const InetAddress& ipAddr, WORD port)
 {
+   m_reliable = true;   // no need for retries on server side, agent will do retry if needed
        m_agentConnection = conn;
        m_ipAddr = ipAddr;
        m_port = port;
index 0fbb239..bac7e41 100644 (file)
@@ -53,6 +53,7 @@ SNMP_Transport::SNMP_Transport()
        m_securityContext = NULL;
        m_enableEngineIdAutoupdate = false;
        m_updatePeerOnRecv = false;
+       m_reliable = false;
        m_snmpVersion = SNMP_VERSION_2C;
 }
 
@@ -105,6 +106,8 @@ UINT32 SNMP_Transport::doRequest(SNMP_PDU *request, SNMP_PDU **response, UINT32
                }
        }
 
+       if (m_reliable)
+          numRetries = 1;   // Don't do retry on reliable transport
    while(--numRetries >= 0)
    {
                int timeSyncRetries = 3;
index 6feebfd..a848e8a 100644 (file)
@@ -55,7 +55,7 @@ void LIBNXSNMP_EXPORTABLE SnmpSetMessageIds(DWORD msgParseError, DWORD msgTypeEr
 /**
  * Default timeout for utility finctions
  */
-static UINT32 s_snmpTimeout = 2000;
+static UINT32 s_snmpTimeout = 1500;
 
 /**
  * Set SNMP timeout