From ad4b726b33efe6ec398f36b093a5d811002a1c2b Mon Sep 17 00:00:00 2001 From: Jay J Wylie Date: Wed, 15 May 2013 15:02:03 -0700 Subject: [PATCH] Fix to store routing plan to correctly track zone-primaries per-node. --- .../voldemort/routing/StoreRoutingPlan.java | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/java/voldemort/routing/StoreRoutingPlan.java b/src/java/voldemort/routing/StoreRoutingPlan.java index a713e10b46..26129b8cb4 100644 --- a/src/java/voldemort/routing/StoreRoutingPlan.java +++ b/src/java/voldemort/routing/StoreRoutingPlan.java @@ -65,13 +65,20 @@ public StoreRoutingPlan(Cluster cluster, StoreDefinition storeDefinition) { List naryPartitionIds = getReplicatingPartitionList(masterPartitionId); for(int naryPartitionId: naryPartitionIds) { int naryNodeId = getNodeIdForPartitionId(naryPartitionId); - nodeIdToNaryPartitionMap.get(naryNodeId).add(masterPartitionId); - int naryZoneId = cluster.getNodeById(naryNodeId).getZoneId(); - if(getZoneNaryForNodesPartition(naryZoneId, naryNodeId, naryPartitionId) == 0) { - nodeIdToZonePrimaryMap.get(naryNodeId).add(masterPartitionId); + this.nodeIdToNaryPartitionMap.get(naryNodeId).add(masterPartitionId); + } + } + for(int nodeId: cluster.getNodeIds()) { + int naryZoneId = cluster.getNodeById(nodeId).getZoneId(); + List naryPartitionIds = this.nodeIdToNaryPartitionMap.get(nodeId); + List zoneNAries = this.nodeIdToZonePrimaryMap.get(nodeId); + for(int naryPartitionId: naryPartitionIds) { + if(getZoneNaryForNodesPartition(naryZoneId, nodeId, naryPartitionId) == 0) { + zoneNAries.add(naryPartitionId); } } } + } public Cluster getCluster() { @@ -307,9 +314,9 @@ public int getZoneNaryForNodesPartition(int zoneId, int nodeId, int partitionId) // zone if(replicatingNode.getZoneId() == zoneId) { zoneNAry++; - if(replicatingNode.getId() == nodeId) { - return zoneNAry; - } + } + if(replicatingNodeId == nodeId) { + return zoneNAry; } } if(zoneNAry > 0) {