fix cluster stubs: deterministic fallback, payload forwarding, and handler guards
CI / build (pull_request) Successful in 40s
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:
+8
-4
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user