Browse Source

add shell command volume mark writable

pull/1574/head
Konstantin Lebedev 4 years ago
parent
commit
884db215a1
  1. 47
      weed/shell/command_volume_mark.go
  2. 15
      weed/shell/command_volume_move.go

47
weed/shell/command_volume_mark.go

@ -0,0 +1,47 @@
package shell
import (
"flag"
"io"
"github.com/chrislusf/seaweedfs/weed/storage/needle"
)
func init() {
Commands = append(Commands, &commandVolumeMark{})
}
type commandVolumeMark struct {
}
func (c *commandVolumeMark) Name() string {
return "volume.mark"
}
func (c *commandVolumeMark) Help() string {
return `Mark volume readonly from one volume server
volume.mark -node <volume server host:port> -volumeId <volume id> -readonly true
`
}
func (c *commandVolumeMark) Do(args []string, commandEnv *CommandEnv, writer io.Writer) (err error) {
if err = commandEnv.confirmIsLocked(); err != nil {
return
}
volMarkCommand := flag.NewFlagSet(c.Name(), flag.ContinueOnError)
volumeIdInt := volMarkCommand.Int("volumeId", 0, "the volume id")
nodeStr := volMarkCommand.String("node", "", "the volume server <host>:<port>")
writable := volMarkCommand.Bool("writable", true, "volume mark writable/readonly")
if err = volMarkCommand.Parse(args); err != nil {
return nil
}
sourceVolumeServer := *nodeStr
volumeId := needle.VolumeId(*volumeIdInt)
return markVolumeWritable(commandEnv.option.GrpcDialOption, volumeId, sourceVolumeServer, *writable)
}

15
weed/shell/command_volume_move.go

@ -166,3 +166,18 @@ func deleteVolume(grpcDialOption grpc.DialOption, volumeId needle.VolumeId, sour
return deleteErr
})
}
func markVolumeWritable(grpcDialOption grpc.DialOption, volumeId needle.VolumeId, sourceVolumeServer string, writable bool) (err error) {
return operation.WithVolumeServerClient(sourceVolumeServer, grpcDialOption, func(volumeServerClient volume_server_pb.VolumeServerClient) error {
if writable {
_, err = volumeServerClient.VolumeMarkWritable(context.Background(), &volume_server_pb.VolumeMarkWritableRequest{
VolumeId: uint32(volumeId),
})
} else {
_, err = volumeServerClient.VolumeMarkReadonly(context.Background(), &volume_server_pb.VolumeMarkReadonlyRequest{
VolumeId: uint32(volumeId),
})
}
return err
})
}
Loading…
Cancel
Save