Browse Source

fix shard assignment merge and mount errors

pull/8465/head
Chris Lu 2 weeks ago
parent
commit
b8d13afb3f
  1. 25
      weed/storage/erasure_coding/shard_distribution.go

25
weed/storage/erasure_coding/shard_distribution.go

@ -2,6 +2,7 @@ package erasure_coding
import ( import (
"context" "context"
"errors"
"fmt" "fmt"
"io" "io"
"os" "os"
@ -112,13 +113,31 @@ func DistributeEcShards(volumeID uint32, collection string, targets []*worker_pb
} }
} }
shardAssignment[target.Node] = assignedShards
existing := shardAssignment[target.Node]
if len(existing) == 0 {
shardAssignment[target.Node] = assignedShards
continue
}
seen := make(map[string]struct{}, len(existing))
for _, shard := range existing {
seen[shard] = struct{}{}
}
for _, shard := range assignedShards {
if _, ok := seen[shard]; ok {
continue
}
seen[shard] = struct{}{}
existing = append(existing, shard)
}
shardAssignment[target.Node] = existing
} }
if len(shardAssignment) == 0 { if len(shardAssignment) == 0 {
return nil, fmt.Errorf("no shard assignments found from planning phase") return nil, fmt.Errorf("no shard assignments found from planning phase")
} }
var mountErrors []error
for destNode, assignedShards := range shardAssignment { for destNode, assignedShards := range shardAssignment {
withFields(log, map[string]interface{}{ withFields(log, map[string]interface{}{
"destination": destNode, "destination": destNode,
@ -215,6 +234,7 @@ func MountEcShards(volumeID uint32, collection string, shardAssignment map[strin
}) })
if err != nil { if err != nil {
mountErrors = append(mountErrors, fmt.Errorf("mount %s shards %v: %w", destNode, shardIds, err))
withFields(log, map[string]interface{}{ withFields(log, map[string]interface{}{
"destination": destNode, "destination": destNode,
"shard_ids": shardIds, "shard_ids": shardIds,
@ -230,6 +250,9 @@ func MountEcShards(volumeID uint32, collection string, shardAssignment map[strin
} }
} }
if len(mountErrors) > 0 {
return errors.Join(mountErrors...)
}
return nil return nil
} }

Loading…
Cancel
Save