diff --git a/seaweed-volume/proto/master.proto b/seaweed-volume/proto/master.proto index 9bc3022417..d1cf3dd342 100644 --- a/seaweed-volume/proto/master.proto +++ b/seaweed-volume/proto/master.proto @@ -59,6 +59,8 @@ service Seaweed { } rpc RaftLeadershipTransfer (RaftLeadershipTransferRequest) returns (RaftLeadershipTransferResponse) { } + rpc ResumeVolumeGrowth (ResumeVolumeGrowthRequest) returns (ResumeVolumeGrowthResponse) { + } rpc VolumeGrow (VolumeGrowRequest) returns (VolumeGrowResponse) { } rpc CollectionStatistics (CollectionStatisticsRequest) returns (CollectionStatisticsResponse) { @@ -324,6 +326,13 @@ message VolumeGrowRequest { float grow_avg_fill_threshold = 10; } +message ResumeVolumeGrowthRequest { +} + +message ResumeVolumeGrowthResponse { + bool was_frozen = 1; +} + message AssignResponse { string fid = 1; uint64 count = 4; diff --git a/weed/pb/master.proto b/weed/pb/master.proto index 9bc3022417..d1cf3dd342 100644 --- a/weed/pb/master.proto +++ b/weed/pb/master.proto @@ -59,6 +59,8 @@ service Seaweed { } rpc RaftLeadershipTransfer (RaftLeadershipTransferRequest) returns (RaftLeadershipTransferResponse) { } + rpc ResumeVolumeGrowth (ResumeVolumeGrowthRequest) returns (ResumeVolumeGrowthResponse) { + } rpc VolumeGrow (VolumeGrowRequest) returns (VolumeGrowResponse) { } rpc CollectionStatistics (CollectionStatisticsRequest) returns (CollectionStatisticsResponse) { @@ -324,6 +326,13 @@ message VolumeGrowRequest { float grow_avg_fill_threshold = 10; } +message ResumeVolumeGrowthRequest { +} + +message ResumeVolumeGrowthResponse { + bool was_frozen = 1; +} + message AssignResponse { string fid = 1; uint64 count = 4; diff --git a/weed/pb/master_pb/master.pb.go b/weed/pb/master_pb/master.pb.go index bf219ed1da..d507d81da6 100644 --- a/weed/pb/master_pb/master.pb.go +++ b/weed/pb/master_pb/master.pb.go @@ -1887,6 +1887,86 @@ func (x *VolumeGrowRequest) GetGrowAvgFillThreshold() float32 { return 0 } +type ResumeVolumeGrowthRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ResumeVolumeGrowthRequest) Reset() { + *x = ResumeVolumeGrowthRequest{} + mi := &file_master_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ResumeVolumeGrowthRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResumeVolumeGrowthRequest) ProtoMessage() {} + +func (x *ResumeVolumeGrowthRequest) ProtoReflect() protoreflect.Message { + mi := &file_master_proto_msgTypes[19] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResumeVolumeGrowthRequest.ProtoReflect.Descriptor instead. +func (*ResumeVolumeGrowthRequest) Descriptor() ([]byte, []int) { + return file_master_proto_rawDescGZIP(), []int{19} +} + +type ResumeVolumeGrowthResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + WasFrozen bool `protobuf:"varint,1,opt,name=was_frozen,json=wasFrozen,proto3" json:"was_frozen,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ResumeVolumeGrowthResponse) Reset() { + *x = ResumeVolumeGrowthResponse{} + mi := &file_master_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ResumeVolumeGrowthResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResumeVolumeGrowthResponse) ProtoMessage() {} + +func (x *ResumeVolumeGrowthResponse) ProtoReflect() protoreflect.Message { + mi := &file_master_proto_msgTypes[20] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResumeVolumeGrowthResponse.ProtoReflect.Descriptor instead. +func (*ResumeVolumeGrowthResponse) Descriptor() ([]byte, []int) { + return file_master_proto_rawDescGZIP(), []int{20} +} + +func (x *ResumeVolumeGrowthResponse) GetWasFrozen() bool { + if x != nil { + return x.WasFrozen + } + return false +} + type AssignResponse struct { state protoimpl.MessageState `protogen:"open.v1"` Fid string `protobuf:"bytes,1,opt,name=fid,proto3" json:"fid,omitempty"` @@ -1901,7 +1981,7 @@ type AssignResponse struct { func (x *AssignResponse) Reset() { *x = AssignResponse{} - mi := &file_master_proto_msgTypes[19] + mi := &file_master_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1913,7 +1993,7 @@ func (x *AssignResponse) String() string { func (*AssignResponse) ProtoMessage() {} func (x *AssignResponse) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[19] + mi := &file_master_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1926,7 +2006,7 @@ func (x *AssignResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AssignResponse.ProtoReflect.Descriptor instead. func (*AssignResponse) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{19} + return file_master_proto_rawDescGZIP(), []int{21} } func (x *AssignResponse) GetFid() string { @@ -1983,7 +2063,7 @@ type StatisticsRequest struct { func (x *StatisticsRequest) Reset() { *x = StatisticsRequest{} - mi := &file_master_proto_msgTypes[20] + mi := &file_master_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1995,7 +2075,7 @@ func (x *StatisticsRequest) String() string { func (*StatisticsRequest) ProtoMessage() {} func (x *StatisticsRequest) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[20] + mi := &file_master_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2008,7 +2088,7 @@ func (x *StatisticsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StatisticsRequest.ProtoReflect.Descriptor instead. func (*StatisticsRequest) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{20} + return file_master_proto_rawDescGZIP(), []int{22} } func (x *StatisticsRequest) GetReplication() string { @@ -2055,7 +2135,7 @@ type StatisticsResponse struct { func (x *StatisticsResponse) Reset() { *x = StatisticsResponse{} - mi := &file_master_proto_msgTypes[21] + mi := &file_master_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2067,7 +2147,7 @@ func (x *StatisticsResponse) String() string { func (*StatisticsResponse) ProtoMessage() {} func (x *StatisticsResponse) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[21] + mi := &file_master_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2080,7 +2160,7 @@ func (x *StatisticsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StatisticsResponse.ProtoReflect.Descriptor instead. func (*StatisticsResponse) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{21} + return file_master_proto_rawDescGZIP(), []int{23} } func (x *StatisticsResponse) GetTotalSize() uint64 { @@ -2128,7 +2208,7 @@ type Collection struct { func (x *Collection) Reset() { *x = Collection{} - mi := &file_master_proto_msgTypes[22] + mi := &file_master_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2140,7 +2220,7 @@ func (x *Collection) String() string { func (*Collection) ProtoMessage() {} func (x *Collection) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[22] + mi := &file_master_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2153,7 +2233,7 @@ func (x *Collection) ProtoReflect() protoreflect.Message { // Deprecated: Use Collection.ProtoReflect.Descriptor instead. func (*Collection) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{22} + return file_master_proto_rawDescGZIP(), []int{24} } func (x *Collection) GetName() string { @@ -2173,7 +2253,7 @@ type CollectionListRequest struct { func (x *CollectionListRequest) Reset() { *x = CollectionListRequest{} - mi := &file_master_proto_msgTypes[23] + mi := &file_master_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2185,7 +2265,7 @@ func (x *CollectionListRequest) String() string { func (*CollectionListRequest) ProtoMessage() {} func (x *CollectionListRequest) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[23] + mi := &file_master_proto_msgTypes[25] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2198,7 +2278,7 @@ func (x *CollectionListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CollectionListRequest.ProtoReflect.Descriptor instead. func (*CollectionListRequest) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{23} + return file_master_proto_rawDescGZIP(), []int{25} } func (x *CollectionListRequest) GetIncludeNormalVolumes() bool { @@ -2224,7 +2304,7 @@ type CollectionListResponse struct { func (x *CollectionListResponse) Reset() { *x = CollectionListResponse{} - mi := &file_master_proto_msgTypes[24] + mi := &file_master_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2236,7 +2316,7 @@ func (x *CollectionListResponse) String() string { func (*CollectionListResponse) ProtoMessage() {} func (x *CollectionListResponse) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[24] + mi := &file_master_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2249,7 +2329,7 @@ func (x *CollectionListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CollectionListResponse.ProtoReflect.Descriptor instead. func (*CollectionListResponse) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{24} + return file_master_proto_rawDescGZIP(), []int{26} } func (x *CollectionListResponse) GetCollections() []*Collection { @@ -2269,7 +2349,7 @@ type CollectionStatisticsRequest struct { func (x *CollectionStatisticsRequest) Reset() { *x = CollectionStatisticsRequest{} - mi := &file_master_proto_msgTypes[25] + mi := &file_master_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2281,7 +2361,7 @@ func (x *CollectionStatisticsRequest) String() string { func (*CollectionStatisticsRequest) ProtoMessage() {} func (x *CollectionStatisticsRequest) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[25] + mi := &file_master_proto_msgTypes[27] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2294,7 +2374,7 @@ func (x *CollectionStatisticsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CollectionStatisticsRequest.ProtoReflect.Descriptor instead. func (*CollectionStatisticsRequest) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{25} + return file_master_proto_rawDescGZIP(), []int{27} } type CollectionStatisticsResponse struct { @@ -2306,7 +2386,7 @@ type CollectionStatisticsResponse struct { func (x *CollectionStatisticsResponse) Reset() { *x = CollectionStatisticsResponse{} - mi := &file_master_proto_msgTypes[26] + mi := &file_master_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2318,7 +2398,7 @@ func (x *CollectionStatisticsResponse) String() string { func (*CollectionStatisticsResponse) ProtoMessage() {} func (x *CollectionStatisticsResponse) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[26] + mi := &file_master_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2331,7 +2411,7 @@ func (x *CollectionStatisticsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CollectionStatisticsResponse.ProtoReflect.Descriptor instead. func (*CollectionStatisticsResponse) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{26} + return file_master_proto_rawDescGZIP(), []int{28} } func (x *CollectionStatisticsResponse) GetCollections() []*CollectionStatistics { @@ -2359,7 +2439,7 @@ type CollectionStatistics struct { func (x *CollectionStatistics) Reset() { *x = CollectionStatistics{} - mi := &file_master_proto_msgTypes[27] + mi := &file_master_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2371,7 +2451,7 @@ func (x *CollectionStatistics) String() string { func (*CollectionStatistics) ProtoMessage() {} func (x *CollectionStatistics) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[27] + mi := &file_master_proto_msgTypes[29] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2384,7 +2464,7 @@ func (x *CollectionStatistics) ProtoReflect() protoreflect.Message { // Deprecated: Use CollectionStatistics.ProtoReflect.Descriptor instead. func (*CollectionStatistics) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{27} + return file_master_proto_rawDescGZIP(), []int{29} } func (x *CollectionStatistics) GetCollection() string { @@ -2445,7 +2525,7 @@ type CollectionDeleteRequest struct { func (x *CollectionDeleteRequest) Reset() { *x = CollectionDeleteRequest{} - mi := &file_master_proto_msgTypes[28] + mi := &file_master_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2457,7 +2537,7 @@ func (x *CollectionDeleteRequest) String() string { func (*CollectionDeleteRequest) ProtoMessage() {} func (x *CollectionDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[28] + mi := &file_master_proto_msgTypes[30] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2470,7 +2550,7 @@ func (x *CollectionDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CollectionDeleteRequest.ProtoReflect.Descriptor instead. func (*CollectionDeleteRequest) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{28} + return file_master_proto_rawDescGZIP(), []int{30} } func (x *CollectionDeleteRequest) GetName() string { @@ -2488,7 +2568,7 @@ type CollectionDeleteResponse struct { func (x *CollectionDeleteResponse) Reset() { *x = CollectionDeleteResponse{} - mi := &file_master_proto_msgTypes[29] + mi := &file_master_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2500,7 +2580,7 @@ func (x *CollectionDeleteResponse) String() string { func (*CollectionDeleteResponse) ProtoMessage() {} func (x *CollectionDeleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[29] + mi := &file_master_proto_msgTypes[31] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2513,7 +2593,7 @@ func (x *CollectionDeleteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CollectionDeleteResponse.ProtoReflect.Descriptor instead. func (*CollectionDeleteResponse) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{29} + return file_master_proto_rawDescGZIP(), []int{31} } // volume related @@ -2545,7 +2625,7 @@ type DiskInfo struct { func (x *DiskInfo) Reset() { *x = DiskInfo{} - mi := &file_master_proto_msgTypes[30] + mi := &file_master_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2557,7 +2637,7 @@ func (x *DiskInfo) String() string { func (*DiskInfo) ProtoMessage() {} func (x *DiskInfo) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[30] + mi := &file_master_proto_msgTypes[32] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2570,7 +2650,7 @@ func (x *DiskInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use DiskInfo.ProtoReflect.Descriptor instead. func (*DiskInfo) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{30} + return file_master_proto_rawDescGZIP(), []int{32} } func (x *DiskInfo) GetType() string { @@ -2676,7 +2756,7 @@ type DataNodeInfo struct { func (x *DataNodeInfo) Reset() { *x = DataNodeInfo{} - mi := &file_master_proto_msgTypes[31] + mi := &file_master_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2688,7 +2768,7 @@ func (x *DataNodeInfo) String() string { func (*DataNodeInfo) ProtoMessage() {} func (x *DataNodeInfo) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[31] + mi := &file_master_proto_msgTypes[33] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2701,7 +2781,7 @@ func (x *DataNodeInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use DataNodeInfo.ProtoReflect.Descriptor instead. func (*DataNodeInfo) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{31} + return file_master_proto_rawDescGZIP(), []int{33} } func (x *DataNodeInfo) GetId() string { @@ -2743,7 +2823,7 @@ type RackInfo struct { func (x *RackInfo) Reset() { *x = RackInfo{} - mi := &file_master_proto_msgTypes[32] + mi := &file_master_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2755,7 +2835,7 @@ func (x *RackInfo) String() string { func (*RackInfo) ProtoMessage() {} func (x *RackInfo) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[32] + mi := &file_master_proto_msgTypes[34] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2768,7 +2848,7 @@ func (x *RackInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use RackInfo.ProtoReflect.Descriptor instead. func (*RackInfo) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{32} + return file_master_proto_rawDescGZIP(), []int{34} } func (x *RackInfo) GetId() string { @@ -2803,7 +2883,7 @@ type DataCenterInfo struct { func (x *DataCenterInfo) Reset() { *x = DataCenterInfo{} - mi := &file_master_proto_msgTypes[33] + mi := &file_master_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2815,7 +2895,7 @@ func (x *DataCenterInfo) String() string { func (*DataCenterInfo) ProtoMessage() {} func (x *DataCenterInfo) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[33] + mi := &file_master_proto_msgTypes[35] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2828,7 +2908,7 @@ func (x *DataCenterInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use DataCenterInfo.ProtoReflect.Descriptor instead. func (*DataCenterInfo) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{33} + return file_master_proto_rawDescGZIP(), []int{35} } func (x *DataCenterInfo) GetId() string { @@ -2863,7 +2943,7 @@ type TopologyInfo struct { func (x *TopologyInfo) Reset() { *x = TopologyInfo{} - mi := &file_master_proto_msgTypes[34] + mi := &file_master_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2875,7 +2955,7 @@ func (x *TopologyInfo) String() string { func (*TopologyInfo) ProtoMessage() {} func (x *TopologyInfo) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[34] + mi := &file_master_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2888,7 +2968,7 @@ func (x *TopologyInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use TopologyInfo.ProtoReflect.Descriptor instead. func (*TopologyInfo) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{34} + return file_master_proto_rawDescGZIP(), []int{36} } func (x *TopologyInfo) GetId() string { @@ -2934,7 +3014,7 @@ type VolumeListRequest struct { func (x *VolumeListRequest) Reset() { *x = VolumeListRequest{} - mi := &file_master_proto_msgTypes[35] + mi := &file_master_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2946,7 +3026,7 @@ func (x *VolumeListRequest) String() string { func (*VolumeListRequest) ProtoMessage() {} func (x *VolumeListRequest) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[35] + mi := &file_master_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2959,7 +3039,7 @@ func (x *VolumeListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VolumeListRequest.ProtoReflect.Descriptor instead. func (*VolumeListRequest) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{35} + return file_master_proto_rawDescGZIP(), []int{37} } func (x *VolumeListRequest) GetCollection() string { @@ -3014,7 +3094,7 @@ type VolumeListResponse struct { func (x *VolumeListResponse) Reset() { *x = VolumeListResponse{} - mi := &file_master_proto_msgTypes[36] + mi := &file_master_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3026,7 +3106,7 @@ func (x *VolumeListResponse) String() string { func (*VolumeListResponse) ProtoMessage() {} func (x *VolumeListResponse) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[36] + mi := &file_master_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3039,7 +3119,7 @@ func (x *VolumeListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VolumeListResponse.ProtoReflect.Descriptor instead. func (*VolumeListResponse) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{36} + return file_master_proto_rawDescGZIP(), []int{38} } func (x *VolumeListResponse) GetTopologyInfo() *TopologyInfo { @@ -3079,7 +3159,7 @@ type VolumeListStreamResponse struct { func (x *VolumeListStreamResponse) Reset() { *x = VolumeListStreamResponse{} - mi := &file_master_proto_msgTypes[37] + mi := &file_master_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3091,7 +3171,7 @@ func (x *VolumeListStreamResponse) String() string { func (*VolumeListStreamResponse) ProtoMessage() {} func (x *VolumeListStreamResponse) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[37] + mi := &file_master_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3104,7 +3184,7 @@ func (x *VolumeListStreamResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VolumeListStreamResponse.ProtoReflect.Descriptor instead. func (*VolumeListStreamResponse) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{37} + return file_master_proto_rawDescGZIP(), []int{39} } func (x *VolumeListStreamResponse) GetHeader() *VolumeListResponse { @@ -3165,7 +3245,7 @@ type LookupEcVolumeRequest struct { func (x *LookupEcVolumeRequest) Reset() { *x = LookupEcVolumeRequest{} - mi := &file_master_proto_msgTypes[38] + mi := &file_master_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3177,7 +3257,7 @@ func (x *LookupEcVolumeRequest) String() string { func (*LookupEcVolumeRequest) ProtoMessage() {} func (x *LookupEcVolumeRequest) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[38] + mi := &file_master_proto_msgTypes[40] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3190,7 +3270,7 @@ func (x *LookupEcVolumeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LookupEcVolumeRequest.ProtoReflect.Descriptor instead. func (*LookupEcVolumeRequest) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{38} + return file_master_proto_rawDescGZIP(), []int{40} } func (x *LookupEcVolumeRequest) GetVolumeId() uint32 { @@ -3210,7 +3290,7 @@ type LookupEcVolumeResponse struct { func (x *LookupEcVolumeResponse) Reset() { *x = LookupEcVolumeResponse{} - mi := &file_master_proto_msgTypes[39] + mi := &file_master_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3222,7 +3302,7 @@ func (x *LookupEcVolumeResponse) String() string { func (*LookupEcVolumeResponse) ProtoMessage() {} func (x *LookupEcVolumeResponse) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[39] + mi := &file_master_proto_msgTypes[41] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3235,7 +3315,7 @@ func (x *LookupEcVolumeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LookupEcVolumeResponse.ProtoReflect.Descriptor instead. func (*LookupEcVolumeResponse) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{39} + return file_master_proto_rawDescGZIP(), []int{41} } func (x *LookupEcVolumeResponse) GetVolumeId() uint32 { @@ -3263,7 +3343,7 @@ type VacuumVolumeRequest struct { func (x *VacuumVolumeRequest) Reset() { *x = VacuumVolumeRequest{} - mi := &file_master_proto_msgTypes[40] + mi := &file_master_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3275,7 +3355,7 @@ func (x *VacuumVolumeRequest) String() string { func (*VacuumVolumeRequest) ProtoMessage() {} func (x *VacuumVolumeRequest) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[40] + mi := &file_master_proto_msgTypes[42] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3288,7 +3368,7 @@ func (x *VacuumVolumeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VacuumVolumeRequest.ProtoReflect.Descriptor instead. func (*VacuumVolumeRequest) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{40} + return file_master_proto_rawDescGZIP(), []int{42} } func (x *VacuumVolumeRequest) GetGarbageThreshold() float32 { @@ -3320,7 +3400,7 @@ type VacuumVolumeResponse struct { func (x *VacuumVolumeResponse) Reset() { *x = VacuumVolumeResponse{} - mi := &file_master_proto_msgTypes[41] + mi := &file_master_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3332,7 +3412,7 @@ func (x *VacuumVolumeResponse) String() string { func (*VacuumVolumeResponse) ProtoMessage() {} func (x *VacuumVolumeResponse) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[41] + mi := &file_master_proto_msgTypes[43] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3345,7 +3425,7 @@ func (x *VacuumVolumeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VacuumVolumeResponse.ProtoReflect.Descriptor instead. func (*VacuumVolumeResponse) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{41} + return file_master_proto_rawDescGZIP(), []int{43} } type DisableVacuumRequest struct { @@ -3357,7 +3437,7 @@ type DisableVacuumRequest struct { func (x *DisableVacuumRequest) Reset() { *x = DisableVacuumRequest{} - mi := &file_master_proto_msgTypes[42] + mi := &file_master_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3369,7 +3449,7 @@ func (x *DisableVacuumRequest) String() string { func (*DisableVacuumRequest) ProtoMessage() {} func (x *DisableVacuumRequest) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[42] + mi := &file_master_proto_msgTypes[44] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3382,7 +3462,7 @@ func (x *DisableVacuumRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DisableVacuumRequest.ProtoReflect.Descriptor instead. func (*DisableVacuumRequest) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{42} + return file_master_proto_rawDescGZIP(), []int{44} } func (x *DisableVacuumRequest) GetByPlugin() bool { @@ -3400,7 +3480,7 @@ type DisableVacuumResponse struct { func (x *DisableVacuumResponse) Reset() { *x = DisableVacuumResponse{} - mi := &file_master_proto_msgTypes[43] + mi := &file_master_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3412,7 +3492,7 @@ func (x *DisableVacuumResponse) String() string { func (*DisableVacuumResponse) ProtoMessage() {} func (x *DisableVacuumResponse) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[43] + mi := &file_master_proto_msgTypes[45] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3425,7 +3505,7 @@ func (x *DisableVacuumResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DisableVacuumResponse.ProtoReflect.Descriptor instead. func (*DisableVacuumResponse) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{43} + return file_master_proto_rawDescGZIP(), []int{45} } type EnableVacuumRequest struct { @@ -3437,7 +3517,7 @@ type EnableVacuumRequest struct { func (x *EnableVacuumRequest) Reset() { *x = EnableVacuumRequest{} - mi := &file_master_proto_msgTypes[44] + mi := &file_master_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3449,7 +3529,7 @@ func (x *EnableVacuumRequest) String() string { func (*EnableVacuumRequest) ProtoMessage() {} func (x *EnableVacuumRequest) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[44] + mi := &file_master_proto_msgTypes[46] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3462,7 +3542,7 @@ func (x *EnableVacuumRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use EnableVacuumRequest.ProtoReflect.Descriptor instead. func (*EnableVacuumRequest) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{44} + return file_master_proto_rawDescGZIP(), []int{46} } func (x *EnableVacuumRequest) GetByPlugin() bool { @@ -3480,7 +3560,7 @@ type EnableVacuumResponse struct { func (x *EnableVacuumResponse) Reset() { *x = EnableVacuumResponse{} - mi := &file_master_proto_msgTypes[45] + mi := &file_master_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3492,7 +3572,7 @@ func (x *EnableVacuumResponse) String() string { func (*EnableVacuumResponse) ProtoMessage() {} func (x *EnableVacuumResponse) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[45] + mi := &file_master_proto_msgTypes[47] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3505,7 +3585,7 @@ func (x *EnableVacuumResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use EnableVacuumResponse.ProtoReflect.Descriptor instead. func (*EnableVacuumResponse) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{45} + return file_master_proto_rawDescGZIP(), []int{47} } type VolumeMarkReadonlyRequest struct { @@ -3525,7 +3605,7 @@ type VolumeMarkReadonlyRequest struct { func (x *VolumeMarkReadonlyRequest) Reset() { *x = VolumeMarkReadonlyRequest{} - mi := &file_master_proto_msgTypes[46] + mi := &file_master_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3537,7 +3617,7 @@ func (x *VolumeMarkReadonlyRequest) String() string { func (*VolumeMarkReadonlyRequest) ProtoMessage() {} func (x *VolumeMarkReadonlyRequest) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[46] + mi := &file_master_proto_msgTypes[48] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3550,7 +3630,7 @@ func (x *VolumeMarkReadonlyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VolumeMarkReadonlyRequest.ProtoReflect.Descriptor instead. func (*VolumeMarkReadonlyRequest) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{46} + return file_master_proto_rawDescGZIP(), []int{48} } func (x *VolumeMarkReadonlyRequest) GetIp() string { @@ -3624,7 +3704,7 @@ type VolumeMarkReadonlyResponse struct { func (x *VolumeMarkReadonlyResponse) Reset() { *x = VolumeMarkReadonlyResponse{} - mi := &file_master_proto_msgTypes[47] + mi := &file_master_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3636,7 +3716,7 @@ func (x *VolumeMarkReadonlyResponse) String() string { func (*VolumeMarkReadonlyResponse) ProtoMessage() {} func (x *VolumeMarkReadonlyResponse) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[47] + mi := &file_master_proto_msgTypes[49] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3649,7 +3729,7 @@ func (x *VolumeMarkReadonlyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VolumeMarkReadonlyResponse.ProtoReflect.Descriptor instead. func (*VolumeMarkReadonlyResponse) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{47} + return file_master_proto_rawDescGZIP(), []int{49} } type GetMasterConfigurationRequest struct { @@ -3660,7 +3740,7 @@ type GetMasterConfigurationRequest struct { func (x *GetMasterConfigurationRequest) Reset() { *x = GetMasterConfigurationRequest{} - mi := &file_master_proto_msgTypes[48] + mi := &file_master_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3672,7 +3752,7 @@ func (x *GetMasterConfigurationRequest) String() string { func (*GetMasterConfigurationRequest) ProtoMessage() {} func (x *GetMasterConfigurationRequest) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[48] + mi := &file_master_proto_msgTypes[50] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3685,7 +3765,7 @@ func (x *GetMasterConfigurationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetMasterConfigurationRequest.ProtoReflect.Descriptor instead. func (*GetMasterConfigurationRequest) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{48} + return file_master_proto_rawDescGZIP(), []int{50} } type GetMasterConfigurationResponse struct { @@ -3706,7 +3786,7 @@ type GetMasterConfigurationResponse struct { func (x *GetMasterConfigurationResponse) Reset() { *x = GetMasterConfigurationResponse{} - mi := &file_master_proto_msgTypes[49] + mi := &file_master_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3718,7 +3798,7 @@ func (x *GetMasterConfigurationResponse) String() string { func (*GetMasterConfigurationResponse) ProtoMessage() {} func (x *GetMasterConfigurationResponse) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[49] + mi := &file_master_proto_msgTypes[51] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3731,7 +3811,7 @@ func (x *GetMasterConfigurationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetMasterConfigurationResponse.ProtoReflect.Descriptor instead. func (*GetMasterConfigurationResponse) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{49} + return file_master_proto_rawDescGZIP(), []int{51} } func (x *GetMasterConfigurationResponse) GetMetricsAddress() string { @@ -3808,7 +3888,7 @@ type ListClusterNodesRequest struct { func (x *ListClusterNodesRequest) Reset() { *x = ListClusterNodesRequest{} - mi := &file_master_proto_msgTypes[50] + mi := &file_master_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3820,7 +3900,7 @@ func (x *ListClusterNodesRequest) String() string { func (*ListClusterNodesRequest) ProtoMessage() {} func (x *ListClusterNodesRequest) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[50] + mi := &file_master_proto_msgTypes[52] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3833,7 +3913,7 @@ func (x *ListClusterNodesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListClusterNodesRequest.ProtoReflect.Descriptor instead. func (*ListClusterNodesRequest) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{50} + return file_master_proto_rawDescGZIP(), []int{52} } func (x *ListClusterNodesRequest) GetClientType() string { @@ -3866,7 +3946,7 @@ type ListClusterNodesResponse struct { func (x *ListClusterNodesResponse) Reset() { *x = ListClusterNodesResponse{} - mi := &file_master_proto_msgTypes[51] + mi := &file_master_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3878,7 +3958,7 @@ func (x *ListClusterNodesResponse) String() string { func (*ListClusterNodesResponse) ProtoMessage() {} func (x *ListClusterNodesResponse) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[51] + mi := &file_master_proto_msgTypes[53] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3891,7 +3971,7 @@ func (x *ListClusterNodesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListClusterNodesResponse.ProtoReflect.Descriptor instead. func (*ListClusterNodesResponse) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{51} + return file_master_proto_rawDescGZIP(), []int{53} } func (x *ListClusterNodesResponse) GetClusterNodes() []*ListClusterNodesResponse_ClusterNode { @@ -3914,7 +3994,7 @@ type LeaseAdminTokenRequest struct { func (x *LeaseAdminTokenRequest) Reset() { *x = LeaseAdminTokenRequest{} - mi := &file_master_proto_msgTypes[52] + mi := &file_master_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3926,7 +4006,7 @@ func (x *LeaseAdminTokenRequest) String() string { func (*LeaseAdminTokenRequest) ProtoMessage() {} func (x *LeaseAdminTokenRequest) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[52] + mi := &file_master_proto_msgTypes[54] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3939,7 +4019,7 @@ func (x *LeaseAdminTokenRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LeaseAdminTokenRequest.ProtoReflect.Descriptor instead. func (*LeaseAdminTokenRequest) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{52} + return file_master_proto_rawDescGZIP(), []int{54} } func (x *LeaseAdminTokenRequest) GetPreviousToken() int64 { @@ -3987,7 +4067,7 @@ type LeaseAdminTokenResponse struct { func (x *LeaseAdminTokenResponse) Reset() { *x = LeaseAdminTokenResponse{} - mi := &file_master_proto_msgTypes[53] + mi := &file_master_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3999,7 +4079,7 @@ func (x *LeaseAdminTokenResponse) String() string { func (*LeaseAdminTokenResponse) ProtoMessage() {} func (x *LeaseAdminTokenResponse) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[53] + mi := &file_master_proto_msgTypes[55] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4012,7 +4092,7 @@ func (x *LeaseAdminTokenResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LeaseAdminTokenResponse.ProtoReflect.Descriptor instead. func (*LeaseAdminTokenResponse) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{53} + return file_master_proto_rawDescGZIP(), []int{55} } func (x *LeaseAdminTokenResponse) GetToken() int64 { @@ -4040,7 +4120,7 @@ type ReleaseAdminTokenRequest struct { func (x *ReleaseAdminTokenRequest) Reset() { *x = ReleaseAdminTokenRequest{} - mi := &file_master_proto_msgTypes[54] + mi := &file_master_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4052,7 +4132,7 @@ func (x *ReleaseAdminTokenRequest) String() string { func (*ReleaseAdminTokenRequest) ProtoMessage() {} func (x *ReleaseAdminTokenRequest) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[54] + mi := &file_master_proto_msgTypes[56] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4065,7 +4145,7 @@ func (x *ReleaseAdminTokenRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ReleaseAdminTokenRequest.ProtoReflect.Descriptor instead. func (*ReleaseAdminTokenRequest) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{54} + return file_master_proto_rawDescGZIP(), []int{56} } func (x *ReleaseAdminTokenRequest) GetPreviousToken() int64 { @@ -4097,7 +4177,7 @@ type ReleaseAdminTokenResponse struct { func (x *ReleaseAdminTokenResponse) Reset() { *x = ReleaseAdminTokenResponse{} - mi := &file_master_proto_msgTypes[55] + mi := &file_master_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4109,7 +4189,7 @@ func (x *ReleaseAdminTokenResponse) String() string { func (*ReleaseAdminTokenResponse) ProtoMessage() {} func (x *ReleaseAdminTokenResponse) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[55] + mi := &file_master_proto_msgTypes[57] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4122,7 +4202,7 @@ func (x *ReleaseAdminTokenResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ReleaseAdminTokenResponse.ProtoReflect.Descriptor instead. func (*ReleaseAdminTokenResponse) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{55} + return file_master_proto_rawDescGZIP(), []int{57} } type GetAdminLockStatusRequest struct { @@ -4134,7 +4214,7 @@ type GetAdminLockStatusRequest struct { func (x *GetAdminLockStatusRequest) Reset() { *x = GetAdminLockStatusRequest{} - mi := &file_master_proto_msgTypes[56] + mi := &file_master_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4146,7 +4226,7 @@ func (x *GetAdminLockStatusRequest) String() string { func (*GetAdminLockStatusRequest) ProtoMessage() {} func (x *GetAdminLockStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[56] + mi := &file_master_proto_msgTypes[58] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4159,7 +4239,7 @@ func (x *GetAdminLockStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAdminLockStatusRequest.ProtoReflect.Descriptor instead. func (*GetAdminLockStatusRequest) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{56} + return file_master_proto_rawDescGZIP(), []int{58} } func (x *GetAdminLockStatusRequest) GetLockName() string { @@ -4180,7 +4260,7 @@ type GetAdminLockStatusResponse struct { func (x *GetAdminLockStatusResponse) Reset() { *x = GetAdminLockStatusResponse{} - mi := &file_master_proto_msgTypes[57] + mi := &file_master_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4192,7 +4272,7 @@ func (x *GetAdminLockStatusResponse) String() string { func (*GetAdminLockStatusResponse) ProtoMessage() {} func (x *GetAdminLockStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[57] + mi := &file_master_proto_msgTypes[59] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4205,7 +4285,7 @@ func (x *GetAdminLockStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAdminLockStatusResponse.ProtoReflect.Descriptor instead. func (*GetAdminLockStatusResponse) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{57} + return file_master_proto_rawDescGZIP(), []int{59} } func (x *GetAdminLockStatusResponse) GetIsLocked() bool { @@ -4239,7 +4319,7 @@ type PingRequest struct { func (x *PingRequest) Reset() { *x = PingRequest{} - mi := &file_master_proto_msgTypes[58] + mi := &file_master_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4251,7 +4331,7 @@ func (x *PingRequest) String() string { func (*PingRequest) ProtoMessage() {} func (x *PingRequest) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[58] + mi := &file_master_proto_msgTypes[60] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4264,7 +4344,7 @@ func (x *PingRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PingRequest.ProtoReflect.Descriptor instead. func (*PingRequest) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{58} + return file_master_proto_rawDescGZIP(), []int{60} } func (x *PingRequest) GetTarget() string { @@ -4292,7 +4372,7 @@ type PingResponse struct { func (x *PingResponse) Reset() { *x = PingResponse{} - mi := &file_master_proto_msgTypes[59] + mi := &file_master_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4304,7 +4384,7 @@ func (x *PingResponse) String() string { func (*PingResponse) ProtoMessage() {} func (x *PingResponse) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[59] + mi := &file_master_proto_msgTypes[61] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4317,7 +4397,7 @@ func (x *PingResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PingResponse.ProtoReflect.Descriptor instead. func (*PingResponse) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{59} + return file_master_proto_rawDescGZIP(), []int{61} } func (x *PingResponse) GetStartTimeNs() int64 { @@ -4352,7 +4432,7 @@ type RaftAddServerRequest struct { func (x *RaftAddServerRequest) Reset() { *x = RaftAddServerRequest{} - mi := &file_master_proto_msgTypes[60] + mi := &file_master_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4364,7 +4444,7 @@ func (x *RaftAddServerRequest) String() string { func (*RaftAddServerRequest) ProtoMessage() {} func (x *RaftAddServerRequest) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[60] + mi := &file_master_proto_msgTypes[62] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4377,7 +4457,7 @@ func (x *RaftAddServerRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RaftAddServerRequest.ProtoReflect.Descriptor instead. func (*RaftAddServerRequest) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{60} + return file_master_proto_rawDescGZIP(), []int{62} } func (x *RaftAddServerRequest) GetId() string { @@ -4409,7 +4489,7 @@ type RaftAddServerResponse struct { func (x *RaftAddServerResponse) Reset() { *x = RaftAddServerResponse{} - mi := &file_master_proto_msgTypes[61] + mi := &file_master_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4421,7 +4501,7 @@ func (x *RaftAddServerResponse) String() string { func (*RaftAddServerResponse) ProtoMessage() {} func (x *RaftAddServerResponse) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[61] + mi := &file_master_proto_msgTypes[63] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4434,7 +4514,7 @@ func (x *RaftAddServerResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RaftAddServerResponse.ProtoReflect.Descriptor instead. func (*RaftAddServerResponse) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{61} + return file_master_proto_rawDescGZIP(), []int{63} } type RaftRemoveServerRequest struct { @@ -4447,7 +4527,7 @@ type RaftRemoveServerRequest struct { func (x *RaftRemoveServerRequest) Reset() { *x = RaftRemoveServerRequest{} - mi := &file_master_proto_msgTypes[62] + mi := &file_master_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4459,7 +4539,7 @@ func (x *RaftRemoveServerRequest) String() string { func (*RaftRemoveServerRequest) ProtoMessage() {} func (x *RaftRemoveServerRequest) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[62] + mi := &file_master_proto_msgTypes[64] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4472,7 +4552,7 @@ func (x *RaftRemoveServerRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RaftRemoveServerRequest.ProtoReflect.Descriptor instead. func (*RaftRemoveServerRequest) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{62} + return file_master_proto_rawDescGZIP(), []int{64} } func (x *RaftRemoveServerRequest) GetId() string { @@ -4497,7 +4577,7 @@ type RaftRemoveServerResponse struct { func (x *RaftRemoveServerResponse) Reset() { *x = RaftRemoveServerResponse{} - mi := &file_master_proto_msgTypes[63] + mi := &file_master_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4509,7 +4589,7 @@ func (x *RaftRemoveServerResponse) String() string { func (*RaftRemoveServerResponse) ProtoMessage() {} func (x *RaftRemoveServerResponse) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[63] + mi := &file_master_proto_msgTypes[65] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4522,7 +4602,7 @@ func (x *RaftRemoveServerResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RaftRemoveServerResponse.ProtoReflect.Descriptor instead. func (*RaftRemoveServerResponse) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{63} + return file_master_proto_rawDescGZIP(), []int{65} } type RaftListClusterServersRequest struct { @@ -4533,7 +4613,7 @@ type RaftListClusterServersRequest struct { func (x *RaftListClusterServersRequest) Reset() { *x = RaftListClusterServersRequest{} - mi := &file_master_proto_msgTypes[64] + mi := &file_master_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4545,7 +4625,7 @@ func (x *RaftListClusterServersRequest) String() string { func (*RaftListClusterServersRequest) ProtoMessage() {} func (x *RaftListClusterServersRequest) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[64] + mi := &file_master_proto_msgTypes[66] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4558,7 +4638,7 @@ func (x *RaftListClusterServersRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RaftListClusterServersRequest.ProtoReflect.Descriptor instead. func (*RaftListClusterServersRequest) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{64} + return file_master_proto_rawDescGZIP(), []int{66} } type RaftListClusterServersResponse struct { @@ -4570,7 +4650,7 @@ type RaftListClusterServersResponse struct { func (x *RaftListClusterServersResponse) Reset() { *x = RaftListClusterServersResponse{} - mi := &file_master_proto_msgTypes[65] + mi := &file_master_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4582,7 +4662,7 @@ func (x *RaftListClusterServersResponse) String() string { func (*RaftListClusterServersResponse) ProtoMessage() {} func (x *RaftListClusterServersResponse) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[65] + mi := &file_master_proto_msgTypes[67] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4595,7 +4675,7 @@ func (x *RaftListClusterServersResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RaftListClusterServersResponse.ProtoReflect.Descriptor instead. func (*RaftListClusterServersResponse) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{65} + return file_master_proto_rawDescGZIP(), []int{67} } func (x *RaftListClusterServersResponse) GetClusterServers() []*RaftListClusterServersResponse_ClusterServers { @@ -4615,7 +4695,7 @@ type RaftLeadershipTransferRequest struct { func (x *RaftLeadershipTransferRequest) Reset() { *x = RaftLeadershipTransferRequest{} - mi := &file_master_proto_msgTypes[66] + mi := &file_master_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4627,7 +4707,7 @@ func (x *RaftLeadershipTransferRequest) String() string { func (*RaftLeadershipTransferRequest) ProtoMessage() {} func (x *RaftLeadershipTransferRequest) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[66] + mi := &file_master_proto_msgTypes[68] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4640,7 +4720,7 @@ func (x *RaftLeadershipTransferRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RaftLeadershipTransferRequest.ProtoReflect.Descriptor instead. func (*RaftLeadershipTransferRequest) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{66} + return file_master_proto_rawDescGZIP(), []int{68} } func (x *RaftLeadershipTransferRequest) GetTargetId() string { @@ -4667,7 +4747,7 @@ type RaftLeadershipTransferResponse struct { func (x *RaftLeadershipTransferResponse) Reset() { *x = RaftLeadershipTransferResponse{} - mi := &file_master_proto_msgTypes[67] + mi := &file_master_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4679,7 +4759,7 @@ func (x *RaftLeadershipTransferResponse) String() string { func (*RaftLeadershipTransferResponse) ProtoMessage() {} func (x *RaftLeadershipTransferResponse) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[67] + mi := &file_master_proto_msgTypes[69] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4692,7 +4772,7 @@ func (x *RaftLeadershipTransferResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RaftLeadershipTransferResponse.ProtoReflect.Descriptor instead. func (*RaftLeadershipTransferResponse) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{67} + return file_master_proto_rawDescGZIP(), []int{69} } func (x *RaftLeadershipTransferResponse) GetPreviousLeader() string { @@ -4722,7 +4802,7 @@ type VolumeGrowResponse struct { func (x *VolumeGrowResponse) Reset() { *x = VolumeGrowResponse{} - mi := &file_master_proto_msgTypes[68] + mi := &file_master_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4734,7 +4814,7 @@ func (x *VolumeGrowResponse) String() string { func (*VolumeGrowResponse) ProtoMessage() {} func (x *VolumeGrowResponse) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[68] + mi := &file_master_proto_msgTypes[70] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4747,7 +4827,7 @@ func (x *VolumeGrowResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VolumeGrowResponse.ProtoReflect.Descriptor instead. func (*VolumeGrowResponse) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{68} + return file_master_proto_rawDescGZIP(), []int{70} } func (x *VolumeGrowResponse) GetAvgFill() float32 { @@ -4775,7 +4855,7 @@ type SuperBlockExtra_ErasureCoding struct { func (x *SuperBlockExtra_ErasureCoding) Reset() { *x = SuperBlockExtra_ErasureCoding{} - mi := &file_master_proto_msgTypes[73] + mi := &file_master_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4787,7 +4867,7 @@ func (x *SuperBlockExtra_ErasureCoding) String() string { func (*SuperBlockExtra_ErasureCoding) ProtoMessage() {} func (x *SuperBlockExtra_ErasureCoding) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[73] + mi := &file_master_proto_msgTypes[75] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4836,7 +4916,7 @@ type LookupVolumeResponse_VolumeIdLocation struct { func (x *LookupVolumeResponse_VolumeIdLocation) Reset() { *x = LookupVolumeResponse_VolumeIdLocation{} - mi := &file_master_proto_msgTypes[74] + mi := &file_master_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4848,7 +4928,7 @@ func (x *LookupVolumeResponse_VolumeIdLocation) String() string { func (*LookupVolumeResponse_VolumeIdLocation) ProtoMessage() {} func (x *LookupVolumeResponse_VolumeIdLocation) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[74] + mi := &file_master_proto_msgTypes[76] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4902,7 +4982,7 @@ type LookupEcVolumeResponse_EcShardIdLocation struct { func (x *LookupEcVolumeResponse_EcShardIdLocation) Reset() { *x = LookupEcVolumeResponse_EcShardIdLocation{} - mi := &file_master_proto_msgTypes[80] + mi := &file_master_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4914,7 +4994,7 @@ func (x *LookupEcVolumeResponse_EcShardIdLocation) String() string { func (*LookupEcVolumeResponse_EcShardIdLocation) ProtoMessage() {} func (x *LookupEcVolumeResponse_EcShardIdLocation) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[80] + mi := &file_master_proto_msgTypes[82] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4927,7 +5007,7 @@ func (x *LookupEcVolumeResponse_EcShardIdLocation) ProtoReflect() protoreflect.M // Deprecated: Use LookupEcVolumeResponse_EcShardIdLocation.ProtoReflect.Descriptor instead. func (*LookupEcVolumeResponse_EcShardIdLocation) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{39, 0} + return file_master_proto_rawDescGZIP(), []int{41, 0} } func (x *LookupEcVolumeResponse_EcShardIdLocation) GetShardId() uint32 { @@ -4957,7 +5037,7 @@ type ListClusterNodesResponse_ClusterNode struct { func (x *ListClusterNodesResponse_ClusterNode) Reset() { *x = ListClusterNodesResponse_ClusterNode{} - mi := &file_master_proto_msgTypes[81] + mi := &file_master_proto_msgTypes[83] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4969,7 +5049,7 @@ func (x *ListClusterNodesResponse_ClusterNode) String() string { func (*ListClusterNodesResponse_ClusterNode) ProtoMessage() {} func (x *ListClusterNodesResponse_ClusterNode) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[81] + mi := &file_master_proto_msgTypes[83] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4982,7 +5062,7 @@ func (x *ListClusterNodesResponse_ClusterNode) ProtoReflect() protoreflect.Messa // Deprecated: Use ListClusterNodesResponse_ClusterNode.ProtoReflect.Descriptor instead. func (*ListClusterNodesResponse_ClusterNode) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{51, 0} + return file_master_proto_rawDescGZIP(), []int{53, 0} } func (x *ListClusterNodesResponse_ClusterNode) GetAddress() string { @@ -5032,7 +5112,7 @@ type RaftListClusterServersResponse_ClusterServers struct { func (x *RaftListClusterServersResponse_ClusterServers) Reset() { *x = RaftListClusterServersResponse_ClusterServers{} - mi := &file_master_proto_msgTypes[82] + mi := &file_master_proto_msgTypes[84] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5044,7 +5124,7 @@ func (x *RaftListClusterServersResponse_ClusterServers) String() string { func (*RaftListClusterServersResponse_ClusterServers) ProtoMessage() {} func (x *RaftListClusterServersResponse_ClusterServers) ProtoReflect() protoreflect.Message { - mi := &file_master_proto_msgTypes[82] + mi := &file_master_proto_msgTypes[84] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5057,7 +5137,7 @@ func (x *RaftListClusterServersResponse_ClusterServers) ProtoReflect() protorefl // Deprecated: Use RaftListClusterServersResponse_ClusterServers.ProtoReflect.Descriptor instead. func (*RaftListClusterServersResponse_ClusterServers) Descriptor() ([]byte, []int) { - return file_master_proto_rawDescGZIP(), []int{65, 0} + return file_master_proto_rawDescGZIP(), []int{67, 0} } func (x *RaftListClusterServersResponse_ClusterServers) GetId() string { @@ -5320,7 +5400,11 @@ const file_master_proto_rawDesc = "" + "\x16memory_map_max_size_mb\x18\b \x01(\rR\x12memoryMapMaxSizeMb\x12\x1b\n" + "\tdisk_type\x18\t \x01(\tR\bdiskType\x125\n" + "\x17grow_avg_fill_threshold\x18\n" + - " \x01(\x02R\x14growAvgFillThreshold\"\xc4\x01\n" + + " \x01(\x02R\x14growAvgFillThreshold\"\x1b\n" + + "\x19ResumeVolumeGrowthRequest\";\n" + + "\x1aResumeVolumeGrowthResponse\x12\x1d\n" + + "\n" + + "was_frozen\x18\x01 \x01(\bR\twasFrozen\"\xc4\x01\n" + "\x0eAssignResponse\x12\x10\n" + "\x03fid\x18\x01 \x01(\tR\x03fid\x12\x14\n" + "\x05count\x18\x04 \x01(\x04R\x05count\x12\x14\n" + @@ -5558,7 +5642,7 @@ const file_master_proto_rawDesc = "" + "new_leader\x18\x02 \x01(\tR\tnewLeader\"V\n" + "\x12VolumeGrowResponse\x12\x19\n" + "\bavg_fill\x18\x01 \x01(\x02R\aavgFill\x12%\n" + - "\x0ewritable_count\x18\x02 \x01(\rR\rwritableCount2\xf1\x12\n" + + "\x0ewritable_count\x18\x02 \x01(\rR\rwritableCount2\xd6\x13\n" + "\aSeaweed\x12I\n" + "\rSendHeartbeat\x12\x14.master_pb.Heartbeat\x1a\x1c.master_pb.HeartbeatResponse\"\x00(\x010\x01\x12X\n" + "\rKeepConnected\x12\x1f.master_pb.KeepConnectedRequest\x1a .master_pb.KeepConnectedResponse\"\x00(\x010\x01\x12Q\n" + @@ -5586,7 +5670,8 @@ const file_master_proto_rawDesc = "" + "\x16RaftListClusterServers\x12(.master_pb.RaftListClusterServersRequest\x1a).master_pb.RaftListClusterServersResponse\"\x00\x12T\n" + "\rRaftAddServer\x12\x1f.master_pb.RaftAddServerRequest\x1a .master_pb.RaftAddServerResponse\"\x00\x12]\n" + "\x10RaftRemoveServer\x12\".master_pb.RaftRemoveServerRequest\x1a#.master_pb.RaftRemoveServerResponse\"\x00\x12o\n" + - "\x16RaftLeadershipTransfer\x12(.master_pb.RaftLeadershipTransferRequest\x1a).master_pb.RaftLeadershipTransferResponse\"\x00\x12K\n" + + "\x16RaftLeadershipTransfer\x12(.master_pb.RaftLeadershipTransferRequest\x1a).master_pb.RaftLeadershipTransferResponse\"\x00\x12c\n" + + "\x12ResumeVolumeGrowth\x12$.master_pb.ResumeVolumeGrowthRequest\x1a%.master_pb.ResumeVolumeGrowthResponse\"\x00\x12K\n" + "\n" + "VolumeGrow\x12\x1c.master_pb.VolumeGrowRequest\x1a\x1d.master_pb.VolumeGrowResponse\"\x00\x12i\n" + "\x14CollectionStatistics\x12&.master_pb.CollectionStatisticsRequest\x1a'.master_pb.CollectionStatisticsResponse\"\x00B2Z0github.com/seaweedfs/seaweedfs/weed/pb/master_pbb\x06proto3" @@ -5603,7 +5688,7 @@ func file_master_proto_rawDescGZIP() []byte { return file_master_proto_rawDescData } -var file_master_proto_msgTypes = make([]protoimpl.MessageInfo, 83) +var file_master_proto_msgTypes = make([]protoimpl.MessageInfo, 85) var file_master_proto_goTypes = []any{ (*DiskTag)(nil), // 0: master_pb.DiskTag (*Heartbeat)(nil), // 1: master_pb.Heartbeat @@ -5624,71 +5709,73 @@ var file_master_proto_goTypes = []any{ (*Location)(nil), // 16: master_pb.Location (*AssignRequest)(nil), // 17: master_pb.AssignRequest (*VolumeGrowRequest)(nil), // 18: master_pb.VolumeGrowRequest - (*AssignResponse)(nil), // 19: master_pb.AssignResponse - (*StatisticsRequest)(nil), // 20: master_pb.StatisticsRequest - (*StatisticsResponse)(nil), // 21: master_pb.StatisticsResponse - (*Collection)(nil), // 22: master_pb.Collection - (*CollectionListRequest)(nil), // 23: master_pb.CollectionListRequest - (*CollectionListResponse)(nil), // 24: master_pb.CollectionListResponse - (*CollectionStatisticsRequest)(nil), // 25: master_pb.CollectionStatisticsRequest - (*CollectionStatisticsResponse)(nil), // 26: master_pb.CollectionStatisticsResponse - (*CollectionStatistics)(nil), // 27: master_pb.CollectionStatistics - (*CollectionDeleteRequest)(nil), // 28: master_pb.CollectionDeleteRequest - (*CollectionDeleteResponse)(nil), // 29: master_pb.CollectionDeleteResponse - (*DiskInfo)(nil), // 30: master_pb.DiskInfo - (*DataNodeInfo)(nil), // 31: master_pb.DataNodeInfo - (*RackInfo)(nil), // 32: master_pb.RackInfo - (*DataCenterInfo)(nil), // 33: master_pb.DataCenterInfo - (*TopologyInfo)(nil), // 34: master_pb.TopologyInfo - (*VolumeListRequest)(nil), // 35: master_pb.VolumeListRequest - (*VolumeListResponse)(nil), // 36: master_pb.VolumeListResponse - (*VolumeListStreamResponse)(nil), // 37: master_pb.VolumeListStreamResponse - (*LookupEcVolumeRequest)(nil), // 38: master_pb.LookupEcVolumeRequest - (*LookupEcVolumeResponse)(nil), // 39: master_pb.LookupEcVolumeResponse - (*VacuumVolumeRequest)(nil), // 40: master_pb.VacuumVolumeRequest - (*VacuumVolumeResponse)(nil), // 41: master_pb.VacuumVolumeResponse - (*DisableVacuumRequest)(nil), // 42: master_pb.DisableVacuumRequest - (*DisableVacuumResponse)(nil), // 43: master_pb.DisableVacuumResponse - (*EnableVacuumRequest)(nil), // 44: master_pb.EnableVacuumRequest - (*EnableVacuumResponse)(nil), // 45: master_pb.EnableVacuumResponse - (*VolumeMarkReadonlyRequest)(nil), // 46: master_pb.VolumeMarkReadonlyRequest - (*VolumeMarkReadonlyResponse)(nil), // 47: master_pb.VolumeMarkReadonlyResponse - (*GetMasterConfigurationRequest)(nil), // 48: master_pb.GetMasterConfigurationRequest - (*GetMasterConfigurationResponse)(nil), // 49: master_pb.GetMasterConfigurationResponse - (*ListClusterNodesRequest)(nil), // 50: master_pb.ListClusterNodesRequest - (*ListClusterNodesResponse)(nil), // 51: master_pb.ListClusterNodesResponse - (*LeaseAdminTokenRequest)(nil), // 52: master_pb.LeaseAdminTokenRequest - (*LeaseAdminTokenResponse)(nil), // 53: master_pb.LeaseAdminTokenResponse - (*ReleaseAdminTokenRequest)(nil), // 54: master_pb.ReleaseAdminTokenRequest - (*ReleaseAdminTokenResponse)(nil), // 55: master_pb.ReleaseAdminTokenResponse - (*GetAdminLockStatusRequest)(nil), // 56: master_pb.GetAdminLockStatusRequest - (*GetAdminLockStatusResponse)(nil), // 57: master_pb.GetAdminLockStatusResponse - (*PingRequest)(nil), // 58: master_pb.PingRequest - (*PingResponse)(nil), // 59: master_pb.PingResponse - (*RaftAddServerRequest)(nil), // 60: master_pb.RaftAddServerRequest - (*RaftAddServerResponse)(nil), // 61: master_pb.RaftAddServerResponse - (*RaftRemoveServerRequest)(nil), // 62: master_pb.RaftRemoveServerRequest - (*RaftRemoveServerResponse)(nil), // 63: master_pb.RaftRemoveServerResponse - (*RaftListClusterServersRequest)(nil), // 64: master_pb.RaftListClusterServersRequest - (*RaftListClusterServersResponse)(nil), // 65: master_pb.RaftListClusterServersResponse - (*RaftLeadershipTransferRequest)(nil), // 66: master_pb.RaftLeadershipTransferRequest - (*RaftLeadershipTransferResponse)(nil), // 67: master_pb.RaftLeadershipTransferResponse - (*VolumeGrowResponse)(nil), // 68: master_pb.VolumeGrowResponse - nil, // 69: master_pb.Heartbeat.MaxVolumeCountsEntry - nil, // 70: master_pb.Heartbeat.DiskTotalBytesEntry - nil, // 71: master_pb.Heartbeat.DiskFreeBytesEntry - nil, // 72: master_pb.StorageBackend.PropertiesEntry - (*SuperBlockExtra_ErasureCoding)(nil), // 73: master_pb.SuperBlockExtra.ErasureCoding - (*LookupVolumeResponse_VolumeIdLocation)(nil), // 74: master_pb.LookupVolumeResponse.VolumeIdLocation - nil, // 75: master_pb.DiskInfo.MaxVolumeCountByDiskEntry - nil, // 76: master_pb.DataNodeInfo.DiskInfosEntry - nil, // 77: master_pb.RackInfo.DiskInfosEntry - nil, // 78: master_pb.DataCenterInfo.DiskInfosEntry - nil, // 79: master_pb.TopologyInfo.DiskInfosEntry - (*LookupEcVolumeResponse_EcShardIdLocation)(nil), // 80: master_pb.LookupEcVolumeResponse.EcShardIdLocation - (*ListClusterNodesResponse_ClusterNode)(nil), // 81: master_pb.ListClusterNodesResponse.ClusterNode - (*RaftListClusterServersResponse_ClusterServers)(nil), // 82: master_pb.RaftListClusterServersResponse.ClusterServers - (*volume_server_pb.VolumeServerState)(nil), // 83: volume_server_pb.VolumeServerState + (*ResumeVolumeGrowthRequest)(nil), // 19: master_pb.ResumeVolumeGrowthRequest + (*ResumeVolumeGrowthResponse)(nil), // 20: master_pb.ResumeVolumeGrowthResponse + (*AssignResponse)(nil), // 21: master_pb.AssignResponse + (*StatisticsRequest)(nil), // 22: master_pb.StatisticsRequest + (*StatisticsResponse)(nil), // 23: master_pb.StatisticsResponse + (*Collection)(nil), // 24: master_pb.Collection + (*CollectionListRequest)(nil), // 25: master_pb.CollectionListRequest + (*CollectionListResponse)(nil), // 26: master_pb.CollectionListResponse + (*CollectionStatisticsRequest)(nil), // 27: master_pb.CollectionStatisticsRequest + (*CollectionStatisticsResponse)(nil), // 28: master_pb.CollectionStatisticsResponse + (*CollectionStatistics)(nil), // 29: master_pb.CollectionStatistics + (*CollectionDeleteRequest)(nil), // 30: master_pb.CollectionDeleteRequest + (*CollectionDeleteResponse)(nil), // 31: master_pb.CollectionDeleteResponse + (*DiskInfo)(nil), // 32: master_pb.DiskInfo + (*DataNodeInfo)(nil), // 33: master_pb.DataNodeInfo + (*RackInfo)(nil), // 34: master_pb.RackInfo + (*DataCenterInfo)(nil), // 35: master_pb.DataCenterInfo + (*TopologyInfo)(nil), // 36: master_pb.TopologyInfo + (*VolumeListRequest)(nil), // 37: master_pb.VolumeListRequest + (*VolumeListResponse)(nil), // 38: master_pb.VolumeListResponse + (*VolumeListStreamResponse)(nil), // 39: master_pb.VolumeListStreamResponse + (*LookupEcVolumeRequest)(nil), // 40: master_pb.LookupEcVolumeRequest + (*LookupEcVolumeResponse)(nil), // 41: master_pb.LookupEcVolumeResponse + (*VacuumVolumeRequest)(nil), // 42: master_pb.VacuumVolumeRequest + (*VacuumVolumeResponse)(nil), // 43: master_pb.VacuumVolumeResponse + (*DisableVacuumRequest)(nil), // 44: master_pb.DisableVacuumRequest + (*DisableVacuumResponse)(nil), // 45: master_pb.DisableVacuumResponse + (*EnableVacuumRequest)(nil), // 46: master_pb.EnableVacuumRequest + (*EnableVacuumResponse)(nil), // 47: master_pb.EnableVacuumResponse + (*VolumeMarkReadonlyRequest)(nil), // 48: master_pb.VolumeMarkReadonlyRequest + (*VolumeMarkReadonlyResponse)(nil), // 49: master_pb.VolumeMarkReadonlyResponse + (*GetMasterConfigurationRequest)(nil), // 50: master_pb.GetMasterConfigurationRequest + (*GetMasterConfigurationResponse)(nil), // 51: master_pb.GetMasterConfigurationResponse + (*ListClusterNodesRequest)(nil), // 52: master_pb.ListClusterNodesRequest + (*ListClusterNodesResponse)(nil), // 53: master_pb.ListClusterNodesResponse + (*LeaseAdminTokenRequest)(nil), // 54: master_pb.LeaseAdminTokenRequest + (*LeaseAdminTokenResponse)(nil), // 55: master_pb.LeaseAdminTokenResponse + (*ReleaseAdminTokenRequest)(nil), // 56: master_pb.ReleaseAdminTokenRequest + (*ReleaseAdminTokenResponse)(nil), // 57: master_pb.ReleaseAdminTokenResponse + (*GetAdminLockStatusRequest)(nil), // 58: master_pb.GetAdminLockStatusRequest + (*GetAdminLockStatusResponse)(nil), // 59: master_pb.GetAdminLockStatusResponse + (*PingRequest)(nil), // 60: master_pb.PingRequest + (*PingResponse)(nil), // 61: master_pb.PingResponse + (*RaftAddServerRequest)(nil), // 62: master_pb.RaftAddServerRequest + (*RaftAddServerResponse)(nil), // 63: master_pb.RaftAddServerResponse + (*RaftRemoveServerRequest)(nil), // 64: master_pb.RaftRemoveServerRequest + (*RaftRemoveServerResponse)(nil), // 65: master_pb.RaftRemoveServerResponse + (*RaftListClusterServersRequest)(nil), // 66: master_pb.RaftListClusterServersRequest + (*RaftListClusterServersResponse)(nil), // 67: master_pb.RaftListClusterServersResponse + (*RaftLeadershipTransferRequest)(nil), // 68: master_pb.RaftLeadershipTransferRequest + (*RaftLeadershipTransferResponse)(nil), // 69: master_pb.RaftLeadershipTransferResponse + (*VolumeGrowResponse)(nil), // 70: master_pb.VolumeGrowResponse + nil, // 71: master_pb.Heartbeat.MaxVolumeCountsEntry + nil, // 72: master_pb.Heartbeat.DiskTotalBytesEntry + nil, // 73: master_pb.Heartbeat.DiskFreeBytesEntry + nil, // 74: master_pb.StorageBackend.PropertiesEntry + (*SuperBlockExtra_ErasureCoding)(nil), // 75: master_pb.SuperBlockExtra.ErasureCoding + (*LookupVolumeResponse_VolumeIdLocation)(nil), // 76: master_pb.LookupVolumeResponse.VolumeIdLocation + nil, // 77: master_pb.DiskInfo.MaxVolumeCountByDiskEntry + nil, // 78: master_pb.DataNodeInfo.DiskInfosEntry + nil, // 79: master_pb.RackInfo.DiskInfosEntry + nil, // 80: master_pb.DataCenterInfo.DiskInfosEntry + nil, // 81: master_pb.TopologyInfo.DiskInfosEntry + (*LookupEcVolumeResponse_EcShardIdLocation)(nil), // 82: master_pb.LookupEcVolumeResponse.EcShardIdLocation + (*ListClusterNodesResponse_ClusterNode)(nil), // 83: master_pb.ListClusterNodesResponse.ClusterNode + (*RaftListClusterServersResponse_ClusterServers)(nil), // 84: master_pb.RaftListClusterServersResponse.ClusterServers + (*volume_server_pb.VolumeServerState)(nil), // 85: volume_server_pb.VolumeServerState } var file_master_proto_depIdxs = []int32{ 3, // 0: master_pb.Heartbeat.volumes:type_name -> master_pb.VolumeInformationMessage @@ -5697,103 +5784,105 @@ var file_master_proto_depIdxs = []int32{ 5, // 3: master_pb.Heartbeat.ec_shards:type_name -> master_pb.VolumeEcShardInformationMessage 5, // 4: master_pb.Heartbeat.new_ec_shards:type_name -> master_pb.VolumeEcShardInformationMessage 5, // 5: master_pb.Heartbeat.deleted_ec_shards:type_name -> master_pb.VolumeEcShardInformationMessage - 69, // 6: master_pb.Heartbeat.max_volume_counts:type_name -> master_pb.Heartbeat.MaxVolumeCountsEntry - 83, // 7: master_pb.Heartbeat.state:type_name -> volume_server_pb.VolumeServerState + 71, // 6: master_pb.Heartbeat.max_volume_counts:type_name -> master_pb.Heartbeat.MaxVolumeCountsEntry + 85, // 7: master_pb.Heartbeat.state:type_name -> volume_server_pb.VolumeServerState 0, // 8: master_pb.Heartbeat.disk_tags:type_name -> master_pb.DiskTag - 70, // 9: master_pb.Heartbeat.disk_total_bytes:type_name -> master_pb.Heartbeat.DiskTotalBytesEntry - 71, // 10: master_pb.Heartbeat.disk_free_bytes:type_name -> master_pb.Heartbeat.DiskFreeBytesEntry + 72, // 9: master_pb.Heartbeat.disk_total_bytes:type_name -> master_pb.Heartbeat.DiskTotalBytesEntry + 73, // 10: master_pb.Heartbeat.disk_free_bytes:type_name -> master_pb.Heartbeat.DiskFreeBytesEntry 3, // 11: master_pb.Heartbeat.changed_volumes:type_name -> master_pb.VolumeInformationMessage 6, // 12: master_pb.HeartbeatResponse.storage_backends:type_name -> master_pb.StorageBackend - 72, // 13: master_pb.StorageBackend.properties:type_name -> master_pb.StorageBackend.PropertiesEntry - 73, // 14: master_pb.SuperBlockExtra.erasure_coding:type_name -> master_pb.SuperBlockExtra.ErasureCoding + 74, // 13: master_pb.StorageBackend.properties:type_name -> master_pb.StorageBackend.PropertiesEntry + 75, // 14: master_pb.SuperBlockExtra.erasure_coding:type_name -> master_pb.SuperBlockExtra.ErasureCoding 10, // 15: master_pb.KeepConnectedResponse.volume_location:type_name -> master_pb.VolumeLocation 11, // 16: master_pb.KeepConnectedResponse.cluster_node_update:type_name -> master_pb.ClusterNodeUpdate 13, // 17: master_pb.KeepConnectedResponse.lock_ring_update:type_name -> master_pb.LockRingUpdate - 74, // 18: master_pb.LookupVolumeResponse.volume_id_locations:type_name -> master_pb.LookupVolumeResponse.VolumeIdLocation + 76, // 18: master_pb.LookupVolumeResponse.volume_id_locations:type_name -> master_pb.LookupVolumeResponse.VolumeIdLocation 16, // 19: master_pb.AssignResponse.replicas:type_name -> master_pb.Location 16, // 20: master_pb.AssignResponse.location:type_name -> master_pb.Location - 22, // 21: master_pb.CollectionListResponse.collections:type_name -> master_pb.Collection - 27, // 22: master_pb.CollectionStatisticsResponse.collections:type_name -> master_pb.CollectionStatistics + 24, // 21: master_pb.CollectionListResponse.collections:type_name -> master_pb.Collection + 29, // 22: master_pb.CollectionStatisticsResponse.collections:type_name -> master_pb.CollectionStatistics 3, // 23: master_pb.DiskInfo.volume_infos:type_name -> master_pb.VolumeInformationMessage 5, // 24: master_pb.DiskInfo.ec_shard_infos:type_name -> master_pb.VolumeEcShardInformationMessage - 75, // 25: master_pb.DiskInfo.max_volume_count_by_disk:type_name -> master_pb.DiskInfo.MaxVolumeCountByDiskEntry - 76, // 26: master_pb.DataNodeInfo.diskInfos:type_name -> master_pb.DataNodeInfo.DiskInfosEntry - 31, // 27: master_pb.RackInfo.data_node_infos:type_name -> master_pb.DataNodeInfo - 77, // 28: master_pb.RackInfo.diskInfos:type_name -> master_pb.RackInfo.DiskInfosEntry - 32, // 29: master_pb.DataCenterInfo.rack_infos:type_name -> master_pb.RackInfo - 78, // 30: master_pb.DataCenterInfo.diskInfos:type_name -> master_pb.DataCenterInfo.DiskInfosEntry - 33, // 31: master_pb.TopologyInfo.data_center_infos:type_name -> master_pb.DataCenterInfo - 79, // 32: master_pb.TopologyInfo.diskInfos:type_name -> master_pb.TopologyInfo.DiskInfosEntry - 34, // 33: master_pb.VolumeListResponse.topology_info:type_name -> master_pb.TopologyInfo - 36, // 34: master_pb.VolumeListStreamResponse.header:type_name -> master_pb.VolumeListResponse + 77, // 25: master_pb.DiskInfo.max_volume_count_by_disk:type_name -> master_pb.DiskInfo.MaxVolumeCountByDiskEntry + 78, // 26: master_pb.DataNodeInfo.diskInfos:type_name -> master_pb.DataNodeInfo.DiskInfosEntry + 33, // 27: master_pb.RackInfo.data_node_infos:type_name -> master_pb.DataNodeInfo + 79, // 28: master_pb.RackInfo.diskInfos:type_name -> master_pb.RackInfo.DiskInfosEntry + 34, // 29: master_pb.DataCenterInfo.rack_infos:type_name -> master_pb.RackInfo + 80, // 30: master_pb.DataCenterInfo.diskInfos:type_name -> master_pb.DataCenterInfo.DiskInfosEntry + 35, // 31: master_pb.TopologyInfo.data_center_infos:type_name -> master_pb.DataCenterInfo + 81, // 32: master_pb.TopologyInfo.diskInfos:type_name -> master_pb.TopologyInfo.DiskInfosEntry + 36, // 33: master_pb.VolumeListResponse.topology_info:type_name -> master_pb.TopologyInfo + 38, // 34: master_pb.VolumeListStreamResponse.header:type_name -> master_pb.VolumeListResponse 3, // 35: master_pb.VolumeListStreamResponse.volume_infos:type_name -> master_pb.VolumeInformationMessage 5, // 36: master_pb.VolumeListStreamResponse.ec_shard_infos:type_name -> master_pb.VolumeEcShardInformationMessage - 80, // 37: master_pb.LookupEcVolumeResponse.shard_id_locations:type_name -> master_pb.LookupEcVolumeResponse.EcShardIdLocation + 82, // 37: master_pb.LookupEcVolumeResponse.shard_id_locations:type_name -> master_pb.LookupEcVolumeResponse.EcShardIdLocation 6, // 38: master_pb.GetMasterConfigurationResponse.storage_backends:type_name -> master_pb.StorageBackend - 81, // 39: master_pb.ListClusterNodesResponse.cluster_nodes:type_name -> master_pb.ListClusterNodesResponse.ClusterNode - 82, // 40: master_pb.RaftListClusterServersResponse.cluster_servers:type_name -> master_pb.RaftListClusterServersResponse.ClusterServers + 83, // 39: master_pb.ListClusterNodesResponse.cluster_nodes:type_name -> master_pb.ListClusterNodesResponse.ClusterNode + 84, // 40: master_pb.RaftListClusterServersResponse.cluster_servers:type_name -> master_pb.RaftListClusterServersResponse.ClusterServers 16, // 41: master_pb.LookupVolumeResponse.VolumeIdLocation.locations:type_name -> master_pb.Location - 30, // 42: master_pb.DataNodeInfo.DiskInfosEntry.value:type_name -> master_pb.DiskInfo - 30, // 43: master_pb.RackInfo.DiskInfosEntry.value:type_name -> master_pb.DiskInfo - 30, // 44: master_pb.DataCenterInfo.DiskInfosEntry.value:type_name -> master_pb.DiskInfo - 30, // 45: master_pb.TopologyInfo.DiskInfosEntry.value:type_name -> master_pb.DiskInfo + 32, // 42: master_pb.DataNodeInfo.DiskInfosEntry.value:type_name -> master_pb.DiskInfo + 32, // 43: master_pb.RackInfo.DiskInfosEntry.value:type_name -> master_pb.DiskInfo + 32, // 44: master_pb.DataCenterInfo.DiskInfosEntry.value:type_name -> master_pb.DiskInfo + 32, // 45: master_pb.TopologyInfo.DiskInfosEntry.value:type_name -> master_pb.DiskInfo 16, // 46: master_pb.LookupEcVolumeResponse.EcShardIdLocation.locations:type_name -> master_pb.Location 1, // 47: master_pb.Seaweed.SendHeartbeat:input_type -> master_pb.Heartbeat 9, // 48: master_pb.Seaweed.KeepConnected:input_type -> master_pb.KeepConnectedRequest 14, // 49: master_pb.Seaweed.LookupVolume:input_type -> master_pb.LookupVolumeRequest 17, // 50: master_pb.Seaweed.Assign:input_type -> master_pb.AssignRequest 17, // 51: master_pb.Seaweed.StreamAssign:input_type -> master_pb.AssignRequest - 20, // 52: master_pb.Seaweed.Statistics:input_type -> master_pb.StatisticsRequest - 23, // 53: master_pb.Seaweed.CollectionList:input_type -> master_pb.CollectionListRequest - 28, // 54: master_pb.Seaweed.CollectionDelete:input_type -> master_pb.CollectionDeleteRequest - 35, // 55: master_pb.Seaweed.VolumeList:input_type -> master_pb.VolumeListRequest - 35, // 56: master_pb.Seaweed.VolumeListStream:input_type -> master_pb.VolumeListRequest - 38, // 57: master_pb.Seaweed.LookupEcVolume:input_type -> master_pb.LookupEcVolumeRequest - 40, // 58: master_pb.Seaweed.VacuumVolume:input_type -> master_pb.VacuumVolumeRequest - 42, // 59: master_pb.Seaweed.DisableVacuum:input_type -> master_pb.DisableVacuumRequest - 44, // 60: master_pb.Seaweed.EnableVacuum:input_type -> master_pb.EnableVacuumRequest - 46, // 61: master_pb.Seaweed.VolumeMarkReadonly:input_type -> master_pb.VolumeMarkReadonlyRequest - 48, // 62: master_pb.Seaweed.GetMasterConfiguration:input_type -> master_pb.GetMasterConfigurationRequest - 50, // 63: master_pb.Seaweed.ListClusterNodes:input_type -> master_pb.ListClusterNodesRequest - 52, // 64: master_pb.Seaweed.LeaseAdminToken:input_type -> master_pb.LeaseAdminTokenRequest - 54, // 65: master_pb.Seaweed.ReleaseAdminToken:input_type -> master_pb.ReleaseAdminTokenRequest - 56, // 66: master_pb.Seaweed.GetAdminLockStatus:input_type -> master_pb.GetAdminLockStatusRequest - 58, // 67: master_pb.Seaweed.Ping:input_type -> master_pb.PingRequest - 64, // 68: master_pb.Seaweed.RaftListClusterServers:input_type -> master_pb.RaftListClusterServersRequest - 60, // 69: master_pb.Seaweed.RaftAddServer:input_type -> master_pb.RaftAddServerRequest - 62, // 70: master_pb.Seaweed.RaftRemoveServer:input_type -> master_pb.RaftRemoveServerRequest - 66, // 71: master_pb.Seaweed.RaftLeadershipTransfer:input_type -> master_pb.RaftLeadershipTransferRequest - 18, // 72: master_pb.Seaweed.VolumeGrow:input_type -> master_pb.VolumeGrowRequest - 25, // 73: master_pb.Seaweed.CollectionStatistics:input_type -> master_pb.CollectionStatisticsRequest - 2, // 74: master_pb.Seaweed.SendHeartbeat:output_type -> master_pb.HeartbeatResponse - 12, // 75: master_pb.Seaweed.KeepConnected:output_type -> master_pb.KeepConnectedResponse - 15, // 76: master_pb.Seaweed.LookupVolume:output_type -> master_pb.LookupVolumeResponse - 19, // 77: master_pb.Seaweed.Assign:output_type -> master_pb.AssignResponse - 19, // 78: master_pb.Seaweed.StreamAssign:output_type -> master_pb.AssignResponse - 21, // 79: master_pb.Seaweed.Statistics:output_type -> master_pb.StatisticsResponse - 24, // 80: master_pb.Seaweed.CollectionList:output_type -> master_pb.CollectionListResponse - 29, // 81: master_pb.Seaweed.CollectionDelete:output_type -> master_pb.CollectionDeleteResponse - 36, // 82: master_pb.Seaweed.VolumeList:output_type -> master_pb.VolumeListResponse - 37, // 83: master_pb.Seaweed.VolumeListStream:output_type -> master_pb.VolumeListStreamResponse - 39, // 84: master_pb.Seaweed.LookupEcVolume:output_type -> master_pb.LookupEcVolumeResponse - 41, // 85: master_pb.Seaweed.VacuumVolume:output_type -> master_pb.VacuumVolumeResponse - 43, // 86: master_pb.Seaweed.DisableVacuum:output_type -> master_pb.DisableVacuumResponse - 45, // 87: master_pb.Seaweed.EnableVacuum:output_type -> master_pb.EnableVacuumResponse - 47, // 88: master_pb.Seaweed.VolumeMarkReadonly:output_type -> master_pb.VolumeMarkReadonlyResponse - 49, // 89: master_pb.Seaweed.GetMasterConfiguration:output_type -> master_pb.GetMasterConfigurationResponse - 51, // 90: master_pb.Seaweed.ListClusterNodes:output_type -> master_pb.ListClusterNodesResponse - 53, // 91: master_pb.Seaweed.LeaseAdminToken:output_type -> master_pb.LeaseAdminTokenResponse - 55, // 92: master_pb.Seaweed.ReleaseAdminToken:output_type -> master_pb.ReleaseAdminTokenResponse - 57, // 93: master_pb.Seaweed.GetAdminLockStatus:output_type -> master_pb.GetAdminLockStatusResponse - 59, // 94: master_pb.Seaweed.Ping:output_type -> master_pb.PingResponse - 65, // 95: master_pb.Seaweed.RaftListClusterServers:output_type -> master_pb.RaftListClusterServersResponse - 61, // 96: master_pb.Seaweed.RaftAddServer:output_type -> master_pb.RaftAddServerResponse - 63, // 97: master_pb.Seaweed.RaftRemoveServer:output_type -> master_pb.RaftRemoveServerResponse - 67, // 98: master_pb.Seaweed.RaftLeadershipTransfer:output_type -> master_pb.RaftLeadershipTransferResponse - 68, // 99: master_pb.Seaweed.VolumeGrow:output_type -> master_pb.VolumeGrowResponse - 26, // 100: master_pb.Seaweed.CollectionStatistics:output_type -> master_pb.CollectionStatisticsResponse - 74, // [74:101] is the sub-list for method output_type - 47, // [47:74] is the sub-list for method input_type + 22, // 52: master_pb.Seaweed.Statistics:input_type -> master_pb.StatisticsRequest + 25, // 53: master_pb.Seaweed.CollectionList:input_type -> master_pb.CollectionListRequest + 30, // 54: master_pb.Seaweed.CollectionDelete:input_type -> master_pb.CollectionDeleteRequest + 37, // 55: master_pb.Seaweed.VolumeList:input_type -> master_pb.VolumeListRequest + 37, // 56: master_pb.Seaweed.VolumeListStream:input_type -> master_pb.VolumeListRequest + 40, // 57: master_pb.Seaweed.LookupEcVolume:input_type -> master_pb.LookupEcVolumeRequest + 42, // 58: master_pb.Seaweed.VacuumVolume:input_type -> master_pb.VacuumVolumeRequest + 44, // 59: master_pb.Seaweed.DisableVacuum:input_type -> master_pb.DisableVacuumRequest + 46, // 60: master_pb.Seaweed.EnableVacuum:input_type -> master_pb.EnableVacuumRequest + 48, // 61: master_pb.Seaweed.VolumeMarkReadonly:input_type -> master_pb.VolumeMarkReadonlyRequest + 50, // 62: master_pb.Seaweed.GetMasterConfiguration:input_type -> master_pb.GetMasterConfigurationRequest + 52, // 63: master_pb.Seaweed.ListClusterNodes:input_type -> master_pb.ListClusterNodesRequest + 54, // 64: master_pb.Seaweed.LeaseAdminToken:input_type -> master_pb.LeaseAdminTokenRequest + 56, // 65: master_pb.Seaweed.ReleaseAdminToken:input_type -> master_pb.ReleaseAdminTokenRequest + 58, // 66: master_pb.Seaweed.GetAdminLockStatus:input_type -> master_pb.GetAdminLockStatusRequest + 60, // 67: master_pb.Seaweed.Ping:input_type -> master_pb.PingRequest + 66, // 68: master_pb.Seaweed.RaftListClusterServers:input_type -> master_pb.RaftListClusterServersRequest + 62, // 69: master_pb.Seaweed.RaftAddServer:input_type -> master_pb.RaftAddServerRequest + 64, // 70: master_pb.Seaweed.RaftRemoveServer:input_type -> master_pb.RaftRemoveServerRequest + 68, // 71: master_pb.Seaweed.RaftLeadershipTransfer:input_type -> master_pb.RaftLeadershipTransferRequest + 19, // 72: master_pb.Seaweed.ResumeVolumeGrowth:input_type -> master_pb.ResumeVolumeGrowthRequest + 18, // 73: master_pb.Seaweed.VolumeGrow:input_type -> master_pb.VolumeGrowRequest + 27, // 74: master_pb.Seaweed.CollectionStatistics:input_type -> master_pb.CollectionStatisticsRequest + 2, // 75: master_pb.Seaweed.SendHeartbeat:output_type -> master_pb.HeartbeatResponse + 12, // 76: master_pb.Seaweed.KeepConnected:output_type -> master_pb.KeepConnectedResponse + 15, // 77: master_pb.Seaweed.LookupVolume:output_type -> master_pb.LookupVolumeResponse + 21, // 78: master_pb.Seaweed.Assign:output_type -> master_pb.AssignResponse + 21, // 79: master_pb.Seaweed.StreamAssign:output_type -> master_pb.AssignResponse + 23, // 80: master_pb.Seaweed.Statistics:output_type -> master_pb.StatisticsResponse + 26, // 81: master_pb.Seaweed.CollectionList:output_type -> master_pb.CollectionListResponse + 31, // 82: master_pb.Seaweed.CollectionDelete:output_type -> master_pb.CollectionDeleteResponse + 38, // 83: master_pb.Seaweed.VolumeList:output_type -> master_pb.VolumeListResponse + 39, // 84: master_pb.Seaweed.VolumeListStream:output_type -> master_pb.VolumeListStreamResponse + 41, // 85: master_pb.Seaweed.LookupEcVolume:output_type -> master_pb.LookupEcVolumeResponse + 43, // 86: master_pb.Seaweed.VacuumVolume:output_type -> master_pb.VacuumVolumeResponse + 45, // 87: master_pb.Seaweed.DisableVacuum:output_type -> master_pb.DisableVacuumResponse + 47, // 88: master_pb.Seaweed.EnableVacuum:output_type -> master_pb.EnableVacuumResponse + 49, // 89: master_pb.Seaweed.VolumeMarkReadonly:output_type -> master_pb.VolumeMarkReadonlyResponse + 51, // 90: master_pb.Seaweed.GetMasterConfiguration:output_type -> master_pb.GetMasterConfigurationResponse + 53, // 91: master_pb.Seaweed.ListClusterNodes:output_type -> master_pb.ListClusterNodesResponse + 55, // 92: master_pb.Seaweed.LeaseAdminToken:output_type -> master_pb.LeaseAdminTokenResponse + 57, // 93: master_pb.Seaweed.ReleaseAdminToken:output_type -> master_pb.ReleaseAdminTokenResponse + 59, // 94: master_pb.Seaweed.GetAdminLockStatus:output_type -> master_pb.GetAdminLockStatusResponse + 61, // 95: master_pb.Seaweed.Ping:output_type -> master_pb.PingResponse + 67, // 96: master_pb.Seaweed.RaftListClusterServers:output_type -> master_pb.RaftListClusterServersResponse + 63, // 97: master_pb.Seaweed.RaftAddServer:output_type -> master_pb.RaftAddServerResponse + 65, // 98: master_pb.Seaweed.RaftRemoveServer:output_type -> master_pb.RaftRemoveServerResponse + 69, // 99: master_pb.Seaweed.RaftLeadershipTransfer:output_type -> master_pb.RaftLeadershipTransferResponse + 20, // 100: master_pb.Seaweed.ResumeVolumeGrowth:output_type -> master_pb.ResumeVolumeGrowthResponse + 70, // 101: master_pb.Seaweed.VolumeGrow:output_type -> master_pb.VolumeGrowResponse + 28, // 102: master_pb.Seaweed.CollectionStatistics:output_type -> master_pb.CollectionStatisticsResponse + 75, // [75:103] is the sub-list for method output_type + 47, // [47:75] is the sub-list for method input_type 47, // [47:47] is the sub-list for extension type_name 47, // [47:47] is the sub-list for extension extendee 0, // [0:47] is the sub-list for field type_name @@ -5811,7 +5900,7 @@ func file_master_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_master_proto_rawDesc), len(file_master_proto_rawDesc)), NumEnums: 0, - NumMessages: 83, + NumMessages: 85, NumExtensions: 0, NumServices: 1, }, diff --git a/weed/pb/master_pb/master_grpc.pb.go b/weed/pb/master_pb/master_grpc.pb.go index 5a59fcae28..c697724512 100644 --- a/weed/pb/master_pb/master_grpc.pb.go +++ b/weed/pb/master_pb/master_grpc.pb.go @@ -44,6 +44,7 @@ const ( Seaweed_RaftAddServer_FullMethodName = "/master_pb.Seaweed/RaftAddServer" Seaweed_RaftRemoveServer_FullMethodName = "/master_pb.Seaweed/RaftRemoveServer" Seaweed_RaftLeadershipTransfer_FullMethodName = "/master_pb.Seaweed/RaftLeadershipTransfer" + Seaweed_ResumeVolumeGrowth_FullMethodName = "/master_pb.Seaweed/ResumeVolumeGrowth" Seaweed_VolumeGrow_FullMethodName = "/master_pb.Seaweed/VolumeGrow" Seaweed_CollectionStatistics_FullMethodName = "/master_pb.Seaweed/CollectionStatistics" ) @@ -77,6 +78,7 @@ type SeaweedClient interface { RaftAddServer(ctx context.Context, in *RaftAddServerRequest, opts ...grpc.CallOption) (*RaftAddServerResponse, error) RaftRemoveServer(ctx context.Context, in *RaftRemoveServerRequest, opts ...grpc.CallOption) (*RaftRemoveServerResponse, error) RaftLeadershipTransfer(ctx context.Context, in *RaftLeadershipTransferRequest, opts ...grpc.CallOption) (*RaftLeadershipTransferResponse, error) + ResumeVolumeGrowth(ctx context.Context, in *ResumeVolumeGrowthRequest, opts ...grpc.CallOption) (*ResumeVolumeGrowthResponse, error) VolumeGrow(ctx context.Context, in *VolumeGrowRequest, opts ...grpc.CallOption) (*VolumeGrowResponse, error) CollectionStatistics(ctx context.Context, in *CollectionStatisticsRequest, opts ...grpc.CallOption) (*CollectionStatisticsResponse, error) } @@ -357,6 +359,16 @@ func (c *seaweedClient) RaftLeadershipTransfer(ctx context.Context, in *RaftLead return out, nil } +func (c *seaweedClient) ResumeVolumeGrowth(ctx context.Context, in *ResumeVolumeGrowthRequest, opts ...grpc.CallOption) (*ResumeVolumeGrowthResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ResumeVolumeGrowthResponse) + err := c.cc.Invoke(ctx, Seaweed_ResumeVolumeGrowth_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *seaweedClient) VolumeGrow(ctx context.Context, in *VolumeGrowRequest, opts ...grpc.CallOption) (*VolumeGrowResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(VolumeGrowResponse) @@ -406,6 +418,7 @@ type SeaweedServer interface { RaftAddServer(context.Context, *RaftAddServerRequest) (*RaftAddServerResponse, error) RaftRemoveServer(context.Context, *RaftRemoveServerRequest) (*RaftRemoveServerResponse, error) RaftLeadershipTransfer(context.Context, *RaftLeadershipTransferRequest) (*RaftLeadershipTransferResponse, error) + ResumeVolumeGrowth(context.Context, *ResumeVolumeGrowthRequest) (*ResumeVolumeGrowthResponse, error) VolumeGrow(context.Context, *VolumeGrowRequest) (*VolumeGrowResponse, error) CollectionStatistics(context.Context, *CollectionStatisticsRequest) (*CollectionStatisticsResponse, error) mustEmbedUnimplementedSeaweedServer() @@ -493,6 +506,9 @@ func (UnimplementedSeaweedServer) RaftRemoveServer(context.Context, *RaftRemoveS func (UnimplementedSeaweedServer) RaftLeadershipTransfer(context.Context, *RaftLeadershipTransferRequest) (*RaftLeadershipTransferResponse, error) { return nil, status.Error(codes.Unimplemented, "method RaftLeadershipTransfer not implemented") } +func (UnimplementedSeaweedServer) ResumeVolumeGrowth(context.Context, *ResumeVolumeGrowthRequest) (*ResumeVolumeGrowthResponse, error) { + return nil, status.Error(codes.Unimplemented, "method ResumeVolumeGrowth not implemented") +} func (UnimplementedSeaweedServer) VolumeGrow(context.Context, *VolumeGrowRequest) (*VolumeGrowResponse, error) { return nil, status.Error(codes.Unimplemented, "method VolumeGrow not implemented") } @@ -930,6 +946,24 @@ func _Seaweed_RaftLeadershipTransfer_Handler(srv interface{}, ctx context.Contex return interceptor(ctx, in, info, handler) } +func _Seaweed_ResumeVolumeGrowth_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ResumeVolumeGrowthRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SeaweedServer).ResumeVolumeGrowth(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Seaweed_ResumeVolumeGrowth_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SeaweedServer).ResumeVolumeGrowth(ctx, req.(*ResumeVolumeGrowthRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Seaweed_VolumeGrow_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(VolumeGrowRequest) if err := dec(in); err != nil { @@ -1057,6 +1091,10 @@ var Seaweed_ServiceDesc = grpc.ServiceDesc{ MethodName: "RaftLeadershipTransfer", Handler: _Seaweed_RaftLeadershipTransfer_Handler, }, + { + MethodName: "ResumeVolumeGrowth", + Handler: _Seaweed_ResumeVolumeGrowth_Handler, + }, { MethodName: "VolumeGrow", Handler: _Seaweed_VolumeGrow_Handler, diff --git a/weed/server/master_grpc_server.go b/weed/server/master_grpc_server.go index ac9e0577ef..dcba381e6d 100644 --- a/weed/server/master_grpc_server.go +++ b/weed/server/master_grpc_server.go @@ -184,6 +184,9 @@ func (ms *MasterServer) SendHeartbeat(stream master_pb.Seaweed_SendHeartbeatServ ms.Topo.Sequence.SetMax(heartbeat.MaxFileKey) ms.Topo.UpAdjustMaxVolumeId(needle.VolumeId(heartbeat.MaxVolumeIdSeen)) + if len(heartbeat.Volumes) > 0 { + ms.Topo.CheckReportedTopologyId(heartbeat.LastSeenTopologyId) + } if dn == nil { // Skip delta heartbeat for volume server versions better than 3.28 https://github.com/seaweedfs/seaweedfs/pull/3630 if heartbeat.Ip == "" { diff --git a/weed/server/master_grpc_server_volume.go b/weed/server/master_grpc_server_volume.go index 716d06779f..53bd2c27f0 100644 --- a/weed/server/master_grpc_server_volume.go +++ b/weed/server/master_grpc_server_volume.go @@ -471,6 +471,13 @@ func (ms *MasterServer) VolumeMarkReadonly(ctx context.Context, req *master_pb.V return resp, nil } +func (ms *MasterServer) ResumeVolumeGrowth(ctx context.Context, req *master_pb.ResumeVolumeGrowthRequest) (*master_pb.ResumeVolumeGrowthResponse, error) { + if !ms.Topo.IsLeader() { + return nil, raft.NotLeaderError + } + return &master_pb.ResumeVolumeGrowthResponse{WasFrozen: ms.Topo.ResumeVolumeGrowth()}, nil +} + func (ms *MasterServer) VolumeGrow(ctx context.Context, req *master_pb.VolumeGrowRequest) (*master_pb.VolumeGrowResponse, error) { if !ms.Topo.IsLeader() { return nil, raft.NotLeaderError diff --git a/weed/server/master_server.go b/weed/server/master_server.go index 22f33176e4..b2e0de3874 100644 --- a/weed/server/master_server.go +++ b/weed/server/master_server.go @@ -122,6 +122,8 @@ func NewMasterServer(r *mux.Router, option *MasterOption, peers map[string]pb.Se v.SetDefault("master.volume_growth.reservation_timeout", "5m") v.SetDefault("master.volume_growth.disable", false) option.VolumeGrowthDisabled = v.GetBool("master.volume_growth.disable") + v.SetDefault("master.volume_growth.freeze_on_topology_mismatch", true) + v.SetDefault("master.volume_growth.state_loss_recovery_wait", "0s") topology.VolumeGrowStrategy.Copy1Count = v.GetUint32("master.volume_growth.copy_1") topology.VolumeGrowStrategy.Copy2Count = v.GetUint32("master.volume_growth.copy_2") @@ -157,6 +159,9 @@ func NewMasterServer(r *mux.Router, option *MasterOption, peers map[string]pb.Se glog.Fatalf("create sequencer failed.") } ms.Topo = topology.NewTopology("topo", seq, uint64(ms.option.VolumeSizeLimitMB)*1024*1024, 5, replicationAsMin) + ms.Topo.SetGrowthFreezeConfig( + v.GetBool("master.volume_growth.freeze_on_topology_mismatch"), + v.GetDuration("master.volume_growth.state_loss_recovery_wait")) ms.vg = topology.NewDefaultVolumeGrowth() glog.V(0).Infoln("Volume Size Limit is", ms.option.VolumeSizeLimitMB, "MB") diff --git a/weed/server/raft_common.go b/weed/server/raft_common.go index 9a87a9952b..2d13124698 100644 --- a/weed/server/raft_common.go +++ b/weed/server/raft_common.go @@ -30,9 +30,15 @@ func recoverTopologyIdFromState(fsmState []byte, topo *topology.Topology) { // It uses the provided checkLeaderFn to verify leadership and persistFn to save the new ID. func EnsureTopologyId(topo *topology.Topology, checkLeaderFn func() bool, persistFn func(string) error) { if topo.GetTopologyId() != "" { + // The id arrived through raft replay or the mirror file; reports + // stashed while it was unknown can now be checked. + topo.SetTopologyInitPending(false) return } + topo.SetTopologyInitPending(true) + defer topo.SetTopologyInitPending(false) + topologyId := uuid.New().String() for { if !checkLeaderFn() { @@ -59,6 +65,7 @@ func EnsureTopologyId(topo *topology.Topology, checkLeaderFn func() bool, persis } else { glog.V(0).Infof("TopologyId generated: %s", topologyId) } + topo.DeferAllocation(topo.WarmupDuration()) break } } diff --git a/weed/server/raft_server.go b/weed/server/raft_server.go index 8130b7838e..f274a821d2 100644 --- a/weed/server/raft_server.go +++ b/weed/server/raft_server.go @@ -60,6 +60,10 @@ func (s StateMachine) Save() ([]byte, error) { MaxVolumeId: s.topo.GetMaxVolumeId(), TopologyId: s.topo.GetTopologyId(), } + if s.topo.IsGrowthFrozen() { + state.GrowthFrozen = new(bool) + *state.GrowthFrozen = true + } glog.V(1).Infof("Save raft state %+v", state) return json.Marshal(state) } @@ -76,6 +80,9 @@ func (s StateMachine) Recovery(data []byte) error { s.topo.SetTopologyId(state.TopologyId) glog.V(0).Infof("Recovered TopologyId: %s", state.TopologyId) } + if state.GrowthFrozen != nil { + s.topo.SetGrowthFrozen(*state.GrowthFrozen) + } if err := s.topo.PersistMaxVolumeId(state.MaxVolumeId); err != nil { glog.Warningf("persist max volume id %d: %v", state.MaxVolumeId, err) } @@ -98,6 +105,9 @@ func (s *StateMachine) Apply(l *hashicorpRaft.Log) interface{} { glog.V(0).Infof("Set TopologyId from raft log: %s", state.TopologyId) } } + if state.GrowthFrozen != nil { + s.topo.SetGrowthFrozen(*state.GrowthFrozen) + } if err := s.topo.PersistMaxVolumeId(state.MaxVolumeId); err != nil { glog.Warningf("persist max volume id %d: %v", state.MaxVolumeId, err) } @@ -107,10 +117,13 @@ func (s *StateMachine) Apply(l *hashicorpRaft.Log) interface{} { } func (s *StateMachine) Snapshot() (hashicorpRaft.FSMSnapshot, error) { - return &topology.MaxVolumeIdCommand{ - MaxVolumeId: s.topo.GetMaxVolumeId(), - TopologyId: s.topo.GetTopologyId(), - }, nil + frozen := s.topo.IsGrowthFrozen() + state := &topology.MaxVolumeIdCommand{ + MaxVolumeId: s.topo.GetMaxVolumeId(), + TopologyId: s.topo.GetTopologyId(), + GrowthFrozen: &frozen, + } + return state, nil } func (s *StateMachine) Restore(r io.ReadCloser) error { diff --git a/weed/shell/command_volume_growth_resume.go b/weed/shell/command_volume_growth_resume.go new file mode 100644 index 0000000000..7cad7c71ab --- /dev/null +++ b/weed/shell/command_volume_growth_resume.go @@ -0,0 +1,52 @@ +package shell + +import ( + "context" + "fmt" + "io" + + "github.com/seaweedfs/seaweedfs/weed/pb/master_pb" +) + +func init() { + Commands = append(Commands, &commandVolumeGrowthResume{}) +} + +type commandVolumeGrowthResume struct { +} + +func (c *commandVolumeGrowthResume) Name() string { + return "volume.growth.resume" +} + +func (c *commandVolumeGrowthResume) Help() string { + return `resume volume growth frozen after detected master state loss + + volume.growth.resume + + Volume growth freezes automatically when a volume server reports a + topology id that differs from this cluster's, which means the master + state was rebuilt and max volume id knowledge may be incomplete. Run + this after verifying the cluster inventory so new ids are not reused. + +` +} + +func (c *commandVolumeGrowthResume) HasTag(CommandTag) bool { + return false +} + +func (c *commandVolumeGrowthResume) Do(args []string, commandEnv *CommandEnv, writer io.Writer) (err error) { + return commandEnv.MasterClient.WithClient(context.Background(), false, func(client master_pb.SeaweedClient) error { + resp, err := client.ResumeVolumeGrowth(context.Background(), &master_pb.ResumeVolumeGrowthRequest{}) + if err != nil { + return err + } + if resp.WasFrozen { + fmt.Fprintf(writer, "volume growth resumed\n") + } else { + fmt.Fprintf(writer, "volume growth was not frozen\n") + } + return nil + }) +} diff --git a/weed/stats/metrics.go b/weed/stats/metrics.go index 7b39b943be..2b37256f7a 100644 --- a/weed/stats/metrics.go +++ b/weed/stats/metrics.go @@ -101,6 +101,14 @@ var ( Help: "admin lock", }, []string{"client"}) + MasterVolumeGrowthFrozen = prometheus.NewGauge( + prometheus.GaugeOpts{ + Namespace: Namespace, + Subsystem: subsystemMaster, + Name: "volume_growth_frozen", + Help: "1 while volume growth is frozen after detected master state loss", + }) + MasterReceivedHeartbeatCounter = prometheus.NewCounterVec( prometheus.CounterOpts{ Namespace: Namespace, @@ -991,6 +999,7 @@ func init() { Gather.MustRegister(MasterClientConnectCounter) Gather.MustRegister(MasterRaftIsleader) Gather.MustRegister(MasterAdminLock) + Gather.MustRegister(MasterVolumeGrowthFrozen) Gather.MustRegister(MasterReceivedHeartbeatCounter) Gather.MustRegister(MasterLeaderChangeCounter) Gather.MustRegister(MasterReplicaPlacementMismatch) diff --git a/weed/topology/cluster_commands.go b/weed/topology/cluster_commands.go index 1c713201e7..a4d7527863 100644 --- a/weed/topology/cluster_commands.go +++ b/weed/topology/cluster_commands.go @@ -13,6 +13,9 @@ import ( type MaxVolumeIdCommand struct { MaxVolumeId needle.VolumeId `json:"maxVolumeId"` TopologyId string `json:"topologyId"` + // GrowthFrozen replicates the volume-growth freeze through raft so a + // leader change does not silently lift it. nil means no change. + GrowthFrozen *bool `json:"growthFrozen,omitempty"` } func NewMaxVolumeIdCommand(value needle.VolumeId, topologyId string) *MaxVolumeIdCommand { @@ -43,6 +46,9 @@ func (c *MaxVolumeIdCommand) Apply(server raft.Server) (interface{}, error) { } } } + if c.GrowthFrozen != nil { + topo.SetGrowthFrozen(*c.GrowthFrozen) + } if err := topo.PersistMaxVolumeId(c.MaxVolumeId); err != nil { glog.Warningf("persist max volume id %d: %v", c.MaxVolumeId, err) } diff --git a/weed/topology/growth_freeze_test.go b/weed/topology/growth_freeze_test.go new file mode 100644 index 0000000000..3b296b14df --- /dev/null +++ b/weed/topology/growth_freeze_test.go @@ -0,0 +1,146 @@ +package topology + +import ( + "testing" + "time" +) + +func TestGrowthFreezeOnTopologyMismatch(t *testing.T) { + topo := NewTopology("topo", nil, 128, 3, false) + topo.SetGrowthFreezeConfig(true, 0) + topo.SetTopologyId("cluster-a") + + topo.CheckReportedTopologyId("cluster-a") + if topo.IsGrowthFrozen() { + t.Fatal("matching topology id should not freeze growth") + } + + topo.CheckReportedTopologyId("") + topo.CheckReportedTopologyId("cluster-b") + if !topo.IsGrowthFrozen() { + t.Fatal("mismatching topology id should freeze growth") + } + + if !topo.ResumeVolumeGrowth() { + t.Fatal("resume should report the frozen state") + } + if topo.IsGrowthFrozen() { + t.Fatal("growth should be unfrozen after resume") + } + if topo.ResumeVolumeGrowth() { + t.Fatal("second resume should report no frozen state") + } +} + +func TestGrowthFreezeDisabled(t *testing.T) { + topo := NewTopology("topo", nil, 128, 3, false) + topo.SetGrowthFreezeConfig(false, 0) + topo.SetTopologyId("cluster-a") + + topo.CheckReportedTopologyId("cluster-b") + if topo.IsGrowthFrozen() { + t.Fatal("freeze_on_topology_mismatch=false should not freeze") + } +} + +func TestGrowthFreezeAutoRecovery(t *testing.T) { + topo := NewTopology("topo", nil, 128, 3, false) + topo.SetGrowthFreezeConfig(true, 50*time.Millisecond) + topo.SetTopologyId("cluster-a") + + topo.CheckReportedTopologyId("cluster-b") + if !topo.IsGrowthFrozen() { + t.Fatal("mismatching topology id should freeze growth") + } + time.Sleep(60 * time.Millisecond) + if topo.IsGrowthFrozen() { + t.Fatal("growth should auto-resume past the recovery wait") + } +} + +func TestCheckReportedTopologyIdBeforeTopologyIdKnown(t *testing.T) { + topo := NewTopology("topo", nil, 128, 3, false) + topo.SetGrowthFreezeConfig(true, 0) + + topo.CheckReportedTopologyId("cluster-b") + if topo.IsGrowthFrozen() { + t.Fatal("empty local topology id should not trigger the freeze") + } + + topo.SetTopologyId("cluster-c") + topo.SetTopologyInitPending(false) + if !topo.IsGrowthFrozen() { + t.Fatal("a report stashed before the topology id was known should still freeze growth") + } +} + +func TestReportedTopologyIdStashDoesNotFreezeOnMatch(t *testing.T) { + topo := NewTopology("topo", nil, 128, 3, false) + topo.SetGrowthFreezeConfig(true, 0) + + topo.CheckReportedTopologyId("cluster-a") + topo.SetTopologyId("cluster-a") + topo.SetTopologyInitPending(false) + if topo.IsGrowthFrozen() { + t.Fatal("a stashed report matching the minted id should not freeze growth") + } +} + +func TestGrowthFreezeSurvivesMirrorRestore(t *testing.T) { + dir := t.TempDir() + file := dir + "/max_volume_id" + + frozen := NewTopology("topo", nil, 128, 3, false) + frozen.SetGrowthFreezeConfig(true, 0) + frozen.SetMaxVolumeIdFile(file) + frozen.SetTopologyId("cluster-a") + frozen.CheckReportedTopologyId("cluster-b") + if !frozen.IsGrowthFrozen() { + t.Fatal("expected frozen growth") + } + if err := frozen.PersistMaxVolumeId(42); err != nil { + t.Fatalf("persist: %v", err) + } + + restarted := NewTopology("topo", nil, 128, 3, false) + restarted.SetGrowthFreezeConfig(true, 0) + restarted.SetMaxVolumeIdFile(file) + if !restarted.IsGrowthFrozen() { + t.Fatal("freeze flag should survive a mirror restore") + } + if !restarted.ResumeVolumeGrowth() { + t.Fatal("restored freeze should be resumable") + } +} + +func TestGrowthFreezeCommandApply(t *testing.T) { + topo := NewTopology("topo", nil, 128, 3, false) + topo.SetGrowthFreezeConfig(true, 0) + + frozen := true + topo.SetGrowthFrozen(frozen) + if !topo.IsGrowthFrozen() { + t.Fatal("replicated freeze should set the flag") + } + unfrozen := false + topo.SetGrowthFrozen(unfrozen) + if topo.IsGrowthFrozen() { + t.Fatal("replicated unfreeze should clear the flag") + } +} + +func TestAllocationDelay(t *testing.T) { + topo := NewTopology("topo", nil, 128, 3, false) + + if wait := topo.allocationDelay(); wait > 0 { + t.Fatalf("unexpected deferral: %v", wait) + } + topo.DeferAllocation(50 * time.Millisecond) + if wait := topo.allocationDelay(); wait <= 0 { + t.Fatal("expected a positive deferral after DeferAllocation") + } + topo.DeferAllocation(-time.Second) + if wait := topo.allocationDelay(); wait > 0 { + t.Fatalf("expired deferral should not delay: %v", wait) + } +} diff --git a/weed/topology/topology.go b/weed/topology/topology.go index cd4d92ab37..6933981800 100644 --- a/weed/topology/topology.go +++ b/weed/topology/topology.go @@ -84,10 +84,21 @@ type Topology struct { dataNodeIndex map[string]*DataNode dataNodeIndexLock sync.RWMutex - maxVolumeIdFile string - maxVolumeIdFileLock sync.Mutex - lastPersistedMaxVolumeId atomic.Uint32 - lastPersistedTopologyId atomic.Value + maxVolumeIdFile string + maxVolumeIdFileLock sync.Mutex + lastPersistedMaxVolumeId atomic.Uint32 + lastPersistedTopologyId atomic.Value + lastPersistedGrowthFrozen atomic.Bool + + growthFrozen atomic.Bool + growthFrozenAt atomic.Int64 + freezeOnMismatch atomic.Bool + stateLossRecoveryWait atomic.Int64 + allocationNotBefore atomic.Int64 + topologyInitPending atomic.Bool + + reportedTopologyIdsLock sync.Mutex + pendingReportedTopologyIds map[string]struct{} } func NewTopology(id string, seq sequence.Sequencer, volumeSizeLimit uint64, pulse int, replicationAsMin bool) *Topology { @@ -394,6 +405,22 @@ func (t *Topology) NextVolumeId() (needle.VolumeId, error) { return 0, fmt.Errorf("as leader can not read yet") } + for t.topologyInitPending.Load() { + if !t.IsLeaderAndCanRead() { + return 0, fmt.Errorf("as leader can not read yet") + } + time.Sleep(100 * time.Millisecond) + } + if t.IsGrowthFrozen() { + return 0, fmt.Errorf("volume growth is frozen after master state loss; verify the cluster inventory, then run: volume.growth.resume") + } + if wait := t.allocationDelay(); wait > 0 { + glog.V(0).Infof("deferring volume id allocation for %v", wait) + time.Sleep(wait) + if t.IsGrowthFrozen() { + return 0, fmt.Errorf("volume growth is frozen after master state loss; verify the cluster inventory, then run: volume.growth.resume") + } + } vid := t.GetMaxVolumeId() next := vid.Next() @@ -950,6 +977,135 @@ func (t *Topology) SetTopologyId(topologyId string) { } } +func (t *Topology) SetGrowthFreezeConfig(freezeOnMismatch bool, recoveryWait time.Duration) { + t.freezeOnMismatch.Store(freezeOnMismatch) + t.stateLossRecoveryWait.Store(int64(recoveryWait)) +} + +// CheckReportedTopologyId freezes growth when a volume server reports a +// topology id different from this cluster's: the topology id survives raft +// state cleanup, so a mismatch means the master's state was rebuilt (or a +// foreign disk was cloned in). +func (t *Topology) CheckReportedTopologyId(reported string) { + if reported == "" || !t.freezeOnMismatch.Load() { + return + } + own := t.GetTopologyId() + if own == "" { + // The local topology id is still being minted. Keep the report so a + // later heartbeat echo cannot erase the mismatch on the server side + // before the freeze check ever ran. + t.reportedTopologyIdsLock.Lock() + if t.pendingReportedTopologyIds == nil { + t.pendingReportedTopologyIds = make(map[string]struct{}) + } + t.pendingReportedTopologyIds[reported] = struct{}{} + t.reportedTopologyIdsLock.Unlock() + return + } + if reported == own { + return + } + t.growthFrozenAt.Store(time.Now().UnixNano()) + if t.growthFrozen.CompareAndSwap(false, true) { + stats.MasterVolumeGrowthFrozen.Set(1) + glog.Errorf("volume growth frozen: a volume server reports topology id %s but this cluster is %s; the master state was rebuilt. Verify the cluster inventory, then run: volume.growth.resume", reported, own) + t.applyGrowthFreeze(true) + } +} + +func (t *Topology) IsGrowthFrozen() bool { + if !t.growthFrozen.Load() { + return false + } + if wait := t.stateLossRecoveryWait.Load(); wait > 0 { + if time.Duration(time.Now().UnixNano()-t.growthFrozenAt.Load()) > time.Duration(wait) { + if t.growthFrozen.CompareAndSwap(true, false) { + stats.MasterVolumeGrowthFrozen.Set(0) + glog.V(0).Infof("volume growth unfrozen after %v", time.Duration(wait)) + } + return false + } + } + return true +} + +func (t *Topology) ResumeVolumeGrowth() bool { + if !t.growthFrozen.CompareAndSwap(true, false) { + return false + } + stats.MasterVolumeGrowthFrozen.Set(0) + glog.V(0).Infof("volume growth resumed by operator") + t.applyGrowthFreeze(false) + return true +} + +// SetGrowthFrozen applies a replicated freeze state on every master. The +// timestamp lands before the flag so a reader can never see frozen with a +// zero time and misjudge the auto-resume window. +func (t *Topology) SetGrowthFrozen(frozen bool) { + if frozen { + t.growthFrozenAt.Store(time.Now().UnixNano()) + if t.growthFrozen.CompareAndSwap(false, true) { + stats.MasterVolumeGrowthFrozen.Set(1) + glog.V(0).Infof("volume growth freeze applied from raft") + } + return + } + if t.growthFrozen.CompareAndSwap(true, false) { + stats.MasterVolumeGrowthFrozen.Set(0) + } +} + +// applyGrowthFreeze replicates the freeze flag so followers keep it across a +// leader change. No raft server (single-master test topologies) just sets it. +func (t *Topology) applyGrowthFreeze(frozen bool) { + cmd := NewMaxVolumeIdCommand(t.GetMaxVolumeId(), t.GetTopologyId()) + cmd.GrowthFrozen = &frozen + t.RaftServerAccessLock.RLock() + defer t.RaftServerAccessLock.RUnlock() + if t.RaftServer != nil { + if _, err := t.RaftServer.Do(cmd); err != nil { + glog.Warningf("apply growth freeze %v: %v", frozen, err) + } + } else if t.HashicorpRaft != nil { + if b, err := json.Marshal(cmd); err != nil { + glog.Warningf("marshal growth freeze %v: %v", frozen, err) + } else if future := t.HashicorpRaft.Apply(b, time.Second); future.Error() != nil { + glog.Warningf("apply growth freeze %v: %v", frozen, future.Error()) + } + } else { + t.SetGrowthFrozen(frozen) + } +} + +// SetTopologyInitPending gates allocation while a topology id is being +// minted, so growth cannot slip in before the warmup window is installed. +func (t *Topology) SetTopologyInitPending(pending bool) { + t.topologyInitPending.Store(pending) + if pending { + return + } + t.reportedTopologyIdsLock.Lock() + reported := t.pendingReportedTopologyIds + t.pendingReportedTopologyIds = nil + t.reportedTopologyIdsLock.Unlock() + for id := range reported { + t.CheckReportedTopologyId(id) + } +} + +// DeferAllocation holds off new id allocation for d. Called when the leader +// mints a fresh topology id: on a rebuilt master that window gives veteran +// servers a pulse to raise the bound or trip the freeze. +func (t *Topology) DeferAllocation(d time.Duration) { + t.allocationNotBefore.Store(time.Now().Add(d).UnixNano()) +} + +func (t *Topology) allocationDelay() time.Duration { + return time.Until(time.Unix(0, t.allocationNotBefore.Load())) +} + // SetMaxVolumeIdFile mirrors the allocation bound to a file outside raft, so // a master whose raft state is gone still restores a safe boundary. An // existing file seeds both the bound and the topology id. @@ -970,6 +1126,10 @@ func (t *Topology) SetMaxVolumeIdFile(file string) { if cmd.TopologyId != "" { t.SetTopologyId(cmd.TopologyId) } + if cmd.GrowthFrozen != nil { + t.lastPersistedGrowthFrozen.Store(*cmd.GrowthFrozen) + t.SetGrowthFrozen(*cmd.GrowthFrozen) + } } // PersistMaxVolumeId writes the bound to the mirror file. Called by the @@ -977,8 +1137,9 @@ func (t *Topology) SetMaxVolumeIdFile(file string) { // recovery, so follower mirrors stay current too. func (t *Topology) PersistMaxVolumeId(vid needle.VolumeId) error { topoId := t.GetTopologyId() + frozen := t.IsGrowthFrozen() mirrored := func() bool { - return t.lastPersistedMaxVolumeId.Load() >= uint32(vid) && t.lastPersistedTopologyId.Load() == topoId + return t.lastPersistedMaxVolumeId.Load() >= uint32(vid) && t.lastPersistedTopologyId.Load() == topoId && t.lastPersistedGrowthFrozen.Load() == frozen } if mirrored() { return nil @@ -991,9 +1152,12 @@ func (t *Topology) PersistMaxVolumeId(vid needle.VolumeId) error { if t.maxVolumeIdFile == "" { t.lastPersistedMaxVolumeId.Store(uint32(vid)) t.lastPersistedTopologyId.Store(topoId) + t.lastPersistedGrowthFrozen.Store(frozen) return nil } - b, err := json.Marshal(NewMaxVolumeIdCommand(vid, topoId)) + cmd := NewMaxVolumeIdCommand(vid, topoId) + cmd.GrowthFrozen = &frozen + b, err := json.Marshal(cmd) if err != nil { return err } @@ -1021,5 +1185,6 @@ func (t *Topology) PersistMaxVolumeId(vid needle.VolumeId) error { } t.lastPersistedMaxVolumeId.Store(uint32(vid)) t.lastPersistedTopologyId.Store(topoId) + t.lastPersistedGrowthFrozen.Store(frozen) return nil }