aboutsummaryrefslogtreecommitdiff
path: root/weed/worker/tasks/balance/balance_task.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/worker/tasks/balance/balance_task.go')
-rw-r--r--weed/worker/tasks/balance/balance_task.go31
1 files changed, 25 insertions, 6 deletions
diff --git a/weed/worker/tasks/balance/balance_task.go b/weed/worker/tasks/balance/balance_task.go
index 439a406a4..8daafde97 100644
--- a/weed/worker/tasks/balance/balance_task.go
+++ b/weed/worker/tasks/balance/balance_task.go
@@ -48,21 +48,32 @@ func (t *BalanceTask) Execute(ctx context.Context, params *worker_pb.TaskParams)
return fmt.Errorf("balance parameters are required")
}
- // Get planned destination
- destNode := balanceParams.DestNode
+ // Get source and destination from unified arrays
+ if len(params.Sources) == 0 {
+ return fmt.Errorf("source is required for balance task")
+ }
+ if len(params.Targets) == 0 {
+ return fmt.Errorf("target is required for balance task")
+ }
+
+ sourceNode := params.Sources[0].Node
+ destNode := params.Targets[0].Node
+ if sourceNode == "" {
+ return fmt.Errorf("source node is required for balance task")
+ }
if destNode == "" {
return fmt.Errorf("destination node is required for balance task")
}
t.GetLogger().WithFields(map[string]interface{}{
"volume_id": t.volumeID,
- "source": t.server,
+ "source": sourceNode,
"destination": destNode,
"collection": t.collection,
}).Info("Starting balance task - moving volume")
- sourceServer := pb.ServerAddress(t.server)
+ sourceServer := pb.ServerAddress(sourceNode)
targetServer := pb.ServerAddress(destNode)
volumeId := needle.VolumeId(t.volumeID)
@@ -130,8 +141,16 @@ func (t *BalanceTask) Validate(params *worker_pb.TaskParams) error {
return fmt.Errorf("volume ID mismatch: expected %d, got %d", t.volumeID, params.VolumeId)
}
- if params.Server != t.server {
- return fmt.Errorf("source server mismatch: expected %s, got %s", t.server, params.Server)
+ // Validate that at least one source matches our server
+ found := false
+ for _, source := range params.Sources {
+ if source.Node == t.server {
+ found = true
+ break
+ }
+ }
+ if !found {
+ return fmt.Errorf("no source matches expected server %s", t.server)
}
return nil