diff --git a/other/java/client/src/main/proto/filer.proto b/other/java/client/src/main/proto/filer.proto index f5b91e1a4..8e64b3faa 100644 --- a/other/java/client/src/main/proto/filer.proto +++ b/other/java/client/src/main/proto/filer.proto @@ -37,6 +37,9 @@ service SeaweedFiler { rpc ObjectTransactionBatch (ObjectTransactionBatchRequest) returns (ObjectTransactionBatchResponse) { } + rpc PosixLock (PosixLockRequest) returns (PosixLockResponse) { + } + rpc AtomicRenameEntry (AtomicRenameEntryRequest) returns (AtomicRenameEntryResponse) { } rpc StreamRenameEntry (StreamRenameEntryRequest) returns (stream StreamRenameEntryResponse) { @@ -351,7 +354,7 @@ message ObjectTransactionRequest { repeated ObjectMutation mutations = 3; bool is_from_other_cluster = 4; repeated int32 signatures = 5; - string condition_key = 6; + string condition_key = 6; // if set, evaluate the condition against this entry instead of lock_key (still locking lock_key) string route_key = 7; // ring key identifying the owner filer; a non-owner forwards the whole transaction to it bool is_moved = 8; // set on a forwarded transaction so the receiver applies it locally instead of forwarding again } @@ -361,6 +364,46 @@ message ObjectTransactionResponse { FilerError error_code = 2; } +// PosixLockRange is one advisory byte-range lock. Owner identity is (sid, owner): +// sid is the mount session, owner the FUSE lock owner within it, so owners from +// different mounts never alias. end is inclusive (max uint64 = to EOF); is_flock +// separates the flock and fcntl namespaces, which never conflict. +message PosixLockRange { + uint64 start = 1; + uint64 end = 2; + uint32 type = 3; // 1=read, 2=write, 3=unlock + uint64 sid = 4; + uint64 owner = 5; + uint32 pid = 6; // holder pid, for get_lk reporting only + bool is_flock = 7; +} + +// PosixLock routes an advisory lock operation to the inode's owner filer, which +// holds the authoritative in-memory lock table. key is the inode identity ring +// key (the file path, or hl: for a hardlink) used both to resolve the +// owner and to index the table. A non-owner filer forwards the request one hop; +// is_moved bounds it so a stale ring view cannot loop. +message PosixLockRequest { + string key = 1; + bool is_moved = 2; + PosixLockOp op = 3; + PosixLockRange lock = 4; +} + +enum PosixLockOp { + TRY_LOCK = 0; // grant lock or report conflict (non-blocking) + UNLOCK = 1; // release lock's owner's locks over its range + GET_LK = 2; // report a conflicting lock, if any + RELEASE_POSIX_OWNER = 3; // drop the owner's fcntl locks (flush-time) + RELEASE_FLOCK_OWNER = 4; // drop the owner's flock locks (release-time) +} + +message PosixLockResponse { + bool granted = 1; // for TRY_LOCK: whether the lock was granted + bool has_conflict = 2; // whether conflict is populated + PosixLockRange conflict = 3; // the blocking lock (TRY_LOCK conflict / GET_LK result) +} + // ObjectTransactionBatch applies several object transactions in one round trip, // each under its own per-path lock and independent of the others (no cross-key // atomicity). A caller groups keys that route to the same owner filer and sends diff --git a/weed/pb/filer.proto b/weed/pb/filer.proto index 5203bf619..8e64b3faa 100644 --- a/weed/pb/filer.proto +++ b/weed/pb/filer.proto @@ -37,6 +37,9 @@ service SeaweedFiler { rpc ObjectTransactionBatch (ObjectTransactionBatchRequest) returns (ObjectTransactionBatchResponse) { } + rpc PosixLock (PosixLockRequest) returns (PosixLockResponse) { + } + rpc AtomicRenameEntry (AtomicRenameEntryRequest) returns (AtomicRenameEntryResponse) { } rpc StreamRenameEntry (StreamRenameEntryRequest) returns (stream StreamRenameEntryResponse) { @@ -361,6 +364,46 @@ message ObjectTransactionResponse { FilerError error_code = 2; } +// PosixLockRange is one advisory byte-range lock. Owner identity is (sid, owner): +// sid is the mount session, owner the FUSE lock owner within it, so owners from +// different mounts never alias. end is inclusive (max uint64 = to EOF); is_flock +// separates the flock and fcntl namespaces, which never conflict. +message PosixLockRange { + uint64 start = 1; + uint64 end = 2; + uint32 type = 3; // 1=read, 2=write, 3=unlock + uint64 sid = 4; + uint64 owner = 5; + uint32 pid = 6; // holder pid, for get_lk reporting only + bool is_flock = 7; +} + +// PosixLock routes an advisory lock operation to the inode's owner filer, which +// holds the authoritative in-memory lock table. key is the inode identity ring +// key (the file path, or hl: for a hardlink) used both to resolve the +// owner and to index the table. A non-owner filer forwards the request one hop; +// is_moved bounds it so a stale ring view cannot loop. +message PosixLockRequest { + string key = 1; + bool is_moved = 2; + PosixLockOp op = 3; + PosixLockRange lock = 4; +} + +enum PosixLockOp { + TRY_LOCK = 0; // grant lock or report conflict (non-blocking) + UNLOCK = 1; // release lock's owner's locks over its range + GET_LK = 2; // report a conflicting lock, if any + RELEASE_POSIX_OWNER = 3; // drop the owner's fcntl locks (flush-time) + RELEASE_FLOCK_OWNER = 4; // drop the owner's flock locks (release-time) +} + +message PosixLockResponse { + bool granted = 1; // for TRY_LOCK: whether the lock was granted + bool has_conflict = 2; // whether conflict is populated + PosixLockRange conflict = 3; // the blocking lock (TRY_LOCK conflict / GET_LK result) +} + // ObjectTransactionBatch applies several object transactions in one round trip, // each under its own per-path lock and independent of the others (no cross-key // atomicity). A caller groups keys that route to the same owner filer and sends diff --git a/weed/pb/filer_pb/filer.pb.go b/weed/pb/filer_pb/filer.pb.go index b6f8b29a9..02a34fc9e 100644 --- a/weed/pb/filer_pb/filer.pb.go +++ b/weed/pb/filer_pb/filer.pb.go @@ -136,6 +136,61 @@ func (FilerError) EnumDescriptor() ([]byte, []int) { return file_filer_proto_rawDescGZIP(), []int{1} } +type PosixLockOp int32 + +const ( + PosixLockOp_TRY_LOCK PosixLockOp = 0 // grant lock or report conflict (non-blocking) + PosixLockOp_UNLOCK PosixLockOp = 1 // release lock's owner's locks over its range + PosixLockOp_GET_LK PosixLockOp = 2 // report a conflicting lock, if any + PosixLockOp_RELEASE_POSIX_OWNER PosixLockOp = 3 // drop the owner's fcntl locks (flush-time) + PosixLockOp_RELEASE_FLOCK_OWNER PosixLockOp = 4 // drop the owner's flock locks (release-time) +) + +// Enum value maps for PosixLockOp. +var ( + PosixLockOp_name = map[int32]string{ + 0: "TRY_LOCK", + 1: "UNLOCK", + 2: "GET_LK", + 3: "RELEASE_POSIX_OWNER", + 4: "RELEASE_FLOCK_OWNER", + } + PosixLockOp_value = map[string]int32{ + "TRY_LOCK": 0, + "UNLOCK": 1, + "GET_LK": 2, + "RELEASE_POSIX_OWNER": 3, + "RELEASE_FLOCK_OWNER": 4, + } +) + +func (x PosixLockOp) Enum() *PosixLockOp { + p := new(PosixLockOp) + *p = x + return p +} + +func (x PosixLockOp) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (PosixLockOp) Descriptor() protoreflect.EnumDescriptor { + return file_filer_proto_enumTypes[2].Descriptor() +} + +func (PosixLockOp) Type() protoreflect.EnumType { + return &file_filer_proto_enumTypes[2] +} + +func (x PosixLockOp) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use PosixLockOp.Descriptor instead. +func (PosixLockOp) EnumDescriptor() ([]byte, []int) { + return file_filer_proto_rawDescGZIP(), []int{2} +} + type WriteCondition_Kind int32 const ( @@ -187,11 +242,11 @@ func (x WriteCondition_Kind) String() string { } func (WriteCondition_Kind) Descriptor() protoreflect.EnumDescriptor { - return file_filer_proto_enumTypes[2].Descriptor() + return file_filer_proto_enumTypes[3].Descriptor() } func (WriteCondition_Kind) Type() protoreflect.EnumType { - return &file_filer_proto_enumTypes[2] + return &file_filer_proto_enumTypes[3] } func (x WriteCondition_Kind) Number() protoreflect.EnumNumber { @@ -239,11 +294,11 @@ func (x ObjectMutation_Type) String() string { } func (ObjectMutation_Type) Descriptor() protoreflect.EnumDescriptor { - return file_filer_proto_enumTypes[3].Descriptor() + return file_filer_proto_enumTypes[4].Descriptor() } func (ObjectMutation_Type) Type() protoreflect.EnumType { - return &file_filer_proto_enumTypes[3] + return &file_filer_proto_enumTypes[4] } func (x ObjectMutation_Type) Number() protoreflect.EnumNumber { @@ -1823,6 +1878,235 @@ func (x *ObjectTransactionResponse) GetErrorCode() FilerError { return FilerError_OK } +// PosixLockRange is one advisory byte-range lock. Owner identity is (sid, owner): +// sid is the mount session, owner the FUSE lock owner within it, so owners from +// different mounts never alias. end is inclusive (max uint64 = to EOF); is_flock +// separates the flock and fcntl namespaces, which never conflict. +type PosixLockRange struct { + state protoimpl.MessageState `protogen:"open.v1"` + Start uint64 `protobuf:"varint,1,opt,name=start,proto3" json:"start,omitempty"` + End uint64 `protobuf:"varint,2,opt,name=end,proto3" json:"end,omitempty"` + Type uint32 `protobuf:"varint,3,opt,name=type,proto3" json:"type,omitempty"` // 1=read, 2=write, 3=unlock + Sid uint64 `protobuf:"varint,4,opt,name=sid,proto3" json:"sid,omitempty"` + Owner uint64 `protobuf:"varint,5,opt,name=owner,proto3" json:"owner,omitempty"` + Pid uint32 `protobuf:"varint,6,opt,name=pid,proto3" json:"pid,omitempty"` // holder pid, for get_lk reporting only + IsFlock bool `protobuf:"varint,7,opt,name=is_flock,json=isFlock,proto3" json:"is_flock,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PosixLockRange) Reset() { + *x = PosixLockRange{} + mi := &file_filer_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PosixLockRange) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PosixLockRange) ProtoMessage() {} + +func (x *PosixLockRange) ProtoReflect() protoreflect.Message { + mi := &file_filer_proto_msgTypes[18] + 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 PosixLockRange.ProtoReflect.Descriptor instead. +func (*PosixLockRange) Descriptor() ([]byte, []int) { + return file_filer_proto_rawDescGZIP(), []int{18} +} + +func (x *PosixLockRange) GetStart() uint64 { + if x != nil { + return x.Start + } + return 0 +} + +func (x *PosixLockRange) GetEnd() uint64 { + if x != nil { + return x.End + } + return 0 +} + +func (x *PosixLockRange) GetType() uint32 { + if x != nil { + return x.Type + } + return 0 +} + +func (x *PosixLockRange) GetSid() uint64 { + if x != nil { + return x.Sid + } + return 0 +} + +func (x *PosixLockRange) GetOwner() uint64 { + if x != nil { + return x.Owner + } + return 0 +} + +func (x *PosixLockRange) GetPid() uint32 { + if x != nil { + return x.Pid + } + return 0 +} + +func (x *PosixLockRange) GetIsFlock() bool { + if x != nil { + return x.IsFlock + } + return false +} + +// PosixLock routes an advisory lock operation to the inode's owner filer, which +// holds the authoritative in-memory lock table. key is the inode identity ring +// key (the file path, or hl: for a hardlink) used both to resolve the +// owner and to index the table. A non-owner filer forwards the request one hop; +// is_moved bounds it so a stale ring view cannot loop. +type PosixLockRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + IsMoved bool `protobuf:"varint,2,opt,name=is_moved,json=isMoved,proto3" json:"is_moved,omitempty"` + Op PosixLockOp `protobuf:"varint,3,opt,name=op,proto3,enum=filer_pb.PosixLockOp" json:"op,omitempty"` + Lock *PosixLockRange `protobuf:"bytes,4,opt,name=lock,proto3" json:"lock,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PosixLockRequest) Reset() { + *x = PosixLockRequest{} + mi := &file_filer_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PosixLockRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PosixLockRequest) ProtoMessage() {} + +func (x *PosixLockRequest) ProtoReflect() protoreflect.Message { + mi := &file_filer_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 PosixLockRequest.ProtoReflect.Descriptor instead. +func (*PosixLockRequest) Descriptor() ([]byte, []int) { + return file_filer_proto_rawDescGZIP(), []int{19} +} + +func (x *PosixLockRequest) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *PosixLockRequest) GetIsMoved() bool { + if x != nil { + return x.IsMoved + } + return false +} + +func (x *PosixLockRequest) GetOp() PosixLockOp { + if x != nil { + return x.Op + } + return PosixLockOp_TRY_LOCK +} + +func (x *PosixLockRequest) GetLock() *PosixLockRange { + if x != nil { + return x.Lock + } + return nil +} + +type PosixLockResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Granted bool `protobuf:"varint,1,opt,name=granted,proto3" json:"granted,omitempty"` // for TRY_LOCK: whether the lock was granted + HasConflict bool `protobuf:"varint,2,opt,name=has_conflict,json=hasConflict,proto3" json:"has_conflict,omitempty"` // whether conflict is populated + Conflict *PosixLockRange `protobuf:"bytes,3,opt,name=conflict,proto3" json:"conflict,omitempty"` // the blocking lock (TRY_LOCK conflict / GET_LK result) + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PosixLockResponse) Reset() { + *x = PosixLockResponse{} + mi := &file_filer_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PosixLockResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PosixLockResponse) ProtoMessage() {} + +func (x *PosixLockResponse) ProtoReflect() protoreflect.Message { + mi := &file_filer_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 PosixLockResponse.ProtoReflect.Descriptor instead. +func (*PosixLockResponse) Descriptor() ([]byte, []int) { + return file_filer_proto_rawDescGZIP(), []int{20} +} + +func (x *PosixLockResponse) GetGranted() bool { + if x != nil { + return x.Granted + } + return false +} + +func (x *PosixLockResponse) GetHasConflict() bool { + if x != nil { + return x.HasConflict + } + return false +} + +func (x *PosixLockResponse) GetConflict() *PosixLockRange { + if x != nil { + return x.Conflict + } + return nil +} + // ObjectTransactionBatch applies several object transactions in one round trip, // each under its own per-path lock and independent of the others (no cross-key // atomicity). A caller groups keys that route to the same owner filer and sends @@ -1837,7 +2121,7 @@ type ObjectTransactionBatchRequest struct { func (x *ObjectTransactionBatchRequest) Reset() { *x = ObjectTransactionBatchRequest{} - mi := &file_filer_proto_msgTypes[18] + mi := &file_filer_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1849,7 +2133,7 @@ func (x *ObjectTransactionBatchRequest) String() string { func (*ObjectTransactionBatchRequest) ProtoMessage() {} func (x *ObjectTransactionBatchRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[18] + mi := &file_filer_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1862,7 +2146,7 @@ func (x *ObjectTransactionBatchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ObjectTransactionBatchRequest.ProtoReflect.Descriptor instead. func (*ObjectTransactionBatchRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{18} + return file_filer_proto_rawDescGZIP(), []int{21} } func (x *ObjectTransactionBatchRequest) GetTransactions() []*ObjectTransactionRequest { @@ -1881,7 +2165,7 @@ type ObjectTransactionBatchResponse struct { func (x *ObjectTransactionBatchResponse) Reset() { *x = ObjectTransactionBatchResponse{} - mi := &file_filer_proto_msgTypes[19] + mi := &file_filer_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1893,7 +2177,7 @@ func (x *ObjectTransactionBatchResponse) String() string { func (*ObjectTransactionBatchResponse) ProtoMessage() {} func (x *ObjectTransactionBatchResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[19] + mi := &file_filer_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1906,7 +2190,7 @@ func (x *ObjectTransactionBatchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ObjectTransactionBatchResponse.ProtoReflect.Descriptor instead. func (*ObjectTransactionBatchResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{19} + return file_filer_proto_rawDescGZIP(), []int{22} } func (x *ObjectTransactionBatchResponse) GetResponses() []*ObjectTransactionResponse { @@ -1927,7 +2211,7 @@ type CreateEntryResponse struct { func (x *CreateEntryResponse) Reset() { *x = CreateEntryResponse{} - mi := &file_filer_proto_msgTypes[20] + mi := &file_filer_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1939,7 +2223,7 @@ func (x *CreateEntryResponse) String() string { func (*CreateEntryResponse) ProtoMessage() {} func (x *CreateEntryResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[20] + mi := &file_filer_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1952,7 +2236,7 @@ func (x *CreateEntryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateEntryResponse.ProtoReflect.Descriptor instead. func (*CreateEntryResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{20} + return file_filer_proto_rawDescGZIP(), []int{23} } func (x *CreateEntryResponse) GetError() string { @@ -1989,7 +2273,7 @@ type UpdateEntryRequest struct { func (x *UpdateEntryRequest) Reset() { *x = UpdateEntryRequest{} - mi := &file_filer_proto_msgTypes[21] + mi := &file_filer_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2001,7 +2285,7 @@ func (x *UpdateEntryRequest) String() string { func (*UpdateEntryRequest) ProtoMessage() {} func (x *UpdateEntryRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[21] + mi := &file_filer_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2014,7 +2298,7 @@ func (x *UpdateEntryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateEntryRequest.ProtoReflect.Descriptor instead. func (*UpdateEntryRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{21} + return file_filer_proto_rawDescGZIP(), []int{24} } func (x *UpdateEntryRequest) GetDirectory() string { @@ -2061,7 +2345,7 @@ type UpdateEntryResponse struct { func (x *UpdateEntryResponse) Reset() { *x = UpdateEntryResponse{} - mi := &file_filer_proto_msgTypes[22] + mi := &file_filer_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2073,7 +2357,7 @@ func (x *UpdateEntryResponse) String() string { func (*UpdateEntryResponse) ProtoMessage() {} func (x *UpdateEntryResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[22] + mi := &file_filer_proto_msgTypes[25] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2086,7 +2370,7 @@ func (x *UpdateEntryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateEntryResponse.ProtoReflect.Descriptor instead. func (*UpdateEntryResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{22} + return file_filer_proto_rawDescGZIP(), []int{25} } func (x *UpdateEntryResponse) GetMetadataEvent() *SubscribeMetadataResponse { @@ -2107,7 +2391,7 @@ type TouchAccessTimeRequest struct { func (x *TouchAccessTimeRequest) Reset() { *x = TouchAccessTimeRequest{} - mi := &file_filer_proto_msgTypes[23] + mi := &file_filer_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2119,7 +2403,7 @@ func (x *TouchAccessTimeRequest) String() string { func (*TouchAccessTimeRequest) ProtoMessage() {} func (x *TouchAccessTimeRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[23] + mi := &file_filer_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2132,7 +2416,7 @@ func (x *TouchAccessTimeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TouchAccessTimeRequest.ProtoReflect.Descriptor instead. func (*TouchAccessTimeRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{23} + return file_filer_proto_rawDescGZIP(), []int{26} } func (x *TouchAccessTimeRequest) GetDirectory() string { @@ -2166,7 +2450,7 @@ type TouchAccessTimeResponse struct { func (x *TouchAccessTimeResponse) Reset() { *x = TouchAccessTimeResponse{} - mi := &file_filer_proto_msgTypes[24] + mi := &file_filer_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2178,7 +2462,7 @@ func (x *TouchAccessTimeResponse) String() string { func (*TouchAccessTimeResponse) ProtoMessage() {} func (x *TouchAccessTimeResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[24] + mi := &file_filer_proto_msgTypes[27] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2191,7 +2475,7 @@ func (x *TouchAccessTimeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TouchAccessTimeResponse.ProtoReflect.Descriptor instead. func (*TouchAccessTimeResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{24} + return file_filer_proto_rawDescGZIP(), []int{27} } func (x *TouchAccessTimeResponse) GetPersistedAtimeNs() int64 { @@ -2219,7 +2503,7 @@ type AppendToEntryRequest struct { func (x *AppendToEntryRequest) Reset() { *x = AppendToEntryRequest{} - mi := &file_filer_proto_msgTypes[25] + mi := &file_filer_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2231,7 +2515,7 @@ func (x *AppendToEntryRequest) String() string { func (*AppendToEntryRequest) ProtoMessage() {} func (x *AppendToEntryRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[25] + mi := &file_filer_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2244,7 +2528,7 @@ func (x *AppendToEntryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AppendToEntryRequest.ProtoReflect.Descriptor instead. func (*AppendToEntryRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{25} + return file_filer_proto_rawDescGZIP(), []int{28} } func (x *AppendToEntryRequest) GetDirectory() string { @@ -2276,7 +2560,7 @@ type AppendToEntryResponse struct { func (x *AppendToEntryResponse) Reset() { *x = AppendToEntryResponse{} - mi := &file_filer_proto_msgTypes[26] + mi := &file_filer_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2288,7 +2572,7 @@ func (x *AppendToEntryResponse) String() string { func (*AppendToEntryResponse) ProtoMessage() {} func (x *AppendToEntryResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[26] + mi := &file_filer_proto_msgTypes[29] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2301,7 +2585,7 @@ func (x *AppendToEntryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AppendToEntryResponse.ProtoReflect.Descriptor instead. func (*AppendToEntryResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{26} + return file_filer_proto_rawDescGZIP(), []int{29} } type DeleteEntryRequest struct { @@ -2321,7 +2605,7 @@ type DeleteEntryRequest struct { func (x *DeleteEntryRequest) Reset() { *x = DeleteEntryRequest{} - mi := &file_filer_proto_msgTypes[27] + mi := &file_filer_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2333,7 +2617,7 @@ func (x *DeleteEntryRequest) String() string { func (*DeleteEntryRequest) ProtoMessage() {} func (x *DeleteEntryRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[27] + mi := &file_filer_proto_msgTypes[30] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2346,7 +2630,7 @@ func (x *DeleteEntryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteEntryRequest.ProtoReflect.Descriptor instead. func (*DeleteEntryRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{27} + return file_filer_proto_rawDescGZIP(), []int{30} } func (x *DeleteEntryRequest) GetDirectory() string { @@ -2415,7 +2699,7 @@ type DeleteEntryResponse struct { func (x *DeleteEntryResponse) Reset() { *x = DeleteEntryResponse{} - mi := &file_filer_proto_msgTypes[28] + mi := &file_filer_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2427,7 +2711,7 @@ func (x *DeleteEntryResponse) String() string { func (*DeleteEntryResponse) ProtoMessage() {} func (x *DeleteEntryResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[28] + mi := &file_filer_proto_msgTypes[31] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2440,7 +2724,7 @@ func (x *DeleteEntryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteEntryResponse.ProtoReflect.Descriptor instead. func (*DeleteEntryResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{28} + return file_filer_proto_rawDescGZIP(), []int{31} } func (x *DeleteEntryResponse) GetError() string { @@ -2470,7 +2754,7 @@ type AtomicRenameEntryRequest struct { func (x *AtomicRenameEntryRequest) Reset() { *x = AtomicRenameEntryRequest{} - mi := &file_filer_proto_msgTypes[29] + mi := &file_filer_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2482,7 +2766,7 @@ func (x *AtomicRenameEntryRequest) String() string { func (*AtomicRenameEntryRequest) ProtoMessage() {} func (x *AtomicRenameEntryRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[29] + mi := &file_filer_proto_msgTypes[32] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2495,7 +2779,7 @@ func (x *AtomicRenameEntryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AtomicRenameEntryRequest.ProtoReflect.Descriptor instead. func (*AtomicRenameEntryRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{29} + return file_filer_proto_rawDescGZIP(), []int{32} } func (x *AtomicRenameEntryRequest) GetOldDirectory() string { @@ -2541,7 +2825,7 @@ type AtomicRenameEntryResponse struct { func (x *AtomicRenameEntryResponse) Reset() { *x = AtomicRenameEntryResponse{} - mi := &file_filer_proto_msgTypes[30] + mi := &file_filer_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2553,7 +2837,7 @@ func (x *AtomicRenameEntryResponse) String() string { func (*AtomicRenameEntryResponse) ProtoMessage() {} func (x *AtomicRenameEntryResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[30] + mi := &file_filer_proto_msgTypes[33] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2566,7 +2850,7 @@ func (x *AtomicRenameEntryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AtomicRenameEntryResponse.ProtoReflect.Descriptor instead. func (*AtomicRenameEntryResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{30} + return file_filer_proto_rawDescGZIP(), []int{33} } type StreamRenameEntryRequest struct { @@ -2582,7 +2866,7 @@ type StreamRenameEntryRequest struct { func (x *StreamRenameEntryRequest) Reset() { *x = StreamRenameEntryRequest{} - mi := &file_filer_proto_msgTypes[31] + mi := &file_filer_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2594,7 +2878,7 @@ func (x *StreamRenameEntryRequest) String() string { func (*StreamRenameEntryRequest) ProtoMessage() {} func (x *StreamRenameEntryRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[31] + mi := &file_filer_proto_msgTypes[34] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2607,7 +2891,7 @@ func (x *StreamRenameEntryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StreamRenameEntryRequest.ProtoReflect.Descriptor instead. func (*StreamRenameEntryRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{31} + return file_filer_proto_rawDescGZIP(), []int{34} } func (x *StreamRenameEntryRequest) GetOldDirectory() string { @@ -2656,7 +2940,7 @@ type StreamRenameEntryResponse struct { func (x *StreamRenameEntryResponse) Reset() { *x = StreamRenameEntryResponse{} - mi := &file_filer_proto_msgTypes[32] + mi := &file_filer_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2668,7 +2952,7 @@ func (x *StreamRenameEntryResponse) String() string { func (*StreamRenameEntryResponse) ProtoMessage() {} func (x *StreamRenameEntryResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[32] + mi := &file_filer_proto_msgTypes[35] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2681,7 +2965,7 @@ func (x *StreamRenameEntryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StreamRenameEntryResponse.ProtoReflect.Descriptor instead. func (*StreamRenameEntryResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{32} + return file_filer_proto_rawDescGZIP(), []int{35} } func (x *StreamRenameEntryResponse) GetDirectory() string { @@ -2723,7 +3007,7 @@ type AssignVolumeRequest struct { func (x *AssignVolumeRequest) Reset() { *x = AssignVolumeRequest{} - mi := &file_filer_proto_msgTypes[33] + mi := &file_filer_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2735,7 +3019,7 @@ func (x *AssignVolumeRequest) String() string { func (*AssignVolumeRequest) ProtoMessage() {} func (x *AssignVolumeRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[33] + mi := &file_filer_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2748,7 +3032,7 @@ func (x *AssignVolumeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AssignVolumeRequest.ProtoReflect.Descriptor instead. func (*AssignVolumeRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{33} + return file_filer_proto_rawDescGZIP(), []int{36} } func (x *AssignVolumeRequest) GetCount() int32 { @@ -2836,7 +3120,7 @@ type AssignVolumeResponse struct { func (x *AssignVolumeResponse) Reset() { *x = AssignVolumeResponse{} - mi := &file_filer_proto_msgTypes[34] + mi := &file_filer_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2848,7 +3132,7 @@ func (x *AssignVolumeResponse) String() string { func (*AssignVolumeResponse) ProtoMessage() {} func (x *AssignVolumeResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[34] + mi := &file_filer_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2861,7 +3145,7 @@ func (x *AssignVolumeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AssignVolumeResponse.ProtoReflect.Descriptor instead. func (*AssignVolumeResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{34} + return file_filer_proto_rawDescGZIP(), []int{37} } func (x *AssignVolumeResponse) GetFileId() string { @@ -2922,7 +3206,7 @@ type LookupVolumeRequest struct { func (x *LookupVolumeRequest) Reset() { *x = LookupVolumeRequest{} - mi := &file_filer_proto_msgTypes[35] + mi := &file_filer_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2934,7 +3218,7 @@ func (x *LookupVolumeRequest) String() string { func (*LookupVolumeRequest) ProtoMessage() {} func (x *LookupVolumeRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[35] + mi := &file_filer_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2947,7 +3231,7 @@ func (x *LookupVolumeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LookupVolumeRequest.ProtoReflect.Descriptor instead. func (*LookupVolumeRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{35} + return file_filer_proto_rawDescGZIP(), []int{38} } func (x *LookupVolumeRequest) GetVolumeIds() []string { @@ -2966,7 +3250,7 @@ type Locations struct { func (x *Locations) Reset() { *x = Locations{} - mi := &file_filer_proto_msgTypes[36] + mi := &file_filer_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2978,7 +3262,7 @@ func (x *Locations) String() string { func (*Locations) ProtoMessage() {} func (x *Locations) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[36] + mi := &file_filer_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2991,7 +3275,7 @@ func (x *Locations) ProtoReflect() protoreflect.Message { // Deprecated: Use Locations.ProtoReflect.Descriptor instead. func (*Locations) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{36} + return file_filer_proto_rawDescGZIP(), []int{39} } func (x *Locations) GetLocations() []*Location { @@ -3013,7 +3297,7 @@ type Location struct { func (x *Location) Reset() { *x = Location{} - mi := &file_filer_proto_msgTypes[37] + mi := &file_filer_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3025,7 +3309,7 @@ func (x *Location) String() string { func (*Location) ProtoMessage() {} func (x *Location) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[37] + mi := &file_filer_proto_msgTypes[40] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3038,7 +3322,7 @@ func (x *Location) ProtoReflect() protoreflect.Message { // Deprecated: Use Location.ProtoReflect.Descriptor instead. func (*Location) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{37} + return file_filer_proto_rawDescGZIP(), []int{40} } func (x *Location) GetUrl() string { @@ -3078,7 +3362,7 @@ type LookupVolumeResponse struct { func (x *LookupVolumeResponse) Reset() { *x = LookupVolumeResponse{} - mi := &file_filer_proto_msgTypes[38] + mi := &file_filer_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3090,7 +3374,7 @@ func (x *LookupVolumeResponse) String() string { func (*LookupVolumeResponse) ProtoMessage() {} func (x *LookupVolumeResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[38] + mi := &file_filer_proto_msgTypes[41] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3103,7 +3387,7 @@ func (x *LookupVolumeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LookupVolumeResponse.ProtoReflect.Descriptor instead. func (*LookupVolumeResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{38} + return file_filer_proto_rawDescGZIP(), []int{41} } func (x *LookupVolumeResponse) GetLocationsMap() map[string]*Locations { @@ -3122,7 +3406,7 @@ type Collection struct { func (x *Collection) Reset() { *x = Collection{} - mi := &file_filer_proto_msgTypes[39] + mi := &file_filer_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3134,7 +3418,7 @@ func (x *Collection) String() string { func (*Collection) ProtoMessage() {} func (x *Collection) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[39] + mi := &file_filer_proto_msgTypes[42] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3147,7 +3431,7 @@ func (x *Collection) ProtoReflect() protoreflect.Message { // Deprecated: Use Collection.ProtoReflect.Descriptor instead. func (*Collection) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{39} + return file_filer_proto_rawDescGZIP(), []int{42} } func (x *Collection) GetName() string { @@ -3167,7 +3451,7 @@ type CollectionListRequest struct { func (x *CollectionListRequest) Reset() { *x = CollectionListRequest{} - mi := &file_filer_proto_msgTypes[40] + mi := &file_filer_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3179,7 +3463,7 @@ func (x *CollectionListRequest) String() string { func (*CollectionListRequest) ProtoMessage() {} func (x *CollectionListRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[40] + mi := &file_filer_proto_msgTypes[43] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3192,7 +3476,7 @@ func (x *CollectionListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CollectionListRequest.ProtoReflect.Descriptor instead. func (*CollectionListRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{40} + return file_filer_proto_rawDescGZIP(), []int{43} } func (x *CollectionListRequest) GetIncludeNormalVolumes() bool { @@ -3218,7 +3502,7 @@ type CollectionListResponse struct { func (x *CollectionListResponse) Reset() { *x = CollectionListResponse{} - mi := &file_filer_proto_msgTypes[41] + mi := &file_filer_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3230,7 +3514,7 @@ func (x *CollectionListResponse) String() string { func (*CollectionListResponse) ProtoMessage() {} func (x *CollectionListResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[41] + mi := &file_filer_proto_msgTypes[44] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3243,7 +3527,7 @@ func (x *CollectionListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CollectionListResponse.ProtoReflect.Descriptor instead. func (*CollectionListResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{41} + return file_filer_proto_rawDescGZIP(), []int{44} } func (x *CollectionListResponse) GetCollections() []*Collection { @@ -3262,7 +3546,7 @@ type DeleteCollectionRequest struct { func (x *DeleteCollectionRequest) Reset() { *x = DeleteCollectionRequest{} - mi := &file_filer_proto_msgTypes[42] + mi := &file_filer_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3274,7 +3558,7 @@ func (x *DeleteCollectionRequest) String() string { func (*DeleteCollectionRequest) ProtoMessage() {} func (x *DeleteCollectionRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[42] + mi := &file_filer_proto_msgTypes[45] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3287,7 +3571,7 @@ func (x *DeleteCollectionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteCollectionRequest.ProtoReflect.Descriptor instead. func (*DeleteCollectionRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{42} + return file_filer_proto_rawDescGZIP(), []int{45} } func (x *DeleteCollectionRequest) GetCollection() string { @@ -3305,7 +3589,7 @@ type DeleteCollectionResponse struct { func (x *DeleteCollectionResponse) Reset() { *x = DeleteCollectionResponse{} - mi := &file_filer_proto_msgTypes[43] + mi := &file_filer_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3317,7 +3601,7 @@ func (x *DeleteCollectionResponse) String() string { func (*DeleteCollectionResponse) ProtoMessage() {} func (x *DeleteCollectionResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[43] + mi := &file_filer_proto_msgTypes[46] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3330,7 +3614,7 @@ func (x *DeleteCollectionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteCollectionResponse.ProtoReflect.Descriptor instead. func (*DeleteCollectionResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{43} + return file_filer_proto_rawDescGZIP(), []int{46} } type StatisticsRequest struct { @@ -3345,7 +3629,7 @@ type StatisticsRequest struct { func (x *StatisticsRequest) Reset() { *x = StatisticsRequest{} - mi := &file_filer_proto_msgTypes[44] + mi := &file_filer_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3357,7 +3641,7 @@ func (x *StatisticsRequest) String() string { func (*StatisticsRequest) ProtoMessage() {} func (x *StatisticsRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[44] + mi := &file_filer_proto_msgTypes[47] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3370,7 +3654,7 @@ func (x *StatisticsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StatisticsRequest.ProtoReflect.Descriptor instead. func (*StatisticsRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{44} + return file_filer_proto_rawDescGZIP(), []int{47} } func (x *StatisticsRequest) GetReplication() string { @@ -3412,7 +3696,7 @@ type StatisticsResponse struct { func (x *StatisticsResponse) Reset() { *x = StatisticsResponse{} - mi := &file_filer_proto_msgTypes[45] + mi := &file_filer_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3424,7 +3708,7 @@ func (x *StatisticsResponse) String() string { func (*StatisticsResponse) ProtoMessage() {} func (x *StatisticsResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[45] + mi := &file_filer_proto_msgTypes[48] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3437,7 +3721,7 @@ func (x *StatisticsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StatisticsResponse.ProtoReflect.Descriptor instead. func (*StatisticsResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{45} + return file_filer_proto_rawDescGZIP(), []int{48} } func (x *StatisticsResponse) GetTotalSize() uint64 { @@ -3471,7 +3755,7 @@ type PingRequest struct { func (x *PingRequest) Reset() { *x = PingRequest{} - mi := &file_filer_proto_msgTypes[46] + mi := &file_filer_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3483,7 +3767,7 @@ func (x *PingRequest) String() string { func (*PingRequest) ProtoMessage() {} func (x *PingRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[46] + mi := &file_filer_proto_msgTypes[49] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3496,7 +3780,7 @@ func (x *PingRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PingRequest.ProtoReflect.Descriptor instead. func (*PingRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{46} + return file_filer_proto_rawDescGZIP(), []int{49} } func (x *PingRequest) GetTarget() string { @@ -3524,7 +3808,7 @@ type PingResponse struct { func (x *PingResponse) Reset() { *x = PingResponse{} - mi := &file_filer_proto_msgTypes[47] + mi := &file_filer_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3536,7 +3820,7 @@ func (x *PingResponse) String() string { func (*PingResponse) ProtoMessage() {} func (x *PingResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[47] + mi := &file_filer_proto_msgTypes[50] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3549,7 +3833,7 @@ func (x *PingResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PingResponse.ProtoReflect.Descriptor instead. func (*PingResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{47} + return file_filer_proto_rawDescGZIP(), []int{50} } func (x *PingResponse) GetStartTimeNs() int64 { @@ -3581,7 +3865,7 @@ type GetFilerConfigurationRequest struct { func (x *GetFilerConfigurationRequest) Reset() { *x = GetFilerConfigurationRequest{} - mi := &file_filer_proto_msgTypes[48] + mi := &file_filer_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3593,7 +3877,7 @@ func (x *GetFilerConfigurationRequest) String() string { func (*GetFilerConfigurationRequest) ProtoMessage() {} func (x *GetFilerConfigurationRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[48] + mi := &file_filer_proto_msgTypes[51] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3606,7 +3890,7 @@ func (x *GetFilerConfigurationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetFilerConfigurationRequest.ProtoReflect.Descriptor instead. func (*GetFilerConfigurationRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{48} + return file_filer_proto_rawDescGZIP(), []int{51} } type GetFilerConfigurationResponse struct { @@ -3631,7 +3915,7 @@ type GetFilerConfigurationResponse struct { func (x *GetFilerConfigurationResponse) Reset() { *x = GetFilerConfigurationResponse{} - mi := &file_filer_proto_msgTypes[49] + mi := &file_filer_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3643,7 +3927,7 @@ func (x *GetFilerConfigurationResponse) String() string { func (*GetFilerConfigurationResponse) ProtoMessage() {} func (x *GetFilerConfigurationResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[49] + mi := &file_filer_proto_msgTypes[52] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3656,7 +3940,7 @@ func (x *GetFilerConfigurationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetFilerConfigurationResponse.ProtoReflect.Descriptor instead. func (*GetFilerConfigurationResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{49} + return file_filer_proto_rawDescGZIP(), []int{52} } func (x *GetFilerConfigurationResponse) GetMasters() []string { @@ -3777,7 +4061,7 @@ type SubscribeMetadataRequest struct { func (x *SubscribeMetadataRequest) Reset() { *x = SubscribeMetadataRequest{} - mi := &file_filer_proto_msgTypes[50] + mi := &file_filer_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3789,7 +4073,7 @@ func (x *SubscribeMetadataRequest) String() string { func (*SubscribeMetadataRequest) ProtoMessage() {} func (x *SubscribeMetadataRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[50] + mi := &file_filer_proto_msgTypes[53] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3802,7 +4086,7 @@ func (x *SubscribeMetadataRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscribeMetadataRequest.ProtoReflect.Descriptor instead. func (*SubscribeMetadataRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{50} + return file_filer_proto_rawDescGZIP(), []int{53} } func (x *SubscribeMetadataRequest) GetClientName() string { @@ -3902,7 +4186,7 @@ type SubscribeMetadataResponse struct { func (x *SubscribeMetadataResponse) Reset() { *x = SubscribeMetadataResponse{} - mi := &file_filer_proto_msgTypes[51] + mi := &file_filer_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3914,7 +4198,7 @@ func (x *SubscribeMetadataResponse) String() string { func (*SubscribeMetadataResponse) ProtoMessage() {} func (x *SubscribeMetadataResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[51] + mi := &file_filer_proto_msgTypes[54] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3927,7 +4211,7 @@ func (x *SubscribeMetadataResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscribeMetadataResponse.ProtoReflect.Descriptor instead. func (*SubscribeMetadataResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{51} + return file_filer_proto_rawDescGZIP(), []int{54} } func (x *SubscribeMetadataResponse) GetDirectory() string { @@ -3979,7 +4263,7 @@ type LogFileChunkRef struct { func (x *LogFileChunkRef) Reset() { *x = LogFileChunkRef{} - mi := &file_filer_proto_msgTypes[52] + mi := &file_filer_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3991,7 +4275,7 @@ func (x *LogFileChunkRef) String() string { func (*LogFileChunkRef) ProtoMessage() {} func (x *LogFileChunkRef) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[52] + mi := &file_filer_proto_msgTypes[55] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4004,7 +4288,7 @@ func (x *LogFileChunkRef) ProtoReflect() protoreflect.Message { // Deprecated: Use LogFileChunkRef.ProtoReflect.Descriptor instead. func (*LogFileChunkRef) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{52} + return file_filer_proto_rawDescGZIP(), []int{55} } func (x *LogFileChunkRef) GetChunks() []*FileChunk { @@ -4038,7 +4322,7 @@ type TraverseBfsMetadataRequest struct { func (x *TraverseBfsMetadataRequest) Reset() { *x = TraverseBfsMetadataRequest{} - mi := &file_filer_proto_msgTypes[53] + mi := &file_filer_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4050,7 +4334,7 @@ func (x *TraverseBfsMetadataRequest) String() string { func (*TraverseBfsMetadataRequest) ProtoMessage() {} func (x *TraverseBfsMetadataRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[53] + mi := &file_filer_proto_msgTypes[56] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4063,7 +4347,7 @@ func (x *TraverseBfsMetadataRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TraverseBfsMetadataRequest.ProtoReflect.Descriptor instead. func (*TraverseBfsMetadataRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{53} + return file_filer_proto_rawDescGZIP(), []int{56} } func (x *TraverseBfsMetadataRequest) GetDirectory() string { @@ -4090,7 +4374,7 @@ type TraverseBfsMetadataResponse struct { func (x *TraverseBfsMetadataResponse) Reset() { *x = TraverseBfsMetadataResponse{} - mi := &file_filer_proto_msgTypes[54] + mi := &file_filer_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4102,7 +4386,7 @@ func (x *TraverseBfsMetadataResponse) String() string { func (*TraverseBfsMetadataResponse) ProtoMessage() {} func (x *TraverseBfsMetadataResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[54] + mi := &file_filer_proto_msgTypes[57] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4115,7 +4399,7 @@ func (x *TraverseBfsMetadataResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TraverseBfsMetadataResponse.ProtoReflect.Descriptor instead. func (*TraverseBfsMetadataResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{54} + return file_filer_proto_rawDescGZIP(), []int{57} } func (x *TraverseBfsMetadataResponse) GetDirectory() string { @@ -4145,7 +4429,7 @@ type LogEntry struct { func (x *LogEntry) Reset() { *x = LogEntry{} - mi := &file_filer_proto_msgTypes[55] + mi := &file_filer_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4157,7 +4441,7 @@ func (x *LogEntry) String() string { func (*LogEntry) ProtoMessage() {} func (x *LogEntry) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[55] + mi := &file_filer_proto_msgTypes[58] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4170,7 +4454,7 @@ func (x *LogEntry) ProtoReflect() protoreflect.Message { // Deprecated: Use LogEntry.ProtoReflect.Descriptor instead. func (*LogEntry) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{55} + return file_filer_proto_rawDescGZIP(), []int{58} } func (x *LogEntry) GetTsNs() int64 { @@ -4219,7 +4503,7 @@ type KeepConnectedRequest struct { func (x *KeepConnectedRequest) Reset() { *x = KeepConnectedRequest{} - mi := &file_filer_proto_msgTypes[56] + mi := &file_filer_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4231,7 +4515,7 @@ func (x *KeepConnectedRequest) String() string { func (*KeepConnectedRequest) ProtoMessage() {} func (x *KeepConnectedRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[56] + mi := &file_filer_proto_msgTypes[59] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4244,7 +4528,7 @@ func (x *KeepConnectedRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use KeepConnectedRequest.ProtoReflect.Descriptor instead. func (*KeepConnectedRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{56} + return file_filer_proto_rawDescGZIP(), []int{59} } func (x *KeepConnectedRequest) GetName() string { @@ -4276,7 +4560,7 @@ type KeepConnectedResponse struct { func (x *KeepConnectedResponse) Reset() { *x = KeepConnectedResponse{} - mi := &file_filer_proto_msgTypes[57] + mi := &file_filer_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4288,7 +4572,7 @@ func (x *KeepConnectedResponse) String() string { func (*KeepConnectedResponse) ProtoMessage() {} func (x *KeepConnectedResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[57] + mi := &file_filer_proto_msgTypes[60] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4301,7 +4585,7 @@ func (x *KeepConnectedResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use KeepConnectedResponse.ProtoReflect.Descriptor instead. func (*KeepConnectedResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{57} + return file_filer_proto_rawDescGZIP(), []int{60} } type LocateBrokerRequest struct { @@ -4313,7 +4597,7 @@ type LocateBrokerRequest struct { func (x *LocateBrokerRequest) Reset() { *x = LocateBrokerRequest{} - mi := &file_filer_proto_msgTypes[58] + mi := &file_filer_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4325,7 +4609,7 @@ func (x *LocateBrokerRequest) String() string { func (*LocateBrokerRequest) ProtoMessage() {} func (x *LocateBrokerRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[58] + mi := &file_filer_proto_msgTypes[61] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4338,7 +4622,7 @@ func (x *LocateBrokerRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LocateBrokerRequest.ProtoReflect.Descriptor instead. func (*LocateBrokerRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{58} + return file_filer_proto_rawDescGZIP(), []int{61} } func (x *LocateBrokerRequest) GetResource() string { @@ -4358,7 +4642,7 @@ type LocateBrokerResponse struct { func (x *LocateBrokerResponse) Reset() { *x = LocateBrokerResponse{} - mi := &file_filer_proto_msgTypes[59] + mi := &file_filer_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4370,7 +4654,7 @@ func (x *LocateBrokerResponse) String() string { func (*LocateBrokerResponse) ProtoMessage() {} func (x *LocateBrokerResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[59] + mi := &file_filer_proto_msgTypes[62] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4383,7 +4667,7 @@ func (x *LocateBrokerResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LocateBrokerResponse.ProtoReflect.Descriptor instead. func (*LocateBrokerResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{59} + return file_filer_proto_rawDescGZIP(), []int{62} } func (x *LocateBrokerResponse) GetFound() bool { @@ -4412,7 +4696,7 @@ type KvGetRequest struct { func (x *KvGetRequest) Reset() { *x = KvGetRequest{} - mi := &file_filer_proto_msgTypes[60] + mi := &file_filer_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4424,7 +4708,7 @@ func (x *KvGetRequest) String() string { func (*KvGetRequest) ProtoMessage() {} func (x *KvGetRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[60] + mi := &file_filer_proto_msgTypes[63] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4437,7 +4721,7 @@ func (x *KvGetRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use KvGetRequest.ProtoReflect.Descriptor instead. func (*KvGetRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{60} + return file_filer_proto_rawDescGZIP(), []int{63} } func (x *KvGetRequest) GetKey() []byte { @@ -4457,7 +4741,7 @@ type KvGetResponse struct { func (x *KvGetResponse) Reset() { *x = KvGetResponse{} - mi := &file_filer_proto_msgTypes[61] + mi := &file_filer_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4469,7 +4753,7 @@ func (x *KvGetResponse) String() string { func (*KvGetResponse) ProtoMessage() {} func (x *KvGetResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[61] + mi := &file_filer_proto_msgTypes[64] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4482,7 +4766,7 @@ func (x *KvGetResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use KvGetResponse.ProtoReflect.Descriptor instead. func (*KvGetResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{61} + return file_filer_proto_rawDescGZIP(), []int{64} } func (x *KvGetResponse) GetValue() []byte { @@ -4509,7 +4793,7 @@ type KvPutRequest struct { func (x *KvPutRequest) Reset() { *x = KvPutRequest{} - mi := &file_filer_proto_msgTypes[62] + mi := &file_filer_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4521,7 +4805,7 @@ func (x *KvPutRequest) String() string { func (*KvPutRequest) ProtoMessage() {} func (x *KvPutRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[62] + mi := &file_filer_proto_msgTypes[65] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4534,7 +4818,7 @@ func (x *KvPutRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use KvPutRequest.ProtoReflect.Descriptor instead. func (*KvPutRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{62} + return file_filer_proto_rawDescGZIP(), []int{65} } func (x *KvPutRequest) GetKey() []byte { @@ -4560,7 +4844,7 @@ type KvPutResponse struct { func (x *KvPutResponse) Reset() { *x = KvPutResponse{} - mi := &file_filer_proto_msgTypes[63] + mi := &file_filer_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4572,7 +4856,7 @@ func (x *KvPutResponse) String() string { func (*KvPutResponse) ProtoMessage() {} func (x *KvPutResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[63] + mi := &file_filer_proto_msgTypes[66] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4585,7 +4869,7 @@ func (x *KvPutResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use KvPutResponse.ProtoReflect.Descriptor instead. func (*KvPutResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{63} + return file_filer_proto_rawDescGZIP(), []int{66} } func (x *KvPutResponse) GetError() string { @@ -4608,7 +4892,7 @@ type FilerConf struct { func (x *FilerConf) Reset() { *x = FilerConf{} - mi := &file_filer_proto_msgTypes[64] + mi := &file_filer_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4620,7 +4904,7 @@ func (x *FilerConf) String() string { func (*FilerConf) ProtoMessage() {} func (x *FilerConf) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[64] + mi := &file_filer_proto_msgTypes[67] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4633,7 +4917,7 @@ func (x *FilerConf) ProtoReflect() protoreflect.Message { // Deprecated: Use FilerConf.ProtoReflect.Descriptor instead. func (*FilerConf) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{64} + return file_filer_proto_rawDescGZIP(), []int{67} } func (x *FilerConf) GetVersion() int32 { @@ -4665,7 +4949,7 @@ type CacheRemoteObjectToLocalClusterRequest struct { func (x *CacheRemoteObjectToLocalClusterRequest) Reset() { *x = CacheRemoteObjectToLocalClusterRequest{} - mi := &file_filer_proto_msgTypes[65] + mi := &file_filer_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4677,7 +4961,7 @@ func (x *CacheRemoteObjectToLocalClusterRequest) String() string { func (*CacheRemoteObjectToLocalClusterRequest) ProtoMessage() {} func (x *CacheRemoteObjectToLocalClusterRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[65] + mi := &file_filer_proto_msgTypes[68] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4690,7 +4974,7 @@ func (x *CacheRemoteObjectToLocalClusterRequest) ProtoReflect() protoreflect.Mes // Deprecated: Use CacheRemoteObjectToLocalClusterRequest.ProtoReflect.Descriptor instead. func (*CacheRemoteObjectToLocalClusterRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{65} + return file_filer_proto_rawDescGZIP(), []int{68} } func (x *CacheRemoteObjectToLocalClusterRequest) GetDirectory() string { @@ -4731,7 +5015,7 @@ type CacheRemoteObjectToLocalClusterResponse struct { func (x *CacheRemoteObjectToLocalClusterResponse) Reset() { *x = CacheRemoteObjectToLocalClusterResponse{} - mi := &file_filer_proto_msgTypes[66] + mi := &file_filer_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4743,7 +5027,7 @@ func (x *CacheRemoteObjectToLocalClusterResponse) String() string { func (*CacheRemoteObjectToLocalClusterResponse) ProtoMessage() {} func (x *CacheRemoteObjectToLocalClusterResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[66] + mi := &file_filer_proto_msgTypes[69] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4756,7 +5040,7 @@ func (x *CacheRemoteObjectToLocalClusterResponse) ProtoReflect() protoreflect.Me // Deprecated: Use CacheRemoteObjectToLocalClusterResponse.ProtoReflect.Descriptor instead. func (*CacheRemoteObjectToLocalClusterResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{66} + return file_filer_proto_rawDescGZIP(), []int{69} } func (x *CacheRemoteObjectToLocalClusterResponse) GetEntry() *Entry { @@ -4789,7 +5073,7 @@ type LockRequest struct { func (x *LockRequest) Reset() { *x = LockRequest{} - mi := &file_filer_proto_msgTypes[67] + mi := &file_filer_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4801,7 +5085,7 @@ func (x *LockRequest) String() string { func (*LockRequest) ProtoMessage() {} func (x *LockRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[67] + mi := &file_filer_proto_msgTypes[70] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4814,7 +5098,7 @@ func (x *LockRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LockRequest.ProtoReflect.Descriptor instead. func (*LockRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{67} + return file_filer_proto_rawDescGZIP(), []int{70} } func (x *LockRequest) GetName() string { @@ -4865,7 +5149,7 @@ type LockResponse struct { func (x *LockResponse) Reset() { *x = LockResponse{} - mi := &file_filer_proto_msgTypes[68] + mi := &file_filer_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4877,7 +5161,7 @@ func (x *LockResponse) String() string { func (*LockResponse) ProtoMessage() {} func (x *LockResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[68] + mi := &file_filer_proto_msgTypes[71] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4890,7 +5174,7 @@ func (x *LockResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LockResponse.ProtoReflect.Descriptor instead. func (*LockResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{68} + return file_filer_proto_rawDescGZIP(), []int{71} } func (x *LockResponse) GetRenewToken() string { @@ -4939,7 +5223,7 @@ type UnlockRequest struct { func (x *UnlockRequest) Reset() { *x = UnlockRequest{} - mi := &file_filer_proto_msgTypes[69] + mi := &file_filer_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4951,7 +5235,7 @@ func (x *UnlockRequest) String() string { func (*UnlockRequest) ProtoMessage() {} func (x *UnlockRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[69] + mi := &file_filer_proto_msgTypes[72] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4964,7 +5248,7 @@ func (x *UnlockRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UnlockRequest.ProtoReflect.Descriptor instead. func (*UnlockRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{69} + return file_filer_proto_rawDescGZIP(), []int{72} } func (x *UnlockRequest) GetName() string { @@ -4998,7 +5282,7 @@ type UnlockResponse struct { func (x *UnlockResponse) Reset() { *x = UnlockResponse{} - mi := &file_filer_proto_msgTypes[70] + mi := &file_filer_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5010,7 +5294,7 @@ func (x *UnlockResponse) String() string { func (*UnlockResponse) ProtoMessage() {} func (x *UnlockResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[70] + mi := &file_filer_proto_msgTypes[73] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5023,7 +5307,7 @@ func (x *UnlockResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UnlockResponse.ProtoReflect.Descriptor instead. func (*UnlockResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{70} + return file_filer_proto_rawDescGZIP(), []int{73} } func (x *UnlockResponse) GetError() string { @@ -5050,7 +5334,7 @@ type FindLockOwnerRequest struct { func (x *FindLockOwnerRequest) Reset() { *x = FindLockOwnerRequest{} - mi := &file_filer_proto_msgTypes[71] + mi := &file_filer_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5062,7 +5346,7 @@ func (x *FindLockOwnerRequest) String() string { func (*FindLockOwnerRequest) ProtoMessage() {} func (x *FindLockOwnerRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[71] + mi := &file_filer_proto_msgTypes[74] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5075,7 +5359,7 @@ func (x *FindLockOwnerRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use FindLockOwnerRequest.ProtoReflect.Descriptor instead. func (*FindLockOwnerRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{71} + return file_filer_proto_rawDescGZIP(), []int{74} } func (x *FindLockOwnerRequest) GetName() string { @@ -5101,7 +5385,7 @@ type FindLockOwnerResponse struct { func (x *FindLockOwnerResponse) Reset() { *x = FindLockOwnerResponse{} - mi := &file_filer_proto_msgTypes[72] + mi := &file_filer_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5113,7 +5397,7 @@ func (x *FindLockOwnerResponse) String() string { func (*FindLockOwnerResponse) ProtoMessage() {} func (x *FindLockOwnerResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[72] + mi := &file_filer_proto_msgTypes[75] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5126,7 +5410,7 @@ func (x *FindLockOwnerResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use FindLockOwnerResponse.ProtoReflect.Descriptor instead. func (*FindLockOwnerResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{72} + return file_filer_proto_rawDescGZIP(), []int{75} } func (x *FindLockOwnerResponse) GetOwner() string { @@ -5151,7 +5435,7 @@ type Lock struct { func (x *Lock) Reset() { *x = Lock{} - mi := &file_filer_proto_msgTypes[73] + mi := &file_filer_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5163,7 +5447,7 @@ func (x *Lock) String() string { func (*Lock) ProtoMessage() {} func (x *Lock) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[73] + mi := &file_filer_proto_msgTypes[76] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5176,7 +5460,7 @@ func (x *Lock) ProtoReflect() protoreflect.Message { // Deprecated: Use Lock.ProtoReflect.Descriptor instead. func (*Lock) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{73} + return file_filer_proto_rawDescGZIP(), []int{76} } func (x *Lock) GetName() string { @@ -5237,7 +5521,7 @@ type TransferLocksRequest struct { func (x *TransferLocksRequest) Reset() { *x = TransferLocksRequest{} - mi := &file_filer_proto_msgTypes[74] + mi := &file_filer_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5249,7 +5533,7 @@ func (x *TransferLocksRequest) String() string { func (*TransferLocksRequest) ProtoMessage() {} func (x *TransferLocksRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[74] + mi := &file_filer_proto_msgTypes[77] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5262,7 +5546,7 @@ func (x *TransferLocksRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TransferLocksRequest.ProtoReflect.Descriptor instead. func (*TransferLocksRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{74} + return file_filer_proto_rawDescGZIP(), []int{77} } func (x *TransferLocksRequest) GetLocks() []*Lock { @@ -5280,7 +5564,7 @@ type TransferLocksResponse struct { func (x *TransferLocksResponse) Reset() { *x = TransferLocksResponse{} - mi := &file_filer_proto_msgTypes[75] + mi := &file_filer_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5292,7 +5576,7 @@ func (x *TransferLocksResponse) String() string { func (*TransferLocksResponse) ProtoMessage() {} func (x *TransferLocksResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[75] + mi := &file_filer_proto_msgTypes[78] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5305,7 +5589,7 @@ func (x *TransferLocksResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TransferLocksResponse.ProtoReflect.Descriptor instead. func (*TransferLocksResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{75} + return file_filer_proto_rawDescGZIP(), []int{78} } type ReplicateLockRequest struct { @@ -5323,7 +5607,7 @@ type ReplicateLockRequest struct { func (x *ReplicateLockRequest) Reset() { *x = ReplicateLockRequest{} - mi := &file_filer_proto_msgTypes[76] + mi := &file_filer_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5335,7 +5619,7 @@ func (x *ReplicateLockRequest) String() string { func (*ReplicateLockRequest) ProtoMessage() {} func (x *ReplicateLockRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[76] + mi := &file_filer_proto_msgTypes[79] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5348,7 +5632,7 @@ func (x *ReplicateLockRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplicateLockRequest.ProtoReflect.Descriptor instead. func (*ReplicateLockRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{76} + return file_filer_proto_rawDescGZIP(), []int{79} } func (x *ReplicateLockRequest) GetName() string { @@ -5408,7 +5692,7 @@ type ReplicateLockResponse struct { func (x *ReplicateLockResponse) Reset() { *x = ReplicateLockResponse{} - mi := &file_filer_proto_msgTypes[77] + mi := &file_filer_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5420,7 +5704,7 @@ func (x *ReplicateLockResponse) String() string { func (*ReplicateLockResponse) ProtoMessage() {} func (x *ReplicateLockResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[77] + mi := &file_filer_proto_msgTypes[80] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5433,7 +5717,7 @@ func (x *ReplicateLockResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplicateLockResponse.ProtoReflect.Descriptor instead. func (*ReplicateLockResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{77} + return file_filer_proto_rawDescGZIP(), []int{80} } type StreamMutateEntryRequest struct { @@ -5452,7 +5736,7 @@ type StreamMutateEntryRequest struct { func (x *StreamMutateEntryRequest) Reset() { *x = StreamMutateEntryRequest{} - mi := &file_filer_proto_msgTypes[78] + mi := &file_filer_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5464,7 +5748,7 @@ func (x *StreamMutateEntryRequest) String() string { func (*StreamMutateEntryRequest) ProtoMessage() {} func (x *StreamMutateEntryRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[78] + mi := &file_filer_proto_msgTypes[81] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5477,7 +5761,7 @@ func (x *StreamMutateEntryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StreamMutateEntryRequest.ProtoReflect.Descriptor instead. func (*StreamMutateEntryRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{78} + return file_filer_proto_rawDescGZIP(), []int{81} } func (x *StreamMutateEntryRequest) GetRequestId() uint64 { @@ -5577,7 +5861,7 @@ type StreamMutateEntryResponse struct { func (x *StreamMutateEntryResponse) Reset() { *x = StreamMutateEntryResponse{} - mi := &file_filer_proto_msgTypes[79] + mi := &file_filer_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5589,7 +5873,7 @@ func (x *StreamMutateEntryResponse) String() string { func (*StreamMutateEntryResponse) ProtoMessage() {} func (x *StreamMutateEntryResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[79] + mi := &file_filer_proto_msgTypes[82] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5602,7 +5886,7 @@ func (x *StreamMutateEntryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StreamMutateEntryResponse.ProtoReflect.Descriptor instead. func (*StreamMutateEntryResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{79} + return file_filer_proto_rawDescGZIP(), []int{82} } func (x *StreamMutateEntryResponse) GetRequestId() uint64 { @@ -5716,7 +6000,7 @@ type MountRegisterRequest struct { func (x *MountRegisterRequest) Reset() { *x = MountRegisterRequest{} - mi := &file_filer_proto_msgTypes[80] + mi := &file_filer_proto_msgTypes[83] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5728,7 +6012,7 @@ func (x *MountRegisterRequest) String() string { func (*MountRegisterRequest) ProtoMessage() {} func (x *MountRegisterRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[80] + mi := &file_filer_proto_msgTypes[83] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5741,7 +6025,7 @@ func (x *MountRegisterRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MountRegisterRequest.ProtoReflect.Descriptor instead. func (*MountRegisterRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{80} + return file_filer_proto_rawDescGZIP(), []int{83} } func (x *MountRegisterRequest) GetPeerAddr() string { @@ -5780,7 +6064,7 @@ type MountRegisterResponse struct { func (x *MountRegisterResponse) Reset() { *x = MountRegisterResponse{} - mi := &file_filer_proto_msgTypes[81] + mi := &file_filer_proto_msgTypes[84] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5792,7 +6076,7 @@ func (x *MountRegisterResponse) String() string { func (*MountRegisterResponse) ProtoMessage() {} func (x *MountRegisterResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[81] + mi := &file_filer_proto_msgTypes[84] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5805,7 +6089,7 @@ func (x *MountRegisterResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MountRegisterResponse.ProtoReflect.Descriptor instead. func (*MountRegisterResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{81} + return file_filer_proto_rawDescGZIP(), []int{84} } type MountListRequest struct { @@ -5816,7 +6100,7 @@ type MountListRequest struct { func (x *MountListRequest) Reset() { *x = MountListRequest{} - mi := &file_filer_proto_msgTypes[82] + mi := &file_filer_proto_msgTypes[85] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5828,7 +6112,7 @@ func (x *MountListRequest) String() string { func (*MountListRequest) ProtoMessage() {} func (x *MountListRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[82] + mi := &file_filer_proto_msgTypes[85] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5841,7 +6125,7 @@ func (x *MountListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MountListRequest.ProtoReflect.Descriptor instead. func (*MountListRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{82} + return file_filer_proto_rawDescGZIP(), []int{85} } type MountListResponse struct { @@ -5853,7 +6137,7 @@ type MountListResponse struct { func (x *MountListResponse) Reset() { *x = MountListResponse{} - mi := &file_filer_proto_msgTypes[83] + mi := &file_filer_proto_msgTypes[86] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5865,7 +6149,7 @@ func (x *MountListResponse) String() string { func (*MountListResponse) ProtoMessage() {} func (x *MountListResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[83] + mi := &file_filer_proto_msgTypes[86] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5878,7 +6162,7 @@ func (x *MountListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MountListResponse.ProtoReflect.Descriptor instead. func (*MountListResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{83} + return file_filer_proto_rawDescGZIP(), []int{86} } func (x *MountListResponse) GetMounts() []*MountInfo { @@ -5900,7 +6184,7 @@ type MountInfo struct { func (x *MountInfo) Reset() { *x = MountInfo{} - mi := &file_filer_proto_msgTypes[84] + mi := &file_filer_proto_msgTypes[87] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5912,7 +6196,7 @@ func (x *MountInfo) String() string { func (*MountInfo) ProtoMessage() {} func (x *MountInfo) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[84] + mi := &file_filer_proto_msgTypes[87] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5925,7 +6209,7 @@ func (x *MountInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use MountInfo.ProtoReflect.Descriptor instead. func (*MountInfo) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{84} + return file_filer_proto_rawDescGZIP(), []int{87} } func (x *MountInfo) GetPeerAddr() string { @@ -5984,7 +6268,7 @@ type WriteCondition_Clause struct { func (x *WriteCondition_Clause) Reset() { *x = WriteCondition_Clause{} - mi := &file_filer_proto_msgTypes[86] + mi := &file_filer_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5996,7 +6280,7 @@ func (x *WriteCondition_Clause) String() string { func (*WriteCondition_Clause) ProtoMessage() {} func (x *WriteCondition_Clause) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[86] + mi := &file_filer_proto_msgTypes[89] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6080,7 +6364,7 @@ type LocateBrokerResponse_Resource struct { func (x *LocateBrokerResponse_Resource) Reset() { *x = LocateBrokerResponse_Resource{} - mi := &file_filer_proto_msgTypes[91] + mi := &file_filer_proto_msgTypes[94] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6092,7 +6376,7 @@ func (x *LocateBrokerResponse_Resource) String() string { func (*LocateBrokerResponse_Resource) ProtoMessage() {} func (x *LocateBrokerResponse_Resource) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[91] + mi := &file_filer_proto_msgTypes[94] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6105,7 +6389,7 @@ func (x *LocateBrokerResponse_Resource) ProtoReflect() protoreflect.Message { // Deprecated: Use LocateBrokerResponse_Resource.ProtoReflect.Descriptor instead. func (*LocateBrokerResponse_Resource) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{59, 0} + return file_filer_proto_rawDescGZIP(), []int{62, 0} } func (x *LocateBrokerResponse_Resource) GetGrpcAddresses() string { @@ -6146,7 +6430,7 @@ type FilerConf_PathConf struct { func (x *FilerConf_PathConf) Reset() { *x = FilerConf_PathConf{} - mi := &file_filer_proto_msgTypes[92] + mi := &file_filer_proto_msgTypes[95] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6158,7 +6442,7 @@ func (x *FilerConf_PathConf) String() string { func (*FilerConf_PathConf) ProtoMessage() {} func (x *FilerConf_PathConf) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[92] + mi := &file_filer_proto_msgTypes[95] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6171,7 +6455,7 @@ func (x *FilerConf_PathConf) ProtoReflect() protoreflect.Message { // Deprecated: Use FilerConf_PathConf.ProtoReflect.Descriptor instead. func (*FilerConf_PathConf) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{64, 0} + return file_filer_proto_rawDescGZIP(), []int{67, 0} } func (x *FilerConf_PathConf) GetLocationPrefix() string { @@ -6480,7 +6764,24 @@ const file_filer_proto_rawDesc = "" + "\x19ObjectTransactionResponse\x12\x14\n" + "\x05error\x18\x01 \x01(\tR\x05error\x123\n" + "\n" + - "error_code\x18\x02 \x01(\x0e2\x14.filer_pb.FilerErrorR\terrorCode\"g\n" + + "error_code\x18\x02 \x01(\x0e2\x14.filer_pb.FilerErrorR\terrorCode\"\xa1\x01\n" + + "\x0ePosixLockRange\x12\x14\n" + + "\x05start\x18\x01 \x01(\x04R\x05start\x12\x10\n" + + "\x03end\x18\x02 \x01(\x04R\x03end\x12\x12\n" + + "\x04type\x18\x03 \x01(\rR\x04type\x12\x10\n" + + "\x03sid\x18\x04 \x01(\x04R\x03sid\x12\x14\n" + + "\x05owner\x18\x05 \x01(\x04R\x05owner\x12\x10\n" + + "\x03pid\x18\x06 \x01(\rR\x03pid\x12\x19\n" + + "\bis_flock\x18\a \x01(\bR\aisFlock\"\x94\x01\n" + + "\x10PosixLockRequest\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x19\n" + + "\bis_moved\x18\x02 \x01(\bR\aisMoved\x12%\n" + + "\x02op\x18\x03 \x01(\x0e2\x15.filer_pb.PosixLockOpR\x02op\x12,\n" + + "\x04lock\x18\x04 \x01(\v2\x18.filer_pb.PosixLockRangeR\x04lock\"\x86\x01\n" + + "\x11PosixLockResponse\x12\x18\n" + + "\agranted\x18\x01 \x01(\bR\agranted\x12!\n" + + "\fhas_conflict\x18\x02 \x01(\bR\vhasConflict\x124\n" + + "\bconflict\x18\x03 \x01(\v2\x18.filer_pb.PosixLockRangeR\bconflict\"g\n" + "\x1dObjectTransactionBatchRequest\x12F\n" + "\ftransactions\x18\x01 \x03(\v2\".filer_pb.ObjectTransactionRequestR\ftransactions\"c\n" + "\x1eObjectTransactionBatchResponse\x12A\n" + @@ -6852,7 +7153,15 @@ const file_filer_proto_rawDesc = "" + "\x15EXISTING_IS_DIRECTORY\x10\x03\x12\x14\n" + "\x10EXISTING_IS_FILE\x10\x04\x12\x18\n" + "\x14ENTRY_ALREADY_EXISTS\x10\x05\x12\x17\n" + - "\x13PRECONDITION_FAILED\x10\x062\xf4\x15\n" + + "\x13PRECONDITION_FAILED\x10\x06*e\n" + + "\vPosixLockOp\x12\f\n" + + "\bTRY_LOCK\x10\x00\x12\n" + + "\n" + + "\x06UNLOCK\x10\x01\x12\n" + + "\n" + + "\x06GET_LK\x10\x02\x12\x17\n" + + "\x13RELEASE_POSIX_OWNER\x10\x03\x12\x17\n" + + "\x13RELEASE_FLOCK_OWNER\x10\x042\xbc\x16\n" + "\fSeaweedFiler\x12g\n" + "\x14LookupDirectoryEntry\x12%.filer_pb.LookupDirectoryEntryRequest\x1a&.filer_pb.LookupDirectoryEntryResponse\"\x00\x12N\n" + "\vListEntries\x12\x1c.filer_pb.ListEntriesRequest\x1a\x1d.filer_pb.ListEntriesResponse\"\x000\x01\x12L\n" + @@ -6862,7 +7171,8 @@ const file_filer_proto_rawDesc = "" + "\rAppendToEntry\x12\x1e.filer_pb.AppendToEntryRequest\x1a\x1f.filer_pb.AppendToEntryResponse\"\x00\x12L\n" + "\vDeleteEntry\x12\x1c.filer_pb.DeleteEntryRequest\x1a\x1d.filer_pb.DeleteEntryResponse\"\x00\x12^\n" + "\x11ObjectTransaction\x12\".filer_pb.ObjectTransactionRequest\x1a#.filer_pb.ObjectTransactionResponse\"\x00\x12m\n" + - "\x16ObjectTransactionBatch\x12'.filer_pb.ObjectTransactionBatchRequest\x1a(.filer_pb.ObjectTransactionBatchResponse\"\x00\x12^\n" + + "\x16ObjectTransactionBatch\x12'.filer_pb.ObjectTransactionBatchRequest\x1a(.filer_pb.ObjectTransactionBatchResponse\"\x00\x12F\n" + + "\tPosixLock\x12\x1a.filer_pb.PosixLockRequest\x1a\x1b.filer_pb.PosixLockResponse\"\x00\x12^\n" + "\x11AtomicRenameEntry\x12\".filer_pb.AtomicRenameEntryRequest\x1a#.filer_pb.AtomicRenameEntryResponse\"\x00\x12`\n" + "\x11StreamRenameEntry\x12\".filer_pb.StreamRenameEntryRequest\x1a#.filer_pb.StreamRenameEntryResponse\"\x000\x01\x12b\n" + "\x11StreamMutateEntry\x12\".filer_pb.StreamMutateEntryRequest\x1a#.filer_pb.StreamMutateEntryResponse\"\x00(\x010\x01\x12O\n" + @@ -6902,236 +7212,245 @@ func file_filer_proto_rawDescGZIP() []byte { return file_filer_proto_rawDescData } -var file_filer_proto_enumTypes = make([]protoimpl.EnumInfo, 4) -var file_filer_proto_msgTypes = make([]protoimpl.MessageInfo, 93) +var file_filer_proto_enumTypes = make([]protoimpl.EnumInfo, 5) +var file_filer_proto_msgTypes = make([]protoimpl.MessageInfo, 96) var file_filer_proto_goTypes = []any{ (SSEType)(0), // 0: filer_pb.SSEType (FilerError)(0), // 1: filer_pb.FilerError - (WriteCondition_Kind)(0), // 2: filer_pb.WriteCondition.Kind - (ObjectMutation_Type)(0), // 3: filer_pb.ObjectMutation.Type - (*LookupDirectoryEntryRequest)(nil), // 4: filer_pb.LookupDirectoryEntryRequest - (*LookupDirectoryEntryResponse)(nil), // 5: filer_pb.LookupDirectoryEntryResponse - (*ListEntriesRequest)(nil), // 6: filer_pb.ListEntriesRequest - (*ListEntriesResponse)(nil), // 7: filer_pb.ListEntriesResponse - (*RemoteEntry)(nil), // 8: filer_pb.RemoteEntry - (*Entry)(nil), // 9: filer_pb.Entry - (*FullEntry)(nil), // 10: filer_pb.FullEntry - (*EventNotification)(nil), // 11: filer_pb.EventNotification - (*FileChunk)(nil), // 12: filer_pb.FileChunk - (*FileChunkManifest)(nil), // 13: filer_pb.FileChunkManifest - (*FileId)(nil), // 14: filer_pb.FileId - (*FuseAttributes)(nil), // 15: filer_pb.FuseAttributes - (*CreateEntryRequest)(nil), // 16: filer_pb.CreateEntryRequest - (*WriteCondition)(nil), // 17: filer_pb.WriteCondition - (*ObjectMutation)(nil), // 18: filer_pb.ObjectMutation - (*Recompute)(nil), // 19: filer_pb.Recompute - (*ObjectTransactionRequest)(nil), // 20: filer_pb.ObjectTransactionRequest - (*ObjectTransactionResponse)(nil), // 21: filer_pb.ObjectTransactionResponse - (*ObjectTransactionBatchRequest)(nil), // 22: filer_pb.ObjectTransactionBatchRequest - (*ObjectTransactionBatchResponse)(nil), // 23: filer_pb.ObjectTransactionBatchResponse - (*CreateEntryResponse)(nil), // 24: filer_pb.CreateEntryResponse - (*UpdateEntryRequest)(nil), // 25: filer_pb.UpdateEntryRequest - (*UpdateEntryResponse)(nil), // 26: filer_pb.UpdateEntryResponse - (*TouchAccessTimeRequest)(nil), // 27: filer_pb.TouchAccessTimeRequest - (*TouchAccessTimeResponse)(nil), // 28: filer_pb.TouchAccessTimeResponse - (*AppendToEntryRequest)(nil), // 29: filer_pb.AppendToEntryRequest - (*AppendToEntryResponse)(nil), // 30: filer_pb.AppendToEntryResponse - (*DeleteEntryRequest)(nil), // 31: filer_pb.DeleteEntryRequest - (*DeleteEntryResponse)(nil), // 32: filer_pb.DeleteEntryResponse - (*AtomicRenameEntryRequest)(nil), // 33: filer_pb.AtomicRenameEntryRequest - (*AtomicRenameEntryResponse)(nil), // 34: filer_pb.AtomicRenameEntryResponse - (*StreamRenameEntryRequest)(nil), // 35: filer_pb.StreamRenameEntryRequest - (*StreamRenameEntryResponse)(nil), // 36: filer_pb.StreamRenameEntryResponse - (*AssignVolumeRequest)(nil), // 37: filer_pb.AssignVolumeRequest - (*AssignVolumeResponse)(nil), // 38: filer_pb.AssignVolumeResponse - (*LookupVolumeRequest)(nil), // 39: filer_pb.LookupVolumeRequest - (*Locations)(nil), // 40: filer_pb.Locations - (*Location)(nil), // 41: filer_pb.Location - (*LookupVolumeResponse)(nil), // 42: filer_pb.LookupVolumeResponse - (*Collection)(nil), // 43: filer_pb.Collection - (*CollectionListRequest)(nil), // 44: filer_pb.CollectionListRequest - (*CollectionListResponse)(nil), // 45: filer_pb.CollectionListResponse - (*DeleteCollectionRequest)(nil), // 46: filer_pb.DeleteCollectionRequest - (*DeleteCollectionResponse)(nil), // 47: filer_pb.DeleteCollectionResponse - (*StatisticsRequest)(nil), // 48: filer_pb.StatisticsRequest - (*StatisticsResponse)(nil), // 49: filer_pb.StatisticsResponse - (*PingRequest)(nil), // 50: filer_pb.PingRequest - (*PingResponse)(nil), // 51: filer_pb.PingResponse - (*GetFilerConfigurationRequest)(nil), // 52: filer_pb.GetFilerConfigurationRequest - (*GetFilerConfigurationResponse)(nil), // 53: filer_pb.GetFilerConfigurationResponse - (*SubscribeMetadataRequest)(nil), // 54: filer_pb.SubscribeMetadataRequest - (*SubscribeMetadataResponse)(nil), // 55: filer_pb.SubscribeMetadataResponse - (*LogFileChunkRef)(nil), // 56: filer_pb.LogFileChunkRef - (*TraverseBfsMetadataRequest)(nil), // 57: filer_pb.TraverseBfsMetadataRequest - (*TraverseBfsMetadataResponse)(nil), // 58: filer_pb.TraverseBfsMetadataResponse - (*LogEntry)(nil), // 59: filer_pb.LogEntry - (*KeepConnectedRequest)(nil), // 60: filer_pb.KeepConnectedRequest - (*KeepConnectedResponse)(nil), // 61: filer_pb.KeepConnectedResponse - (*LocateBrokerRequest)(nil), // 62: filer_pb.LocateBrokerRequest - (*LocateBrokerResponse)(nil), // 63: filer_pb.LocateBrokerResponse - (*KvGetRequest)(nil), // 64: filer_pb.KvGetRequest - (*KvGetResponse)(nil), // 65: filer_pb.KvGetResponse - (*KvPutRequest)(nil), // 66: filer_pb.KvPutRequest - (*KvPutResponse)(nil), // 67: filer_pb.KvPutResponse - (*FilerConf)(nil), // 68: filer_pb.FilerConf - (*CacheRemoteObjectToLocalClusterRequest)(nil), // 69: filer_pb.CacheRemoteObjectToLocalClusterRequest - (*CacheRemoteObjectToLocalClusterResponse)(nil), // 70: filer_pb.CacheRemoteObjectToLocalClusterResponse - (*LockRequest)(nil), // 71: filer_pb.LockRequest - (*LockResponse)(nil), // 72: filer_pb.LockResponse - (*UnlockRequest)(nil), // 73: filer_pb.UnlockRequest - (*UnlockResponse)(nil), // 74: filer_pb.UnlockResponse - (*FindLockOwnerRequest)(nil), // 75: filer_pb.FindLockOwnerRequest - (*FindLockOwnerResponse)(nil), // 76: filer_pb.FindLockOwnerResponse - (*Lock)(nil), // 77: filer_pb.Lock - (*TransferLocksRequest)(nil), // 78: filer_pb.TransferLocksRequest - (*TransferLocksResponse)(nil), // 79: filer_pb.TransferLocksResponse - (*ReplicateLockRequest)(nil), // 80: filer_pb.ReplicateLockRequest - (*ReplicateLockResponse)(nil), // 81: filer_pb.ReplicateLockResponse - (*StreamMutateEntryRequest)(nil), // 82: filer_pb.StreamMutateEntryRequest - (*StreamMutateEntryResponse)(nil), // 83: filer_pb.StreamMutateEntryResponse - (*MountRegisterRequest)(nil), // 84: filer_pb.MountRegisterRequest - (*MountRegisterResponse)(nil), // 85: filer_pb.MountRegisterResponse - (*MountListRequest)(nil), // 86: filer_pb.MountListRequest - (*MountListResponse)(nil), // 87: filer_pb.MountListResponse - (*MountInfo)(nil), // 88: filer_pb.MountInfo - nil, // 89: filer_pb.Entry.ExtendedEntry - (*WriteCondition_Clause)(nil), // 90: filer_pb.WriteCondition.Clause - nil, // 91: filer_pb.ObjectMutation.SetExtendedEntry - nil, // 92: filer_pb.Recompute.CopyExtendedEntry - nil, // 93: filer_pb.UpdateEntryRequest.ExpectedExtendedEntry - nil, // 94: filer_pb.LookupVolumeResponse.LocationsMapEntry - (*LocateBrokerResponse_Resource)(nil), // 95: filer_pb.LocateBrokerResponse.Resource - (*FilerConf_PathConf)(nil), // 96: filer_pb.FilerConf.PathConf + (PosixLockOp)(0), // 2: filer_pb.PosixLockOp + (WriteCondition_Kind)(0), // 3: filer_pb.WriteCondition.Kind + (ObjectMutation_Type)(0), // 4: filer_pb.ObjectMutation.Type + (*LookupDirectoryEntryRequest)(nil), // 5: filer_pb.LookupDirectoryEntryRequest + (*LookupDirectoryEntryResponse)(nil), // 6: filer_pb.LookupDirectoryEntryResponse + (*ListEntriesRequest)(nil), // 7: filer_pb.ListEntriesRequest + (*ListEntriesResponse)(nil), // 8: filer_pb.ListEntriesResponse + (*RemoteEntry)(nil), // 9: filer_pb.RemoteEntry + (*Entry)(nil), // 10: filer_pb.Entry + (*FullEntry)(nil), // 11: filer_pb.FullEntry + (*EventNotification)(nil), // 12: filer_pb.EventNotification + (*FileChunk)(nil), // 13: filer_pb.FileChunk + (*FileChunkManifest)(nil), // 14: filer_pb.FileChunkManifest + (*FileId)(nil), // 15: filer_pb.FileId + (*FuseAttributes)(nil), // 16: filer_pb.FuseAttributes + (*CreateEntryRequest)(nil), // 17: filer_pb.CreateEntryRequest + (*WriteCondition)(nil), // 18: filer_pb.WriteCondition + (*ObjectMutation)(nil), // 19: filer_pb.ObjectMutation + (*Recompute)(nil), // 20: filer_pb.Recompute + (*ObjectTransactionRequest)(nil), // 21: filer_pb.ObjectTransactionRequest + (*ObjectTransactionResponse)(nil), // 22: filer_pb.ObjectTransactionResponse + (*PosixLockRange)(nil), // 23: filer_pb.PosixLockRange + (*PosixLockRequest)(nil), // 24: filer_pb.PosixLockRequest + (*PosixLockResponse)(nil), // 25: filer_pb.PosixLockResponse + (*ObjectTransactionBatchRequest)(nil), // 26: filer_pb.ObjectTransactionBatchRequest + (*ObjectTransactionBatchResponse)(nil), // 27: filer_pb.ObjectTransactionBatchResponse + (*CreateEntryResponse)(nil), // 28: filer_pb.CreateEntryResponse + (*UpdateEntryRequest)(nil), // 29: filer_pb.UpdateEntryRequest + (*UpdateEntryResponse)(nil), // 30: filer_pb.UpdateEntryResponse + (*TouchAccessTimeRequest)(nil), // 31: filer_pb.TouchAccessTimeRequest + (*TouchAccessTimeResponse)(nil), // 32: filer_pb.TouchAccessTimeResponse + (*AppendToEntryRequest)(nil), // 33: filer_pb.AppendToEntryRequest + (*AppendToEntryResponse)(nil), // 34: filer_pb.AppendToEntryResponse + (*DeleteEntryRequest)(nil), // 35: filer_pb.DeleteEntryRequest + (*DeleteEntryResponse)(nil), // 36: filer_pb.DeleteEntryResponse + (*AtomicRenameEntryRequest)(nil), // 37: filer_pb.AtomicRenameEntryRequest + (*AtomicRenameEntryResponse)(nil), // 38: filer_pb.AtomicRenameEntryResponse + (*StreamRenameEntryRequest)(nil), // 39: filer_pb.StreamRenameEntryRequest + (*StreamRenameEntryResponse)(nil), // 40: filer_pb.StreamRenameEntryResponse + (*AssignVolumeRequest)(nil), // 41: filer_pb.AssignVolumeRequest + (*AssignVolumeResponse)(nil), // 42: filer_pb.AssignVolumeResponse + (*LookupVolumeRequest)(nil), // 43: filer_pb.LookupVolumeRequest + (*Locations)(nil), // 44: filer_pb.Locations + (*Location)(nil), // 45: filer_pb.Location + (*LookupVolumeResponse)(nil), // 46: filer_pb.LookupVolumeResponse + (*Collection)(nil), // 47: filer_pb.Collection + (*CollectionListRequest)(nil), // 48: filer_pb.CollectionListRequest + (*CollectionListResponse)(nil), // 49: filer_pb.CollectionListResponse + (*DeleteCollectionRequest)(nil), // 50: filer_pb.DeleteCollectionRequest + (*DeleteCollectionResponse)(nil), // 51: filer_pb.DeleteCollectionResponse + (*StatisticsRequest)(nil), // 52: filer_pb.StatisticsRequest + (*StatisticsResponse)(nil), // 53: filer_pb.StatisticsResponse + (*PingRequest)(nil), // 54: filer_pb.PingRequest + (*PingResponse)(nil), // 55: filer_pb.PingResponse + (*GetFilerConfigurationRequest)(nil), // 56: filer_pb.GetFilerConfigurationRequest + (*GetFilerConfigurationResponse)(nil), // 57: filer_pb.GetFilerConfigurationResponse + (*SubscribeMetadataRequest)(nil), // 58: filer_pb.SubscribeMetadataRequest + (*SubscribeMetadataResponse)(nil), // 59: filer_pb.SubscribeMetadataResponse + (*LogFileChunkRef)(nil), // 60: filer_pb.LogFileChunkRef + (*TraverseBfsMetadataRequest)(nil), // 61: filer_pb.TraverseBfsMetadataRequest + (*TraverseBfsMetadataResponse)(nil), // 62: filer_pb.TraverseBfsMetadataResponse + (*LogEntry)(nil), // 63: filer_pb.LogEntry + (*KeepConnectedRequest)(nil), // 64: filer_pb.KeepConnectedRequest + (*KeepConnectedResponse)(nil), // 65: filer_pb.KeepConnectedResponse + (*LocateBrokerRequest)(nil), // 66: filer_pb.LocateBrokerRequest + (*LocateBrokerResponse)(nil), // 67: filer_pb.LocateBrokerResponse + (*KvGetRequest)(nil), // 68: filer_pb.KvGetRequest + (*KvGetResponse)(nil), // 69: filer_pb.KvGetResponse + (*KvPutRequest)(nil), // 70: filer_pb.KvPutRequest + (*KvPutResponse)(nil), // 71: filer_pb.KvPutResponse + (*FilerConf)(nil), // 72: filer_pb.FilerConf + (*CacheRemoteObjectToLocalClusterRequest)(nil), // 73: filer_pb.CacheRemoteObjectToLocalClusterRequest + (*CacheRemoteObjectToLocalClusterResponse)(nil), // 74: filer_pb.CacheRemoteObjectToLocalClusterResponse + (*LockRequest)(nil), // 75: filer_pb.LockRequest + (*LockResponse)(nil), // 76: filer_pb.LockResponse + (*UnlockRequest)(nil), // 77: filer_pb.UnlockRequest + (*UnlockResponse)(nil), // 78: filer_pb.UnlockResponse + (*FindLockOwnerRequest)(nil), // 79: filer_pb.FindLockOwnerRequest + (*FindLockOwnerResponse)(nil), // 80: filer_pb.FindLockOwnerResponse + (*Lock)(nil), // 81: filer_pb.Lock + (*TransferLocksRequest)(nil), // 82: filer_pb.TransferLocksRequest + (*TransferLocksResponse)(nil), // 83: filer_pb.TransferLocksResponse + (*ReplicateLockRequest)(nil), // 84: filer_pb.ReplicateLockRequest + (*ReplicateLockResponse)(nil), // 85: filer_pb.ReplicateLockResponse + (*StreamMutateEntryRequest)(nil), // 86: filer_pb.StreamMutateEntryRequest + (*StreamMutateEntryResponse)(nil), // 87: filer_pb.StreamMutateEntryResponse + (*MountRegisterRequest)(nil), // 88: filer_pb.MountRegisterRequest + (*MountRegisterResponse)(nil), // 89: filer_pb.MountRegisterResponse + (*MountListRequest)(nil), // 90: filer_pb.MountListRequest + (*MountListResponse)(nil), // 91: filer_pb.MountListResponse + (*MountInfo)(nil), // 92: filer_pb.MountInfo + nil, // 93: filer_pb.Entry.ExtendedEntry + (*WriteCondition_Clause)(nil), // 94: filer_pb.WriteCondition.Clause + nil, // 95: filer_pb.ObjectMutation.SetExtendedEntry + nil, // 96: filer_pb.Recompute.CopyExtendedEntry + nil, // 97: filer_pb.UpdateEntryRequest.ExpectedExtendedEntry + nil, // 98: filer_pb.LookupVolumeResponse.LocationsMapEntry + (*LocateBrokerResponse_Resource)(nil), // 99: filer_pb.LocateBrokerResponse.Resource + (*FilerConf_PathConf)(nil), // 100: filer_pb.FilerConf.PathConf } var file_filer_proto_depIdxs = []int32{ - 9, // 0: filer_pb.LookupDirectoryEntryResponse.entry:type_name -> filer_pb.Entry - 9, // 1: filer_pb.ListEntriesResponse.entry:type_name -> filer_pb.Entry - 12, // 2: filer_pb.Entry.chunks:type_name -> filer_pb.FileChunk - 15, // 3: filer_pb.Entry.attributes:type_name -> filer_pb.FuseAttributes - 89, // 4: filer_pb.Entry.extended:type_name -> filer_pb.Entry.ExtendedEntry - 8, // 5: filer_pb.Entry.remote_entry:type_name -> filer_pb.RemoteEntry - 9, // 6: filer_pb.FullEntry.entry:type_name -> filer_pb.Entry - 9, // 7: filer_pb.EventNotification.old_entry:type_name -> filer_pb.Entry - 9, // 8: filer_pb.EventNotification.new_entry:type_name -> filer_pb.Entry - 14, // 9: filer_pb.FileChunk.fid:type_name -> filer_pb.FileId - 14, // 10: filer_pb.FileChunk.source_fid:type_name -> filer_pb.FileId - 0, // 11: filer_pb.FileChunk.sse_type:type_name -> filer_pb.SSEType - 12, // 12: filer_pb.FileChunkManifest.chunks:type_name -> filer_pb.FileChunk - 9, // 13: filer_pb.CreateEntryRequest.entry:type_name -> filer_pb.Entry - 17, // 14: filer_pb.CreateEntryRequest.condition:type_name -> filer_pb.WriteCondition - 90, // 15: filer_pb.WriteCondition.clauses:type_name -> filer_pb.WriteCondition.Clause - 3, // 16: filer_pb.ObjectMutation.type:type_name -> filer_pb.ObjectMutation.Type - 9, // 17: filer_pb.ObjectMutation.entry:type_name -> filer_pb.Entry - 91, // 18: filer_pb.ObjectMutation.set_extended:type_name -> filer_pb.ObjectMutation.SetExtendedEntry - 19, // 19: filer_pb.ObjectMutation.recompute:type_name -> filer_pb.Recompute - 92, // 20: filer_pb.Recompute.copy_extended:type_name -> filer_pb.Recompute.CopyExtendedEntry - 17, // 21: filer_pb.ObjectTransactionRequest.condition:type_name -> filer_pb.WriteCondition - 18, // 22: filer_pb.ObjectTransactionRequest.mutations:type_name -> filer_pb.ObjectMutation - 1, // 23: filer_pb.ObjectTransactionResponse.error_code:type_name -> filer_pb.FilerError - 20, // 24: filer_pb.ObjectTransactionBatchRequest.transactions:type_name -> filer_pb.ObjectTransactionRequest - 21, // 25: filer_pb.ObjectTransactionBatchResponse.responses:type_name -> filer_pb.ObjectTransactionResponse - 55, // 26: filer_pb.CreateEntryResponse.metadata_event:type_name -> filer_pb.SubscribeMetadataResponse - 1, // 27: filer_pb.CreateEntryResponse.error_code:type_name -> filer_pb.FilerError - 9, // 28: filer_pb.UpdateEntryRequest.entry:type_name -> filer_pb.Entry - 93, // 29: filer_pb.UpdateEntryRequest.expected_extended:type_name -> filer_pb.UpdateEntryRequest.ExpectedExtendedEntry - 55, // 30: filer_pb.UpdateEntryResponse.metadata_event:type_name -> filer_pb.SubscribeMetadataResponse - 12, // 31: filer_pb.AppendToEntryRequest.chunks:type_name -> filer_pb.FileChunk - 55, // 32: filer_pb.DeleteEntryResponse.metadata_event:type_name -> filer_pb.SubscribeMetadataResponse - 11, // 33: filer_pb.StreamRenameEntryResponse.event_notification:type_name -> filer_pb.EventNotification - 41, // 34: filer_pb.AssignVolumeResponse.location:type_name -> filer_pb.Location - 41, // 35: filer_pb.Locations.locations:type_name -> filer_pb.Location - 94, // 36: filer_pb.LookupVolumeResponse.locations_map:type_name -> filer_pb.LookupVolumeResponse.LocationsMapEntry - 43, // 37: filer_pb.CollectionListResponse.collections:type_name -> filer_pb.Collection - 11, // 38: filer_pb.SubscribeMetadataResponse.event_notification:type_name -> filer_pb.EventNotification - 55, // 39: filer_pb.SubscribeMetadataResponse.events:type_name -> filer_pb.SubscribeMetadataResponse - 56, // 40: filer_pb.SubscribeMetadataResponse.log_file_refs:type_name -> filer_pb.LogFileChunkRef - 12, // 41: filer_pb.LogFileChunkRef.chunks:type_name -> filer_pb.FileChunk - 9, // 42: filer_pb.TraverseBfsMetadataResponse.entry:type_name -> filer_pb.Entry - 95, // 43: filer_pb.LocateBrokerResponse.resources:type_name -> filer_pb.LocateBrokerResponse.Resource - 96, // 44: filer_pb.FilerConf.locations:type_name -> filer_pb.FilerConf.PathConf - 9, // 45: filer_pb.CacheRemoteObjectToLocalClusterResponse.entry:type_name -> filer_pb.Entry - 55, // 46: filer_pb.CacheRemoteObjectToLocalClusterResponse.metadata_event:type_name -> filer_pb.SubscribeMetadataResponse - 77, // 47: filer_pb.TransferLocksRequest.locks:type_name -> filer_pb.Lock - 16, // 48: filer_pb.StreamMutateEntryRequest.create_request:type_name -> filer_pb.CreateEntryRequest - 25, // 49: filer_pb.StreamMutateEntryRequest.update_request:type_name -> filer_pb.UpdateEntryRequest - 31, // 50: filer_pb.StreamMutateEntryRequest.delete_request:type_name -> filer_pb.DeleteEntryRequest - 35, // 51: filer_pb.StreamMutateEntryRequest.rename_request:type_name -> filer_pb.StreamRenameEntryRequest - 24, // 52: filer_pb.StreamMutateEntryResponse.create_response:type_name -> filer_pb.CreateEntryResponse - 26, // 53: filer_pb.StreamMutateEntryResponse.update_response:type_name -> filer_pb.UpdateEntryResponse - 32, // 54: filer_pb.StreamMutateEntryResponse.delete_response:type_name -> filer_pb.DeleteEntryResponse - 36, // 55: filer_pb.StreamMutateEntryResponse.rename_response:type_name -> filer_pb.StreamRenameEntryResponse - 88, // 56: filer_pb.MountListResponse.mounts:type_name -> filer_pb.MountInfo - 2, // 57: filer_pb.WriteCondition.Clause.kind:type_name -> filer_pb.WriteCondition.Kind - 40, // 58: filer_pb.LookupVolumeResponse.LocationsMapEntry.value:type_name -> filer_pb.Locations - 4, // 59: filer_pb.SeaweedFiler.LookupDirectoryEntry:input_type -> filer_pb.LookupDirectoryEntryRequest - 6, // 60: filer_pb.SeaweedFiler.ListEntries:input_type -> filer_pb.ListEntriesRequest - 16, // 61: filer_pb.SeaweedFiler.CreateEntry:input_type -> filer_pb.CreateEntryRequest - 25, // 62: filer_pb.SeaweedFiler.UpdateEntry:input_type -> filer_pb.UpdateEntryRequest - 27, // 63: filer_pb.SeaweedFiler.TouchAccessTime:input_type -> filer_pb.TouchAccessTimeRequest - 29, // 64: filer_pb.SeaweedFiler.AppendToEntry:input_type -> filer_pb.AppendToEntryRequest - 31, // 65: filer_pb.SeaweedFiler.DeleteEntry:input_type -> filer_pb.DeleteEntryRequest - 20, // 66: filer_pb.SeaweedFiler.ObjectTransaction:input_type -> filer_pb.ObjectTransactionRequest - 22, // 67: filer_pb.SeaweedFiler.ObjectTransactionBatch:input_type -> filer_pb.ObjectTransactionBatchRequest - 33, // 68: filer_pb.SeaweedFiler.AtomicRenameEntry:input_type -> filer_pb.AtomicRenameEntryRequest - 35, // 69: filer_pb.SeaweedFiler.StreamRenameEntry:input_type -> filer_pb.StreamRenameEntryRequest - 82, // 70: filer_pb.SeaweedFiler.StreamMutateEntry:input_type -> filer_pb.StreamMutateEntryRequest - 37, // 71: filer_pb.SeaweedFiler.AssignVolume:input_type -> filer_pb.AssignVolumeRequest - 39, // 72: filer_pb.SeaweedFiler.LookupVolume:input_type -> filer_pb.LookupVolumeRequest - 44, // 73: filer_pb.SeaweedFiler.CollectionList:input_type -> filer_pb.CollectionListRequest - 46, // 74: filer_pb.SeaweedFiler.DeleteCollection:input_type -> filer_pb.DeleteCollectionRequest - 48, // 75: filer_pb.SeaweedFiler.Statistics:input_type -> filer_pb.StatisticsRequest - 50, // 76: filer_pb.SeaweedFiler.Ping:input_type -> filer_pb.PingRequest - 52, // 77: filer_pb.SeaweedFiler.GetFilerConfiguration:input_type -> filer_pb.GetFilerConfigurationRequest - 57, // 78: filer_pb.SeaweedFiler.TraverseBfsMetadata:input_type -> filer_pb.TraverseBfsMetadataRequest - 54, // 79: filer_pb.SeaweedFiler.SubscribeMetadata:input_type -> filer_pb.SubscribeMetadataRequest - 54, // 80: filer_pb.SeaweedFiler.SubscribeLocalMetadata:input_type -> filer_pb.SubscribeMetadataRequest - 64, // 81: filer_pb.SeaweedFiler.KvGet:input_type -> filer_pb.KvGetRequest - 66, // 82: filer_pb.SeaweedFiler.KvPut:input_type -> filer_pb.KvPutRequest - 69, // 83: filer_pb.SeaweedFiler.CacheRemoteObjectToLocalCluster:input_type -> filer_pb.CacheRemoteObjectToLocalClusterRequest - 71, // 84: filer_pb.SeaweedFiler.DistributedLock:input_type -> filer_pb.LockRequest - 73, // 85: filer_pb.SeaweedFiler.DistributedUnlock:input_type -> filer_pb.UnlockRequest - 75, // 86: filer_pb.SeaweedFiler.FindLockOwner:input_type -> filer_pb.FindLockOwnerRequest - 78, // 87: filer_pb.SeaweedFiler.TransferLocks:input_type -> filer_pb.TransferLocksRequest - 80, // 88: filer_pb.SeaweedFiler.ReplicateLock:input_type -> filer_pb.ReplicateLockRequest - 84, // 89: filer_pb.SeaweedFiler.MountRegister:input_type -> filer_pb.MountRegisterRequest - 86, // 90: filer_pb.SeaweedFiler.MountList:input_type -> filer_pb.MountListRequest - 5, // 91: filer_pb.SeaweedFiler.LookupDirectoryEntry:output_type -> filer_pb.LookupDirectoryEntryResponse - 7, // 92: filer_pb.SeaweedFiler.ListEntries:output_type -> filer_pb.ListEntriesResponse - 24, // 93: filer_pb.SeaweedFiler.CreateEntry:output_type -> filer_pb.CreateEntryResponse - 26, // 94: filer_pb.SeaweedFiler.UpdateEntry:output_type -> filer_pb.UpdateEntryResponse - 28, // 95: filer_pb.SeaweedFiler.TouchAccessTime:output_type -> filer_pb.TouchAccessTimeResponse - 30, // 96: filer_pb.SeaweedFiler.AppendToEntry:output_type -> filer_pb.AppendToEntryResponse - 32, // 97: filer_pb.SeaweedFiler.DeleteEntry:output_type -> filer_pb.DeleteEntryResponse - 21, // 98: filer_pb.SeaweedFiler.ObjectTransaction:output_type -> filer_pb.ObjectTransactionResponse - 23, // 99: filer_pb.SeaweedFiler.ObjectTransactionBatch:output_type -> filer_pb.ObjectTransactionBatchResponse - 34, // 100: filer_pb.SeaweedFiler.AtomicRenameEntry:output_type -> filer_pb.AtomicRenameEntryResponse - 36, // 101: filer_pb.SeaweedFiler.StreamRenameEntry:output_type -> filer_pb.StreamRenameEntryResponse - 83, // 102: filer_pb.SeaweedFiler.StreamMutateEntry:output_type -> filer_pb.StreamMutateEntryResponse - 38, // 103: filer_pb.SeaweedFiler.AssignVolume:output_type -> filer_pb.AssignVolumeResponse - 42, // 104: filer_pb.SeaweedFiler.LookupVolume:output_type -> filer_pb.LookupVolumeResponse - 45, // 105: filer_pb.SeaweedFiler.CollectionList:output_type -> filer_pb.CollectionListResponse - 47, // 106: filer_pb.SeaweedFiler.DeleteCollection:output_type -> filer_pb.DeleteCollectionResponse - 49, // 107: filer_pb.SeaweedFiler.Statistics:output_type -> filer_pb.StatisticsResponse - 51, // 108: filer_pb.SeaweedFiler.Ping:output_type -> filer_pb.PingResponse - 53, // 109: filer_pb.SeaweedFiler.GetFilerConfiguration:output_type -> filer_pb.GetFilerConfigurationResponse - 58, // 110: filer_pb.SeaweedFiler.TraverseBfsMetadata:output_type -> filer_pb.TraverseBfsMetadataResponse - 55, // 111: filer_pb.SeaweedFiler.SubscribeMetadata:output_type -> filer_pb.SubscribeMetadataResponse - 55, // 112: filer_pb.SeaweedFiler.SubscribeLocalMetadata:output_type -> filer_pb.SubscribeMetadataResponse - 65, // 113: filer_pb.SeaweedFiler.KvGet:output_type -> filer_pb.KvGetResponse - 67, // 114: filer_pb.SeaweedFiler.KvPut:output_type -> filer_pb.KvPutResponse - 70, // 115: filer_pb.SeaweedFiler.CacheRemoteObjectToLocalCluster:output_type -> filer_pb.CacheRemoteObjectToLocalClusterResponse - 72, // 116: filer_pb.SeaweedFiler.DistributedLock:output_type -> filer_pb.LockResponse - 74, // 117: filer_pb.SeaweedFiler.DistributedUnlock:output_type -> filer_pb.UnlockResponse - 76, // 118: filer_pb.SeaweedFiler.FindLockOwner:output_type -> filer_pb.FindLockOwnerResponse - 79, // 119: filer_pb.SeaweedFiler.TransferLocks:output_type -> filer_pb.TransferLocksResponse - 81, // 120: filer_pb.SeaweedFiler.ReplicateLock:output_type -> filer_pb.ReplicateLockResponse - 85, // 121: filer_pb.SeaweedFiler.MountRegister:output_type -> filer_pb.MountRegisterResponse - 87, // 122: filer_pb.SeaweedFiler.MountList:output_type -> filer_pb.MountListResponse - 91, // [91:123] is the sub-list for method output_type - 59, // [59:91] is the sub-list for method input_type - 59, // [59:59] is the sub-list for extension type_name - 59, // [59:59] is the sub-list for extension extendee - 0, // [0:59] is the sub-list for field type_name + 10, // 0: filer_pb.LookupDirectoryEntryResponse.entry:type_name -> filer_pb.Entry + 10, // 1: filer_pb.ListEntriesResponse.entry:type_name -> filer_pb.Entry + 13, // 2: filer_pb.Entry.chunks:type_name -> filer_pb.FileChunk + 16, // 3: filer_pb.Entry.attributes:type_name -> filer_pb.FuseAttributes + 93, // 4: filer_pb.Entry.extended:type_name -> filer_pb.Entry.ExtendedEntry + 9, // 5: filer_pb.Entry.remote_entry:type_name -> filer_pb.RemoteEntry + 10, // 6: filer_pb.FullEntry.entry:type_name -> filer_pb.Entry + 10, // 7: filer_pb.EventNotification.old_entry:type_name -> filer_pb.Entry + 10, // 8: filer_pb.EventNotification.new_entry:type_name -> filer_pb.Entry + 15, // 9: filer_pb.FileChunk.fid:type_name -> filer_pb.FileId + 15, // 10: filer_pb.FileChunk.source_fid:type_name -> filer_pb.FileId + 0, // 11: filer_pb.FileChunk.sse_type:type_name -> filer_pb.SSEType + 13, // 12: filer_pb.FileChunkManifest.chunks:type_name -> filer_pb.FileChunk + 10, // 13: filer_pb.CreateEntryRequest.entry:type_name -> filer_pb.Entry + 18, // 14: filer_pb.CreateEntryRequest.condition:type_name -> filer_pb.WriteCondition + 94, // 15: filer_pb.WriteCondition.clauses:type_name -> filer_pb.WriteCondition.Clause + 4, // 16: filer_pb.ObjectMutation.type:type_name -> filer_pb.ObjectMutation.Type + 10, // 17: filer_pb.ObjectMutation.entry:type_name -> filer_pb.Entry + 95, // 18: filer_pb.ObjectMutation.set_extended:type_name -> filer_pb.ObjectMutation.SetExtendedEntry + 20, // 19: filer_pb.ObjectMutation.recompute:type_name -> filer_pb.Recompute + 96, // 20: filer_pb.Recompute.copy_extended:type_name -> filer_pb.Recompute.CopyExtendedEntry + 18, // 21: filer_pb.ObjectTransactionRequest.condition:type_name -> filer_pb.WriteCondition + 19, // 22: filer_pb.ObjectTransactionRequest.mutations:type_name -> filer_pb.ObjectMutation + 1, // 23: filer_pb.ObjectTransactionResponse.error_code:type_name -> filer_pb.FilerError + 2, // 24: filer_pb.PosixLockRequest.op:type_name -> filer_pb.PosixLockOp + 23, // 25: filer_pb.PosixLockRequest.lock:type_name -> filer_pb.PosixLockRange + 23, // 26: filer_pb.PosixLockResponse.conflict:type_name -> filer_pb.PosixLockRange + 21, // 27: filer_pb.ObjectTransactionBatchRequest.transactions:type_name -> filer_pb.ObjectTransactionRequest + 22, // 28: filer_pb.ObjectTransactionBatchResponse.responses:type_name -> filer_pb.ObjectTransactionResponse + 59, // 29: filer_pb.CreateEntryResponse.metadata_event:type_name -> filer_pb.SubscribeMetadataResponse + 1, // 30: filer_pb.CreateEntryResponse.error_code:type_name -> filer_pb.FilerError + 10, // 31: filer_pb.UpdateEntryRequest.entry:type_name -> filer_pb.Entry + 97, // 32: filer_pb.UpdateEntryRequest.expected_extended:type_name -> filer_pb.UpdateEntryRequest.ExpectedExtendedEntry + 59, // 33: filer_pb.UpdateEntryResponse.metadata_event:type_name -> filer_pb.SubscribeMetadataResponse + 13, // 34: filer_pb.AppendToEntryRequest.chunks:type_name -> filer_pb.FileChunk + 59, // 35: filer_pb.DeleteEntryResponse.metadata_event:type_name -> filer_pb.SubscribeMetadataResponse + 12, // 36: filer_pb.StreamRenameEntryResponse.event_notification:type_name -> filer_pb.EventNotification + 45, // 37: filer_pb.AssignVolumeResponse.location:type_name -> filer_pb.Location + 45, // 38: filer_pb.Locations.locations:type_name -> filer_pb.Location + 98, // 39: filer_pb.LookupVolumeResponse.locations_map:type_name -> filer_pb.LookupVolumeResponse.LocationsMapEntry + 47, // 40: filer_pb.CollectionListResponse.collections:type_name -> filer_pb.Collection + 12, // 41: filer_pb.SubscribeMetadataResponse.event_notification:type_name -> filer_pb.EventNotification + 59, // 42: filer_pb.SubscribeMetadataResponse.events:type_name -> filer_pb.SubscribeMetadataResponse + 60, // 43: filer_pb.SubscribeMetadataResponse.log_file_refs:type_name -> filer_pb.LogFileChunkRef + 13, // 44: filer_pb.LogFileChunkRef.chunks:type_name -> filer_pb.FileChunk + 10, // 45: filer_pb.TraverseBfsMetadataResponse.entry:type_name -> filer_pb.Entry + 99, // 46: filer_pb.LocateBrokerResponse.resources:type_name -> filer_pb.LocateBrokerResponse.Resource + 100, // 47: filer_pb.FilerConf.locations:type_name -> filer_pb.FilerConf.PathConf + 10, // 48: filer_pb.CacheRemoteObjectToLocalClusterResponse.entry:type_name -> filer_pb.Entry + 59, // 49: filer_pb.CacheRemoteObjectToLocalClusterResponse.metadata_event:type_name -> filer_pb.SubscribeMetadataResponse + 81, // 50: filer_pb.TransferLocksRequest.locks:type_name -> filer_pb.Lock + 17, // 51: filer_pb.StreamMutateEntryRequest.create_request:type_name -> filer_pb.CreateEntryRequest + 29, // 52: filer_pb.StreamMutateEntryRequest.update_request:type_name -> filer_pb.UpdateEntryRequest + 35, // 53: filer_pb.StreamMutateEntryRequest.delete_request:type_name -> filer_pb.DeleteEntryRequest + 39, // 54: filer_pb.StreamMutateEntryRequest.rename_request:type_name -> filer_pb.StreamRenameEntryRequest + 28, // 55: filer_pb.StreamMutateEntryResponse.create_response:type_name -> filer_pb.CreateEntryResponse + 30, // 56: filer_pb.StreamMutateEntryResponse.update_response:type_name -> filer_pb.UpdateEntryResponse + 36, // 57: filer_pb.StreamMutateEntryResponse.delete_response:type_name -> filer_pb.DeleteEntryResponse + 40, // 58: filer_pb.StreamMutateEntryResponse.rename_response:type_name -> filer_pb.StreamRenameEntryResponse + 92, // 59: filer_pb.MountListResponse.mounts:type_name -> filer_pb.MountInfo + 3, // 60: filer_pb.WriteCondition.Clause.kind:type_name -> filer_pb.WriteCondition.Kind + 44, // 61: filer_pb.LookupVolumeResponse.LocationsMapEntry.value:type_name -> filer_pb.Locations + 5, // 62: filer_pb.SeaweedFiler.LookupDirectoryEntry:input_type -> filer_pb.LookupDirectoryEntryRequest + 7, // 63: filer_pb.SeaweedFiler.ListEntries:input_type -> filer_pb.ListEntriesRequest + 17, // 64: filer_pb.SeaweedFiler.CreateEntry:input_type -> filer_pb.CreateEntryRequest + 29, // 65: filer_pb.SeaweedFiler.UpdateEntry:input_type -> filer_pb.UpdateEntryRequest + 31, // 66: filer_pb.SeaweedFiler.TouchAccessTime:input_type -> filer_pb.TouchAccessTimeRequest + 33, // 67: filer_pb.SeaweedFiler.AppendToEntry:input_type -> filer_pb.AppendToEntryRequest + 35, // 68: filer_pb.SeaweedFiler.DeleteEntry:input_type -> filer_pb.DeleteEntryRequest + 21, // 69: filer_pb.SeaweedFiler.ObjectTransaction:input_type -> filer_pb.ObjectTransactionRequest + 26, // 70: filer_pb.SeaweedFiler.ObjectTransactionBatch:input_type -> filer_pb.ObjectTransactionBatchRequest + 24, // 71: filer_pb.SeaweedFiler.PosixLock:input_type -> filer_pb.PosixLockRequest + 37, // 72: filer_pb.SeaweedFiler.AtomicRenameEntry:input_type -> filer_pb.AtomicRenameEntryRequest + 39, // 73: filer_pb.SeaweedFiler.StreamRenameEntry:input_type -> filer_pb.StreamRenameEntryRequest + 86, // 74: filer_pb.SeaweedFiler.StreamMutateEntry:input_type -> filer_pb.StreamMutateEntryRequest + 41, // 75: filer_pb.SeaweedFiler.AssignVolume:input_type -> filer_pb.AssignVolumeRequest + 43, // 76: filer_pb.SeaweedFiler.LookupVolume:input_type -> filer_pb.LookupVolumeRequest + 48, // 77: filer_pb.SeaweedFiler.CollectionList:input_type -> filer_pb.CollectionListRequest + 50, // 78: filer_pb.SeaweedFiler.DeleteCollection:input_type -> filer_pb.DeleteCollectionRequest + 52, // 79: filer_pb.SeaweedFiler.Statistics:input_type -> filer_pb.StatisticsRequest + 54, // 80: filer_pb.SeaweedFiler.Ping:input_type -> filer_pb.PingRequest + 56, // 81: filer_pb.SeaweedFiler.GetFilerConfiguration:input_type -> filer_pb.GetFilerConfigurationRequest + 61, // 82: filer_pb.SeaweedFiler.TraverseBfsMetadata:input_type -> filer_pb.TraverseBfsMetadataRequest + 58, // 83: filer_pb.SeaweedFiler.SubscribeMetadata:input_type -> filer_pb.SubscribeMetadataRequest + 58, // 84: filer_pb.SeaweedFiler.SubscribeLocalMetadata:input_type -> filer_pb.SubscribeMetadataRequest + 68, // 85: filer_pb.SeaweedFiler.KvGet:input_type -> filer_pb.KvGetRequest + 70, // 86: filer_pb.SeaweedFiler.KvPut:input_type -> filer_pb.KvPutRequest + 73, // 87: filer_pb.SeaweedFiler.CacheRemoteObjectToLocalCluster:input_type -> filer_pb.CacheRemoteObjectToLocalClusterRequest + 75, // 88: filer_pb.SeaweedFiler.DistributedLock:input_type -> filer_pb.LockRequest + 77, // 89: filer_pb.SeaweedFiler.DistributedUnlock:input_type -> filer_pb.UnlockRequest + 79, // 90: filer_pb.SeaweedFiler.FindLockOwner:input_type -> filer_pb.FindLockOwnerRequest + 82, // 91: filer_pb.SeaweedFiler.TransferLocks:input_type -> filer_pb.TransferLocksRequest + 84, // 92: filer_pb.SeaweedFiler.ReplicateLock:input_type -> filer_pb.ReplicateLockRequest + 88, // 93: filer_pb.SeaweedFiler.MountRegister:input_type -> filer_pb.MountRegisterRequest + 90, // 94: filer_pb.SeaweedFiler.MountList:input_type -> filer_pb.MountListRequest + 6, // 95: filer_pb.SeaweedFiler.LookupDirectoryEntry:output_type -> filer_pb.LookupDirectoryEntryResponse + 8, // 96: filer_pb.SeaweedFiler.ListEntries:output_type -> filer_pb.ListEntriesResponse + 28, // 97: filer_pb.SeaweedFiler.CreateEntry:output_type -> filer_pb.CreateEntryResponse + 30, // 98: filer_pb.SeaweedFiler.UpdateEntry:output_type -> filer_pb.UpdateEntryResponse + 32, // 99: filer_pb.SeaweedFiler.TouchAccessTime:output_type -> filer_pb.TouchAccessTimeResponse + 34, // 100: filer_pb.SeaweedFiler.AppendToEntry:output_type -> filer_pb.AppendToEntryResponse + 36, // 101: filer_pb.SeaweedFiler.DeleteEntry:output_type -> filer_pb.DeleteEntryResponse + 22, // 102: filer_pb.SeaweedFiler.ObjectTransaction:output_type -> filer_pb.ObjectTransactionResponse + 27, // 103: filer_pb.SeaweedFiler.ObjectTransactionBatch:output_type -> filer_pb.ObjectTransactionBatchResponse + 25, // 104: filer_pb.SeaweedFiler.PosixLock:output_type -> filer_pb.PosixLockResponse + 38, // 105: filer_pb.SeaweedFiler.AtomicRenameEntry:output_type -> filer_pb.AtomicRenameEntryResponse + 40, // 106: filer_pb.SeaweedFiler.StreamRenameEntry:output_type -> filer_pb.StreamRenameEntryResponse + 87, // 107: filer_pb.SeaweedFiler.StreamMutateEntry:output_type -> filer_pb.StreamMutateEntryResponse + 42, // 108: filer_pb.SeaweedFiler.AssignVolume:output_type -> filer_pb.AssignVolumeResponse + 46, // 109: filer_pb.SeaweedFiler.LookupVolume:output_type -> filer_pb.LookupVolumeResponse + 49, // 110: filer_pb.SeaweedFiler.CollectionList:output_type -> filer_pb.CollectionListResponse + 51, // 111: filer_pb.SeaweedFiler.DeleteCollection:output_type -> filer_pb.DeleteCollectionResponse + 53, // 112: filer_pb.SeaweedFiler.Statistics:output_type -> filer_pb.StatisticsResponse + 55, // 113: filer_pb.SeaweedFiler.Ping:output_type -> filer_pb.PingResponse + 57, // 114: filer_pb.SeaweedFiler.GetFilerConfiguration:output_type -> filer_pb.GetFilerConfigurationResponse + 62, // 115: filer_pb.SeaweedFiler.TraverseBfsMetadata:output_type -> filer_pb.TraverseBfsMetadataResponse + 59, // 116: filer_pb.SeaweedFiler.SubscribeMetadata:output_type -> filer_pb.SubscribeMetadataResponse + 59, // 117: filer_pb.SeaweedFiler.SubscribeLocalMetadata:output_type -> filer_pb.SubscribeMetadataResponse + 69, // 118: filer_pb.SeaweedFiler.KvGet:output_type -> filer_pb.KvGetResponse + 71, // 119: filer_pb.SeaweedFiler.KvPut:output_type -> filer_pb.KvPutResponse + 74, // 120: filer_pb.SeaweedFiler.CacheRemoteObjectToLocalCluster:output_type -> filer_pb.CacheRemoteObjectToLocalClusterResponse + 76, // 121: filer_pb.SeaweedFiler.DistributedLock:output_type -> filer_pb.LockResponse + 78, // 122: filer_pb.SeaweedFiler.DistributedUnlock:output_type -> filer_pb.UnlockResponse + 80, // 123: filer_pb.SeaweedFiler.FindLockOwner:output_type -> filer_pb.FindLockOwnerResponse + 83, // 124: filer_pb.SeaweedFiler.TransferLocks:output_type -> filer_pb.TransferLocksResponse + 85, // 125: filer_pb.SeaweedFiler.ReplicateLock:output_type -> filer_pb.ReplicateLockResponse + 89, // 126: filer_pb.SeaweedFiler.MountRegister:output_type -> filer_pb.MountRegisterResponse + 91, // 127: filer_pb.SeaweedFiler.MountList:output_type -> filer_pb.MountListResponse + 95, // [95:128] is the sub-list for method output_type + 62, // [62:95] is the sub-list for method input_type + 62, // [62:62] is the sub-list for extension type_name + 62, // [62:62] is the sub-list for extension extendee + 0, // [0:62] is the sub-list for field type_name } func init() { file_filer_proto_init() } @@ -7139,13 +7458,13 @@ func file_filer_proto_init() { if File_filer_proto != nil { return } - file_filer_proto_msgTypes[78].OneofWrappers = []any{ + file_filer_proto_msgTypes[81].OneofWrappers = []any{ (*StreamMutateEntryRequest_CreateRequest)(nil), (*StreamMutateEntryRequest_UpdateRequest)(nil), (*StreamMutateEntryRequest_DeleteRequest)(nil), (*StreamMutateEntryRequest_RenameRequest)(nil), } - file_filer_proto_msgTypes[79].OneofWrappers = []any{ + file_filer_proto_msgTypes[82].OneofWrappers = []any{ (*StreamMutateEntryResponse_CreateResponse)(nil), (*StreamMutateEntryResponse_UpdateResponse)(nil), (*StreamMutateEntryResponse_DeleteResponse)(nil), @@ -7156,8 +7475,8 @@ func file_filer_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_filer_proto_rawDesc), len(file_filer_proto_rawDesc)), - NumEnums: 4, - NumMessages: 93, + NumEnums: 5, + NumMessages: 96, NumExtensions: 0, NumServices: 1, }, diff --git a/weed/pb/filer_pb/filer_grpc.pb.go b/weed/pb/filer_pb/filer_grpc.pb.go index 3a854d016..f30e8d92a 100644 --- a/weed/pb/filer_pb/filer_grpc.pb.go +++ b/weed/pb/filer_pb/filer_grpc.pb.go @@ -28,6 +28,7 @@ const ( SeaweedFiler_DeleteEntry_FullMethodName = "/filer_pb.SeaweedFiler/DeleteEntry" SeaweedFiler_ObjectTransaction_FullMethodName = "/filer_pb.SeaweedFiler/ObjectTransaction" SeaweedFiler_ObjectTransactionBatch_FullMethodName = "/filer_pb.SeaweedFiler/ObjectTransactionBatch" + SeaweedFiler_PosixLock_FullMethodName = "/filer_pb.SeaweedFiler/PosixLock" SeaweedFiler_AtomicRenameEntry_FullMethodName = "/filer_pb.SeaweedFiler/AtomicRenameEntry" SeaweedFiler_StreamRenameEntry_FullMethodName = "/filer_pb.SeaweedFiler/StreamRenameEntry" SeaweedFiler_StreamMutateEntry_FullMethodName = "/filer_pb.SeaweedFiler/StreamMutateEntry" @@ -66,6 +67,7 @@ type SeaweedFilerClient interface { DeleteEntry(ctx context.Context, in *DeleteEntryRequest, opts ...grpc.CallOption) (*DeleteEntryResponse, error) ObjectTransaction(ctx context.Context, in *ObjectTransactionRequest, opts ...grpc.CallOption) (*ObjectTransactionResponse, error) ObjectTransactionBatch(ctx context.Context, in *ObjectTransactionBatchRequest, opts ...grpc.CallOption) (*ObjectTransactionBatchResponse, error) + PosixLock(ctx context.Context, in *PosixLockRequest, opts ...grpc.CallOption) (*PosixLockResponse, error) AtomicRenameEntry(ctx context.Context, in *AtomicRenameEntryRequest, opts ...grpc.CallOption) (*AtomicRenameEntryResponse, error) StreamRenameEntry(ctx context.Context, in *StreamRenameEntryRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[StreamRenameEntryResponse], error) StreamMutateEntry(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[StreamMutateEntryRequest, StreamMutateEntryResponse], error) @@ -201,6 +203,16 @@ func (c *seaweedFilerClient) ObjectTransactionBatch(ctx context.Context, in *Obj return out, nil } +func (c *seaweedFilerClient) PosixLock(ctx context.Context, in *PosixLockRequest, opts ...grpc.CallOption) (*PosixLockResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(PosixLockResponse) + err := c.cc.Invoke(ctx, SeaweedFiler_PosixLock_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *seaweedFilerClient) AtomicRenameEntry(ctx context.Context, in *AtomicRenameEntryRequest, opts ...grpc.CallOption) (*AtomicRenameEntryResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(AtomicRenameEntryResponse) @@ -483,6 +495,7 @@ type SeaweedFilerServer interface { DeleteEntry(context.Context, *DeleteEntryRequest) (*DeleteEntryResponse, error) ObjectTransaction(context.Context, *ObjectTransactionRequest) (*ObjectTransactionResponse, error) ObjectTransactionBatch(context.Context, *ObjectTransactionBatchRequest) (*ObjectTransactionBatchResponse, error) + PosixLock(context.Context, *PosixLockRequest) (*PosixLockResponse, error) AtomicRenameEntry(context.Context, *AtomicRenameEntryRequest) (*AtomicRenameEntryResponse, error) StreamRenameEntry(*StreamRenameEntryRequest, grpc.ServerStreamingServer[StreamRenameEntryResponse]) error StreamMutateEntry(grpc.BidiStreamingServer[StreamMutateEntryRequest, StreamMutateEntryResponse]) error @@ -546,6 +559,9 @@ func (UnimplementedSeaweedFilerServer) ObjectTransaction(context.Context, *Objec func (UnimplementedSeaweedFilerServer) ObjectTransactionBatch(context.Context, *ObjectTransactionBatchRequest) (*ObjectTransactionBatchResponse, error) { return nil, status.Error(codes.Unimplemented, "method ObjectTransactionBatch not implemented") } +func (UnimplementedSeaweedFilerServer) PosixLock(context.Context, *PosixLockRequest) (*PosixLockResponse, error) { + return nil, status.Error(codes.Unimplemented, "method PosixLock not implemented") +} func (UnimplementedSeaweedFilerServer) AtomicRenameEntry(context.Context, *AtomicRenameEntryRequest) (*AtomicRenameEntryResponse, error) { return nil, status.Error(codes.Unimplemented, "method AtomicRenameEntry not implemented") } @@ -791,6 +807,24 @@ func _SeaweedFiler_ObjectTransactionBatch_Handler(srv interface{}, ctx context.C return interceptor(ctx, in, info, handler) } +func _SeaweedFiler_PosixLock_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PosixLockRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SeaweedFilerServer).PosixLock(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SeaweedFiler_PosixLock_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SeaweedFilerServer).PosixLock(ctx, req.(*PosixLockRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _SeaweedFiler_AtomicRenameEntry_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(AtomicRenameEntryRequest) if err := dec(in); err != nil { @@ -1205,6 +1239,10 @@ var SeaweedFiler_ServiceDesc = grpc.ServiceDesc{ MethodName: "ObjectTransactionBatch", Handler: _SeaweedFiler_ObjectTransactionBatch_Handler, }, + { + MethodName: "PosixLock", + Handler: _SeaweedFiler_PosixLock_Handler, + }, { MethodName: "AtomicRenameEntry", Handler: _SeaweedFiler_AtomicRenameEntry_Handler, diff --git a/weed/server/filer_grpc_server_posix_lock.go b/weed/server/filer_grpc_server_posix_lock.go new file mode 100644 index 000000000..29d1f4f31 --- /dev/null +++ b/weed/server/filer_grpc_server_posix_lock.go @@ -0,0 +1,95 @@ +package weed_server + +import ( + "context" + "fmt" + + "github.com/seaweedfs/seaweedfs/weed/filer/posixlock" + "github.com/seaweedfs/seaweedfs/weed/glog" + "github.com/seaweedfs/seaweedfs/weed/pb" + "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" +) + +// PosixLock applies one advisory lock operation against the in-memory lock table +// of the inode's owner filer. The owner is resolved from req.Key on the same +// ring the gateway and DLM use; a non-owner filer forwards the request one hop +// (is_moved bounds it), so the owner's table stays the single authority even when +// the caller's ring view is stale. Blocking (SetLkw) is the caller's job — this +// is strictly non-blocking try/release/query. +func (fs *FilerServer) PosixLock(ctx context.Context, req *filer_pb.PosixLockRequest) (*filer_pb.PosixLockResponse, error) { + if req.Key == "" { + return &filer_pb.PosixLockResponse{}, fmt.Errorf("key is required") + } + if req.Lock == nil { + return &filer_pb.PosixLockResponse{}, fmt.Errorf("lock is required") + } + + if !req.IsMoved && fs.filer.Dlm != nil { + if owner := fs.filer.Dlm.LockRing.GetPrimary(req.Key); owner != "" && owner != fs.option.Host { + forwarded := &filer_pb.PosixLockRequest{ + Key: req.Key, + IsMoved: true, + Op: req.Op, + Lock: req.Lock, + } + glog.V(4).InfofCtx(ctx, "PosixLock %s op=%v: forwarding to owner %s", req.Key, req.Op, owner) + var resp *filer_pb.PosixLockResponse + err := pb.WithFilerClient(false, 0, owner, fs.grpcDialOption, func(client filer_pb.SeaweedFilerClient) error { + var e error + resp, e = client.PosixLock(ctx, forwarded) + return e + }) + if err != nil { + return &filer_pb.PosixLockResponse{}, err + } + return resp, nil + } + } + + lk := posixlock.Range{ + Start: req.Lock.GetStart(), + End: req.Lock.GetEnd(), + Type: req.Lock.GetType(), + Sid: req.Lock.GetSid(), + Owner: req.Lock.GetOwner(), + Pid: req.Lock.GetPid(), + IsFlock: req.Lock.GetIsFlock(), + } + + resp := &filer_pb.PosixLockResponse{} + switch req.Op { + case filer_pb.PosixLockOp_TRY_LOCK: + if c, granted := fs.posixLocks.TryLock(req.Key, lk); granted { + resp.Granted = true + } else { + resp.HasConflict = true + resp.Conflict = posixRangeToPb(c) + } + case filer_pb.PosixLockOp_UNLOCK: + fs.posixLocks.Unlock(req.Key, lk) + case filer_pb.PosixLockOp_GET_LK: + if c, found := fs.posixLocks.GetLk(req.Key, lk); found { + resp.HasConflict = true + resp.Conflict = posixRangeToPb(c) + } + case filer_pb.PosixLockOp_RELEASE_POSIX_OWNER: + fs.posixLocks.ReleasePosixOwner(req.Key, lk.Sid, lk.Owner) + case filer_pb.PosixLockOp_RELEASE_FLOCK_OWNER: + fs.posixLocks.ReleaseFlockOwner(req.Key, lk.Sid, lk.Owner) + default: + return &filer_pb.PosixLockResponse{}, fmt.Errorf("unknown posix lock op %v", req.Op) + } + return resp, nil +} + +func posixRangeToPb(r posixlock.Range) *filer_pb.PosixLockRange { + return &filer_pb.PosixLockRange{ + Start: r.Start, + End: r.End, + Type: r.Type, + Sid: r.Sid, + Owner: r.Owner, + Pid: r.Pid, + IsFlock: r.IsFlock, + } +} diff --git a/weed/server/filer_grpc_server_posix_lock_test.go b/weed/server/filer_grpc_server_posix_lock_test.go new file mode 100644 index 000000000..98be261be --- /dev/null +++ b/weed/server/filer_grpc_server_posix_lock_test.go @@ -0,0 +1,135 @@ +package weed_server + +import ( + "context" + "net" + "testing" + "time" + + "github.com/seaweedfs/seaweedfs/weed/filer/posixlock" + "github.com/seaweedfs/seaweedfs/weed/pb" + "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" +) + +func newPosixTestServer() *FilerServer { + fs, _ := newTxnTestServer(nil) + fs.posixLocks = posixlock.NewManager() + return fs +} + +func pbLock(start, end uint64, typ uint32, sid, owner uint64, pid uint32, flock bool) *filer_pb.PosixLockRange { + return &filer_pb.PosixLockRange{Start: start, End: end, Type: typ, Sid: sid, Owner: owner, Pid: pid, IsFlock: flock} +} + +func posixOp(t *testing.T, fs *FilerServer, op filer_pb.PosixLockOp, lk *filer_pb.PosixLockRange) *filer_pb.PosixLockResponse { + t.Helper() + resp, err := fs.PosixLock(context.Background(), &filer_pb.PosixLockRequest{Key: "s3.fuse.lock:/x", Op: op, Lock: lk}) + if err != nil { + t.Fatalf("PosixLock op=%v: %v", op, err) + } + return resp +} + +func TestPosixLockGrantAndConflict(t *testing.T) { + fs := newPosixTestServer() + + if r := posixOp(t, fs, filer_pb.PosixLockOp_TRY_LOCK, pbLock(0, 99, posixlock.Write, 1, 1, 7, false)); !r.Granted { + t.Fatal("first lock should be granted") + } + // Conflicting writer from another session: rejected, conflict reported. + r := posixOp(t, fs, filer_pb.PosixLockOp_TRY_LOCK, pbLock(50, 149, posixlock.Write, 2, 1, 8, false)) + if r.Granted { + t.Fatal("overlapping lock from another session should conflict") + } + if !r.HasConflict || r.Conflict.GetPid() != 7 || r.Conflict.GetStart() != 0 || r.Conflict.GetEnd() != 99 { + t.Fatalf("conflict not reported correctly: %+v", r.Conflict) + } +} + +func TestPosixLockUnlockThenReacquire(t *testing.T) { + fs := newPosixTestServer() + posixOp(t, fs, filer_pb.PosixLockOp_TRY_LOCK, pbLock(0, 99, posixlock.Write, 1, 1, 7, false)) + posixOp(t, fs, filer_pb.PosixLockOp_UNLOCK, pbLock(0, 99, posixlock.Unlock, 1, 1, 7, false)) + if r := posixOp(t, fs, filer_pb.PosixLockOp_TRY_LOCK, pbLock(0, 99, posixlock.Write, 2, 1, 8, false)); !r.Granted { + t.Fatal("lock should be grantable after the holder unlocked") + } +} + +func TestPosixLockGetLk(t *testing.T) { + fs := newPosixTestServer() + posixOp(t, fs, filer_pb.PosixLockOp_TRY_LOCK, pbLock(10, 50, posixlock.Write, 1, 1, 7, false)) + + r := posixOp(t, fs, filer_pb.PosixLockOp_GET_LK, pbLock(30, 70, posixlock.Read, 2, 1, 8, false)) + if !r.HasConflict || r.Conflict.GetPid() != 7 { + t.Fatalf("GET_LK should report the holder, got %+v", r) + } + // No conflict for the same owner. + r = posixOp(t, fs, filer_pb.PosixLockOp_GET_LK, pbLock(30, 70, posixlock.Read, 1, 1, 7, false)) + if r.HasConflict { + t.Fatal("an owner should not conflict with itself") + } +} + +func TestPosixLockReleasePosixOwnerKeepsFlock(t *testing.T) { + fs := newPosixTestServer() + posixOp(t, fs, filer_pb.PosixLockOp_TRY_LOCK, pbLock(0, 99, posixlock.Write, 1, 1, 7, false)) + posixOp(t, fs, filer_pb.PosixLockOp_TRY_LOCK, pbLock(0, 1<<63, posixlock.Write, 1, 1, 7, true)) + + posixOp(t, fs, filer_pb.PosixLockOp_RELEASE_POSIX_OWNER, pbLock(0, 0, posixlock.Unlock, 1, 1, 7, false)) + + // fcntl gone, flock remains. + if r := posixOp(t, fs, filer_pb.PosixLockOp_TRY_LOCK, pbLock(0, 99, posixlock.Write, 2, 1, 8, false)); !r.Granted { + t.Fatal("fcntl lock should be gone after RELEASE_POSIX_OWNER") + } + if r := posixOp(t, fs, filer_pb.PosixLockOp_GET_LK, pbLock(0, 10, posixlock.Write, 3, 3, 9, true)); !r.HasConflict { + t.Fatal("flock lock should survive RELEASE_POSIX_OWNER") + } +} + +// A request whose key is owned by another filer is forwarded to it; the owner +// applies it and the sender does not. The owner's ring points back at the bogus +// sender, so without is_moved on the forwarded hop it would re-forward and fail. +func TestPosixLockForwardsToOwner(t *testing.T) { + const key = "s3.fuse.lock:/x" + owner := newPosixTestServer() + + lis, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + t.Fatalf("listen: %v", err) + } + port := lis.Addr().(*net.TCPAddr).Port + ownerAddr := pb.NewServerAddressWithGrpcPort(lis.Addr().String(), port) + sender := pb.ServerAddress("127.0.0.1:1") + + withRing(owner, ownerAddr, sender) + owner.grpcDialOption = grpc.WithTransportCredentials(insecure.NewCredentials()) + srv := grpc.NewServer() + filer_pb.RegisterSeaweedFilerServer(srv, owner) + go srv.Serve(lis) + t.Cleanup(srv.Stop) + + self := newPosixTestServer() + withRing(self, sender, ownerAddr) + self.grpcDialOption = grpc.WithTransportCredentials(insecure.NewCredentials()) + + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + resp, err := self.PosixLock(ctx, &filer_pb.PosixLockRequest{ + Key: key, Op: filer_pb.PosixLockOp_TRY_LOCK, + Lock: pbLock(0, 99, posixlock.Write, 1, 1, 7, false), + }) + if err != nil || !resp.GetGranted() { + t.Fatalf("forwarded TRY_LOCK: err=%v granted=%v", err, resp.GetGranted()) + } + + // The lock landed on the owner: a conflicting acquire there is rejected. + if _, granted := owner.posixLocks.TryLock(key, posixlock.Range{Start: 50, End: 149, Type: posixlock.Write, Sid: 2, Owner: 1}); granted { + t.Fatal("owner should hold the forwarded lock") + } + // The sender did not apply locally. + if _, granted := self.posixLocks.TryLock(key, posixlock.Range{Start: 0, End: 99, Type: posixlock.Write, Sid: 9, Owner: 9}); !granted { + t.Fatal("sender must forward, not apply locally") + } +} diff --git a/weed/server/filer_server.go b/weed/server/filer_server.go index 6cf2f87c3..f6d73636f 100644 --- a/weed/server/filer_server.go +++ b/weed/server/filer_server.go @@ -25,6 +25,7 @@ import ( "github.com/seaweedfs/seaweedfs/weed/util" "github.com/seaweedfs/seaweedfs/weed/filer" + "github.com/seaweedfs/seaweedfs/weed/filer/posixlock" _ "github.com/seaweedfs/seaweedfs/weed/filer/arangodb" _ "github.com/seaweedfs/seaweedfs/weed/filer/cassandra" _ "github.com/seaweedfs/seaweedfs/weed/filer/cassandra2" @@ -132,6 +133,12 @@ type FilerServer struct { // the distributed lock for that key. Idle keys are evicted automatically, so // the table stays bounded. entryLockTable *util.LockTable[util.FullPath] + + // posixLocks is the in-memory authority for cross-mount POSIX advisory locks + // on inodes this filer owns (per the route-by-key ring). Lock state is kept + // here rather than in replicated metadata: it is transient coordination, so + // keeping it off the meta-log avoids churn. + posixLocks *posixlock.Manager } func NewFilerServer(defaultMux, readonlyMux *http.ServeMux, option *FilerOption) (fs *FilerServer, err error) { @@ -171,6 +178,7 @@ func NewFilerServer(defaultMux, readonlyMux *http.ServeMux, option *FilerOption) recentCopyRequests: make(map[string]recentCopyRequest), CredentialManager: option.CredentialManager, entryLockTable: util.NewLockTable[util.FullPath](), + posixLocks: posixlock.NewManager(), } fs.mountPeerRegistry = filer.NewMountPeerRegistry() go fs.runMountPeerRegistrySweeper()