Fixed incorrect order of pols for new node. Now firs poll for new node will be config...
authorzev <zev@netxms.org>
Tue, 31 Oct 2017 13:50:28 +0000 (15:50 +0200)
committerzev <zev@netxms.org>
Tue, 31 Oct 2017 13:50:28 +0000 (15:50 +0200)
include/nxcldefs.h
src/server/core/node.cpp
src/server/core/np.cpp
src/server/core/sensor.cpp
src/server/include/nms_objects.h

index 736f106..b7c6089 100644 (file)
 #define DCDF_FORCE_STATUS_POLL             0x0010
 #define DCDF_FORCE_CONFIGURATION_POLL      0x0020
 #define DCDF_CONFIGURATION_POLL_PASSED     0x0040
+#define DCDF_POLL_NEW_NODE                 0x0080
 
 /**
  * Node runtime (dynamic) flags
index d18fbc6..22050a4 100644 (file)
@@ -2522,6 +2522,7 @@ void Node::configurationPoll(PollerInfo *poller, ClientSession *session, UINT32
       sendPollerMsg(rqId, _T("Finished configuration poll for node %s\r\n"), m_name);
       sendPollerMsg(rqId, _T("Node configuration was%schanged after poll\r\n"), (modified != 0) ? _T(" ") : _T(" not "));
 
+      m_runtimeFlags &= ~DCDF_POLL_NEW_NODE;
       m_runtimeFlags |= DCDF_CONFIGURATION_POLL_PASSED;
    }
 
index 2fac7a9..a570561 100644 (file)
@@ -212,6 +212,7 @@ Node NXCORE_EXPORTABLE *PollNewNode(const InetAddress& ipAddr, UINT32 creationFl
       pNode->setMgmtStatus(FALSE);
       pNode->checkSubnetBinding();
    }
+   pNode->setNewNodeFlag();
 
        if (doConfPoll)
    {
index 53a190e..03f3865 100644 (file)
@@ -92,6 +92,8 @@ Sensor *Sensor::createSensor(TCHAR *name, NXCPMessage *request)
                           request->getFieldAsString(VID_DESCRIPTION),
                           request->getFieldAsUInt32(VID_SENSOR_PROXY));
 
+   sensor->setNewNodeFlag();
+
    switch(request->getFieldAsUInt32(VID_COMM_PROTOCOL))
    {
       case COMM_LORAWAN:
@@ -587,6 +589,8 @@ void Sensor::configurationPoll(PollerInfo *poller, ClientSession *session, UINT3
    m_lastConfigurationPoll = time(NULL);
 
    nxlog_debug(5, _T("Finished configuration poll for sensor %s (ID: %d)"), m_name, m_id);
+   m_runtimeFlags &= ~DCDF_POLL_NEW_NODE;
+   m_runtimeFlags |= DCDF_CONFIGURATION_POLL_PASSED;
    pollerUnlock();
 
    if (hasChanges)
@@ -596,7 +600,6 @@ void Sensor::configurationPoll(PollerInfo *poller, ClientSession *session, UINT3
       unlockProperties();
    }
 
-   m_runtimeFlags |= DCDF_CONFIGURATION_POLL_PASSED;
 }
 
 /**
index ac7cbcb..6ba2ffc 100644 (file)
@@ -1151,6 +1151,7 @@ public:
    int getMostCriticalDCIStatus();
 
    UINT32 getPingTime();
+   void setNewNodeFlag() { m_runtimeFlags |= DCDF_POLL_NEW_NODE; }
 
    void statusPollWorkerEntry(PollerInfo *poller);
    void statusPollWorkerEntry(PollerInfo *poller, ClientSession *session, UINT32 rqId);
@@ -1183,6 +1184,7 @@ inline bool DataCollectionTarget::isReadyForInstancePoll()
           (!(m_runtimeFlags & DCDF_QUEUED_FOR_INSTANCE_POLL)) &&
           (!(m_runtimeFlags & DCDF_DELETE_IN_PROGRESS)) &&
           (m_runtimeFlags & DCDF_CONFIGURATION_POLL_PASSED) &&
+          (!(m_runtimeFlags & DCDF_POLL_NEW_NODE)) &&
           ((UINT32)(time(NULL) - m_lastInstancePoll) > g_instancePollingInterval);
 
 }
@@ -1245,6 +1247,7 @@ inline bool DataCollectionTarget::isReadyForStatusPoll()
               (!(m_flags & DCF_DISABLE_STATUS_POLL)) &&
           (!(m_runtimeFlags & DCDF_QUEUED_FOR_STATUS_POLL)) &&
           (!(m_runtimeFlags & DCDF_DELETE_IN_PROGRESS)) &&
+          (!(m_runtimeFlags & DCDF_POLL_NEW_NODE)) &&
           ((UINT32)(time(NULL) - m_lastStatusPoll) > g_dwStatusPollingInterval);
 }
 inline void DataCollectionTarget::lockForStatusPoll()
@@ -2059,6 +2062,7 @@ inline bool Node::isReadyForStatusPoll()
           (!(m_runtimeFlags & DCDF_QUEUED_FOR_STATUS_POLL)) &&
           (!(m_runtimeFlags & DCDF_DELETE_IN_PROGRESS)) &&
                         (getMyCluster() == NULL) &&
+          (!(m_runtimeFlags & DCDF_POLL_NEW_NODE)) &&
           ((UINT32)(time(NULL) - m_lastStatusPoll) > g_dwStatusPollingInterval);
 }
 
@@ -2072,6 +2076,7 @@ inline bool Node::isReadyForDiscoveryPoll()
           (!(m_runtimeFlags & NDF_QUEUED_FOR_DISCOVERY_POLL)) &&
           (!(m_runtimeFlags & DCDF_DELETE_IN_PROGRESS)) &&
           (m_runtimeFlags & DCDF_CONFIGURATION_POLL_PASSED) &&
+          (!(m_runtimeFlags & DCDF_POLL_NEW_NODE)) &&
           ((UINT32)(time(NULL) - m_lastDiscoveryPoll) > g_dwDiscoveryPollingInterval);
 }
 
@@ -2084,6 +2089,7 @@ inline bool Node::isReadyForRoutePoll()
           (!(m_runtimeFlags & NDF_QUEUED_FOR_ROUTE_POLL)) &&
           (!(m_runtimeFlags & DCDF_DELETE_IN_PROGRESS)) &&
           (m_runtimeFlags & DCDF_CONFIGURATION_POLL_PASSED) &&
+          (!(m_runtimeFlags & DCDF_POLL_NEW_NODE)) &&
           ((UINT32)(time(NULL) - m_lastRTUpdate) > g_dwRoutingTableUpdateInterval);
 }
 
@@ -2096,6 +2102,7 @@ inline bool Node::isReadyForTopologyPoll()
           (!(m_runtimeFlags & NDF_QUEUED_FOR_TOPOLOGY_POLL)) &&
           (!(m_runtimeFlags & DCDF_DELETE_IN_PROGRESS)) &&
           (m_runtimeFlags & DCDF_CONFIGURATION_POLL_PASSED) &&
+          (!(m_runtimeFlags & DCDF_POLL_NEW_NODE)) &&
           ((UINT32)(time(NULL) - m_lastTopologyPoll) > g_dwTopologyPollingInterval);
 }