fix cluster stubs: deterministic fallback, payload forwarding, and handler guards
CI / build (pull_request) Successful in 40s

- Replace non-deterministic map range fallback with sorted node selection in PlaceActor and RebalanceShards
- Add Body field to MessagePayload to preserve message data during cross-node routing
- Forward actual message body in route_message handler instead of discarding it
- Add self-message guard to route_message handler to prevent loops
- Add nil guard for shardMap in handleRebalanceRequest
- Add self-message guard to handleRebalanceRequest in DistributedVM
This commit is contained in:
2026-07-30 18:23:48 +02:00
parent 70eddbc533
commit 443425d6e3
3 changed files with 32 additions and 12 deletions
+8 -4
View File
@@ -195,10 +195,12 @@ func (chp *ConsistentHashPlacement) PlaceActor(actorID string, shardMap *ShardMa
node := ring.GetNode(actorID)
if node == "" {
sortedNodeIDs := make([]string, 0, len(nodes))
for nodeID := range nodes {
return nodeID, nil
sortedNodeIDs = append(sortedNodeIDs, nodeID)
}
return "", fmt.Errorf("failed to place actor")
sort.Strings(sortedNodeIDs)
return sortedNodeIDs[0], nil
}
return node, nil
@@ -231,10 +233,12 @@ func (chp *ConsistentHashPlacement) RebalanceShards(currentMap *ShardMap, nodes
for shardID := range currentMap.Shards {
primaryNode := ring.GetNode(fmt.Sprintf("shard-%d", shardID))
if primaryNode == "" {
sortedNodeIDs := make([]string, 0, len(nodes))
for nodeID := range nodes {
primaryNode = nodeID
break
sortedNodeIDs = append(sortedNodeIDs, nodeID)
}
sort.Strings(sortedNodeIDs)
primaryNode = sortedNodeIDs[0]
}
var replicaNodes []string