Give the ScrubVolume() RPC an option to flag found broken volumes as read-only. (#8360)
* Give the `ScrubVolume()` RPC an option to flag found broken volumes as read-only. Also exposes this option in the shell `volume.scrub` command. * Remove redundant test in `TestVolumeMarkReadonlyWritableErrorPaths`. 417051bb slightly rearranges the logic for `VolumeMarkReadonly()` and `VolumeMarkWritable()`, so calling them for invalid volume IDs will actually yield that error, instead of checking maintnenance mode first.
This commit is contained in:
@@ -1,18 +1,19 @@
|
||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||
// versions:
|
||||
// protoc-gen-go v1.36.6
|
||||
// protoc v6.33.4
|
||||
// protoc-gen-go v1.36.6
|
||||
// protoc v6.33.4
|
||||
// source: volume_server.proto
|
||||
|
||||
package volume_server_pb
|
||||
|
||||
import (
|
||||
remote_pb "github.com/seaweedfs/seaweedfs/weed/pb/remote_pb"
|
||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||
reflect "reflect"
|
||||
sync "sync"
|
||||
unsafe "unsafe"
|
||||
|
||||
remote_pb "github.com/seaweedfs/seaweedfs/weed/pb/remote_pb"
|
||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -5578,9 +5579,10 @@ type ScrubVolumeRequest struct {
|
||||
state protoimpl.MessageState `protogen:"open.v1"`
|
||||
Mode VolumeScrubMode `protobuf:"varint,1,opt,name=mode,proto3,enum=volume_server_pb.VolumeScrubMode" json:"mode,omitempty"`
|
||||
// optional list of volume IDs to scrub. if empty, all volumes for the server are scrubbed.
|
||||
VolumeIds []uint32 `protobuf:"varint,2,rep,packed,name=volume_ids,json=volumeIds,proto3" json:"volume_ids,omitempty"`
|
||||
unknownFields protoimpl.UnknownFields
|
||||
sizeCache protoimpl.SizeCache
|
||||
VolumeIds []uint32 `protobuf:"varint,2,rep,packed,name=volume_ids,json=volumeIds,proto3" json:"volume_ids,omitempty"`
|
||||
MarkBrokenVolumesReadonly bool `protobuf:"varint,3,opt,name=mark_broken_volumes_readonly,json=markBrokenVolumesReadonly,proto3" json:"mark_broken_volumes_readonly,omitempty"`
|
||||
unknownFields protoimpl.UnknownFields
|
||||
sizeCache protoimpl.SizeCache
|
||||
}
|
||||
|
||||
func (x *ScrubVolumeRequest) Reset() {
|
||||
@@ -5627,6 +5629,13 @@ func (x *ScrubVolumeRequest) GetVolumeIds() []uint32 {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *ScrubVolumeRequest) GetMarkBrokenVolumesReadonly() bool {
|
||||
if x != nil {
|
||||
return x.MarkBrokenVolumesReadonly
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
type ScrubVolumeResponse struct {
|
||||
state protoimpl.MessageState `protogen:"open.v1"`
|
||||
TotalVolumes uint64 `protobuf:"varint,1,opt,name=total_volumes,json=totalVolumes,proto3" json:"total_volumes,omitempty"`
|
||||
@@ -7146,11 +7155,12 @@ const file_volume_server_proto_rawDesc = "" +
|
||||
"public_url\x18\x02 \x01(\tR\tpublicUrl\x12\x1b\n" +
|
||||
"\tgrpc_port\x18\x03 \x01(\x05R\bgrpcPort\"2\n" +
|
||||
"\x1bFetchAndWriteNeedleResponse\x12\x13\n" +
|
||||
"\x05e_tag\x18\x01 \x01(\tR\x04eTag\"j\n" +
|
||||
"\x05e_tag\x18\x01 \x01(\tR\x04eTag\"\xab\x01\n" +
|
||||
"\x12ScrubVolumeRequest\x125\n" +
|
||||
"\x04mode\x18\x01 \x01(\x0e2!.volume_server_pb.VolumeScrubModeR\x04mode\x12\x1d\n" +
|
||||
"\n" +
|
||||
"volume_ids\x18\x02 \x03(\rR\tvolumeIds\"\xa1\x01\n" +
|
||||
"volume_ids\x18\x02 \x03(\rR\tvolumeIds\x12?\n" +
|
||||
"\x1cmark_broken_volumes_readonly\x18\x03 \x01(\bR\x19markBrokenVolumesReadonly\"\xa1\x01\n" +
|
||||
"\x13ScrubVolumeResponse\x12#\n" +
|
||||
"\rtotal_volumes\x18\x01 \x01(\x04R\ftotalVolumes\x12\x1f\n" +
|
||||
"\vtotal_files\x18\x02 \x01(\x04R\n" +
|
||||
|
||||
Reference in New Issue
Block a user