Chris Lu 5 лет назад
Родитель
Сommit
6b08db65b0
1 измененных файлов с 6 добавлено и 1 удалено
  1. 6 1
      weed/topology/data_node_ec.go

+ 6 - 1
weed/topology/data_node_ec.go

@@ -22,26 +22,31 @@ func (dn *DataNode) UpdateEcShards(actualShards []*erasure_coding.EcVolumeInfo)
 	}
 
 	// found out the newShards and deletedShards
+	var newShardCount, deletedShardCount int
 	dn.ecShardsLock.RLock()
 	for vid, ecShards := range dn.ecShards {
 		if actualEcShards, ok := actualEcShardMap[vid]; !ok {
 			// dn registered ec shards not found in the new set of ec shards
 			deletedShards = append(deletedShards, ecShards)
+			deletedShardCount += ecShards.ShardIdCount()
 		} else {
 			// found, but maybe the actual shard could be missing
 			a := actualEcShards.Minus(ecShards)
 			if a.ShardIdCount() > 0 {
 				newShards = append(newShards, a)
+				newShardCount += a.ShardIdCount()
 			}
 			d := ecShards.Minus(actualEcShards)
 			if d.ShardIdCount() > 0 {
 				deletedShards = append(deletedShards, d)
+				deletedShardCount += d.ShardIdCount()
 			}
 		}
 	}
 	for _, ecShards := range actualShards {
 		if _, found := dn.ecShards[ecShards.VolumeId]; !found {
 			newShards = append(newShards, ecShards)
+			newShardCount += ecShards.ShardIdCount()
 		}
 	}
 	dn.ecShardsLock.RUnlock()
@@ -50,7 +55,7 @@ func (dn *DataNode) UpdateEcShards(actualShards []*erasure_coding.EcVolumeInfo)
 		// if changed, set to the new ec shard map
 		dn.ecShardsLock.Lock()
 		dn.ecShards = actualEcShardMap
-		dn.UpAdjustEcShardCountDelta(int64(len(newShards) - len(deletedShards)))
+		dn.UpAdjustEcShardCountDelta(int64(newShardCount - deletedShardCount))
 		dn.ecShardsLock.Unlock()
 	}