mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2025-09-23 05:23:35 +08:00
shell: add volume.configure.replication to change replication for a volume
fix https://github.com/chrislusf/seaweedfs/issues/1192
This commit is contained in:
@@ -2,10 +2,12 @@ package weed_server
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/chrislusf/seaweedfs/weed/glog"
|
||||
"github.com/chrislusf/seaweedfs/weed/pb/volume_server_pb"
|
||||
"github.com/chrislusf/seaweedfs/weed/storage/needle"
|
||||
"github.com/chrislusf/seaweedfs/weed/storage/super_block"
|
||||
)
|
||||
|
||||
func (vs *VolumeServer) DeleteCollection(ctx context.Context, req *volume_server_pb.DeleteCollectionRequest) (*volume_server_pb.DeleteCollectionResponse, error) {
|
||||
@@ -96,6 +98,41 @@ func (vs *VolumeServer) VolumeDelete(ctx context.Context, req *volume_server_pb.
|
||||
|
||||
}
|
||||
|
||||
func (vs *VolumeServer) VolumeConfigure(ctx context.Context, req *volume_server_pb.VolumeConfigureRequest) (*volume_server_pb.VolumeConfigureResponse, error) {
|
||||
|
||||
resp := &volume_server_pb.VolumeConfigureResponse{}
|
||||
|
||||
// check replication format
|
||||
if _, err := super_block.NewReplicaPlacementFromString(req.Replication); err != nil {
|
||||
resp.Error = fmt.Sprintf("volume configure replication %v: %v", req, err)
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
// unmount
|
||||
if err := vs.store.UnmountVolume(needle.VolumeId(req.VolumeId)); err != nil {
|
||||
glog.Errorf("volume configure unmount %v: %v", req, err)
|
||||
resp.Error = fmt.Sprintf("volume configure unmount %v: %v", req, err)
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
// modify the volume info file
|
||||
if err := vs.store.ConfigureVolume(needle.VolumeId(req.VolumeId), req.Replication); err != nil {
|
||||
glog.Errorf("volume configure %v: %v", req, err)
|
||||
resp.Error = fmt.Sprintf("volume configure %v: %v", req, err)
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
// mount
|
||||
if err := vs.store.MountVolume(needle.VolumeId(req.VolumeId)); err != nil {
|
||||
glog.Errorf("volume configure mount %v: %v", req, err)
|
||||
resp.Error = fmt.Sprintf("volume configure mount %v: %v", req, err)
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
return resp, nil
|
||||
|
||||
}
|
||||
|
||||
func (vs *VolumeServer) VolumeMarkReadonly(ctx context.Context, req *volume_server_pb.VolumeMarkReadonlyRequest) (*volume_server_pb.VolumeMarkReadonlyResponse, error) {
|
||||
|
||||
resp := &volume_server_pb.VolumeMarkReadonlyResponse{}
|
||||
|
Reference in New Issue
Block a user