[core] Add the node's type in the UID computation

This prevents getting the same UID for two nodes which are of different
types but have an identical list of attributes.
This commit is contained in:
Candice Bentéjac 2023-06-07 11:28:49 +02:00
parent f80e688e64
commit 55d30ee1e3

View file

@ -685,11 +685,15 @@ class BaseNode(BaseObject):
pass
def _computeUids(self):
""" Compute node uids by combining associated attributes' uids. """
""" Compute node UIDs by combining associated attributes' UIDs. """
# Get all the attributes associated to a given UID index, specified in node descriptions with "uid=[index]"
# For now, the only index that is used is "0", so there will be a single iteration of the loop below
for uidIndex, associatedAttributes in self.attributesPerUid.items():
# uid is computed by hashing the sorted list of tuple (name, value) of all attributes impacting this uid
# UID is computed by hashing the sorted list of tuple (name, value) of all attributes impacting this UID
uidAttributes = [(a.getName(), a.uid(uidIndex)) for a in associatedAttributes if a.enabled and a.value != a.uidIgnoreValue]
uidAttributes.sort()
# Adding the node type prevents ending up with two identical UIDs for different node types that have the exact same list of attributes
uidAttributes.append(self.nodeType)
self._uids[uidIndex] = hashValue(uidAttributes)
def _buildCmdVars(self):