MHSanaei
98c9ba1f91
fix(nodes): extend duplicate-GUID hardening to master collisions, IP attribution, and a heartbeat warning
...
Builds on the node-vs-node fix: a node's GUID is now also treated as ambiguous when it equals the master's own panelGuid (a node cloned from the master), so the master's local clients and that node can't merge. Centralized as ambiguousNodeGuids(nodes, selfGuid) + effectiveNodeKey(node).
Applied the same node-unique fallback to the GUID-keyed IP attribution that #4983 added but the prior commit left collapsing: MergeClientIpsByGuid remaps a cloned node's own subtree to its node-unique key, nodeGuidNameMap resolves names by that key, and node deletion purges both keys. Added a throttled heartbeat warning so the operator is told to regenerate a duplicate panelGuid. Tests cover master-collision, effectiveNodeKey, and the IP remap.
2026-06-22 15:08:02 +02:00
..
2026-06-21 17:45:33 +02:00
2026-06-17 17:24:16 +02:00
2026-06-13 11:48:02 +02:00
2026-06-10 15:19:22 +02:00
2026-06-22 02:48:58 +02:00
2026-06-20 10:35:46 +02:00
2026-06-10 15:19:22 +02:00
2026-06-10 15:19:22 +02:00
2026-06-12 01:22:15 +02:00
2026-06-20 10:35:46 +02:00
2026-06-17 15:55:56 +02:00
2026-06-10 15:19:22 +02:00
2026-06-14 20:57:14 +02:00
2026-06-11 12:04:02 +02:00
2026-06-17 15:55:56 +02:00
2026-06-12 15:30:41 +02:00
2026-06-20 10:35:46 +02:00
2026-06-10 15:19:22 +02:00
2026-06-10 15:19:22 +02:00
2026-06-11 15:14:08 +02:00
2026-06-10 15:19:22 +02:00
2026-06-21 23:06:10 +02:00
2026-06-10 15:19:22 +02:00
2026-06-10 15:19:22 +02:00
2026-06-22 00:22:28 +02:00
2026-06-10 15:19:22 +02:00
2026-06-10 23:01:33 +02:00
2026-06-10 15:19:22 +02:00
2026-06-22 00:22:28 +02:00
2026-06-17 12:06:55 +02:00
2026-06-17 12:06:55 +02:00
2026-06-20 10:35:46 +02:00
2026-06-10 15:19:22 +02:00
2026-06-10 15:19:22 +02:00
2026-06-10 15:19:22 +02:00
2026-06-11 14:05:02 +02:00
2026-06-22 00:22:28 +02:00
2026-06-12 13:00:04 +02:00
2026-06-15 15:17:03 +02:00
2026-06-15 15:17:03 +02:00
2026-06-12 17:58:45 +02:00
2026-06-22 15:08:02 +02:00
2026-06-22 15:08:02 +02:00
2026-06-14 23:10:52 +02:00
2026-06-22 15:08:02 +02:00
2026-06-11 12:04:02 +02:00
2026-06-11 12:04:02 +02:00
2026-06-12 12:03:22 +02:00
2026-06-10 15:19:22 +02:00
2026-06-11 15:14:08 +02:00
2026-06-22 00:22:28 +02:00
2026-06-11 20:24:15 +02:00
2026-06-12 12:03:22 +02:00
2026-06-21 02:34:57 +02:00
2026-06-21 17:29:22 +02:00
2026-06-20 10:35:46 +02:00
2026-06-15 15:46:19 +02:00
2026-06-22 00:22:28 +02:00
2026-06-20 01:09:53 +02:00
2026-06-21 17:27:53 +02:00
2026-06-16 12:19:33 +02:00
2026-06-16 12:19:33 +02:00
2026-06-16 12:19:33 +02:00
2026-06-11 20:24:15 +02:00
2026-06-22 15:08:02 +02:00
2026-06-10 15:19:22 +02:00
2026-06-11 20:48:26 +02:00
2026-06-10 15:19:22 +02:00
2026-06-22 15:08:02 +02:00
2026-06-22 15:08:02 +02:00
2026-06-10 15:19:22 +02:00
2026-06-10 15:19:22 +02:00
2026-06-15 17:21:06 +02:00
2026-06-15 17:21:06 +02:00
2026-06-20 10:35:46 +02:00
2026-06-10 15:19:22 +02:00
2026-06-20 00:37:35 +02:00
2026-06-21 19:51:18 +02:00
2026-06-16 12:19:33 +02:00
2026-06-16 12:19:33 +02:00
2026-06-15 21:03:41 +02:00
2026-06-21 17:45:33 +02:00
2026-06-17 14:11:35 +02:00
2026-06-10 15:19:22 +02:00
2026-06-20 10:35:46 +02:00
2026-06-10 15:19:22 +02:00
2026-06-17 15:55:47 +02:00
2026-06-10 15:19:22 +02:00
2026-06-12 17:58:45 +02:00
2026-06-15 21:03:41 +02:00
2026-06-20 01:18:31 +02:00
2026-06-20 01:18:31 +02:00
2026-06-10 15:19:22 +02:00
2026-06-17 17:24:16 +02:00
2026-06-15 00:43:49 +02:00
2026-06-15 00:43:49 +02:00