diff options
| author | Chris Lu <chris.lu@gmail.com> | 2019-04-20 11:35:20 -0700 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2019-04-20 11:35:23 -0700 |
| commit | 6fc1f53018685e6842c68883af67128fbc0bd522 (patch) | |
| tree | d909cc811e9259a20d4c88f9cc1cd763fde55396 /weed/server/volume_grpc_copy.go | |
| parent | 61720e6f75f4fccadff7f5fab7320b9c9237ae87 (diff) | |
| download | seaweedfs-6fc1f53018685e6842c68883af67128fbc0bd522.tar.xz seaweedfs-6fc1f53018685e6842c68883af67128fbc0bd522.zip | |
shell: add command volume.move
Diffstat (limited to 'weed/server/volume_grpc_copy.go')
| -rw-r--r-- | weed/server/volume_grpc_copy.go | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/weed/server/volume_grpc_copy.go b/weed/server/volume_grpc_copy.go index dbcdb1052..b71398e1f 100644 --- a/weed/server/volume_grpc_copy.go +++ b/weed/server/volume_grpc_copy.go @@ -19,11 +19,7 @@ func (vs *VolumeServer) VolumeCopy(ctx context.Context, req *volume_server_pb.Vo v := vs.store.GetVolume(needle.VolumeId(req.VolumeId)) if v != nil { - // unmount the volume - err := vs.store.UnmountVolume(needle.VolumeId(req.VolumeId)) - if err != nil { - return nil, fmt.Errorf("failed to unmount volume %d: %v", req.VolumeId, err) - } + return nil, fmt.Errorf("volume %d already exists", req.VolumeId) } location := vs.store.FindFreeLocation() @@ -31,8 +27,6 @@ func (vs *VolumeServer) VolumeCopy(ctx context.Context, req *volume_server_pb.Vo return nil, fmt.Errorf("no space left") } - volumeFileName := storage.VolumeFileName(req.Collection, location.Directory, int(req.VolumeId)) - // the master will not start compaction for read-only volumes, so it is safe to just copy files directly // copy .dat and .idx files // read .idx .dat file size and timestamp @@ -40,8 +34,7 @@ func (vs *VolumeServer) VolumeCopy(ctx context.Context, req *volume_server_pb.Vo // send .dat file // confirm size and timestamp var volFileInfoResp *volume_server_pb.ReadVolumeFileStatusResponse - datFileName := volumeFileName + ".dat" - idxFileName := volumeFileName + ".idx" + var volumeFileName, idxFileName, datFileName string err := operation.WithVolumeServerClient(req.SourceDataNode, vs.grpcDialOption, func(client volume_server_pb.VolumeServerClient) error { var err error volFileInfoResp, err = client.ReadVolumeFileStatus(ctx, @@ -52,6 +45,8 @@ func (vs *VolumeServer) VolumeCopy(ctx context.Context, req *volume_server_pb.Vo return fmt.Errorf("read volume file status failed, %v", err) } + volumeFileName = storage.VolumeFileName(volFileInfoResp.Collection, location.Directory, int(req.VolumeId)) + // println("source:", volFileInfoResp.String()) copyFileClient, err := client.CopyFile(ctx, &volume_server_pb.CopyFileRequest{ @@ -64,6 +59,7 @@ func (vs *VolumeServer) VolumeCopy(ctx context.Context, req *volume_server_pb.Vo return fmt.Errorf("failed to start copying volume %d idx file: %v", req.VolumeId, err) } + idxFileName = volumeFileName + ".idx" err = writeToFile(copyFileClient, idxFileName) if err != nil { return fmt.Errorf("failed to copy volume %d idx file: %v", req.VolumeId, err) @@ -79,6 +75,7 @@ func (vs *VolumeServer) VolumeCopy(ctx context.Context, req *volume_server_pb.Vo return fmt.Errorf("failed to start copying volume %d dat file: %v", req.VolumeId, err) } + datFileName = volumeFileName + ".dat" err = writeToFile(copyFileClient, datFileName) if err != nil { return fmt.Errorf("failed to copy volume %d dat file: %v", req.VolumeId, err) @@ -86,9 +83,13 @@ func (vs *VolumeServer) VolumeCopy(ctx context.Context, req *volume_server_pb.Vo return nil }) - if err != nil { - os.Remove(idxFileName) - os.Remove(datFileName) + if err != nil && volumeFileName != "" { + if idxFileName != "" { + os.Remove(idxFileName) + } + if datFileName != "" { + os.Remove(datFileName) + } return nil, err } @@ -168,6 +169,7 @@ func (vs *VolumeServer) ReadVolumeFileStatus(ctx context.Context, req *volume_se resp.IdxFileTimestampSeconds = uint64(modTime.Unix()) resp.FileCount = v.FileCount() resp.CompactionRevision = uint32(v.CompactionRevision) + resp.Collection = v.Collection return resp, nil } |
