Browse Source

erasure coding: add cleanup step if anything goes wrong

pull/2348/head
Chris Lu 3 years ago
parent
commit
6cd1ce8b74
  1. 14
      weed/shell/command_ec_encode.go

14
weed/shell/command_ec_encode.go

@ -203,6 +203,14 @@ func parallelCopyEcShardsFromSource(grpcDialOption grpc.DialOption, targetServer
server.addEcVolumeShards(volumeId, collection, copiedShardIds)
}
}
cleanupFunc := func(server *EcNode, allocatedEcShardIds []uint32) {
if err := unmountEcShards(grpcDialOption, volumeId, pb.NewServerAddressFromDataNode(server.info), allocatedEcShardIds); err != nil {
fmt.Printf("unmount aborted shards %d.%v on %s: %v\n", volumeId, allocatedEcShardIds, server.info.Id, err)
}
if err := sourceServerDeleteEcShards(grpcDialOption, collection, volumeId, pb.NewServerAddressFromDataNode(server.info), allocatedEcShardIds); err != nil {
fmt.Printf("remove aborted shards %d.%v on %s: %v\n", volumeId, allocatedEcShardIds, server.info.Id, err)
}
}
// maybe parallelize
for i, server := range targetServers {
@ -221,6 +229,12 @@ func parallelCopyEcShardsFromSource(grpcDialOption grpc.DialOption, targetServer
close(shardIdChan)
if err != nil {
for i, server := range targetServers {
if len(allocatedEcIds[i]) <= 0 {
continue
}
cleanupFunc(server, allocatedEcIds[i])
}
return nil, err
}

Loading…
Cancel
Save