remove deleted nodes from trusted nodes lists (issue #NX-801)
authorVictor Kirhenshtein <victor@netxms.org>
Sun, 26 Nov 2017 19:33:14 +0000 (21:33 +0200)
committerVictor Kirhenshtein <victor@netxms.org>
Sun, 26 Nov 2017 19:33:14 +0000 (21:33 +0200)
ChangeLog
src/server/core/netobj.cpp
src/server/core/netsrv.cpp
src/server/core/node.cpp
src/server/include/nms_objects.h

index 8fea4e3..3c772a3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -31,6 +31,7 @@
 - Fixed issues: 
        NX-662 (New network map element - text box)
        NX-703 (Export/Import actions)
+       NX-801 (Deleted nodes not removed from trusted nodes lists of other objects)
        NX-1045 (Add rack/chassis diagram as dashboard element)
        NX-1142 (Back view for racks)
        NX-1201 (Discovered node links on map should automatically be set to color based on the status of the interfaces shown in connector names)
index 051343e..b88da8f 100644 (file)
@@ -812,7 +812,7 @@ void NetObj::deleteObject(NetObj *initiator)
    unlockProperties();
 
    // Notify all other objects about object deletion
-   DbgPrintf(5, _T("NetObj::deleteObject(): calling onObjectDelete(%d)"), m_id);
+   nxlog_debug(5, _T("NetObj::deleteObject(%s [%d]): calling onObjectDelete()"), m_name, m_id);
        g_idxObjectById.forEach(onObjectDeleteCallback, this);
 
    DbgPrintf(4, _T("Object %d successfully deleted"), m_id);
@@ -821,8 +821,20 @@ void NetObj::deleteObject(NetObj *initiator)
 /**
  * Default handler for object deletion notification
  */
-void NetObj::onObjectDelete(UINT32 dwObjectId)
+void NetObj::onObjectDelete(UINT32 objectId)
 {
+   lockProperties();
+   if (m_trustedNodes != NULL)
+   {
+      int index = m_trustedNodes->indexOf(objectId);
+      if (index != -1)
+      {
+         nxlog_debug(5, _T("NetObj::onObjectDelete(%s [%u]): deleted object %u was listed as trusted node"), m_name, m_id, objectId);
+         m_trustedNodes->remove(index);
+         setModified(MODIFY_COMMON_PROPERTIES);
+      }
+   }
+   unlockProperties();
 }
 
 /**
index 41209fa..9b67f66 100644 (file)
@@ -424,17 +424,19 @@ void NetworkService::statusPoll(ClientSession *session, UINT32 rqId, Node *polle
 /**
  * Handler for object deletion
  */
-void NetworkService::onObjectDelete(UINT32 dwObjectId)
+void NetworkService::onObjectDelete(UINT32 objectId)
 {
        lockProperties();
-   if (dwObjectId == m_pollerNode)
+   if (objectId == m_pollerNode)
    {
       // If deleted object is our poller node, change it to default
       m_pollerNode = 0;
       setModified(MODIFY_OTHER);
-      DbgPrintf(3, _T("Service \"%s\": poller node %d deleted"), m_name, dwObjectId);
+      DbgPrintf(3, _T("NetworkService::onObjectDelete(%s [%u]): poller node %u deleted"), m_name, m_id, objectId);
    }
        unlockProperties();
+
+   NetObj::onObjectDelete(objectId);
 }
 
 /**
index 1043d0c..2bfbb47 100644 (file)
@@ -5319,17 +5319,19 @@ UINT32 Node::checkNetworkService(UINT32 *pdwStatus, const InetAddress& ipAddr, i
 /**
  * Handler for object deletion
  */
-void Node::onObjectDelete(UINT32 dwObjectId)
+void Node::onObjectDelete(UINT32 objectId)
 {
    lockProperties();
-   if (dwObjectId == m_pollerNode)
+   if (objectId == m_pollerNode)
    {
       // If deleted object is our poller node, change it to default
       m_pollerNode = 0;
       setModified(MODIFY_NODE_PROPERTIES);
-      DbgPrintf(3, _T("Node \"%s\": poller node %d deleted"), m_name, dwObjectId);
+      DbgPrintf(3, _T("Node::onObjectDelete(%s [%u]): poller node %u deleted"), m_name, m_id, objectId);
    }
    unlockProperties();
+
+   DataCollectionTarget::onObjectDelete(objectId);
 }
 
 /**
index d384562..740ffb9 100644 (file)
@@ -559,7 +559,7 @@ protected:
    bool executeQueryOnObject(DB_HANDLE hdb, const TCHAR *query) { return ExecuteQueryOnObject(hdb, m_id, query); }
 
    virtual void prepareForDeletion();
-   virtual void onObjectDelete(UINT32 dwObjectId);
+   virtual void onObjectDelete(UINT32 objectId);
 
    virtual void fillMessageInternal(NXCPMessage *msg, UINT32 userId);
    virtual void fillMessageInternalStage2(NXCPMessage *msg, UINT32 userId);
@@ -870,7 +870,7 @@ protected:
        void paeStatusPoll(UINT32 rqId, SNMP_Transport *pTransport, Node *node);
 
 protected:
-   virtual void onObjectDelete(UINT32 dwObjectId);
+   virtual void onObjectDelete(UINT32 objectId);
 
        virtual void fillMessageInternal(NXCPMessage *pMsg, UINT32 userId);
    virtual UINT32 modifyFromMessageInternal(NXCPMessage *pRequest);
@@ -983,7 +983,7 @@ protected:
        int m_requiredPollCount;
    UINT32 m_responseTime;  // Response time from last poll
 
-   virtual void onObjectDelete(UINT32 dwObjectId);
+   virtual void onObjectDelete(UINT32 objectId);
 
    virtual void fillMessageInternal(NXCPMessage *pMsg, UINT32 userId);
    virtual UINT32 modifyFromMessageInternal(NXCPMessage *pRequest);
@@ -1771,7 +1771,7 @@ protected:
    virtual void collectProxyInfo(ProxyInfo *info);
 
    virtual void prepareForDeletion();
-   virtual void onObjectDelete(UINT32 dwObjectId);
+   virtual void onObjectDelete(UINT32 objectId);
 
    virtual void fillMessageInternal(NXCPMessage *pMsg, UINT32 userId);
    virtual UINT32 modifyFromMessageInternal(NXCPMessage *pRequest);
@@ -2638,7 +2638,7 @@ public:
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
    virtual bool loadFromDatabase(DB_HANDLE hdb, UINT32 id);
 
-   virtual void onObjectDelete(UINT32 dwObjectId);
+   virtual void onObjectDelete(UINT32 objectId);
 
    virtual json_t *toJson();