diff --git a/other/java/client/src/main/proto/filer.proto b/other/java/client/src/main/proto/filer.proto index 018e4e3a8..c89b1f1f6 100644 --- a/other/java/client/src/main/proto/filer.proto +++ b/other/java/client/src/main/proto/filer.proto @@ -282,18 +282,35 @@ enum FilerError { // before the transaction; mutations here are metadata-scoped. message ObjectMutation { enum Type { - PUT = 0; // create or replace the entry (entry field) - DELETE = 1; // delete the entry at directory/name (no error if absent) - PATCH_EXTENDED = 2; // merge set_extended / remove delete_extended on the entry + PUT = 0; // create or replace the entry (entry field) + DELETE = 1; // delete the entry at directory/name (no error if absent) + PATCH_EXTENDED = 2; // merge set_extended / remove delete_extended on the entry + RECOMPUTE_LATEST = 3; // scan a directory and re-point a parent entry (recompute) } Type type = 1; string directory = 2; - string name = 3; // entry name for DELETE / PATCH_EXTENDED + string name = 3; // entry name for DELETE / PATCH_EXTENDED / RECOMPUTE_LATEST (the pointer entry) Entry entry = 4; // full entry for PUT map set_extended = 5; // PATCH_EXTENDED: keys to set repeated string delete_extended = 6; // PATCH_EXTENDED: keys to remove bool is_delete_data = 7; // DELETE: also delete chunk data bool is_recursive = 8; // DELETE: recurse into a directory + Recompute recompute = 9; // RECOMPUTE_LATEST parameters +} + +// Recompute re-derives a pointer entry (directory/name on the mutation) from the +// current contents of a scanned directory, atomically under the transaction's +// lock. It is mechanical: the filer picks the child that sorts first or last by +// name and copies the requested fields into the pointer; it has no knowledge of +// what the entries mean. The caller (which does know the versioning scheme) +// supplies the sort direction and the key mappings. This covers re-pointing the +// latest version after a specific version is deleted, where the scan must run +// under the lock. +message Recompute { + string scan_dir = 1; // directory whose direct children are scanned + bool descending = 2; // pick the child that sorts last by name (else first) + map copy_extended = 3; // pointer extended key -> source extended key on the chosen child + string name_to_key = 4; // if set, store the chosen child's name under this pointer key } // ObjectTransactionRequest applies an ordered list of mutations atomically with diff --git a/weed/pb/filer.proto b/weed/pb/filer.proto index 018e4e3a8..c89b1f1f6 100644 --- a/weed/pb/filer.proto +++ b/weed/pb/filer.proto @@ -282,18 +282,35 @@ enum FilerError { // before the transaction; mutations here are metadata-scoped. message ObjectMutation { enum Type { - PUT = 0; // create or replace the entry (entry field) - DELETE = 1; // delete the entry at directory/name (no error if absent) - PATCH_EXTENDED = 2; // merge set_extended / remove delete_extended on the entry + PUT = 0; // create or replace the entry (entry field) + DELETE = 1; // delete the entry at directory/name (no error if absent) + PATCH_EXTENDED = 2; // merge set_extended / remove delete_extended on the entry + RECOMPUTE_LATEST = 3; // scan a directory and re-point a parent entry (recompute) } Type type = 1; string directory = 2; - string name = 3; // entry name for DELETE / PATCH_EXTENDED + string name = 3; // entry name for DELETE / PATCH_EXTENDED / RECOMPUTE_LATEST (the pointer entry) Entry entry = 4; // full entry for PUT map set_extended = 5; // PATCH_EXTENDED: keys to set repeated string delete_extended = 6; // PATCH_EXTENDED: keys to remove bool is_delete_data = 7; // DELETE: also delete chunk data bool is_recursive = 8; // DELETE: recurse into a directory + Recompute recompute = 9; // RECOMPUTE_LATEST parameters +} + +// Recompute re-derives a pointer entry (directory/name on the mutation) from the +// current contents of a scanned directory, atomically under the transaction's +// lock. It is mechanical: the filer picks the child that sorts first or last by +// name and copies the requested fields into the pointer; it has no knowledge of +// what the entries mean. The caller (which does know the versioning scheme) +// supplies the sort direction and the key mappings. This covers re-pointing the +// latest version after a specific version is deleted, where the scan must run +// under the lock. +message Recompute { + string scan_dir = 1; // directory whose direct children are scanned + bool descending = 2; // pick the child that sorts last by name (else first) + map copy_extended = 3; // pointer extended key -> source extended key on the chosen child + string name_to_key = 4; // if set, store the chosen child's name under this pointer key } // ObjectTransactionRequest applies an ordered list of mutations atomically with diff --git a/weed/pb/filer_pb/filer.pb.go b/weed/pb/filer_pb/filer.pb.go index 62a77ba59..f8f368738 100644 --- a/weed/pb/filer_pb/filer.pb.go +++ b/weed/pb/filer_pb/filer.pb.go @@ -200,9 +200,10 @@ func (WriteCondition_Kind) EnumDescriptor() ([]byte, []int) { type ObjectMutation_Type int32 const ( - ObjectMutation_PUT ObjectMutation_Type = 0 // create or replace the entry (entry field) - ObjectMutation_DELETE ObjectMutation_Type = 1 // delete the entry at directory/name (no error if absent) - ObjectMutation_PATCH_EXTENDED ObjectMutation_Type = 2 // merge set_extended / remove delete_extended on the entry + ObjectMutation_PUT ObjectMutation_Type = 0 // create or replace the entry (entry field) + ObjectMutation_DELETE ObjectMutation_Type = 1 // delete the entry at directory/name (no error if absent) + ObjectMutation_PATCH_EXTENDED ObjectMutation_Type = 2 // merge set_extended / remove delete_extended on the entry + ObjectMutation_RECOMPUTE_LATEST ObjectMutation_Type = 3 // scan a directory and re-point a parent entry (recompute) ) // Enum value maps for ObjectMutation_Type. @@ -211,11 +212,13 @@ var ( 0: "PUT", 1: "DELETE", 2: "PATCH_EXTENDED", + 3: "RECOMPUTE_LATEST", } ObjectMutation_Type_value = map[string]int32{ - "PUT": 0, - "DELETE": 1, - "PATCH_EXTENDED": 2, + "PUT": 0, + "DELETE": 1, + "PATCH_EXTENDED": 2, + "RECOMPUTE_LATEST": 3, } ) @@ -1412,12 +1415,13 @@ type ObjectMutation struct { state protoimpl.MessageState `protogen:"open.v1"` Type ObjectMutation_Type `protobuf:"varint,1,opt,name=type,proto3,enum=filer_pb.ObjectMutation_Type" json:"type,omitempty"` Directory string `protobuf:"bytes,2,opt,name=directory,proto3" json:"directory,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` // entry name for DELETE / PATCH_EXTENDED + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` // entry name for DELETE / PATCH_EXTENDED / RECOMPUTE_LATEST (the pointer entry) Entry *Entry `protobuf:"bytes,4,opt,name=entry,proto3" json:"entry,omitempty"` // full entry for PUT SetExtended map[string][]byte `protobuf:"bytes,5,rep,name=set_extended,json=setExtended,proto3" json:"set_extended,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // PATCH_EXTENDED: keys to set DeleteExtended []string `protobuf:"bytes,6,rep,name=delete_extended,json=deleteExtended,proto3" json:"delete_extended,omitempty"` // PATCH_EXTENDED: keys to remove IsDeleteData bool `protobuf:"varint,7,opt,name=is_delete_data,json=isDeleteData,proto3" json:"is_delete_data,omitempty"` // DELETE: also delete chunk data IsRecursive bool `protobuf:"varint,8,opt,name=is_recursive,json=isRecursive,proto3" json:"is_recursive,omitempty"` // DELETE: recurse into a directory + Recompute *Recompute `protobuf:"bytes,9,opt,name=recompute,proto3" json:"recompute,omitempty"` // RECOMPUTE_LATEST parameters unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -1508,6 +1512,89 @@ func (x *ObjectMutation) GetIsRecursive() bool { return false } +func (x *ObjectMutation) GetRecompute() *Recompute { + if x != nil { + return x.Recompute + } + return nil +} + +// Recompute re-derives a pointer entry (directory/name on the mutation) from the +// current contents of a scanned directory, atomically under the transaction's +// lock. It is mechanical: the filer picks the child that sorts first or last by +// name and copies the requested fields into the pointer; it has no knowledge of +// what the entries mean. The caller (which does know the versioning scheme) +// supplies the sort direction and the key mappings. This covers re-pointing the +// latest version after a specific version is deleted, where the scan must run +// under the lock. +type Recompute struct { + state protoimpl.MessageState `protogen:"open.v1"` + ScanDir string `protobuf:"bytes,1,opt,name=scan_dir,json=scanDir,proto3" json:"scan_dir,omitempty"` // directory whose direct children are scanned + Descending bool `protobuf:"varint,2,opt,name=descending,proto3" json:"descending,omitempty"` // pick the child that sorts last by name (else first) + CopyExtended map[string]string `protobuf:"bytes,3,rep,name=copy_extended,json=copyExtended,proto3" json:"copy_extended,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // pointer extended key -> source extended key on the chosen child + NameToKey string `protobuf:"bytes,4,opt,name=name_to_key,json=nameToKey,proto3" json:"name_to_key,omitempty"` // if set, store the chosen child's name under this pointer key + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Recompute) Reset() { + *x = Recompute{} + mi := &file_filer_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Recompute) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Recompute) ProtoMessage() {} + +func (x *Recompute) ProtoReflect() protoreflect.Message { + mi := &file_filer_proto_msgTypes[15] + 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 Recompute.ProtoReflect.Descriptor instead. +func (*Recompute) Descriptor() ([]byte, []int) { + return file_filer_proto_rawDescGZIP(), []int{15} +} + +func (x *Recompute) GetScanDir() string { + if x != nil { + return x.ScanDir + } + return "" +} + +func (x *Recompute) GetDescending() bool { + if x != nil { + return x.Descending + } + return false +} + +func (x *Recompute) GetCopyExtended() map[string]string { + if x != nil { + return x.CopyExtended + } + return nil +} + +func (x *Recompute) GetNameToKey() string { + if x != nil { + return x.NameToKey + } + return "" +} + // ObjectTransactionRequest applies an ordered list of mutations atomically with // respect to other writers of the same object, by holding the filer's per-path // lock on lock_key for the whole transaction. The optional condition is checked @@ -1526,7 +1613,7 @@ type ObjectTransactionRequest struct { func (x *ObjectTransactionRequest) Reset() { *x = ObjectTransactionRequest{} - mi := &file_filer_proto_msgTypes[15] + mi := &file_filer_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1538,7 +1625,7 @@ func (x *ObjectTransactionRequest) String() string { func (*ObjectTransactionRequest) ProtoMessage() {} func (x *ObjectTransactionRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[15] + mi := &file_filer_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1551,7 +1638,7 @@ func (x *ObjectTransactionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ObjectTransactionRequest.ProtoReflect.Descriptor instead. func (*ObjectTransactionRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{15} + return file_filer_proto_rawDescGZIP(), []int{16} } func (x *ObjectTransactionRequest) GetLockKey() string { @@ -1599,7 +1686,7 @@ type ObjectTransactionResponse struct { func (x *ObjectTransactionResponse) Reset() { *x = ObjectTransactionResponse{} - mi := &file_filer_proto_msgTypes[16] + mi := &file_filer_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1611,7 +1698,7 @@ func (x *ObjectTransactionResponse) String() string { func (*ObjectTransactionResponse) ProtoMessage() {} func (x *ObjectTransactionResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[16] + mi := &file_filer_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1624,7 +1711,7 @@ func (x *ObjectTransactionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ObjectTransactionResponse.ProtoReflect.Descriptor instead. func (*ObjectTransactionResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{16} + return file_filer_proto_rawDescGZIP(), []int{17} } func (x *ObjectTransactionResponse) GetError() string { @@ -1652,7 +1739,7 @@ type CreateEntryResponse struct { func (x *CreateEntryResponse) Reset() { *x = CreateEntryResponse{} - mi := &file_filer_proto_msgTypes[17] + mi := &file_filer_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1664,7 +1751,7 @@ func (x *CreateEntryResponse) String() string { func (*CreateEntryResponse) ProtoMessage() {} func (x *CreateEntryResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[17] + mi := &file_filer_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1677,7 +1764,7 @@ func (x *CreateEntryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateEntryResponse.ProtoReflect.Descriptor instead. func (*CreateEntryResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{17} + return file_filer_proto_rawDescGZIP(), []int{18} } func (x *CreateEntryResponse) GetError() string { @@ -1714,7 +1801,7 @@ type UpdateEntryRequest struct { func (x *UpdateEntryRequest) Reset() { *x = UpdateEntryRequest{} - mi := &file_filer_proto_msgTypes[18] + mi := &file_filer_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1726,7 +1813,7 @@ func (x *UpdateEntryRequest) String() string { func (*UpdateEntryRequest) ProtoMessage() {} func (x *UpdateEntryRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[18] + mi := &file_filer_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1739,7 +1826,7 @@ func (x *UpdateEntryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateEntryRequest.ProtoReflect.Descriptor instead. func (*UpdateEntryRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{18} + return file_filer_proto_rawDescGZIP(), []int{19} } func (x *UpdateEntryRequest) GetDirectory() string { @@ -1786,7 +1873,7 @@ type UpdateEntryResponse struct { func (x *UpdateEntryResponse) Reset() { *x = UpdateEntryResponse{} - mi := &file_filer_proto_msgTypes[19] + mi := &file_filer_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1798,7 +1885,7 @@ func (x *UpdateEntryResponse) String() string { func (*UpdateEntryResponse) ProtoMessage() {} func (x *UpdateEntryResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[19] + mi := &file_filer_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1811,7 +1898,7 @@ func (x *UpdateEntryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateEntryResponse.ProtoReflect.Descriptor instead. func (*UpdateEntryResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{19} + return file_filer_proto_rawDescGZIP(), []int{20} } func (x *UpdateEntryResponse) GetMetadataEvent() *SubscribeMetadataResponse { @@ -1832,7 +1919,7 @@ type TouchAccessTimeRequest struct { func (x *TouchAccessTimeRequest) Reset() { *x = TouchAccessTimeRequest{} - mi := &file_filer_proto_msgTypes[20] + mi := &file_filer_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1844,7 +1931,7 @@ func (x *TouchAccessTimeRequest) String() string { func (*TouchAccessTimeRequest) ProtoMessage() {} func (x *TouchAccessTimeRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[20] + mi := &file_filer_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1857,7 +1944,7 @@ func (x *TouchAccessTimeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TouchAccessTimeRequest.ProtoReflect.Descriptor instead. func (*TouchAccessTimeRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{20} + return file_filer_proto_rawDescGZIP(), []int{21} } func (x *TouchAccessTimeRequest) GetDirectory() string { @@ -1891,7 +1978,7 @@ type TouchAccessTimeResponse struct { func (x *TouchAccessTimeResponse) Reset() { *x = TouchAccessTimeResponse{} - mi := &file_filer_proto_msgTypes[21] + mi := &file_filer_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1903,7 +1990,7 @@ func (x *TouchAccessTimeResponse) String() string { func (*TouchAccessTimeResponse) ProtoMessage() {} func (x *TouchAccessTimeResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[21] + mi := &file_filer_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1916,7 +2003,7 @@ func (x *TouchAccessTimeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TouchAccessTimeResponse.ProtoReflect.Descriptor instead. func (*TouchAccessTimeResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{21} + return file_filer_proto_rawDescGZIP(), []int{22} } func (x *TouchAccessTimeResponse) GetPersistedAtimeNs() int64 { @@ -1944,7 +2031,7 @@ type AppendToEntryRequest struct { func (x *AppendToEntryRequest) Reset() { *x = AppendToEntryRequest{} - mi := &file_filer_proto_msgTypes[22] + mi := &file_filer_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1956,7 +2043,7 @@ func (x *AppendToEntryRequest) String() string { func (*AppendToEntryRequest) ProtoMessage() {} func (x *AppendToEntryRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[22] + mi := &file_filer_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1969,7 +2056,7 @@ func (x *AppendToEntryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AppendToEntryRequest.ProtoReflect.Descriptor instead. func (*AppendToEntryRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{22} + return file_filer_proto_rawDescGZIP(), []int{23} } func (x *AppendToEntryRequest) GetDirectory() string { @@ -2001,7 +2088,7 @@ type AppendToEntryResponse struct { func (x *AppendToEntryResponse) Reset() { *x = AppendToEntryResponse{} - mi := &file_filer_proto_msgTypes[23] + mi := &file_filer_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2013,7 +2100,7 @@ func (x *AppendToEntryResponse) String() string { func (*AppendToEntryResponse) ProtoMessage() {} func (x *AppendToEntryResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[23] + mi := &file_filer_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2026,7 +2113,7 @@ func (x *AppendToEntryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AppendToEntryResponse.ProtoReflect.Descriptor instead. func (*AppendToEntryResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{23} + return file_filer_proto_rawDescGZIP(), []int{24} } type DeleteEntryRequest struct { @@ -2046,7 +2133,7 @@ type DeleteEntryRequest struct { func (x *DeleteEntryRequest) Reset() { *x = DeleteEntryRequest{} - mi := &file_filer_proto_msgTypes[24] + mi := &file_filer_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2058,7 +2145,7 @@ func (x *DeleteEntryRequest) String() string { func (*DeleteEntryRequest) ProtoMessage() {} func (x *DeleteEntryRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[24] + mi := &file_filer_proto_msgTypes[25] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2071,7 +2158,7 @@ func (x *DeleteEntryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteEntryRequest.ProtoReflect.Descriptor instead. func (*DeleteEntryRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{24} + return file_filer_proto_rawDescGZIP(), []int{25} } func (x *DeleteEntryRequest) GetDirectory() string { @@ -2140,7 +2227,7 @@ type DeleteEntryResponse struct { func (x *DeleteEntryResponse) Reset() { *x = DeleteEntryResponse{} - mi := &file_filer_proto_msgTypes[25] + mi := &file_filer_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2152,7 +2239,7 @@ func (x *DeleteEntryResponse) String() string { func (*DeleteEntryResponse) ProtoMessage() {} func (x *DeleteEntryResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[25] + mi := &file_filer_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2165,7 +2252,7 @@ func (x *DeleteEntryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteEntryResponse.ProtoReflect.Descriptor instead. func (*DeleteEntryResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{25} + return file_filer_proto_rawDescGZIP(), []int{26} } func (x *DeleteEntryResponse) GetError() string { @@ -2195,7 +2282,7 @@ type AtomicRenameEntryRequest struct { func (x *AtomicRenameEntryRequest) Reset() { *x = AtomicRenameEntryRequest{} - mi := &file_filer_proto_msgTypes[26] + mi := &file_filer_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2207,7 +2294,7 @@ func (x *AtomicRenameEntryRequest) String() string { func (*AtomicRenameEntryRequest) ProtoMessage() {} func (x *AtomicRenameEntryRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[26] + mi := &file_filer_proto_msgTypes[27] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2220,7 +2307,7 @@ func (x *AtomicRenameEntryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AtomicRenameEntryRequest.ProtoReflect.Descriptor instead. func (*AtomicRenameEntryRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{26} + return file_filer_proto_rawDescGZIP(), []int{27} } func (x *AtomicRenameEntryRequest) GetOldDirectory() string { @@ -2266,7 +2353,7 @@ type AtomicRenameEntryResponse struct { func (x *AtomicRenameEntryResponse) Reset() { *x = AtomicRenameEntryResponse{} - mi := &file_filer_proto_msgTypes[27] + mi := &file_filer_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2278,7 +2365,7 @@ func (x *AtomicRenameEntryResponse) String() string { func (*AtomicRenameEntryResponse) ProtoMessage() {} func (x *AtomicRenameEntryResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[27] + mi := &file_filer_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2291,7 +2378,7 @@ func (x *AtomicRenameEntryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AtomicRenameEntryResponse.ProtoReflect.Descriptor instead. func (*AtomicRenameEntryResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{27} + return file_filer_proto_rawDescGZIP(), []int{28} } type StreamRenameEntryRequest struct { @@ -2307,7 +2394,7 @@ type StreamRenameEntryRequest struct { func (x *StreamRenameEntryRequest) Reset() { *x = StreamRenameEntryRequest{} - mi := &file_filer_proto_msgTypes[28] + mi := &file_filer_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2319,7 +2406,7 @@ func (x *StreamRenameEntryRequest) String() string { func (*StreamRenameEntryRequest) ProtoMessage() {} func (x *StreamRenameEntryRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[28] + mi := &file_filer_proto_msgTypes[29] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2332,7 +2419,7 @@ func (x *StreamRenameEntryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StreamRenameEntryRequest.ProtoReflect.Descriptor instead. func (*StreamRenameEntryRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{28} + return file_filer_proto_rawDescGZIP(), []int{29} } func (x *StreamRenameEntryRequest) GetOldDirectory() string { @@ -2381,7 +2468,7 @@ type StreamRenameEntryResponse struct { func (x *StreamRenameEntryResponse) Reset() { *x = StreamRenameEntryResponse{} - mi := &file_filer_proto_msgTypes[29] + mi := &file_filer_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2393,7 +2480,7 @@ func (x *StreamRenameEntryResponse) String() string { func (*StreamRenameEntryResponse) ProtoMessage() {} func (x *StreamRenameEntryResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[29] + mi := &file_filer_proto_msgTypes[30] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2406,7 +2493,7 @@ func (x *StreamRenameEntryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StreamRenameEntryResponse.ProtoReflect.Descriptor instead. func (*StreamRenameEntryResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{29} + return file_filer_proto_rawDescGZIP(), []int{30} } func (x *StreamRenameEntryResponse) GetDirectory() string { @@ -2448,7 +2535,7 @@ type AssignVolumeRequest struct { func (x *AssignVolumeRequest) Reset() { *x = AssignVolumeRequest{} - mi := &file_filer_proto_msgTypes[30] + mi := &file_filer_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2460,7 +2547,7 @@ func (x *AssignVolumeRequest) String() string { func (*AssignVolumeRequest) ProtoMessage() {} func (x *AssignVolumeRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[30] + mi := &file_filer_proto_msgTypes[31] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2473,7 +2560,7 @@ func (x *AssignVolumeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AssignVolumeRequest.ProtoReflect.Descriptor instead. func (*AssignVolumeRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{30} + return file_filer_proto_rawDescGZIP(), []int{31} } func (x *AssignVolumeRequest) GetCount() int32 { @@ -2561,7 +2648,7 @@ type AssignVolumeResponse struct { func (x *AssignVolumeResponse) Reset() { *x = AssignVolumeResponse{} - mi := &file_filer_proto_msgTypes[31] + mi := &file_filer_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2573,7 +2660,7 @@ func (x *AssignVolumeResponse) String() string { func (*AssignVolumeResponse) ProtoMessage() {} func (x *AssignVolumeResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[31] + mi := &file_filer_proto_msgTypes[32] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2586,7 +2673,7 @@ func (x *AssignVolumeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AssignVolumeResponse.ProtoReflect.Descriptor instead. func (*AssignVolumeResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{31} + return file_filer_proto_rawDescGZIP(), []int{32} } func (x *AssignVolumeResponse) GetFileId() string { @@ -2647,7 +2734,7 @@ type LookupVolumeRequest struct { func (x *LookupVolumeRequest) Reset() { *x = LookupVolumeRequest{} - mi := &file_filer_proto_msgTypes[32] + mi := &file_filer_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2659,7 +2746,7 @@ func (x *LookupVolumeRequest) String() string { func (*LookupVolumeRequest) ProtoMessage() {} func (x *LookupVolumeRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[32] + mi := &file_filer_proto_msgTypes[33] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2672,7 +2759,7 @@ func (x *LookupVolumeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LookupVolumeRequest.ProtoReflect.Descriptor instead. func (*LookupVolumeRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{32} + return file_filer_proto_rawDescGZIP(), []int{33} } func (x *LookupVolumeRequest) GetVolumeIds() []string { @@ -2691,7 +2778,7 @@ type Locations struct { func (x *Locations) Reset() { *x = Locations{} - mi := &file_filer_proto_msgTypes[33] + mi := &file_filer_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2703,7 +2790,7 @@ func (x *Locations) String() string { func (*Locations) ProtoMessage() {} func (x *Locations) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[33] + mi := &file_filer_proto_msgTypes[34] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2716,7 +2803,7 @@ func (x *Locations) ProtoReflect() protoreflect.Message { // Deprecated: Use Locations.ProtoReflect.Descriptor instead. func (*Locations) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{33} + return file_filer_proto_rawDescGZIP(), []int{34} } func (x *Locations) GetLocations() []*Location { @@ -2738,7 +2825,7 @@ type Location struct { func (x *Location) Reset() { *x = Location{} - mi := &file_filer_proto_msgTypes[34] + mi := &file_filer_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2750,7 +2837,7 @@ func (x *Location) String() string { func (*Location) ProtoMessage() {} func (x *Location) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[34] + mi := &file_filer_proto_msgTypes[35] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2763,7 +2850,7 @@ func (x *Location) ProtoReflect() protoreflect.Message { // Deprecated: Use Location.ProtoReflect.Descriptor instead. func (*Location) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{34} + return file_filer_proto_rawDescGZIP(), []int{35} } func (x *Location) GetUrl() string { @@ -2803,7 +2890,7 @@ type LookupVolumeResponse struct { func (x *LookupVolumeResponse) Reset() { *x = LookupVolumeResponse{} - mi := &file_filer_proto_msgTypes[35] + mi := &file_filer_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2815,7 +2902,7 @@ func (x *LookupVolumeResponse) String() string { func (*LookupVolumeResponse) ProtoMessage() {} func (x *LookupVolumeResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[35] + mi := &file_filer_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2828,7 +2915,7 @@ func (x *LookupVolumeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LookupVolumeResponse.ProtoReflect.Descriptor instead. func (*LookupVolumeResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{35} + return file_filer_proto_rawDescGZIP(), []int{36} } func (x *LookupVolumeResponse) GetLocationsMap() map[string]*Locations { @@ -2847,7 +2934,7 @@ type Collection struct { func (x *Collection) Reset() { *x = Collection{} - mi := &file_filer_proto_msgTypes[36] + mi := &file_filer_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2859,7 +2946,7 @@ func (x *Collection) String() string { func (*Collection) ProtoMessage() {} func (x *Collection) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[36] + mi := &file_filer_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2872,7 +2959,7 @@ func (x *Collection) ProtoReflect() protoreflect.Message { // Deprecated: Use Collection.ProtoReflect.Descriptor instead. func (*Collection) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{36} + return file_filer_proto_rawDescGZIP(), []int{37} } func (x *Collection) GetName() string { @@ -2892,7 +2979,7 @@ type CollectionListRequest struct { func (x *CollectionListRequest) Reset() { *x = CollectionListRequest{} - mi := &file_filer_proto_msgTypes[37] + mi := &file_filer_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2904,7 +2991,7 @@ func (x *CollectionListRequest) String() string { func (*CollectionListRequest) ProtoMessage() {} func (x *CollectionListRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[37] + mi := &file_filer_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2917,7 +3004,7 @@ func (x *CollectionListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CollectionListRequest.ProtoReflect.Descriptor instead. func (*CollectionListRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{37} + return file_filer_proto_rawDescGZIP(), []int{38} } func (x *CollectionListRequest) GetIncludeNormalVolumes() bool { @@ -2943,7 +3030,7 @@ type CollectionListResponse struct { func (x *CollectionListResponse) Reset() { *x = CollectionListResponse{} - mi := &file_filer_proto_msgTypes[38] + mi := &file_filer_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2955,7 +3042,7 @@ func (x *CollectionListResponse) String() string { func (*CollectionListResponse) ProtoMessage() {} func (x *CollectionListResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[38] + mi := &file_filer_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2968,7 +3055,7 @@ func (x *CollectionListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CollectionListResponse.ProtoReflect.Descriptor instead. func (*CollectionListResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{38} + return file_filer_proto_rawDescGZIP(), []int{39} } func (x *CollectionListResponse) GetCollections() []*Collection { @@ -2987,7 +3074,7 @@ type DeleteCollectionRequest struct { func (x *DeleteCollectionRequest) Reset() { *x = DeleteCollectionRequest{} - mi := &file_filer_proto_msgTypes[39] + mi := &file_filer_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2999,7 +3086,7 @@ func (x *DeleteCollectionRequest) String() string { func (*DeleteCollectionRequest) ProtoMessage() {} func (x *DeleteCollectionRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[39] + mi := &file_filer_proto_msgTypes[40] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3012,7 +3099,7 @@ func (x *DeleteCollectionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteCollectionRequest.ProtoReflect.Descriptor instead. func (*DeleteCollectionRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{39} + return file_filer_proto_rawDescGZIP(), []int{40} } func (x *DeleteCollectionRequest) GetCollection() string { @@ -3030,7 +3117,7 @@ type DeleteCollectionResponse struct { func (x *DeleteCollectionResponse) Reset() { *x = DeleteCollectionResponse{} - mi := &file_filer_proto_msgTypes[40] + mi := &file_filer_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3042,7 +3129,7 @@ func (x *DeleteCollectionResponse) String() string { func (*DeleteCollectionResponse) ProtoMessage() {} func (x *DeleteCollectionResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[40] + mi := &file_filer_proto_msgTypes[41] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3055,7 +3142,7 @@ func (x *DeleteCollectionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteCollectionResponse.ProtoReflect.Descriptor instead. func (*DeleteCollectionResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{40} + return file_filer_proto_rawDescGZIP(), []int{41} } type StatisticsRequest struct { @@ -3070,7 +3157,7 @@ type StatisticsRequest struct { func (x *StatisticsRequest) Reset() { *x = StatisticsRequest{} - mi := &file_filer_proto_msgTypes[41] + mi := &file_filer_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3082,7 +3169,7 @@ func (x *StatisticsRequest) String() string { func (*StatisticsRequest) ProtoMessage() {} func (x *StatisticsRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[41] + mi := &file_filer_proto_msgTypes[42] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3095,7 +3182,7 @@ func (x *StatisticsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StatisticsRequest.ProtoReflect.Descriptor instead. func (*StatisticsRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{41} + return file_filer_proto_rawDescGZIP(), []int{42} } func (x *StatisticsRequest) GetReplication() string { @@ -3137,7 +3224,7 @@ type StatisticsResponse struct { func (x *StatisticsResponse) Reset() { *x = StatisticsResponse{} - mi := &file_filer_proto_msgTypes[42] + mi := &file_filer_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3149,7 +3236,7 @@ func (x *StatisticsResponse) String() string { func (*StatisticsResponse) ProtoMessage() {} func (x *StatisticsResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[42] + mi := &file_filer_proto_msgTypes[43] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3162,7 +3249,7 @@ func (x *StatisticsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StatisticsResponse.ProtoReflect.Descriptor instead. func (*StatisticsResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{42} + return file_filer_proto_rawDescGZIP(), []int{43} } func (x *StatisticsResponse) GetTotalSize() uint64 { @@ -3196,7 +3283,7 @@ type PingRequest struct { func (x *PingRequest) Reset() { *x = PingRequest{} - mi := &file_filer_proto_msgTypes[43] + mi := &file_filer_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3208,7 +3295,7 @@ func (x *PingRequest) String() string { func (*PingRequest) ProtoMessage() {} func (x *PingRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[43] + mi := &file_filer_proto_msgTypes[44] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3221,7 +3308,7 @@ func (x *PingRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PingRequest.ProtoReflect.Descriptor instead. func (*PingRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{43} + return file_filer_proto_rawDescGZIP(), []int{44} } func (x *PingRequest) GetTarget() string { @@ -3249,7 +3336,7 @@ type PingResponse struct { func (x *PingResponse) Reset() { *x = PingResponse{} - mi := &file_filer_proto_msgTypes[44] + mi := &file_filer_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3261,7 +3348,7 @@ func (x *PingResponse) String() string { func (*PingResponse) ProtoMessage() {} func (x *PingResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[44] + mi := &file_filer_proto_msgTypes[45] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3274,7 +3361,7 @@ func (x *PingResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PingResponse.ProtoReflect.Descriptor instead. func (*PingResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{44} + return file_filer_proto_rawDescGZIP(), []int{45} } func (x *PingResponse) GetStartTimeNs() int64 { @@ -3306,7 +3393,7 @@ type GetFilerConfigurationRequest struct { func (x *GetFilerConfigurationRequest) Reset() { *x = GetFilerConfigurationRequest{} - mi := &file_filer_proto_msgTypes[45] + mi := &file_filer_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3318,7 +3405,7 @@ func (x *GetFilerConfigurationRequest) String() string { func (*GetFilerConfigurationRequest) ProtoMessage() {} func (x *GetFilerConfigurationRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[45] + mi := &file_filer_proto_msgTypes[46] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3331,7 +3418,7 @@ func (x *GetFilerConfigurationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetFilerConfigurationRequest.ProtoReflect.Descriptor instead. func (*GetFilerConfigurationRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{45} + return file_filer_proto_rawDescGZIP(), []int{46} } type GetFilerConfigurationResponse struct { @@ -3356,7 +3443,7 @@ type GetFilerConfigurationResponse struct { func (x *GetFilerConfigurationResponse) Reset() { *x = GetFilerConfigurationResponse{} - mi := &file_filer_proto_msgTypes[46] + mi := &file_filer_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3368,7 +3455,7 @@ func (x *GetFilerConfigurationResponse) String() string { func (*GetFilerConfigurationResponse) ProtoMessage() {} func (x *GetFilerConfigurationResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[46] + mi := &file_filer_proto_msgTypes[47] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3381,7 +3468,7 @@ func (x *GetFilerConfigurationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetFilerConfigurationResponse.ProtoReflect.Descriptor instead. func (*GetFilerConfigurationResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{46} + return file_filer_proto_rawDescGZIP(), []int{47} } func (x *GetFilerConfigurationResponse) GetMasters() []string { @@ -3502,7 +3589,7 @@ type SubscribeMetadataRequest struct { func (x *SubscribeMetadataRequest) Reset() { *x = SubscribeMetadataRequest{} - mi := &file_filer_proto_msgTypes[47] + mi := &file_filer_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3514,7 +3601,7 @@ func (x *SubscribeMetadataRequest) String() string { func (*SubscribeMetadataRequest) ProtoMessage() {} func (x *SubscribeMetadataRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[47] + mi := &file_filer_proto_msgTypes[48] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3527,7 +3614,7 @@ func (x *SubscribeMetadataRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscribeMetadataRequest.ProtoReflect.Descriptor instead. func (*SubscribeMetadataRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{47} + return file_filer_proto_rawDescGZIP(), []int{48} } func (x *SubscribeMetadataRequest) GetClientName() string { @@ -3627,7 +3714,7 @@ type SubscribeMetadataResponse struct { func (x *SubscribeMetadataResponse) Reset() { *x = SubscribeMetadataResponse{} - mi := &file_filer_proto_msgTypes[48] + mi := &file_filer_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3639,7 +3726,7 @@ func (x *SubscribeMetadataResponse) String() string { func (*SubscribeMetadataResponse) ProtoMessage() {} func (x *SubscribeMetadataResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[48] + mi := &file_filer_proto_msgTypes[49] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3652,7 +3739,7 @@ func (x *SubscribeMetadataResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscribeMetadataResponse.ProtoReflect.Descriptor instead. func (*SubscribeMetadataResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{48} + return file_filer_proto_rawDescGZIP(), []int{49} } func (x *SubscribeMetadataResponse) GetDirectory() string { @@ -3704,7 +3791,7 @@ type LogFileChunkRef struct { func (x *LogFileChunkRef) Reset() { *x = LogFileChunkRef{} - mi := &file_filer_proto_msgTypes[49] + mi := &file_filer_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3716,7 +3803,7 @@ func (x *LogFileChunkRef) String() string { func (*LogFileChunkRef) ProtoMessage() {} func (x *LogFileChunkRef) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[49] + mi := &file_filer_proto_msgTypes[50] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3729,7 +3816,7 @@ func (x *LogFileChunkRef) ProtoReflect() protoreflect.Message { // Deprecated: Use LogFileChunkRef.ProtoReflect.Descriptor instead. func (*LogFileChunkRef) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{49} + return file_filer_proto_rawDescGZIP(), []int{50} } func (x *LogFileChunkRef) GetChunks() []*FileChunk { @@ -3763,7 +3850,7 @@ type TraverseBfsMetadataRequest struct { func (x *TraverseBfsMetadataRequest) Reset() { *x = TraverseBfsMetadataRequest{} - mi := &file_filer_proto_msgTypes[50] + mi := &file_filer_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3775,7 +3862,7 @@ func (x *TraverseBfsMetadataRequest) String() string { func (*TraverseBfsMetadataRequest) ProtoMessage() {} func (x *TraverseBfsMetadataRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[50] + mi := &file_filer_proto_msgTypes[51] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3788,7 +3875,7 @@ func (x *TraverseBfsMetadataRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TraverseBfsMetadataRequest.ProtoReflect.Descriptor instead. func (*TraverseBfsMetadataRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{50} + return file_filer_proto_rawDescGZIP(), []int{51} } func (x *TraverseBfsMetadataRequest) GetDirectory() string { @@ -3815,7 +3902,7 @@ type TraverseBfsMetadataResponse struct { func (x *TraverseBfsMetadataResponse) Reset() { *x = TraverseBfsMetadataResponse{} - mi := &file_filer_proto_msgTypes[51] + mi := &file_filer_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3827,7 +3914,7 @@ func (x *TraverseBfsMetadataResponse) String() string { func (*TraverseBfsMetadataResponse) ProtoMessage() {} func (x *TraverseBfsMetadataResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[51] + mi := &file_filer_proto_msgTypes[52] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3840,7 +3927,7 @@ func (x *TraverseBfsMetadataResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TraverseBfsMetadataResponse.ProtoReflect.Descriptor instead. func (*TraverseBfsMetadataResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{51} + return file_filer_proto_rawDescGZIP(), []int{52} } func (x *TraverseBfsMetadataResponse) GetDirectory() string { @@ -3870,7 +3957,7 @@ type LogEntry struct { func (x *LogEntry) Reset() { *x = LogEntry{} - mi := &file_filer_proto_msgTypes[52] + mi := &file_filer_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3882,7 +3969,7 @@ func (x *LogEntry) String() string { func (*LogEntry) ProtoMessage() {} func (x *LogEntry) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[52] + mi := &file_filer_proto_msgTypes[53] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3895,7 +3982,7 @@ func (x *LogEntry) ProtoReflect() protoreflect.Message { // Deprecated: Use LogEntry.ProtoReflect.Descriptor instead. func (*LogEntry) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{52} + return file_filer_proto_rawDescGZIP(), []int{53} } func (x *LogEntry) GetTsNs() int64 { @@ -3944,7 +4031,7 @@ type KeepConnectedRequest struct { func (x *KeepConnectedRequest) Reset() { *x = KeepConnectedRequest{} - mi := &file_filer_proto_msgTypes[53] + mi := &file_filer_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3956,7 +4043,7 @@ func (x *KeepConnectedRequest) String() string { func (*KeepConnectedRequest) ProtoMessage() {} func (x *KeepConnectedRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[53] + mi := &file_filer_proto_msgTypes[54] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3969,7 +4056,7 @@ func (x *KeepConnectedRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use KeepConnectedRequest.ProtoReflect.Descriptor instead. func (*KeepConnectedRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{53} + return file_filer_proto_rawDescGZIP(), []int{54} } func (x *KeepConnectedRequest) GetName() string { @@ -4001,7 +4088,7 @@ type KeepConnectedResponse struct { func (x *KeepConnectedResponse) Reset() { *x = KeepConnectedResponse{} - mi := &file_filer_proto_msgTypes[54] + mi := &file_filer_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4013,7 +4100,7 @@ func (x *KeepConnectedResponse) String() string { func (*KeepConnectedResponse) ProtoMessage() {} func (x *KeepConnectedResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[54] + mi := &file_filer_proto_msgTypes[55] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4026,7 +4113,7 @@ func (x *KeepConnectedResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use KeepConnectedResponse.ProtoReflect.Descriptor instead. func (*KeepConnectedResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{54} + return file_filer_proto_rawDescGZIP(), []int{55} } type LocateBrokerRequest struct { @@ -4038,7 +4125,7 @@ type LocateBrokerRequest struct { func (x *LocateBrokerRequest) Reset() { *x = LocateBrokerRequest{} - mi := &file_filer_proto_msgTypes[55] + mi := &file_filer_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4050,7 +4137,7 @@ func (x *LocateBrokerRequest) String() string { func (*LocateBrokerRequest) ProtoMessage() {} func (x *LocateBrokerRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[55] + mi := &file_filer_proto_msgTypes[56] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4063,7 +4150,7 @@ func (x *LocateBrokerRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LocateBrokerRequest.ProtoReflect.Descriptor instead. func (*LocateBrokerRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{55} + return file_filer_proto_rawDescGZIP(), []int{56} } func (x *LocateBrokerRequest) GetResource() string { @@ -4083,7 +4170,7 @@ type LocateBrokerResponse struct { func (x *LocateBrokerResponse) Reset() { *x = LocateBrokerResponse{} - mi := &file_filer_proto_msgTypes[56] + mi := &file_filer_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4095,7 +4182,7 @@ func (x *LocateBrokerResponse) String() string { func (*LocateBrokerResponse) ProtoMessage() {} func (x *LocateBrokerResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[56] + mi := &file_filer_proto_msgTypes[57] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4108,7 +4195,7 @@ func (x *LocateBrokerResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LocateBrokerResponse.ProtoReflect.Descriptor instead. func (*LocateBrokerResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{56} + return file_filer_proto_rawDescGZIP(), []int{57} } func (x *LocateBrokerResponse) GetFound() bool { @@ -4137,7 +4224,7 @@ type KvGetRequest struct { func (x *KvGetRequest) Reset() { *x = KvGetRequest{} - mi := &file_filer_proto_msgTypes[57] + mi := &file_filer_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4149,7 +4236,7 @@ func (x *KvGetRequest) String() string { func (*KvGetRequest) ProtoMessage() {} func (x *KvGetRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[57] + mi := &file_filer_proto_msgTypes[58] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4162,7 +4249,7 @@ func (x *KvGetRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use KvGetRequest.ProtoReflect.Descriptor instead. func (*KvGetRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{57} + return file_filer_proto_rawDescGZIP(), []int{58} } func (x *KvGetRequest) GetKey() []byte { @@ -4182,7 +4269,7 @@ type KvGetResponse struct { func (x *KvGetResponse) Reset() { *x = KvGetResponse{} - mi := &file_filer_proto_msgTypes[58] + mi := &file_filer_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4194,7 +4281,7 @@ func (x *KvGetResponse) String() string { func (*KvGetResponse) ProtoMessage() {} func (x *KvGetResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[58] + mi := &file_filer_proto_msgTypes[59] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4207,7 +4294,7 @@ func (x *KvGetResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use KvGetResponse.ProtoReflect.Descriptor instead. func (*KvGetResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{58} + return file_filer_proto_rawDescGZIP(), []int{59} } func (x *KvGetResponse) GetValue() []byte { @@ -4234,7 +4321,7 @@ type KvPutRequest struct { func (x *KvPutRequest) Reset() { *x = KvPutRequest{} - mi := &file_filer_proto_msgTypes[59] + mi := &file_filer_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4246,7 +4333,7 @@ func (x *KvPutRequest) String() string { func (*KvPutRequest) ProtoMessage() {} func (x *KvPutRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[59] + mi := &file_filer_proto_msgTypes[60] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4259,7 +4346,7 @@ func (x *KvPutRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use KvPutRequest.ProtoReflect.Descriptor instead. func (*KvPutRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{59} + return file_filer_proto_rawDescGZIP(), []int{60} } func (x *KvPutRequest) GetKey() []byte { @@ -4285,7 +4372,7 @@ type KvPutResponse struct { func (x *KvPutResponse) Reset() { *x = KvPutResponse{} - mi := &file_filer_proto_msgTypes[60] + mi := &file_filer_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4297,7 +4384,7 @@ func (x *KvPutResponse) String() string { func (*KvPutResponse) ProtoMessage() {} func (x *KvPutResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[60] + mi := &file_filer_proto_msgTypes[61] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4310,7 +4397,7 @@ func (x *KvPutResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use KvPutResponse.ProtoReflect.Descriptor instead. func (*KvPutResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{60} + return file_filer_proto_rawDescGZIP(), []int{61} } func (x *KvPutResponse) GetError() string { @@ -4333,7 +4420,7 @@ type FilerConf struct { func (x *FilerConf) Reset() { *x = FilerConf{} - mi := &file_filer_proto_msgTypes[61] + mi := &file_filer_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4345,7 +4432,7 @@ func (x *FilerConf) String() string { func (*FilerConf) ProtoMessage() {} func (x *FilerConf) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[61] + mi := &file_filer_proto_msgTypes[62] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4358,7 +4445,7 @@ func (x *FilerConf) ProtoReflect() protoreflect.Message { // Deprecated: Use FilerConf.ProtoReflect.Descriptor instead. func (*FilerConf) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{61} + return file_filer_proto_rawDescGZIP(), []int{62} } func (x *FilerConf) GetVersion() int32 { @@ -4390,7 +4477,7 @@ type CacheRemoteObjectToLocalClusterRequest struct { func (x *CacheRemoteObjectToLocalClusterRequest) Reset() { *x = CacheRemoteObjectToLocalClusterRequest{} - mi := &file_filer_proto_msgTypes[62] + mi := &file_filer_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4402,7 +4489,7 @@ func (x *CacheRemoteObjectToLocalClusterRequest) String() string { func (*CacheRemoteObjectToLocalClusterRequest) ProtoMessage() {} func (x *CacheRemoteObjectToLocalClusterRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[62] + mi := &file_filer_proto_msgTypes[63] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4415,7 +4502,7 @@ func (x *CacheRemoteObjectToLocalClusterRequest) ProtoReflect() protoreflect.Mes // Deprecated: Use CacheRemoteObjectToLocalClusterRequest.ProtoReflect.Descriptor instead. func (*CacheRemoteObjectToLocalClusterRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{62} + return file_filer_proto_rawDescGZIP(), []int{63} } func (x *CacheRemoteObjectToLocalClusterRequest) GetDirectory() string { @@ -4456,7 +4543,7 @@ type CacheRemoteObjectToLocalClusterResponse struct { func (x *CacheRemoteObjectToLocalClusterResponse) Reset() { *x = CacheRemoteObjectToLocalClusterResponse{} - mi := &file_filer_proto_msgTypes[63] + mi := &file_filer_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4468,7 +4555,7 @@ func (x *CacheRemoteObjectToLocalClusterResponse) String() string { func (*CacheRemoteObjectToLocalClusterResponse) ProtoMessage() {} func (x *CacheRemoteObjectToLocalClusterResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[63] + mi := &file_filer_proto_msgTypes[64] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4481,7 +4568,7 @@ func (x *CacheRemoteObjectToLocalClusterResponse) ProtoReflect() protoreflect.Me // Deprecated: Use CacheRemoteObjectToLocalClusterResponse.ProtoReflect.Descriptor instead. func (*CacheRemoteObjectToLocalClusterResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{63} + return file_filer_proto_rawDescGZIP(), []int{64} } func (x *CacheRemoteObjectToLocalClusterResponse) GetEntry() *Entry { @@ -4514,7 +4601,7 @@ type LockRequest struct { func (x *LockRequest) Reset() { *x = LockRequest{} - mi := &file_filer_proto_msgTypes[64] + mi := &file_filer_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4526,7 +4613,7 @@ func (x *LockRequest) String() string { func (*LockRequest) ProtoMessage() {} func (x *LockRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[64] + mi := &file_filer_proto_msgTypes[65] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4539,7 +4626,7 @@ func (x *LockRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LockRequest.ProtoReflect.Descriptor instead. func (*LockRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{64} + return file_filer_proto_rawDescGZIP(), []int{65} } func (x *LockRequest) GetName() string { @@ -4590,7 +4677,7 @@ type LockResponse struct { func (x *LockResponse) Reset() { *x = LockResponse{} - mi := &file_filer_proto_msgTypes[65] + mi := &file_filer_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4602,7 +4689,7 @@ func (x *LockResponse) String() string { func (*LockResponse) ProtoMessage() {} func (x *LockResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[65] + mi := &file_filer_proto_msgTypes[66] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4615,7 +4702,7 @@ func (x *LockResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LockResponse.ProtoReflect.Descriptor instead. func (*LockResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{65} + return file_filer_proto_rawDescGZIP(), []int{66} } func (x *LockResponse) GetRenewToken() string { @@ -4664,7 +4751,7 @@ type UnlockRequest struct { func (x *UnlockRequest) Reset() { *x = UnlockRequest{} - mi := &file_filer_proto_msgTypes[66] + mi := &file_filer_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4676,7 +4763,7 @@ func (x *UnlockRequest) String() string { func (*UnlockRequest) ProtoMessage() {} func (x *UnlockRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[66] + mi := &file_filer_proto_msgTypes[67] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4689,7 +4776,7 @@ func (x *UnlockRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UnlockRequest.ProtoReflect.Descriptor instead. func (*UnlockRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{66} + return file_filer_proto_rawDescGZIP(), []int{67} } func (x *UnlockRequest) GetName() string { @@ -4723,7 +4810,7 @@ type UnlockResponse struct { func (x *UnlockResponse) Reset() { *x = UnlockResponse{} - mi := &file_filer_proto_msgTypes[67] + mi := &file_filer_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4735,7 +4822,7 @@ func (x *UnlockResponse) String() string { func (*UnlockResponse) ProtoMessage() {} func (x *UnlockResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[67] + mi := &file_filer_proto_msgTypes[68] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4748,7 +4835,7 @@ func (x *UnlockResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UnlockResponse.ProtoReflect.Descriptor instead. func (*UnlockResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{67} + return file_filer_proto_rawDescGZIP(), []int{68} } func (x *UnlockResponse) GetError() string { @@ -4775,7 +4862,7 @@ type FindLockOwnerRequest struct { func (x *FindLockOwnerRequest) Reset() { *x = FindLockOwnerRequest{} - mi := &file_filer_proto_msgTypes[68] + mi := &file_filer_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4787,7 +4874,7 @@ func (x *FindLockOwnerRequest) String() string { func (*FindLockOwnerRequest) ProtoMessage() {} func (x *FindLockOwnerRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[68] + mi := &file_filer_proto_msgTypes[69] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4800,7 +4887,7 @@ func (x *FindLockOwnerRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use FindLockOwnerRequest.ProtoReflect.Descriptor instead. func (*FindLockOwnerRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{68} + return file_filer_proto_rawDescGZIP(), []int{69} } func (x *FindLockOwnerRequest) GetName() string { @@ -4826,7 +4913,7 @@ type FindLockOwnerResponse struct { func (x *FindLockOwnerResponse) Reset() { *x = FindLockOwnerResponse{} - mi := &file_filer_proto_msgTypes[69] + mi := &file_filer_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4838,7 +4925,7 @@ func (x *FindLockOwnerResponse) String() string { func (*FindLockOwnerResponse) ProtoMessage() {} func (x *FindLockOwnerResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[69] + mi := &file_filer_proto_msgTypes[70] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4851,7 +4938,7 @@ func (x *FindLockOwnerResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use FindLockOwnerResponse.ProtoReflect.Descriptor instead. func (*FindLockOwnerResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{69} + return file_filer_proto_rawDescGZIP(), []int{70} } func (x *FindLockOwnerResponse) GetOwner() string { @@ -4876,7 +4963,7 @@ type Lock struct { func (x *Lock) Reset() { *x = Lock{} - mi := &file_filer_proto_msgTypes[70] + mi := &file_filer_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4888,7 +4975,7 @@ func (x *Lock) String() string { func (*Lock) ProtoMessage() {} func (x *Lock) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[70] + mi := &file_filer_proto_msgTypes[71] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4901,7 +4988,7 @@ func (x *Lock) ProtoReflect() protoreflect.Message { // Deprecated: Use Lock.ProtoReflect.Descriptor instead. func (*Lock) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{70} + return file_filer_proto_rawDescGZIP(), []int{71} } func (x *Lock) GetName() string { @@ -4962,7 +5049,7 @@ type TransferLocksRequest struct { func (x *TransferLocksRequest) Reset() { *x = TransferLocksRequest{} - mi := &file_filer_proto_msgTypes[71] + mi := &file_filer_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4974,7 +5061,7 @@ func (x *TransferLocksRequest) String() string { func (*TransferLocksRequest) ProtoMessage() {} func (x *TransferLocksRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[71] + mi := &file_filer_proto_msgTypes[72] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4987,7 +5074,7 @@ func (x *TransferLocksRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TransferLocksRequest.ProtoReflect.Descriptor instead. func (*TransferLocksRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{71} + return file_filer_proto_rawDescGZIP(), []int{72} } func (x *TransferLocksRequest) GetLocks() []*Lock { @@ -5005,7 +5092,7 @@ type TransferLocksResponse struct { func (x *TransferLocksResponse) Reset() { *x = TransferLocksResponse{} - mi := &file_filer_proto_msgTypes[72] + mi := &file_filer_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5017,7 +5104,7 @@ func (x *TransferLocksResponse) String() string { func (*TransferLocksResponse) ProtoMessage() {} func (x *TransferLocksResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[72] + mi := &file_filer_proto_msgTypes[73] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5030,7 +5117,7 @@ func (x *TransferLocksResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TransferLocksResponse.ProtoReflect.Descriptor instead. func (*TransferLocksResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{72} + return file_filer_proto_rawDescGZIP(), []int{73} } type ReplicateLockRequest struct { @@ -5048,7 +5135,7 @@ type ReplicateLockRequest struct { func (x *ReplicateLockRequest) Reset() { *x = ReplicateLockRequest{} - mi := &file_filer_proto_msgTypes[73] + mi := &file_filer_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5060,7 +5147,7 @@ func (x *ReplicateLockRequest) String() string { func (*ReplicateLockRequest) ProtoMessage() {} func (x *ReplicateLockRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[73] + mi := &file_filer_proto_msgTypes[74] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5073,7 +5160,7 @@ func (x *ReplicateLockRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplicateLockRequest.ProtoReflect.Descriptor instead. func (*ReplicateLockRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{73} + return file_filer_proto_rawDescGZIP(), []int{74} } func (x *ReplicateLockRequest) GetName() string { @@ -5133,7 +5220,7 @@ type ReplicateLockResponse struct { func (x *ReplicateLockResponse) Reset() { *x = ReplicateLockResponse{} - mi := &file_filer_proto_msgTypes[74] + mi := &file_filer_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5145,7 +5232,7 @@ func (x *ReplicateLockResponse) String() string { func (*ReplicateLockResponse) ProtoMessage() {} func (x *ReplicateLockResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[74] + mi := &file_filer_proto_msgTypes[75] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5158,7 +5245,7 @@ func (x *ReplicateLockResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplicateLockResponse.ProtoReflect.Descriptor instead. func (*ReplicateLockResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{74} + return file_filer_proto_rawDescGZIP(), []int{75} } type StreamMutateEntryRequest struct { @@ -5177,7 +5264,7 @@ type StreamMutateEntryRequest struct { func (x *StreamMutateEntryRequest) Reset() { *x = StreamMutateEntryRequest{} - mi := &file_filer_proto_msgTypes[75] + mi := &file_filer_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5189,7 +5276,7 @@ func (x *StreamMutateEntryRequest) String() string { func (*StreamMutateEntryRequest) ProtoMessage() {} func (x *StreamMutateEntryRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[75] + mi := &file_filer_proto_msgTypes[76] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5202,7 +5289,7 @@ func (x *StreamMutateEntryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StreamMutateEntryRequest.ProtoReflect.Descriptor instead. func (*StreamMutateEntryRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{75} + return file_filer_proto_rawDescGZIP(), []int{76} } func (x *StreamMutateEntryRequest) GetRequestId() uint64 { @@ -5302,7 +5389,7 @@ type StreamMutateEntryResponse struct { func (x *StreamMutateEntryResponse) Reset() { *x = StreamMutateEntryResponse{} - mi := &file_filer_proto_msgTypes[76] + mi := &file_filer_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5314,7 +5401,7 @@ func (x *StreamMutateEntryResponse) String() string { func (*StreamMutateEntryResponse) ProtoMessage() {} func (x *StreamMutateEntryResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[76] + mi := &file_filer_proto_msgTypes[77] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5327,7 +5414,7 @@ func (x *StreamMutateEntryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StreamMutateEntryResponse.ProtoReflect.Descriptor instead. func (*StreamMutateEntryResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{76} + return file_filer_proto_rawDescGZIP(), []int{77} } func (x *StreamMutateEntryResponse) GetRequestId() uint64 { @@ -5441,7 +5528,7 @@ type MountRegisterRequest struct { func (x *MountRegisterRequest) Reset() { *x = MountRegisterRequest{} - mi := &file_filer_proto_msgTypes[77] + mi := &file_filer_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5453,7 +5540,7 @@ func (x *MountRegisterRequest) String() string { func (*MountRegisterRequest) ProtoMessage() {} func (x *MountRegisterRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[77] + mi := &file_filer_proto_msgTypes[78] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5466,7 +5553,7 @@ func (x *MountRegisterRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MountRegisterRequest.ProtoReflect.Descriptor instead. func (*MountRegisterRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{77} + return file_filer_proto_rawDescGZIP(), []int{78} } func (x *MountRegisterRequest) GetPeerAddr() string { @@ -5505,7 +5592,7 @@ type MountRegisterResponse struct { func (x *MountRegisterResponse) Reset() { *x = MountRegisterResponse{} - mi := &file_filer_proto_msgTypes[78] + mi := &file_filer_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5517,7 +5604,7 @@ func (x *MountRegisterResponse) String() string { func (*MountRegisterResponse) ProtoMessage() {} func (x *MountRegisterResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[78] + mi := &file_filer_proto_msgTypes[79] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5530,7 +5617,7 @@ func (x *MountRegisterResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MountRegisterResponse.ProtoReflect.Descriptor instead. func (*MountRegisterResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{78} + return file_filer_proto_rawDescGZIP(), []int{79} } type MountListRequest struct { @@ -5541,7 +5628,7 @@ type MountListRequest struct { func (x *MountListRequest) Reset() { *x = MountListRequest{} - mi := &file_filer_proto_msgTypes[79] + mi := &file_filer_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5553,7 +5640,7 @@ func (x *MountListRequest) String() string { func (*MountListRequest) ProtoMessage() {} func (x *MountListRequest) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[79] + mi := &file_filer_proto_msgTypes[80] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5566,7 +5653,7 @@ func (x *MountListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MountListRequest.ProtoReflect.Descriptor instead. func (*MountListRequest) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{79} + return file_filer_proto_rawDescGZIP(), []int{80} } type MountListResponse struct { @@ -5578,7 +5665,7 @@ type MountListResponse struct { func (x *MountListResponse) Reset() { *x = MountListResponse{} - mi := &file_filer_proto_msgTypes[80] + mi := &file_filer_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5590,7 +5677,7 @@ func (x *MountListResponse) String() string { func (*MountListResponse) ProtoMessage() {} func (x *MountListResponse) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[80] + mi := &file_filer_proto_msgTypes[81] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5603,7 +5690,7 @@ func (x *MountListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MountListResponse.ProtoReflect.Descriptor instead. func (*MountListResponse) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{80} + return file_filer_proto_rawDescGZIP(), []int{81} } func (x *MountListResponse) GetMounts() []*MountInfo { @@ -5625,7 +5712,7 @@ type MountInfo struct { func (x *MountInfo) Reset() { *x = MountInfo{} - mi := &file_filer_proto_msgTypes[81] + mi := &file_filer_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5637,7 +5724,7 @@ func (x *MountInfo) String() string { func (*MountInfo) ProtoMessage() {} func (x *MountInfo) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[81] + mi := &file_filer_proto_msgTypes[82] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5650,7 +5737,7 @@ func (x *MountInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use MountInfo.ProtoReflect.Descriptor instead. func (*MountInfo) Descriptor() ([]byte, []int) { - return file_filer_proto_rawDescGZIP(), []int{81} + return file_filer_proto_rawDescGZIP(), []int{82} } func (x *MountInfo) GetPeerAddr() string { @@ -5696,7 +5783,7 @@ type WriteCondition_Clause struct { func (x *WriteCondition_Clause) Reset() { *x = WriteCondition_Clause{} - mi := &file_filer_proto_msgTypes[83] + mi := &file_filer_proto_msgTypes[84] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5708,7 +5795,7 @@ func (x *WriteCondition_Clause) String() string { func (*WriteCondition_Clause) ProtoMessage() {} func (x *WriteCondition_Clause) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[83] + mi := &file_filer_proto_msgTypes[84] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5764,7 +5851,7 @@ type LocateBrokerResponse_Resource struct { func (x *LocateBrokerResponse_Resource) Reset() { *x = LocateBrokerResponse_Resource{} - mi := &file_filer_proto_msgTypes[87] + mi := &file_filer_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5776,7 +5863,7 @@ func (x *LocateBrokerResponse_Resource) String() string { func (*LocateBrokerResponse_Resource) ProtoMessage() {} func (x *LocateBrokerResponse_Resource) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[87] + mi := &file_filer_proto_msgTypes[89] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5789,7 +5876,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{56, 0} + return file_filer_proto_rawDescGZIP(), []int{57, 0} } func (x *LocateBrokerResponse_Resource) GetGrpcAddresses() string { @@ -5830,7 +5917,7 @@ type FilerConf_PathConf struct { func (x *FilerConf_PathConf) Reset() { *x = FilerConf_PathConf{} - mi := &file_filer_proto_msgTypes[88] + mi := &file_filer_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5842,7 +5929,7 @@ func (x *FilerConf_PathConf) String() string { func (*FilerConf_PathConf) ProtoMessage() {} func (x *FilerConf_PathConf) ProtoReflect() protoreflect.Message { - mi := &file_filer_proto_msgTypes[88] + mi := &file_filer_proto_msgTypes[90] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5855,7 +5942,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{61, 0} + return file_filer_proto_rawDescGZIP(), []int{62, 0} } func (x *FilerConf_PathConf) GetLocationPrefix() string { @@ -6100,7 +6187,7 @@ const file_filer_proto_rawDesc = "" + "\rIF_ETAG_MATCH\x10\x03\x12\x15\n" + "\x11IF_ETAG_NOT_MATCH\x10\x04\x12\x17\n" + "\x13IF_UNMODIFIED_SINCE\x10\x05\x12\x15\n" + - "\x11IF_MODIFIED_SINCE\x10\x06\"\xcd\x03\n" + + "\x11IF_MODIFIED_SINCE\x10\x06\"\x96\x04\n" + "\x0eObjectMutation\x121\n" + "\x04type\x18\x01 \x01(\x0e2\x1d.filer_pb.ObjectMutation.TypeR\x04type\x12\x1c\n" + "\tdirectory\x18\x02 \x01(\tR\tdirectory\x12\x12\n" + @@ -6109,15 +6196,27 @@ const file_filer_proto_rawDesc = "" + "\fset_extended\x18\x05 \x03(\v2).filer_pb.ObjectMutation.SetExtendedEntryR\vsetExtended\x12'\n" + "\x0fdelete_extended\x18\x06 \x03(\tR\x0edeleteExtended\x12$\n" + "\x0eis_delete_data\x18\a \x01(\bR\fisDeleteData\x12!\n" + - "\fis_recursive\x18\b \x01(\bR\visRecursive\x1a>\n" + + "\fis_recursive\x18\b \x01(\bR\visRecursive\x121\n" + + "\trecompute\x18\t \x01(\v2\x13.filer_pb.RecomputeR\trecompute\x1a>\n" + "\x10SetExtendedEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\fR\x05value:\x028\x01\"/\n" + + "\x05value\x18\x02 \x01(\fR\x05value:\x028\x01\"E\n" + "\x04Type\x12\a\n" + "\x03PUT\x10\x00\x12\n" + "\n" + "\x06DELETE\x10\x01\x12\x12\n" + - "\x0ePATCH_EXTENDED\x10\x02\"\xf8\x01\n" + + "\x0ePATCH_EXTENDED\x10\x02\x12\x14\n" + + "\x10RECOMPUTE_LATEST\x10\x03\"\xf3\x01\n" + + "\tRecompute\x12\x19\n" + + "\bscan_dir\x18\x01 \x01(\tR\ascanDir\x12\x1e\n" + + "\n" + + "descending\x18\x02 \x01(\bR\n" + + "descending\x12J\n" + + "\rcopy_extended\x18\x03 \x03(\v2%.filer_pb.Recompute.CopyExtendedEntryR\fcopyExtended\x12\x1e\n" + + "\vname_to_key\x18\x04 \x01(\tR\tnameToKey\x1a?\n" + + "\x11CopyExtendedEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xf8\x01\n" + "\x18ObjectTransactionRequest\x12\x19\n" + "\block_key\x18\x01 \x01(\tR\alockKey\x126\n" + "\tcondition\x18\x02 \x01(\v2\x18.filer_pb.WriteConditionR\tcondition\x126\n" + @@ -6547,7 +6646,7 @@ func file_filer_proto_rawDescGZIP() []byte { } var file_filer_proto_enumTypes = make([]protoimpl.EnumInfo, 4) -var file_filer_proto_msgTypes = make([]protoimpl.MessageInfo, 89) +var file_filer_proto_msgTypes = make([]protoimpl.MessageInfo, 91) var file_filer_proto_goTypes = []any{ (SSEType)(0), // 0: filer_pb.SSEType (FilerError)(0), // 1: filer_pb.FilerError @@ -6568,87 +6667,89 @@ var file_filer_proto_goTypes = []any{ (*CreateEntryRequest)(nil), // 16: filer_pb.CreateEntryRequest (*WriteCondition)(nil), // 17: filer_pb.WriteCondition (*ObjectMutation)(nil), // 18: filer_pb.ObjectMutation - (*ObjectTransactionRequest)(nil), // 19: filer_pb.ObjectTransactionRequest - (*ObjectTransactionResponse)(nil), // 20: filer_pb.ObjectTransactionResponse - (*CreateEntryResponse)(nil), // 21: filer_pb.CreateEntryResponse - (*UpdateEntryRequest)(nil), // 22: filer_pb.UpdateEntryRequest - (*UpdateEntryResponse)(nil), // 23: filer_pb.UpdateEntryResponse - (*TouchAccessTimeRequest)(nil), // 24: filer_pb.TouchAccessTimeRequest - (*TouchAccessTimeResponse)(nil), // 25: filer_pb.TouchAccessTimeResponse - (*AppendToEntryRequest)(nil), // 26: filer_pb.AppendToEntryRequest - (*AppendToEntryResponse)(nil), // 27: filer_pb.AppendToEntryResponse - (*DeleteEntryRequest)(nil), // 28: filer_pb.DeleteEntryRequest - (*DeleteEntryResponse)(nil), // 29: filer_pb.DeleteEntryResponse - (*AtomicRenameEntryRequest)(nil), // 30: filer_pb.AtomicRenameEntryRequest - (*AtomicRenameEntryResponse)(nil), // 31: filer_pb.AtomicRenameEntryResponse - (*StreamRenameEntryRequest)(nil), // 32: filer_pb.StreamRenameEntryRequest - (*StreamRenameEntryResponse)(nil), // 33: filer_pb.StreamRenameEntryResponse - (*AssignVolumeRequest)(nil), // 34: filer_pb.AssignVolumeRequest - (*AssignVolumeResponse)(nil), // 35: filer_pb.AssignVolumeResponse - (*LookupVolumeRequest)(nil), // 36: filer_pb.LookupVolumeRequest - (*Locations)(nil), // 37: filer_pb.Locations - (*Location)(nil), // 38: filer_pb.Location - (*LookupVolumeResponse)(nil), // 39: filer_pb.LookupVolumeResponse - (*Collection)(nil), // 40: filer_pb.Collection - (*CollectionListRequest)(nil), // 41: filer_pb.CollectionListRequest - (*CollectionListResponse)(nil), // 42: filer_pb.CollectionListResponse - (*DeleteCollectionRequest)(nil), // 43: filer_pb.DeleteCollectionRequest - (*DeleteCollectionResponse)(nil), // 44: filer_pb.DeleteCollectionResponse - (*StatisticsRequest)(nil), // 45: filer_pb.StatisticsRequest - (*StatisticsResponse)(nil), // 46: filer_pb.StatisticsResponse - (*PingRequest)(nil), // 47: filer_pb.PingRequest - (*PingResponse)(nil), // 48: filer_pb.PingResponse - (*GetFilerConfigurationRequest)(nil), // 49: filer_pb.GetFilerConfigurationRequest - (*GetFilerConfigurationResponse)(nil), // 50: filer_pb.GetFilerConfigurationResponse - (*SubscribeMetadataRequest)(nil), // 51: filer_pb.SubscribeMetadataRequest - (*SubscribeMetadataResponse)(nil), // 52: filer_pb.SubscribeMetadataResponse - (*LogFileChunkRef)(nil), // 53: filer_pb.LogFileChunkRef - (*TraverseBfsMetadataRequest)(nil), // 54: filer_pb.TraverseBfsMetadataRequest - (*TraverseBfsMetadataResponse)(nil), // 55: filer_pb.TraverseBfsMetadataResponse - (*LogEntry)(nil), // 56: filer_pb.LogEntry - (*KeepConnectedRequest)(nil), // 57: filer_pb.KeepConnectedRequest - (*KeepConnectedResponse)(nil), // 58: filer_pb.KeepConnectedResponse - (*LocateBrokerRequest)(nil), // 59: filer_pb.LocateBrokerRequest - (*LocateBrokerResponse)(nil), // 60: filer_pb.LocateBrokerResponse - (*KvGetRequest)(nil), // 61: filer_pb.KvGetRequest - (*KvGetResponse)(nil), // 62: filer_pb.KvGetResponse - (*KvPutRequest)(nil), // 63: filer_pb.KvPutRequest - (*KvPutResponse)(nil), // 64: filer_pb.KvPutResponse - (*FilerConf)(nil), // 65: filer_pb.FilerConf - (*CacheRemoteObjectToLocalClusterRequest)(nil), // 66: filer_pb.CacheRemoteObjectToLocalClusterRequest - (*CacheRemoteObjectToLocalClusterResponse)(nil), // 67: filer_pb.CacheRemoteObjectToLocalClusterResponse - (*LockRequest)(nil), // 68: filer_pb.LockRequest - (*LockResponse)(nil), // 69: filer_pb.LockResponse - (*UnlockRequest)(nil), // 70: filer_pb.UnlockRequest - (*UnlockResponse)(nil), // 71: filer_pb.UnlockResponse - (*FindLockOwnerRequest)(nil), // 72: filer_pb.FindLockOwnerRequest - (*FindLockOwnerResponse)(nil), // 73: filer_pb.FindLockOwnerResponse - (*Lock)(nil), // 74: filer_pb.Lock - (*TransferLocksRequest)(nil), // 75: filer_pb.TransferLocksRequest - (*TransferLocksResponse)(nil), // 76: filer_pb.TransferLocksResponse - (*ReplicateLockRequest)(nil), // 77: filer_pb.ReplicateLockRequest - (*ReplicateLockResponse)(nil), // 78: filer_pb.ReplicateLockResponse - (*StreamMutateEntryRequest)(nil), // 79: filer_pb.StreamMutateEntryRequest - (*StreamMutateEntryResponse)(nil), // 80: filer_pb.StreamMutateEntryResponse - (*MountRegisterRequest)(nil), // 81: filer_pb.MountRegisterRequest - (*MountRegisterResponse)(nil), // 82: filer_pb.MountRegisterResponse - (*MountListRequest)(nil), // 83: filer_pb.MountListRequest - (*MountListResponse)(nil), // 84: filer_pb.MountListResponse - (*MountInfo)(nil), // 85: filer_pb.MountInfo - nil, // 86: filer_pb.Entry.ExtendedEntry - (*WriteCondition_Clause)(nil), // 87: filer_pb.WriteCondition.Clause - nil, // 88: filer_pb.ObjectMutation.SetExtendedEntry - nil, // 89: filer_pb.UpdateEntryRequest.ExpectedExtendedEntry - nil, // 90: filer_pb.LookupVolumeResponse.LocationsMapEntry - (*LocateBrokerResponse_Resource)(nil), // 91: filer_pb.LocateBrokerResponse.Resource - (*FilerConf_PathConf)(nil), // 92: filer_pb.FilerConf.PathConf + (*Recompute)(nil), // 19: filer_pb.Recompute + (*ObjectTransactionRequest)(nil), // 20: filer_pb.ObjectTransactionRequest + (*ObjectTransactionResponse)(nil), // 21: filer_pb.ObjectTransactionResponse + (*CreateEntryResponse)(nil), // 22: filer_pb.CreateEntryResponse + (*UpdateEntryRequest)(nil), // 23: filer_pb.UpdateEntryRequest + (*UpdateEntryResponse)(nil), // 24: filer_pb.UpdateEntryResponse + (*TouchAccessTimeRequest)(nil), // 25: filer_pb.TouchAccessTimeRequest + (*TouchAccessTimeResponse)(nil), // 26: filer_pb.TouchAccessTimeResponse + (*AppendToEntryRequest)(nil), // 27: filer_pb.AppendToEntryRequest + (*AppendToEntryResponse)(nil), // 28: filer_pb.AppendToEntryResponse + (*DeleteEntryRequest)(nil), // 29: filer_pb.DeleteEntryRequest + (*DeleteEntryResponse)(nil), // 30: filer_pb.DeleteEntryResponse + (*AtomicRenameEntryRequest)(nil), // 31: filer_pb.AtomicRenameEntryRequest + (*AtomicRenameEntryResponse)(nil), // 32: filer_pb.AtomicRenameEntryResponse + (*StreamRenameEntryRequest)(nil), // 33: filer_pb.StreamRenameEntryRequest + (*StreamRenameEntryResponse)(nil), // 34: filer_pb.StreamRenameEntryResponse + (*AssignVolumeRequest)(nil), // 35: filer_pb.AssignVolumeRequest + (*AssignVolumeResponse)(nil), // 36: filer_pb.AssignVolumeResponse + (*LookupVolumeRequest)(nil), // 37: filer_pb.LookupVolumeRequest + (*Locations)(nil), // 38: filer_pb.Locations + (*Location)(nil), // 39: filer_pb.Location + (*LookupVolumeResponse)(nil), // 40: filer_pb.LookupVolumeResponse + (*Collection)(nil), // 41: filer_pb.Collection + (*CollectionListRequest)(nil), // 42: filer_pb.CollectionListRequest + (*CollectionListResponse)(nil), // 43: filer_pb.CollectionListResponse + (*DeleteCollectionRequest)(nil), // 44: filer_pb.DeleteCollectionRequest + (*DeleteCollectionResponse)(nil), // 45: filer_pb.DeleteCollectionResponse + (*StatisticsRequest)(nil), // 46: filer_pb.StatisticsRequest + (*StatisticsResponse)(nil), // 47: filer_pb.StatisticsResponse + (*PingRequest)(nil), // 48: filer_pb.PingRequest + (*PingResponse)(nil), // 49: filer_pb.PingResponse + (*GetFilerConfigurationRequest)(nil), // 50: filer_pb.GetFilerConfigurationRequest + (*GetFilerConfigurationResponse)(nil), // 51: filer_pb.GetFilerConfigurationResponse + (*SubscribeMetadataRequest)(nil), // 52: filer_pb.SubscribeMetadataRequest + (*SubscribeMetadataResponse)(nil), // 53: filer_pb.SubscribeMetadataResponse + (*LogFileChunkRef)(nil), // 54: filer_pb.LogFileChunkRef + (*TraverseBfsMetadataRequest)(nil), // 55: filer_pb.TraverseBfsMetadataRequest + (*TraverseBfsMetadataResponse)(nil), // 56: filer_pb.TraverseBfsMetadataResponse + (*LogEntry)(nil), // 57: filer_pb.LogEntry + (*KeepConnectedRequest)(nil), // 58: filer_pb.KeepConnectedRequest + (*KeepConnectedResponse)(nil), // 59: filer_pb.KeepConnectedResponse + (*LocateBrokerRequest)(nil), // 60: filer_pb.LocateBrokerRequest + (*LocateBrokerResponse)(nil), // 61: filer_pb.LocateBrokerResponse + (*KvGetRequest)(nil), // 62: filer_pb.KvGetRequest + (*KvGetResponse)(nil), // 63: filer_pb.KvGetResponse + (*KvPutRequest)(nil), // 64: filer_pb.KvPutRequest + (*KvPutResponse)(nil), // 65: filer_pb.KvPutResponse + (*FilerConf)(nil), // 66: filer_pb.FilerConf + (*CacheRemoteObjectToLocalClusterRequest)(nil), // 67: filer_pb.CacheRemoteObjectToLocalClusterRequest + (*CacheRemoteObjectToLocalClusterResponse)(nil), // 68: filer_pb.CacheRemoteObjectToLocalClusterResponse + (*LockRequest)(nil), // 69: filer_pb.LockRequest + (*LockResponse)(nil), // 70: filer_pb.LockResponse + (*UnlockRequest)(nil), // 71: filer_pb.UnlockRequest + (*UnlockResponse)(nil), // 72: filer_pb.UnlockResponse + (*FindLockOwnerRequest)(nil), // 73: filer_pb.FindLockOwnerRequest + (*FindLockOwnerResponse)(nil), // 74: filer_pb.FindLockOwnerResponse + (*Lock)(nil), // 75: filer_pb.Lock + (*TransferLocksRequest)(nil), // 76: filer_pb.TransferLocksRequest + (*TransferLocksResponse)(nil), // 77: filer_pb.TransferLocksResponse + (*ReplicateLockRequest)(nil), // 78: filer_pb.ReplicateLockRequest + (*ReplicateLockResponse)(nil), // 79: filer_pb.ReplicateLockResponse + (*StreamMutateEntryRequest)(nil), // 80: filer_pb.StreamMutateEntryRequest + (*StreamMutateEntryResponse)(nil), // 81: filer_pb.StreamMutateEntryResponse + (*MountRegisterRequest)(nil), // 82: filer_pb.MountRegisterRequest + (*MountRegisterResponse)(nil), // 83: filer_pb.MountRegisterResponse + (*MountListRequest)(nil), // 84: filer_pb.MountListRequest + (*MountListResponse)(nil), // 85: filer_pb.MountListResponse + (*MountInfo)(nil), // 86: filer_pb.MountInfo + nil, // 87: filer_pb.Entry.ExtendedEntry + (*WriteCondition_Clause)(nil), // 88: filer_pb.WriteCondition.Clause + nil, // 89: filer_pb.ObjectMutation.SetExtendedEntry + nil, // 90: filer_pb.Recompute.CopyExtendedEntry + nil, // 91: filer_pb.UpdateEntryRequest.ExpectedExtendedEntry + nil, // 92: filer_pb.LookupVolumeResponse.LocationsMapEntry + (*LocateBrokerResponse_Resource)(nil), // 93: filer_pb.LocateBrokerResponse.Resource + (*FilerConf_PathConf)(nil), // 94: 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 - 86, // 4: filer_pb.Entry.extended:type_name -> filer_pb.Entry.ExtendedEntry + 87, // 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 @@ -6659,113 +6760,115 @@ var file_filer_proto_depIdxs = []int32{ 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 - 87, // 15: filer_pb.WriteCondition.clauses:type_name -> filer_pb.WriteCondition.Clause + 88, // 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 - 88, // 18: filer_pb.ObjectMutation.set_extended:type_name -> filer_pb.ObjectMutation.SetExtendedEntry - 17, // 19: filer_pb.ObjectTransactionRequest.condition:type_name -> filer_pb.WriteCondition - 18, // 20: filer_pb.ObjectTransactionRequest.mutations:type_name -> filer_pb.ObjectMutation - 1, // 21: filer_pb.ObjectTransactionResponse.error_code:type_name -> filer_pb.FilerError - 52, // 22: filer_pb.CreateEntryResponse.metadata_event:type_name -> filer_pb.SubscribeMetadataResponse - 1, // 23: filer_pb.CreateEntryResponse.error_code:type_name -> filer_pb.FilerError - 9, // 24: filer_pb.UpdateEntryRequest.entry:type_name -> filer_pb.Entry - 89, // 25: filer_pb.UpdateEntryRequest.expected_extended:type_name -> filer_pb.UpdateEntryRequest.ExpectedExtendedEntry - 52, // 26: filer_pb.UpdateEntryResponse.metadata_event:type_name -> filer_pb.SubscribeMetadataResponse - 12, // 27: filer_pb.AppendToEntryRequest.chunks:type_name -> filer_pb.FileChunk - 52, // 28: filer_pb.DeleteEntryResponse.metadata_event:type_name -> filer_pb.SubscribeMetadataResponse - 11, // 29: filer_pb.StreamRenameEntryResponse.event_notification:type_name -> filer_pb.EventNotification - 38, // 30: filer_pb.AssignVolumeResponse.location:type_name -> filer_pb.Location - 38, // 31: filer_pb.Locations.locations:type_name -> filer_pb.Location - 90, // 32: filer_pb.LookupVolumeResponse.locations_map:type_name -> filer_pb.LookupVolumeResponse.LocationsMapEntry - 40, // 33: filer_pb.CollectionListResponse.collections:type_name -> filer_pb.Collection - 11, // 34: filer_pb.SubscribeMetadataResponse.event_notification:type_name -> filer_pb.EventNotification - 52, // 35: filer_pb.SubscribeMetadataResponse.events:type_name -> filer_pb.SubscribeMetadataResponse - 53, // 36: filer_pb.SubscribeMetadataResponse.log_file_refs:type_name -> filer_pb.LogFileChunkRef - 12, // 37: filer_pb.LogFileChunkRef.chunks:type_name -> filer_pb.FileChunk - 9, // 38: filer_pb.TraverseBfsMetadataResponse.entry:type_name -> filer_pb.Entry - 91, // 39: filer_pb.LocateBrokerResponse.resources:type_name -> filer_pb.LocateBrokerResponse.Resource - 92, // 40: filer_pb.FilerConf.locations:type_name -> filer_pb.FilerConf.PathConf - 9, // 41: filer_pb.CacheRemoteObjectToLocalClusterResponse.entry:type_name -> filer_pb.Entry - 52, // 42: filer_pb.CacheRemoteObjectToLocalClusterResponse.metadata_event:type_name -> filer_pb.SubscribeMetadataResponse - 74, // 43: filer_pb.TransferLocksRequest.locks:type_name -> filer_pb.Lock - 16, // 44: filer_pb.StreamMutateEntryRequest.create_request:type_name -> filer_pb.CreateEntryRequest - 22, // 45: filer_pb.StreamMutateEntryRequest.update_request:type_name -> filer_pb.UpdateEntryRequest - 28, // 46: filer_pb.StreamMutateEntryRequest.delete_request:type_name -> filer_pb.DeleteEntryRequest - 32, // 47: filer_pb.StreamMutateEntryRequest.rename_request:type_name -> filer_pb.StreamRenameEntryRequest - 21, // 48: filer_pb.StreamMutateEntryResponse.create_response:type_name -> filer_pb.CreateEntryResponse - 23, // 49: filer_pb.StreamMutateEntryResponse.update_response:type_name -> filer_pb.UpdateEntryResponse - 29, // 50: filer_pb.StreamMutateEntryResponse.delete_response:type_name -> filer_pb.DeleteEntryResponse - 33, // 51: filer_pb.StreamMutateEntryResponse.rename_response:type_name -> filer_pb.StreamRenameEntryResponse - 85, // 52: filer_pb.MountListResponse.mounts:type_name -> filer_pb.MountInfo - 2, // 53: filer_pb.WriteCondition.Clause.kind:type_name -> filer_pb.WriteCondition.Kind - 37, // 54: filer_pb.LookupVolumeResponse.LocationsMapEntry.value:type_name -> filer_pb.Locations - 4, // 55: filer_pb.SeaweedFiler.LookupDirectoryEntry:input_type -> filer_pb.LookupDirectoryEntryRequest - 6, // 56: filer_pb.SeaweedFiler.ListEntries:input_type -> filer_pb.ListEntriesRequest - 16, // 57: filer_pb.SeaweedFiler.CreateEntry:input_type -> filer_pb.CreateEntryRequest - 22, // 58: filer_pb.SeaweedFiler.UpdateEntry:input_type -> filer_pb.UpdateEntryRequest - 24, // 59: filer_pb.SeaweedFiler.TouchAccessTime:input_type -> filer_pb.TouchAccessTimeRequest - 26, // 60: filer_pb.SeaweedFiler.AppendToEntry:input_type -> filer_pb.AppendToEntryRequest - 28, // 61: filer_pb.SeaweedFiler.DeleteEntry:input_type -> filer_pb.DeleteEntryRequest - 19, // 62: filer_pb.SeaweedFiler.ObjectTransaction:input_type -> filer_pb.ObjectTransactionRequest - 30, // 63: filer_pb.SeaweedFiler.AtomicRenameEntry:input_type -> filer_pb.AtomicRenameEntryRequest - 32, // 64: filer_pb.SeaweedFiler.StreamRenameEntry:input_type -> filer_pb.StreamRenameEntryRequest - 79, // 65: filer_pb.SeaweedFiler.StreamMutateEntry:input_type -> filer_pb.StreamMutateEntryRequest - 34, // 66: filer_pb.SeaweedFiler.AssignVolume:input_type -> filer_pb.AssignVolumeRequest - 36, // 67: filer_pb.SeaweedFiler.LookupVolume:input_type -> filer_pb.LookupVolumeRequest - 41, // 68: filer_pb.SeaweedFiler.CollectionList:input_type -> filer_pb.CollectionListRequest - 43, // 69: filer_pb.SeaweedFiler.DeleteCollection:input_type -> filer_pb.DeleteCollectionRequest - 45, // 70: filer_pb.SeaweedFiler.Statistics:input_type -> filer_pb.StatisticsRequest - 47, // 71: filer_pb.SeaweedFiler.Ping:input_type -> filer_pb.PingRequest - 49, // 72: filer_pb.SeaweedFiler.GetFilerConfiguration:input_type -> filer_pb.GetFilerConfigurationRequest - 54, // 73: filer_pb.SeaweedFiler.TraverseBfsMetadata:input_type -> filer_pb.TraverseBfsMetadataRequest - 51, // 74: filer_pb.SeaweedFiler.SubscribeMetadata:input_type -> filer_pb.SubscribeMetadataRequest - 51, // 75: filer_pb.SeaweedFiler.SubscribeLocalMetadata:input_type -> filer_pb.SubscribeMetadataRequest - 61, // 76: filer_pb.SeaweedFiler.KvGet:input_type -> filer_pb.KvGetRequest - 63, // 77: filer_pb.SeaweedFiler.KvPut:input_type -> filer_pb.KvPutRequest - 66, // 78: filer_pb.SeaweedFiler.CacheRemoteObjectToLocalCluster:input_type -> filer_pb.CacheRemoteObjectToLocalClusterRequest - 68, // 79: filer_pb.SeaweedFiler.DistributedLock:input_type -> filer_pb.LockRequest - 70, // 80: filer_pb.SeaweedFiler.DistributedUnlock:input_type -> filer_pb.UnlockRequest - 72, // 81: filer_pb.SeaweedFiler.FindLockOwner:input_type -> filer_pb.FindLockOwnerRequest - 75, // 82: filer_pb.SeaweedFiler.TransferLocks:input_type -> filer_pb.TransferLocksRequest - 77, // 83: filer_pb.SeaweedFiler.ReplicateLock:input_type -> filer_pb.ReplicateLockRequest - 81, // 84: filer_pb.SeaweedFiler.MountRegister:input_type -> filer_pb.MountRegisterRequest - 83, // 85: filer_pb.SeaweedFiler.MountList:input_type -> filer_pb.MountListRequest - 5, // 86: filer_pb.SeaweedFiler.LookupDirectoryEntry:output_type -> filer_pb.LookupDirectoryEntryResponse - 7, // 87: filer_pb.SeaweedFiler.ListEntries:output_type -> filer_pb.ListEntriesResponse - 21, // 88: filer_pb.SeaweedFiler.CreateEntry:output_type -> filer_pb.CreateEntryResponse - 23, // 89: filer_pb.SeaweedFiler.UpdateEntry:output_type -> filer_pb.UpdateEntryResponse - 25, // 90: filer_pb.SeaweedFiler.TouchAccessTime:output_type -> filer_pb.TouchAccessTimeResponse - 27, // 91: filer_pb.SeaweedFiler.AppendToEntry:output_type -> filer_pb.AppendToEntryResponse - 29, // 92: filer_pb.SeaweedFiler.DeleteEntry:output_type -> filer_pb.DeleteEntryResponse - 20, // 93: filer_pb.SeaweedFiler.ObjectTransaction:output_type -> filer_pb.ObjectTransactionResponse - 31, // 94: filer_pb.SeaweedFiler.AtomicRenameEntry:output_type -> filer_pb.AtomicRenameEntryResponse - 33, // 95: filer_pb.SeaweedFiler.StreamRenameEntry:output_type -> filer_pb.StreamRenameEntryResponse - 80, // 96: filer_pb.SeaweedFiler.StreamMutateEntry:output_type -> filer_pb.StreamMutateEntryResponse - 35, // 97: filer_pb.SeaweedFiler.AssignVolume:output_type -> filer_pb.AssignVolumeResponse - 39, // 98: filer_pb.SeaweedFiler.LookupVolume:output_type -> filer_pb.LookupVolumeResponse - 42, // 99: filer_pb.SeaweedFiler.CollectionList:output_type -> filer_pb.CollectionListResponse - 44, // 100: filer_pb.SeaweedFiler.DeleteCollection:output_type -> filer_pb.DeleteCollectionResponse - 46, // 101: filer_pb.SeaweedFiler.Statistics:output_type -> filer_pb.StatisticsResponse - 48, // 102: filer_pb.SeaweedFiler.Ping:output_type -> filer_pb.PingResponse - 50, // 103: filer_pb.SeaweedFiler.GetFilerConfiguration:output_type -> filer_pb.GetFilerConfigurationResponse - 55, // 104: filer_pb.SeaweedFiler.TraverseBfsMetadata:output_type -> filer_pb.TraverseBfsMetadataResponse - 52, // 105: filer_pb.SeaweedFiler.SubscribeMetadata:output_type -> filer_pb.SubscribeMetadataResponse - 52, // 106: filer_pb.SeaweedFiler.SubscribeLocalMetadata:output_type -> filer_pb.SubscribeMetadataResponse - 62, // 107: filer_pb.SeaweedFiler.KvGet:output_type -> filer_pb.KvGetResponse - 64, // 108: filer_pb.SeaweedFiler.KvPut:output_type -> filer_pb.KvPutResponse - 67, // 109: filer_pb.SeaweedFiler.CacheRemoteObjectToLocalCluster:output_type -> filer_pb.CacheRemoteObjectToLocalClusterResponse - 69, // 110: filer_pb.SeaweedFiler.DistributedLock:output_type -> filer_pb.LockResponse - 71, // 111: filer_pb.SeaweedFiler.DistributedUnlock:output_type -> filer_pb.UnlockResponse - 73, // 112: filer_pb.SeaweedFiler.FindLockOwner:output_type -> filer_pb.FindLockOwnerResponse - 76, // 113: filer_pb.SeaweedFiler.TransferLocks:output_type -> filer_pb.TransferLocksResponse - 78, // 114: filer_pb.SeaweedFiler.ReplicateLock:output_type -> filer_pb.ReplicateLockResponse - 82, // 115: filer_pb.SeaweedFiler.MountRegister:output_type -> filer_pb.MountRegisterResponse - 84, // 116: filer_pb.SeaweedFiler.MountList:output_type -> filer_pb.MountListResponse - 86, // [86:117] is the sub-list for method output_type - 55, // [55:86] is the sub-list for method input_type - 55, // [55:55] is the sub-list for extension type_name - 55, // [55:55] is the sub-list for extension extendee - 0, // [0:55] is the sub-list for field type_name + 89, // 18: filer_pb.ObjectMutation.set_extended:type_name -> filer_pb.ObjectMutation.SetExtendedEntry + 19, // 19: filer_pb.ObjectMutation.recompute:type_name -> filer_pb.Recompute + 90, // 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 + 53, // 24: filer_pb.CreateEntryResponse.metadata_event:type_name -> filer_pb.SubscribeMetadataResponse + 1, // 25: filer_pb.CreateEntryResponse.error_code:type_name -> filer_pb.FilerError + 9, // 26: filer_pb.UpdateEntryRequest.entry:type_name -> filer_pb.Entry + 91, // 27: filer_pb.UpdateEntryRequest.expected_extended:type_name -> filer_pb.UpdateEntryRequest.ExpectedExtendedEntry + 53, // 28: filer_pb.UpdateEntryResponse.metadata_event:type_name -> filer_pb.SubscribeMetadataResponse + 12, // 29: filer_pb.AppendToEntryRequest.chunks:type_name -> filer_pb.FileChunk + 53, // 30: filer_pb.DeleteEntryResponse.metadata_event:type_name -> filer_pb.SubscribeMetadataResponse + 11, // 31: filer_pb.StreamRenameEntryResponse.event_notification:type_name -> filer_pb.EventNotification + 39, // 32: filer_pb.AssignVolumeResponse.location:type_name -> filer_pb.Location + 39, // 33: filer_pb.Locations.locations:type_name -> filer_pb.Location + 92, // 34: filer_pb.LookupVolumeResponse.locations_map:type_name -> filer_pb.LookupVolumeResponse.LocationsMapEntry + 41, // 35: filer_pb.CollectionListResponse.collections:type_name -> filer_pb.Collection + 11, // 36: filer_pb.SubscribeMetadataResponse.event_notification:type_name -> filer_pb.EventNotification + 53, // 37: filer_pb.SubscribeMetadataResponse.events:type_name -> filer_pb.SubscribeMetadataResponse + 54, // 38: filer_pb.SubscribeMetadataResponse.log_file_refs:type_name -> filer_pb.LogFileChunkRef + 12, // 39: filer_pb.LogFileChunkRef.chunks:type_name -> filer_pb.FileChunk + 9, // 40: filer_pb.TraverseBfsMetadataResponse.entry:type_name -> filer_pb.Entry + 93, // 41: filer_pb.LocateBrokerResponse.resources:type_name -> filer_pb.LocateBrokerResponse.Resource + 94, // 42: filer_pb.FilerConf.locations:type_name -> filer_pb.FilerConf.PathConf + 9, // 43: filer_pb.CacheRemoteObjectToLocalClusterResponse.entry:type_name -> filer_pb.Entry + 53, // 44: filer_pb.CacheRemoteObjectToLocalClusterResponse.metadata_event:type_name -> filer_pb.SubscribeMetadataResponse + 75, // 45: filer_pb.TransferLocksRequest.locks:type_name -> filer_pb.Lock + 16, // 46: filer_pb.StreamMutateEntryRequest.create_request:type_name -> filer_pb.CreateEntryRequest + 23, // 47: filer_pb.StreamMutateEntryRequest.update_request:type_name -> filer_pb.UpdateEntryRequest + 29, // 48: filer_pb.StreamMutateEntryRequest.delete_request:type_name -> filer_pb.DeleteEntryRequest + 33, // 49: filer_pb.StreamMutateEntryRequest.rename_request:type_name -> filer_pb.StreamRenameEntryRequest + 22, // 50: filer_pb.StreamMutateEntryResponse.create_response:type_name -> filer_pb.CreateEntryResponse + 24, // 51: filer_pb.StreamMutateEntryResponse.update_response:type_name -> filer_pb.UpdateEntryResponse + 30, // 52: filer_pb.StreamMutateEntryResponse.delete_response:type_name -> filer_pb.DeleteEntryResponse + 34, // 53: filer_pb.StreamMutateEntryResponse.rename_response:type_name -> filer_pb.StreamRenameEntryResponse + 86, // 54: filer_pb.MountListResponse.mounts:type_name -> filer_pb.MountInfo + 2, // 55: filer_pb.WriteCondition.Clause.kind:type_name -> filer_pb.WriteCondition.Kind + 38, // 56: filer_pb.LookupVolumeResponse.LocationsMapEntry.value:type_name -> filer_pb.Locations + 4, // 57: filer_pb.SeaweedFiler.LookupDirectoryEntry:input_type -> filer_pb.LookupDirectoryEntryRequest + 6, // 58: filer_pb.SeaweedFiler.ListEntries:input_type -> filer_pb.ListEntriesRequest + 16, // 59: filer_pb.SeaweedFiler.CreateEntry:input_type -> filer_pb.CreateEntryRequest + 23, // 60: filer_pb.SeaweedFiler.UpdateEntry:input_type -> filer_pb.UpdateEntryRequest + 25, // 61: filer_pb.SeaweedFiler.TouchAccessTime:input_type -> filer_pb.TouchAccessTimeRequest + 27, // 62: filer_pb.SeaweedFiler.AppendToEntry:input_type -> filer_pb.AppendToEntryRequest + 29, // 63: filer_pb.SeaweedFiler.DeleteEntry:input_type -> filer_pb.DeleteEntryRequest + 20, // 64: filer_pb.SeaweedFiler.ObjectTransaction:input_type -> filer_pb.ObjectTransactionRequest + 31, // 65: filer_pb.SeaweedFiler.AtomicRenameEntry:input_type -> filer_pb.AtomicRenameEntryRequest + 33, // 66: filer_pb.SeaweedFiler.StreamRenameEntry:input_type -> filer_pb.StreamRenameEntryRequest + 80, // 67: filer_pb.SeaweedFiler.StreamMutateEntry:input_type -> filer_pb.StreamMutateEntryRequest + 35, // 68: filer_pb.SeaweedFiler.AssignVolume:input_type -> filer_pb.AssignVolumeRequest + 37, // 69: filer_pb.SeaweedFiler.LookupVolume:input_type -> filer_pb.LookupVolumeRequest + 42, // 70: filer_pb.SeaweedFiler.CollectionList:input_type -> filer_pb.CollectionListRequest + 44, // 71: filer_pb.SeaweedFiler.DeleteCollection:input_type -> filer_pb.DeleteCollectionRequest + 46, // 72: filer_pb.SeaweedFiler.Statistics:input_type -> filer_pb.StatisticsRequest + 48, // 73: filer_pb.SeaweedFiler.Ping:input_type -> filer_pb.PingRequest + 50, // 74: filer_pb.SeaweedFiler.GetFilerConfiguration:input_type -> filer_pb.GetFilerConfigurationRequest + 55, // 75: filer_pb.SeaweedFiler.TraverseBfsMetadata:input_type -> filer_pb.TraverseBfsMetadataRequest + 52, // 76: filer_pb.SeaweedFiler.SubscribeMetadata:input_type -> filer_pb.SubscribeMetadataRequest + 52, // 77: filer_pb.SeaweedFiler.SubscribeLocalMetadata:input_type -> filer_pb.SubscribeMetadataRequest + 62, // 78: filer_pb.SeaweedFiler.KvGet:input_type -> filer_pb.KvGetRequest + 64, // 79: filer_pb.SeaweedFiler.KvPut:input_type -> filer_pb.KvPutRequest + 67, // 80: filer_pb.SeaweedFiler.CacheRemoteObjectToLocalCluster:input_type -> filer_pb.CacheRemoteObjectToLocalClusterRequest + 69, // 81: filer_pb.SeaweedFiler.DistributedLock:input_type -> filer_pb.LockRequest + 71, // 82: filer_pb.SeaweedFiler.DistributedUnlock:input_type -> filer_pb.UnlockRequest + 73, // 83: filer_pb.SeaweedFiler.FindLockOwner:input_type -> filer_pb.FindLockOwnerRequest + 76, // 84: filer_pb.SeaweedFiler.TransferLocks:input_type -> filer_pb.TransferLocksRequest + 78, // 85: filer_pb.SeaweedFiler.ReplicateLock:input_type -> filer_pb.ReplicateLockRequest + 82, // 86: filer_pb.SeaweedFiler.MountRegister:input_type -> filer_pb.MountRegisterRequest + 84, // 87: filer_pb.SeaweedFiler.MountList:input_type -> filer_pb.MountListRequest + 5, // 88: filer_pb.SeaweedFiler.LookupDirectoryEntry:output_type -> filer_pb.LookupDirectoryEntryResponse + 7, // 89: filer_pb.SeaweedFiler.ListEntries:output_type -> filer_pb.ListEntriesResponse + 22, // 90: filer_pb.SeaweedFiler.CreateEntry:output_type -> filer_pb.CreateEntryResponse + 24, // 91: filer_pb.SeaweedFiler.UpdateEntry:output_type -> filer_pb.UpdateEntryResponse + 26, // 92: filer_pb.SeaweedFiler.TouchAccessTime:output_type -> filer_pb.TouchAccessTimeResponse + 28, // 93: filer_pb.SeaweedFiler.AppendToEntry:output_type -> filer_pb.AppendToEntryResponse + 30, // 94: filer_pb.SeaweedFiler.DeleteEntry:output_type -> filer_pb.DeleteEntryResponse + 21, // 95: filer_pb.SeaweedFiler.ObjectTransaction:output_type -> filer_pb.ObjectTransactionResponse + 32, // 96: filer_pb.SeaweedFiler.AtomicRenameEntry:output_type -> filer_pb.AtomicRenameEntryResponse + 34, // 97: filer_pb.SeaweedFiler.StreamRenameEntry:output_type -> filer_pb.StreamRenameEntryResponse + 81, // 98: filer_pb.SeaweedFiler.StreamMutateEntry:output_type -> filer_pb.StreamMutateEntryResponse + 36, // 99: filer_pb.SeaweedFiler.AssignVolume:output_type -> filer_pb.AssignVolumeResponse + 40, // 100: filer_pb.SeaweedFiler.LookupVolume:output_type -> filer_pb.LookupVolumeResponse + 43, // 101: filer_pb.SeaweedFiler.CollectionList:output_type -> filer_pb.CollectionListResponse + 45, // 102: filer_pb.SeaweedFiler.DeleteCollection:output_type -> filer_pb.DeleteCollectionResponse + 47, // 103: filer_pb.SeaweedFiler.Statistics:output_type -> filer_pb.StatisticsResponse + 49, // 104: filer_pb.SeaweedFiler.Ping:output_type -> filer_pb.PingResponse + 51, // 105: filer_pb.SeaweedFiler.GetFilerConfiguration:output_type -> filer_pb.GetFilerConfigurationResponse + 56, // 106: filer_pb.SeaweedFiler.TraverseBfsMetadata:output_type -> filer_pb.TraverseBfsMetadataResponse + 53, // 107: filer_pb.SeaweedFiler.SubscribeMetadata:output_type -> filer_pb.SubscribeMetadataResponse + 53, // 108: filer_pb.SeaweedFiler.SubscribeLocalMetadata:output_type -> filer_pb.SubscribeMetadataResponse + 63, // 109: filer_pb.SeaweedFiler.KvGet:output_type -> filer_pb.KvGetResponse + 65, // 110: filer_pb.SeaweedFiler.KvPut:output_type -> filer_pb.KvPutResponse + 68, // 111: filer_pb.SeaweedFiler.CacheRemoteObjectToLocalCluster:output_type -> filer_pb.CacheRemoteObjectToLocalClusterResponse + 70, // 112: filer_pb.SeaweedFiler.DistributedLock:output_type -> filer_pb.LockResponse + 72, // 113: filer_pb.SeaweedFiler.DistributedUnlock:output_type -> filer_pb.UnlockResponse + 74, // 114: filer_pb.SeaweedFiler.FindLockOwner:output_type -> filer_pb.FindLockOwnerResponse + 77, // 115: filer_pb.SeaweedFiler.TransferLocks:output_type -> filer_pb.TransferLocksResponse + 79, // 116: filer_pb.SeaweedFiler.ReplicateLock:output_type -> filer_pb.ReplicateLockResponse + 83, // 117: filer_pb.SeaweedFiler.MountRegister:output_type -> filer_pb.MountRegisterResponse + 85, // 118: filer_pb.SeaweedFiler.MountList:output_type -> filer_pb.MountListResponse + 88, // [88:119] is the sub-list for method output_type + 57, // [57:88] is the sub-list for method input_type + 57, // [57:57] is the sub-list for extension type_name + 57, // [57:57] is the sub-list for extension extendee + 0, // [0:57] is the sub-list for field type_name } func init() { file_filer_proto_init() } @@ -6773,13 +6876,13 @@ func file_filer_proto_init() { if File_filer_proto != nil { return } - file_filer_proto_msgTypes[75].OneofWrappers = []any{ + file_filer_proto_msgTypes[76].OneofWrappers = []any{ (*StreamMutateEntryRequest_CreateRequest)(nil), (*StreamMutateEntryRequest_UpdateRequest)(nil), (*StreamMutateEntryRequest_DeleteRequest)(nil), (*StreamMutateEntryRequest_RenameRequest)(nil), } - file_filer_proto_msgTypes[76].OneofWrappers = []any{ + file_filer_proto_msgTypes[77].OneofWrappers = []any{ (*StreamMutateEntryResponse_CreateResponse)(nil), (*StreamMutateEntryResponse_UpdateResponse)(nil), (*StreamMutateEntryResponse_DeleteResponse)(nil), @@ -6791,7 +6894,7 @@ func file_filer_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_filer_proto_rawDesc), len(file_filer_proto_rawDesc)), NumEnums: 4, - NumMessages: 89, + NumMessages: 91, NumExtensions: 0, NumServices: 1, }, diff --git a/weed/server/filer_grpc_server.go b/weed/server/filer_grpc_server.go index fa7e04fcb..dcfb9ebdb 100644 --- a/weed/server/filer_grpc_server.go +++ b/weed/server/filer_grpc_server.go @@ -5,6 +5,7 @@ import ( "context" "errors" "fmt" + "math" "os" "path/filepath" "time" @@ -333,11 +334,77 @@ func (fs *FilerServer) applyObjectMutation(ctx context.Context, m *filer_pb.Obje fs.filer.NotifyUpdateEvent(ctx, oldEntry, newEntry, true, fromOtherCluster, signatures) return nil + case filer_pb.ObjectMutation_RECOMPUTE_LATEST: + return fs.applyRecomputeLatest(ctx, m) + default: return fmt.Errorf("unknown mutation type %v", m.Type) } } +// applyRecomputeLatest re-derives the pointer entry (m.Directory/m.Name) from the +// current contents of recompute.scan_dir, under the transaction's lock. It is +// mechanical: pick the child that sorts last (descending) or first by name, copy +// the mapped extended keys from it into the pointer, and store its name under +// name_to_key. When the scanned directory is empty the pointer keys are cleared. +// The caller, which knows the versioning scheme, supplies the direction and the +// key mappings. A missing pointer entry is a no-op (idempotent on replay). +func (fs *FilerServer) applyRecomputeLatest(ctx context.Context, m *filer_pb.ObjectMutation) error { + rc := m.Recompute + if rc == nil { + return fmt.Errorf("RECOMPUTE_LATEST requires recompute parameters") + } + + pointer, err := fs.filer.FindEntry(ctx, util.NewFullPath(m.Directory, m.Name)) + if err == filer_pb.ErrNotFound { + return nil + } + if err != nil { + return err + } + if pointer.Extended == nil { + pointer.Extended = make(map[string][]byte) + } + + // The store streams entries ascending by name. For the lowest-name pick we + // only need the first entry, so cap the listing at one; for the highest-name + // pick we must scan all and keep the last (the store has no reverse order). + limit := int64(math.MaxInt32) + if !rc.Descending { + limit = 1 + } + var chosen *filer.Entry + _, listErr := fs.filer.StreamListDirectoryEntries(ctx, util.FullPath(rc.ScanDir), "", false, limit, "", "", "", func(entry *filer.Entry) (bool, error) { + chosen = entry + return rc.Descending, nil + }) + if listErr != nil { + return listErr + } + + if chosen == nil { + for pointerKey := range rc.CopyExtended { + delete(pointer.Extended, pointerKey) + } + if rc.NameToKey != "" { + delete(pointer.Extended, rc.NameToKey) + } + } else { + for pointerKey, sourceKey := range rc.CopyExtended { + if v, ok := chosen.Extended[sourceKey]; ok { + pointer.Extended[pointerKey] = v + } else { + delete(pointer.Extended, pointerKey) + } + } + if rc.NameToKey != "" { + pointer.Extended[rc.NameToKey] = []byte(chosen.Name()) + } + } + + return fs.filer.UpdateEntry(ctx, pointer, pointer) +} + func (fs *FilerServer) UpdateEntry(ctx context.Context, req *filer_pb.UpdateEntryRequest) (*filer_pb.UpdateEntryResponse, error) { glog.V(4).InfofCtx(ctx, "UpdateEntry %v", req) diff --git a/weed/server/filer_grpc_server_object_txn_test.go b/weed/server/filer_grpc_server_object_txn_test.go index aceda84c4..1fcc14696 100644 --- a/weed/server/filer_grpc_server_object_txn_test.go +++ b/weed/server/filer_grpc_server_object_txn_test.go @@ -143,6 +143,109 @@ func TestObjectTransactionPreconditionAborts(t *testing.T) { } } +// Deleting the latest version and recomputing re-points the pointer at the new +// highest-named remaining version; the scan runs under the transaction lock. +func TestObjectTransactionRecomputeLatest(t *testing.T) { + now := time.Unix(1700000000, 0) + ver := func(id string) *filer.Entry { + return &filer.Entry{ + Attr: filer.Attr{Inode: 10, Mtime: now, Crtime: now, Mode: 0644}, + Extended: map[string][]byte{"vid": []byte(id), "etag": []byte("etag-" + id)}, + } + } + fs, store := newTxnTestServer(map[string]*filer.Entry{ + "/buckets/b/obj/.versions": { + Attr: filer.Attr{Inode: 2, Mtime: now, Crtime: now, Mode: 0755 | (1 << 31)}, + Extended: map[string][]byte{ + "latestVid": []byte("v3"), "latestEtag": []byte("etag-v3"), "latestName": []byte("v3.ver"), + }, + }, + "/buckets/b/obj/.versions/v1.ver": ver("v1"), + "/buckets/b/obj/.versions/v2.ver": ver("v2"), + "/buckets/b/obj/.versions/v3.ver": ver("v3"), + }) + + recompute := func() *filer_pb.ObjectMutation { + return &filer_pb.ObjectMutation{ + Type: filer_pb.ObjectMutation_RECOMPUTE_LATEST, Directory: "/buckets/b/obj", Name: ".versions", + Recompute: &filer_pb.Recompute{ + ScanDir: "/buckets/b/obj/.versions", + Descending: true, + CopyExtended: map[string]string{"latestVid": "vid", "latestEtag": "etag"}, + NameToKey: "latestName", + }, + } + } + + // Delete the latest (v3); recompute should pick v2. + resp, err := fs.ObjectTransaction(context.Background(), &filer_pb.ObjectTransactionRequest{ + LockKey: "/buckets/b/obj", + Mutations: []*filer_pb.ObjectMutation{ + {Type: filer_pb.ObjectMutation_DELETE, Directory: "/buckets/b/obj/.versions", Name: "v3.ver"}, + recompute(), + }, + }) + if err != nil || resp.Error != "" { + t.Fatalf("txn failed: err=%v resp=%q", err, resp.Error) + } + ptr := store.entries["/buckets/b/obj/.versions"].Extended + if string(ptr["latestVid"]) != "v2" || string(ptr["latestEtag"]) != "etag-v2" || string(ptr["latestName"]) != "v2.ver" { + t.Fatalf("after deleting v3, pointer = vid:%s etag:%s name:%s; want v2", + ptr["latestVid"], ptr["latestEtag"], ptr["latestName"]) + } + + // Delete the remaining versions; recompute on an empty dir clears the pointer. + resp, err = fs.ObjectTransaction(context.Background(), &filer_pb.ObjectTransactionRequest{ + LockKey: "/buckets/b/obj", + Mutations: []*filer_pb.ObjectMutation{ + {Type: filer_pb.ObjectMutation_DELETE, Directory: "/buckets/b/obj/.versions", Name: "v2.ver"}, + {Type: filer_pb.ObjectMutation_DELETE, Directory: "/buckets/b/obj/.versions", Name: "v1.ver"}, + recompute(), + }, + }) + if err != nil || resp.Error != "" { + t.Fatalf("txn failed: err=%v resp=%q", err, resp.Error) + } + ptr = store.entries["/buckets/b/obj/.versions"].Extended + for _, k := range []string{"latestVid", "latestEtag", "latestName"} { + if _, ok := ptr[k]; ok { + t.Errorf("pointer key %q should be cleared when no versions remain", k) + } + } +} + +// With descending=false the lowest-named child is chosen (the listing is capped +// at one entry). +func TestObjectTransactionRecomputeAscending(t *testing.T) { + now := time.Unix(1700000000, 0) + ver := func(id string) *filer.Entry { + return &filer.Entry{Attr: filer.Attr{Inode: 10, Mtime: now, Crtime: now, Mode: 0644}, Extended: map[string][]byte{"vid": []byte(id)}} + } + fs, store := newTxnTestServer(map[string]*filer.Entry{ + "/buckets/b/obj/.versions": {Attr: filer.Attr{Inode: 2, Mtime: now, Crtime: now, Mode: 0755 | (1 << 31)}, Extended: map[string][]byte{}}, + "/buckets/b/obj/.versions/v1.ver": ver("v1"), + "/buckets/b/obj/.versions/v2.ver": ver("v2"), + }) + + resp, err := fs.ObjectTransaction(context.Background(), &filer_pb.ObjectTransactionRequest{ + LockKey: "/buckets/b/obj", + Mutations: []*filer_pb.ObjectMutation{ + {Type: filer_pb.ObjectMutation_RECOMPUTE_LATEST, Directory: "/buckets/b/obj", Name: ".versions", + Recompute: &filer_pb.Recompute{ + ScanDir: "/buckets/b/obj/.versions", + Descending: false, + CopyExtended: map[string]string{"latestVid": "vid"}, + }}, + }, + }) + if err != nil || resp.Error != "" { + t.Fatalf("txn failed: err=%v resp=%q", err, resp.Error) + } + if got := string(store.entries["/buckets/b/obj/.versions"].Extended["latestVid"]); got != "v1" { + t.Fatalf("ascending recompute latestVid = %q, want v1 (lowest)", got) + } +} + // DELETE and PATCH of an absent entry are no-ops, so a replayed transaction // does not error. func TestObjectTransactionIdempotentNoops(t *testing.T) {