From a2ba99a640ee8d1b45cee637c562184a42d86fbb Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Fri, 14 Jan 2022 10:42:34 +0100 Subject: [PATCH 01/55] Add option in eosclient to set an attr only if it does not exist --- pkg/eosclient/eosbinary/eosbinary.go | 8 ++++---- pkg/eosclient/eosclient.go | 2 +- pkg/eosclient/eosgrpc/eosgrpc.go | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/eosclient/eosbinary/eosbinary.go b/pkg/eosclient/eosbinary/eosbinary.go index 0da98de2d6..10667e6ab3 100644 --- a/pkg/eosclient/eosbinary/eosbinary.go +++ b/pkg/eosclient/eosbinary/eosbinary.go @@ -316,7 +316,7 @@ func (c *Client) AddACL(ctx context.Context, auth, rootAuth eosclient.Authorizat Key: lwShareAttrKey, Val: sysACL, } - if err = c.SetAttr(ctx, auth, sysACLAttr, finfo.IsDir, path); err != nil { + if err = c.SetAttr(ctx, auth, sysACLAttr, false, finfo.IsDir, path); err != nil { return err } return nil @@ -334,7 +334,7 @@ func (c *Client) AddACL(ctx context.Context, auth, rootAuth eosclient.Authorizat Key: userACLEvalKey, Val: "1", } - if err = c.SetAttr(ctx, auth, userACLAttr, false, path); err != nil { + if err = c.SetAttr(ctx, auth, userACLAttr, false, false, path); err != nil { return err } } @@ -380,7 +380,7 @@ func (c *Client) RemoveACL(ctx context.Context, auth, rootAuth eosclient.Authori Key: lwShareAttrKey, Val: sysACL, } - if err = c.SetAttr(ctx, auth, sysACLAttr, finfo.IsDir, path); err != nil { + if err = c.SetAttr(ctx, auth, sysACLAttr, false, finfo.IsDir, path); err != nil { return err } return nil @@ -516,7 +516,7 @@ func (c *Client) mergeParentACLsForFiles(ctx context.Context, auth eosclient.Aut } // SetAttr sets an extended attributes on a path. -func (c *Client) SetAttr(ctx context.Context, auth eosclient.Authorization, attr *eosclient.Attribute, recursive bool, path string) error { +func (c *Client) SetAttr(ctx context.Context, auth eosclient.Authorization, attr *eosclient.Attribute, errorIfExists, recursive bool, path string) error { if !isValidAttribute(attr) { return errors.New("eos: attr is invalid: " + serializeAttribute(attr)) } diff --git a/pkg/eosclient/eosclient.go b/pkg/eosclient/eosclient.go index 5e52854c78..2772e6c6ad 100644 --- a/pkg/eosclient/eosclient.go +++ b/pkg/eosclient/eosclient.go @@ -35,7 +35,7 @@ type EOSClient interface { GetFileInfoByInode(ctx context.Context, auth Authorization, inode uint64) (*FileInfo, error) GetFileInfoByFXID(ctx context.Context, auth Authorization, fxid string) (*FileInfo, error) GetFileInfoByPath(ctx context.Context, auth Authorization, path string) (*FileInfo, error) - SetAttr(ctx context.Context, auth Authorization, attr *Attribute, recursive bool, path string) error + SetAttr(ctx context.Context, auth Authorization, attr *Attribute, errorIfExists, recursive bool, path string) error UnsetAttr(ctx context.Context, auth Authorization, attr *Attribute, recursive bool, path string) error GetAttr(ctx context.Context, auth Authorization, key, path string) (*Attribute, error) GetQuota(ctx context.Context, username string, rootAuth Authorization, path string) (*QuotaInfo, error) diff --git a/pkg/eosclient/eosgrpc/eosgrpc.go b/pkg/eosclient/eosgrpc/eosgrpc.go index 8cd4c62b6a..4b0ea59208 100644 --- a/pkg/eosclient/eosgrpc/eosgrpc.go +++ b/pkg/eosclient/eosgrpc/eosgrpc.go @@ -530,7 +530,7 @@ func (c *Client) fixupACLs(ctx context.Context, auth eosclient.Authorization, in } // SetAttr sets an extended attributes on a path. -func (c *Client) SetAttr(ctx context.Context, auth eosclient.Authorization, attr *eosclient.Attribute, recursive bool, path string) error { +func (c *Client) SetAttr(ctx context.Context, auth eosclient.Authorization, attr *eosclient.Attribute, errorIfExists, recursive bool, path string) error { log := appctx.GetLogger(ctx) log.Info().Str("func", "SetAttr").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("path", path).Msg("") From 7ee4f9f993909025e68671c1b624f13e2e81afa5 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Fri, 28 Jan 2022 15:16:34 +0100 Subject: [PATCH 02/55] Add error when an attribute is already set on a resource --- pkg/eosclient/eosclient.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkg/eosclient/eosclient.go b/pkg/eosclient/eosclient.go index 2772e6c6ad..9fed49caa7 100644 --- a/pkg/eosclient/eosclient.go +++ b/pkg/eosclient/eosclient.go @@ -22,6 +22,7 @@ import ( "context" "io" + "github.com/cs3org/reva/pkg/errtypes" "github.com/cs3org/reva/pkg/storage/utils/acl" ) @@ -139,3 +140,7 @@ type Authorization struct { Role Role Token string } + +// AttrAlreadyExistsError is the error raised when setting +// an already existing attr on a resource +const AttrAlreadyExistsError = errtypes.BadRequest("attr already exists") From ba61ccd1974eca267ebd900e1e8099b85bde28af Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Fri, 28 Jan 2022 17:27:12 +0100 Subject: [PATCH 03/55] Add error when trying to remove an attribute that does not exist --- pkg/eosclient/eosbinary/eosbinary.go | 4 ++++ pkg/eosclient/eosclient.go | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/pkg/eosclient/eosbinary/eosbinary.go b/pkg/eosclient/eosbinary/eosbinary.go index 10667e6ab3..2f0bd6aa83 100644 --- a/pkg/eosclient/eosbinary/eosbinary.go +++ b/pkg/eosclient/eosbinary/eosbinary.go @@ -547,6 +547,10 @@ func (c *Client) UnsetAttr(ctx context.Context, auth eosclient.Authorization, at } _, _, err := c.executeEOS(ctx, args, auth) if err != nil { + var exErr *exec.ExitError + if errors.As(err, &exErr) && exErr.ExitCode() == 61 { + return eosclient.AttrNotExistsError + } return err } return nil diff --git a/pkg/eosclient/eosclient.go b/pkg/eosclient/eosclient.go index 9fed49caa7..b62c413458 100644 --- a/pkg/eosclient/eosclient.go +++ b/pkg/eosclient/eosclient.go @@ -144,3 +144,7 @@ type Authorization struct { // AttrAlreadyExistsError is the error raised when setting // an already existing attr on a resource const AttrAlreadyExistsError = errtypes.BadRequest("attr already exists") + +// AttrNotExistsError is the error raised when removing +// an attribute that does not exist +const AttrNotExistsError = errtypes.BadRequest("attr not exists") From 54905702984dd341999911179bdb0cc6fcbf1178 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Fri, 28 Jan 2022 15:16:46 +0100 Subject: [PATCH 04/55] eosbinary: add option to set the attr only if it does not exist --- pkg/eosclient/eosbinary/eosbinary.go | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/pkg/eosclient/eosbinary/eosbinary.go b/pkg/eosclient/eosbinary/eosbinary.go index 2f0bd6aa83..2e8735cec0 100644 --- a/pkg/eosclient/eosbinary/eosbinary.go +++ b/pkg/eosclient/eosbinary/eosbinary.go @@ -520,15 +520,23 @@ func (c *Client) SetAttr(ctx context.Context, auth eosclient.Authorization, attr if !isValidAttribute(attr) { return errors.New("eos: attr is invalid: " + serializeAttribute(attr)) } - var args []string + + args := []string{"attr"} if recursive { - args = []string{"attr", "-r", "set", serializeAttribute(attr), path} - } else { - args = []string{"attr", "set", serializeAttribute(attr), path} + args = append(args, "-r") } + args = append(args, "set") + if errorIfExists { + args = append(args, "-c") + } + args = append(args, serializeAttribute(attr), path) _, _, err := c.executeEOS(ctx, args, auth) if err != nil { + var exErr *exec.ExitError + if errors.As(err, &exErr) && exErr.ExitCode() == 17 { + return eosclient.AttrAlreadyExistsError + } return err } return nil From e8dc1f80c7b2dddbe082fac4ec2b035222b2f6b2 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Fri, 14 Jan 2022 16:23:10 +0100 Subject: [PATCH 05/55] eosgrpc: update protobuf definition --- pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go | 8148 +++++++++++------ pkg/eosclient/eosgrpc/eos_grpc/Rpc.proto | 59 + pkg/eosclient/eosgrpc/eos_grpc/Rpc_grpc.pb.go | 444 + 3 files changed, 5641 insertions(+), 3010 deletions(-) create mode 100644 pkg/eosclient/eosgrpc/eos_grpc/Rpc_grpc.pb.go diff --git a/pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go b/pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go index 0721bf89b3..4cc0dbff90 100644 --- a/pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go +++ b/pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go @@ -16,32 +16,46 @@ // granted to it by virtue of its status as an Intergovernmental Organization // or submit itself to any jurisdiction. +// @project The CERN Tape Archive (CTA) +// @brief CTA-EOS gRPC API for CASTOR-EOS migration +// @copyright Copyright 2019 CERN +// @license This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +// NOTE: Compile for Go with: +// protoc ./eos_grpc.proto --go_out=plugins=grpc:. + // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.19.1 // source: Rpc.proto package eos_grpc import ( - context "context" - fmt "fmt" - math "math" - - proto "github.com/golang/protobuf/proto" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) type TYPE int32 @@ -52,26 +66,47 @@ const ( TYPE_STAT TYPE = 3 ) -var TYPE_name = map[int32]string{ - 0: "FILE", - 1: "CONTAINER", - 2: "LISTING", - 3: "STAT", -} +// Enum value maps for TYPE. +var ( + TYPE_name = map[int32]string{ + 0: "FILE", + 1: "CONTAINER", + 2: "LISTING", + 3: "STAT", + } + TYPE_value = map[string]int32{ + "FILE": 0, + "CONTAINER": 1, + "LISTING": 2, + "STAT": 3, + } +) -var TYPE_value = map[string]int32{ - "FILE": 0, - "CONTAINER": 1, - "LISTING": 2, - "STAT": 3, +func (x TYPE) Enum() *TYPE { + p := new(TYPE) + *p = x + return p } func (x TYPE) String() string { - return proto.EnumName(TYPE_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (TYPE) Descriptor() protoreflect.EnumDescriptor { + return file_Rpc_proto_enumTypes[0].Descriptor() +} + +func (TYPE) Type() protoreflect.EnumType { + return &file_Rpc_proto_enumTypes[0] +} + +func (x TYPE) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use TYPE.Descriptor instead. func (TYPE) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{0} + return file_Rpc_proto_rawDescGZIP(), []int{0} } type QUOTATYPE int32 @@ -82,24 +117,45 @@ const ( QUOTATYPE_PROJECT QUOTATYPE = 3 ) -var QUOTATYPE_name = map[int32]string{ - 0: "USER", - 2: "GROUP", - 3: "PROJECT", -} +// Enum value maps for QUOTATYPE. +var ( + QUOTATYPE_name = map[int32]string{ + 0: "USER", + 2: "GROUP", + 3: "PROJECT", + } + QUOTATYPE_value = map[string]int32{ + "USER": 0, + "GROUP": 2, + "PROJECT": 3, + } +) -var QUOTATYPE_value = map[string]int32{ - "USER": 0, - "GROUP": 2, - "PROJECT": 3, +func (x QUOTATYPE) Enum() *QUOTATYPE { + p := new(QUOTATYPE) + *p = x + return p } func (x QUOTATYPE) String() string { - return proto.EnumName(QUOTATYPE_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (QUOTATYPE) Descriptor() protoreflect.EnumDescriptor { + return file_Rpc_proto_enumTypes[1].Descriptor() +} + +func (QUOTATYPE) Type() protoreflect.EnumType { + return &file_Rpc_proto_enumTypes[1] +} + +func (x QUOTATYPE) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use QUOTATYPE.Descriptor instead. func (QUOTATYPE) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{1} + return file_Rpc_proto_rawDescGZIP(), []int{1} } type QUOTAOP int32 @@ -111,26 +167,47 @@ const ( QUOTAOP_RMNODE QUOTAOP = 3 ) -var QUOTAOP_name = map[int32]string{ - 0: "GET", - 1: "SET", - 2: "RM", - 3: "RMNODE", -} +// Enum value maps for QUOTAOP. +var ( + QUOTAOP_name = map[int32]string{ + 0: "GET", + 1: "SET", + 2: "RM", + 3: "RMNODE", + } + QUOTAOP_value = map[string]int32{ + "GET": 0, + "SET": 1, + "RM": 2, + "RMNODE": 3, + } +) -var QUOTAOP_value = map[string]int32{ - "GET": 0, - "SET": 1, - "RM": 2, - "RMNODE": 3, +func (x QUOTAOP) Enum() *QUOTAOP { + p := new(QUOTAOP) + *p = x + return p } func (x QUOTAOP) String() string { - return proto.EnumName(QUOTAOP_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (QUOTAOP) Descriptor() protoreflect.EnumDescriptor { + return file_Rpc_proto_enumTypes[2].Descriptor() +} + +func (QUOTAOP) Type() protoreflect.EnumType { + return &file_Rpc_proto_enumTypes[2] +} + +func (x QUOTAOP) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use QUOTAOP.Descriptor instead. func (QUOTAOP) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{2} + return file_Rpc_proto_rawDescGZIP(), []int{2} } type QUOTAENTRY int32 @@ -141,24 +218,45 @@ const ( QUOTAENTRY_INODE QUOTAENTRY = 2 ) -var QUOTAENTRY_name = map[int32]string{ - 0: "NONE", - 1: "VOLUME", - 2: "INODE", -} +// Enum value maps for QUOTAENTRY. +var ( + QUOTAENTRY_name = map[int32]string{ + 0: "NONE", + 1: "VOLUME", + 2: "INODE", + } + QUOTAENTRY_value = map[string]int32{ + "NONE": 0, + "VOLUME": 1, + "INODE": 2, + } +) -var QUOTAENTRY_value = map[string]int32{ - "NONE": 0, - "VOLUME": 1, - "INODE": 2, +func (x QUOTAENTRY) Enum() *QUOTAENTRY { + p := new(QUOTAENTRY) + *p = x + return p } func (x QUOTAENTRY) String() string { - return proto.EnumName(QUOTAENTRY_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (QUOTAENTRY) Descriptor() protoreflect.EnumDescriptor { + return file_Rpc_proto_enumTypes[3].Descriptor() +} + +func (QUOTAENTRY) Type() protoreflect.EnumType { + return &file_Rpc_proto_enumTypes[3] +} + +func (x QUOTAENTRY) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use QUOTAENTRY.Descriptor instead. func (QUOTAENTRY) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{3} + return file_Rpc_proto_rawDescGZIP(), []int{3} } type MANILA_REQUEST_TYPE int32 @@ -170,35 +268,56 @@ const ( MANILA_REQUEST_TYPE_SHRINK_SHARE MANILA_REQUEST_TYPE = 3 MANILA_REQUEST_TYPE_MANAGE_EXISTING MANILA_REQUEST_TYPE = 4 MANILA_REQUEST_TYPE_UNMANAGE MANILA_REQUEST_TYPE = 5 - MANILA_REQUEST_TYPE_GET_CAPACITIES MANILA_REQUEST_TYPE = 6 + MANILA_REQUEST_TYPE_GET_CAPACITIES MANILA_REQUEST_TYPE = 6 // EXTRA FUNCTIONS NOT IMPLEMENTED ) -var MANILA_REQUEST_TYPE_name = map[int32]string{ - 0: "CREATE_SHARE", - 1: "DELETE_SHARE", - 2: "EXTEND_SHARE", - 3: "SHRINK_SHARE", - 4: "MANAGE_EXISTING", - 5: "UNMANAGE", - 6: "GET_CAPACITIES", -} +// Enum value maps for MANILA_REQUEST_TYPE. +var ( + MANILA_REQUEST_TYPE_name = map[int32]string{ + 0: "CREATE_SHARE", + 1: "DELETE_SHARE", + 2: "EXTEND_SHARE", + 3: "SHRINK_SHARE", + 4: "MANAGE_EXISTING", + 5: "UNMANAGE", + 6: "GET_CAPACITIES", + } + MANILA_REQUEST_TYPE_value = map[string]int32{ + "CREATE_SHARE": 0, + "DELETE_SHARE": 1, + "EXTEND_SHARE": 2, + "SHRINK_SHARE": 3, + "MANAGE_EXISTING": 4, + "UNMANAGE": 5, + "GET_CAPACITIES": 6, + } +) -var MANILA_REQUEST_TYPE_value = map[string]int32{ - "CREATE_SHARE": 0, - "DELETE_SHARE": 1, - "EXTEND_SHARE": 2, - "SHRINK_SHARE": 3, - "MANAGE_EXISTING": 4, - "UNMANAGE": 5, - "GET_CAPACITIES": 6, +func (x MANILA_REQUEST_TYPE) Enum() *MANILA_REQUEST_TYPE { + p := new(MANILA_REQUEST_TYPE) + *p = x + return p } func (x MANILA_REQUEST_TYPE) String() string { - return proto.EnumName(MANILA_REQUEST_TYPE_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (MANILA_REQUEST_TYPE) Descriptor() protoreflect.EnumDescriptor { + return file_Rpc_proto_enumTypes[4].Descriptor() +} + +func (MANILA_REQUEST_TYPE) Type() protoreflect.EnumType { + return &file_Rpc_proto_enumTypes[4] +} + +func (x MANILA_REQUEST_TYPE) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use MANILA_REQUEST_TYPE.Descriptor instead. func (MANILA_REQUEST_TYPE) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{4} + return file_Rpc_proto_rawDescGZIP(), []int{4} } type NSRequest_VersionRequest_VERSION_CMD int32 @@ -210,26 +329,47 @@ const ( NSRequest_VersionRequest_GRAB NSRequest_VersionRequest_VERSION_CMD = 3 ) -var NSRequest_VersionRequest_VERSION_CMD_name = map[int32]string{ - 0: "CREATE", - 1: "PURGE", - 2: "LIST", - 3: "GRAB", -} +// Enum value maps for NSRequest_VersionRequest_VERSION_CMD. +var ( + NSRequest_VersionRequest_VERSION_CMD_name = map[int32]string{ + 0: "CREATE", + 1: "PURGE", + 2: "LIST", + 3: "GRAB", + } + NSRequest_VersionRequest_VERSION_CMD_value = map[string]int32{ + "CREATE": 0, + "PURGE": 1, + "LIST": 2, + "GRAB": 3, + } +) -var NSRequest_VersionRequest_VERSION_CMD_value = map[string]int32{ - "CREATE": 0, - "PURGE": 1, - "LIST": 2, - "GRAB": 3, +func (x NSRequest_VersionRequest_VERSION_CMD) Enum() *NSRequest_VersionRequest_VERSION_CMD { + p := new(NSRequest_VersionRequest_VERSION_CMD) + *p = x + return p } func (x NSRequest_VersionRequest_VERSION_CMD) String() string { - return proto.EnumName(NSRequest_VersionRequest_VERSION_CMD_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (NSRequest_VersionRequest_VERSION_CMD) Descriptor() protoreflect.EnumDescriptor { + return file_Rpc_proto_enumTypes[5].Descriptor() +} + +func (NSRequest_VersionRequest_VERSION_CMD) Type() protoreflect.EnumType { + return &file_Rpc_proto_enumTypes[5] } +func (x NSRequest_VersionRequest_VERSION_CMD) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use NSRequest_VersionRequest_VERSION_CMD.Descriptor instead. func (NSRequest_VersionRequest_VERSION_CMD) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 7, 0} + return file_Rpc_proto_rawDescGZIP(), []int{20, 7, 0} } type NSRequest_RecycleRequest_RECYCLE_CMD int32 @@ -240,24 +380,45 @@ const ( NSRequest_RecycleRequest_LIST NSRequest_RecycleRequest_RECYCLE_CMD = 2 ) -var NSRequest_RecycleRequest_RECYCLE_CMD_name = map[int32]string{ - 0: "RESTORE", - 1: "PURGE", - 2: "LIST", -} +// Enum value maps for NSRequest_RecycleRequest_RECYCLE_CMD. +var ( + NSRequest_RecycleRequest_RECYCLE_CMD_name = map[int32]string{ + 0: "RESTORE", + 1: "PURGE", + 2: "LIST", + } + NSRequest_RecycleRequest_RECYCLE_CMD_value = map[string]int32{ + "RESTORE": 0, + "PURGE": 1, + "LIST": 2, + } +) -var NSRequest_RecycleRequest_RECYCLE_CMD_value = map[string]int32{ - "RESTORE": 0, - "PURGE": 1, - "LIST": 2, +func (x NSRequest_RecycleRequest_RECYCLE_CMD) Enum() *NSRequest_RecycleRequest_RECYCLE_CMD { + p := new(NSRequest_RecycleRequest_RECYCLE_CMD) + *p = x + return p } func (x NSRequest_RecycleRequest_RECYCLE_CMD) String() string { - return proto.EnumName(NSRequest_RecycleRequest_RECYCLE_CMD_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (NSRequest_RecycleRequest_RECYCLE_CMD) Descriptor() protoreflect.EnumDescriptor { + return file_Rpc_proto_enumTypes[6].Descriptor() } +func (NSRequest_RecycleRequest_RECYCLE_CMD) Type() protoreflect.EnumType { + return &file_Rpc_proto_enumTypes[6] +} + +func (x NSRequest_RecycleRequest_RECYCLE_CMD) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use NSRequest_RecycleRequest_RECYCLE_CMD.Descriptor instead. func (NSRequest_RecycleRequest_RECYCLE_CMD) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 8, 0} + return file_Rpc_proto_rawDescGZIP(), []int{20, 8, 0} } type NSRequest_AclRequest_ACL_COMMAND int32 @@ -268,24 +429,45 @@ const ( NSRequest_AclRequest_LIST NSRequest_AclRequest_ACL_COMMAND = 2 ) -var NSRequest_AclRequest_ACL_COMMAND_name = map[int32]string{ - 0: "NONE", - 1: "MODIFY", - 2: "LIST", -} +// Enum value maps for NSRequest_AclRequest_ACL_COMMAND. +var ( + NSRequest_AclRequest_ACL_COMMAND_name = map[int32]string{ + 0: "NONE", + 1: "MODIFY", + 2: "LIST", + } + NSRequest_AclRequest_ACL_COMMAND_value = map[string]int32{ + "NONE": 0, + "MODIFY": 1, + "LIST": 2, + } +) -var NSRequest_AclRequest_ACL_COMMAND_value = map[string]int32{ - "NONE": 0, - "MODIFY": 1, - "LIST": 2, +func (x NSRequest_AclRequest_ACL_COMMAND) Enum() *NSRequest_AclRequest_ACL_COMMAND { + p := new(NSRequest_AclRequest_ACL_COMMAND) + *p = x + return p } func (x NSRequest_AclRequest_ACL_COMMAND) String() string { - return proto.EnumName(NSRequest_AclRequest_ACL_COMMAND_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } +func (NSRequest_AclRequest_ACL_COMMAND) Descriptor() protoreflect.EnumDescriptor { + return file_Rpc_proto_enumTypes[7].Descriptor() +} + +func (NSRequest_AclRequest_ACL_COMMAND) Type() protoreflect.EnumType { + return &file_Rpc_proto_enumTypes[7] +} + +func (x NSRequest_AclRequest_ACL_COMMAND) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use NSRequest_AclRequest_ACL_COMMAND.Descriptor instead. func (NSRequest_AclRequest_ACL_COMMAND) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 12, 0} + return file_Rpc_proto_rawDescGZIP(), []int{20, 12, 0} } type NSRequest_AclRequest_ACL_TYPE int32 @@ -295,22 +477,153 @@ const ( NSRequest_AclRequest_SYS_ACL NSRequest_AclRequest_ACL_TYPE = 1 ) -var NSRequest_AclRequest_ACL_TYPE_name = map[int32]string{ - 0: "USER_ACL", - 1: "SYS_ACL", -} +// Enum value maps for NSRequest_AclRequest_ACL_TYPE. +var ( + NSRequest_AclRequest_ACL_TYPE_name = map[int32]string{ + 0: "USER_ACL", + 1: "SYS_ACL", + } + NSRequest_AclRequest_ACL_TYPE_value = map[string]int32{ + "USER_ACL": 0, + "SYS_ACL": 1, + } +) -var NSRequest_AclRequest_ACL_TYPE_value = map[string]int32{ - "USER_ACL": 0, - "SYS_ACL": 1, +func (x NSRequest_AclRequest_ACL_TYPE) Enum() *NSRequest_AclRequest_ACL_TYPE { + p := new(NSRequest_AclRequest_ACL_TYPE) + *p = x + return p } func (x NSRequest_AclRequest_ACL_TYPE) String() string { - return proto.EnumName(NSRequest_AclRequest_ACL_TYPE_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (NSRequest_AclRequest_ACL_TYPE) Descriptor() protoreflect.EnumDescriptor { + return file_Rpc_proto_enumTypes[8].Descriptor() +} + +func (NSRequest_AclRequest_ACL_TYPE) Type() protoreflect.EnumType { + return &file_Rpc_proto_enumTypes[8] +} + +func (x NSRequest_AclRequest_ACL_TYPE) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use NSRequest_AclRequest_ACL_TYPE.Descriptor instead. func (NSRequest_AclRequest_ACL_TYPE) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 12, 1} + return file_Rpc_proto_rawDescGZIP(), []int{20, 12, 1} +} + +type NSRequest_ShareRequest_LsShare_OutFormat int32 + +const ( + NSRequest_ShareRequest_LsShare_NONE NSRequest_ShareRequest_LsShare_OutFormat = 0 // + NSRequest_ShareRequest_LsShare_MONITORING NSRequest_ShareRequest_LsShare_OutFormat = 1 // [-m] + NSRequest_ShareRequest_LsShare_LISTING NSRequest_ShareRequest_LsShare_OutFormat = 2 // [-l] + NSRequest_ShareRequest_LsShare_JSON NSRequest_ShareRequest_LsShare_OutFormat = 3 // [grpc] +) + +// Enum value maps for NSRequest_ShareRequest_LsShare_OutFormat. +var ( + NSRequest_ShareRequest_LsShare_OutFormat_name = map[int32]string{ + 0: "NONE", + 1: "MONITORING", + 2: "LISTING", + 3: "JSON", + } + NSRequest_ShareRequest_LsShare_OutFormat_value = map[string]int32{ + "NONE": 0, + "MONITORING": 1, + "LISTING": 2, + "JSON": 3, + } +) + +func (x NSRequest_ShareRequest_LsShare_OutFormat) Enum() *NSRequest_ShareRequest_LsShare_OutFormat { + p := new(NSRequest_ShareRequest_LsShare_OutFormat) + *p = x + return p +} + +func (x NSRequest_ShareRequest_LsShare_OutFormat) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (NSRequest_ShareRequest_LsShare_OutFormat) Descriptor() protoreflect.EnumDescriptor { + return file_Rpc_proto_enumTypes[9].Descriptor() +} + +func (NSRequest_ShareRequest_LsShare_OutFormat) Type() protoreflect.EnumType { + return &file_Rpc_proto_enumTypes[9] +} + +func (x NSRequest_ShareRequest_LsShare_OutFormat) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use NSRequest_ShareRequest_LsShare_OutFormat.Descriptor instead. +func (NSRequest_ShareRequest_LsShare_OutFormat) EnumDescriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 15, 0, 0} +} + +type NSRequest_ShareRequest_OperateShare_Op int32 + +const ( + NSRequest_ShareRequest_OperateShare_CREATE NSRequest_ShareRequest_OperateShare_Op = 0 + NSRequest_ShareRequest_OperateShare_REMOVE NSRequest_ShareRequest_OperateShare_Op = 1 + NSRequest_ShareRequest_OperateShare_SHARE NSRequest_ShareRequest_OperateShare_Op = 2 + NSRequest_ShareRequest_OperateShare_UNSHARE NSRequest_ShareRequest_OperateShare_Op = 3 + NSRequest_ShareRequest_OperateShare_ACCESS NSRequest_ShareRequest_OperateShare_Op = 4 + NSRequest_ShareRequest_OperateShare_MODIFY NSRequest_ShareRequest_OperateShare_Op = 5 +) + +// Enum value maps for NSRequest_ShareRequest_OperateShare_Op. +var ( + NSRequest_ShareRequest_OperateShare_Op_name = map[int32]string{ + 0: "CREATE", + 1: "REMOVE", + 2: "SHARE", + 3: "UNSHARE", + 4: "ACCESS", + 5: "MODIFY", + } + NSRequest_ShareRequest_OperateShare_Op_value = map[string]int32{ + "CREATE": 0, + "REMOVE": 1, + "SHARE": 2, + "UNSHARE": 3, + "ACCESS": 4, + "MODIFY": 5, + } +) + +func (x NSRequest_ShareRequest_OperateShare_Op) Enum() *NSRequest_ShareRequest_OperateShare_Op { + p := new(NSRequest_ShareRequest_OperateShare_Op) + *p = x + return p +} + +func (x NSRequest_ShareRequest_OperateShare_Op) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (NSRequest_ShareRequest_OperateShare_Op) Descriptor() protoreflect.EnumDescriptor { + return file_Rpc_proto_enumTypes[10].Descriptor() +} + +func (NSRequest_ShareRequest_OperateShare_Op) Type() protoreflect.EnumType { + return &file_Rpc_proto_enumTypes[10] +} + +func (x NSRequest_ShareRequest_OperateShare_Op) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use NSRequest_ShareRequest_OperateShare_Op.Descriptor instead. +func (NSRequest_ShareRequest_OperateShare_Op) EnumDescriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 15, 1, 0} } type NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE int32 @@ -320,1602 +633,1787 @@ const ( NSResponse_RecycleResponse_RecycleInfo_TREE NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE = 1 ) -var NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE_name = map[int32]string{ - 0: "FILE", - 1: "TREE", -} +// Enum value maps for NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE. +var ( + NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE_name = map[int32]string{ + 0: "FILE", + 1: "TREE", + } + NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE_value = map[string]int32{ + "FILE": 0, + "TREE": 1, + } +) -var NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE_value = map[string]int32{ - "FILE": 0, - "TREE": 1, +func (x NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE) Enum() *NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE { + p := new(NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE) + *p = x + return p } func (x NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE) String() string { - return proto.EnumName(NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{21, 2, 0, 0} +func (NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE) Descriptor() protoreflect.EnumDescriptor { + return file_Rpc_proto_enumTypes[11].Descriptor() } -type PingRequest struct { - Authkey string `protobuf:"bytes,1,opt,name=authkey,proto3" json:"authkey,omitempty"` - Message []byte `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE) Type() protoreflect.EnumType { + return &file_Rpc_proto_enumTypes[11] } -func (m *PingRequest) Reset() { *m = PingRequest{} } -func (m *PingRequest) String() string { return proto.CompactTextString(m) } -func (*PingRequest) ProtoMessage() {} -func (*PingRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{0} +func (x NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } -func (m *PingRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PingRequest.Unmarshal(m, b) +// Deprecated: Use NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE.Descriptor instead. +func (NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE) EnumDescriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{21, 2, 0, 0} } -func (m *PingRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PingRequest.Marshal(b, m, deterministic) + +type PingRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Authkey string `protobuf:"bytes,1,opt,name=authkey,proto3" json:"authkey,omitempty"` + Message []byte `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` } -func (m *PingRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_PingRequest.Merge(m, src) + +func (x *PingRequest) Reset() { + *x = PingRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *PingRequest) XXX_Size() int { - return xxx_messageInfo_PingRequest.Size(m) + +func (x *PingRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *PingRequest) XXX_DiscardUnknown() { - xxx_messageInfo_PingRequest.DiscardUnknown(m) + +func (*PingRequest) ProtoMessage() {} + +func (x *PingRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_PingRequest proto.InternalMessageInfo +// Deprecated: Use PingRequest.ProtoReflect.Descriptor instead. +func (*PingRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{0} +} -func (m *PingRequest) GetAuthkey() string { - if m != nil { - return m.Authkey +func (x *PingRequest) GetAuthkey() string { + if x != nil { + return x.Authkey } return "" } -func (m *PingRequest) GetMessage() []byte { - if m != nil { - return m.Message +func (x *PingRequest) GetMessage() []byte { + if x != nil { + return x.Message } return nil } type PingReply struct { - Message []byte `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *PingReply) Reset() { *m = PingReply{} } -func (m *PingReply) String() string { return proto.CompactTextString(m) } -func (*PingReply) ProtoMessage() {} -func (*PingReply) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{1} + Message []byte `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` } -func (m *PingReply) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PingReply.Unmarshal(m, b) -} -func (m *PingReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PingReply.Marshal(b, m, deterministic) -} -func (m *PingReply) XXX_Merge(src proto.Message) { - xxx_messageInfo_PingReply.Merge(m, src) +func (x *PingReply) Reset() { + *x = PingReply{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *PingReply) XXX_Size() int { - return xxx_messageInfo_PingReply.Size(m) + +func (x *PingReply) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *PingReply) XXX_DiscardUnknown() { - xxx_messageInfo_PingReply.DiscardUnknown(m) + +func (*PingReply) ProtoMessage() {} + +func (x *PingReply) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_PingReply proto.InternalMessageInfo +// Deprecated: Use PingReply.ProtoReflect.Descriptor instead. +func (*PingReply) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{1} +} -func (m *PingReply) GetMessage() []byte { - if m != nil { - return m.Message +func (x *PingReply) GetMessage() []byte { + if x != nil { + return x.Message } return nil } type ContainerInsertRequest struct { - Container []*ContainerMdProto `protobuf:"bytes,1,rep,name=container,proto3" json:"container,omitempty"` - Authkey string `protobuf:"bytes,2,opt,name=authkey,proto3" json:"authkey,omitempty"` - InheritMd bool `protobuf:"varint,3,opt,name=inherit_md,json=inheritMd,proto3" json:"inherit_md,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *ContainerInsertRequest) Reset() { *m = ContainerInsertRequest{} } -func (m *ContainerInsertRequest) String() string { return proto.CompactTextString(m) } -func (*ContainerInsertRequest) ProtoMessage() {} -func (*ContainerInsertRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{2} + Container []*ContainerMdProto `protobuf:"bytes,1,rep,name=container,proto3" json:"container,omitempty"` + Authkey string `protobuf:"bytes,2,opt,name=authkey,proto3" json:"authkey,omitempty"` + InheritMd bool `protobuf:"varint,3,opt,name=inherit_md,json=inheritMd,proto3" json:"inherit_md,omitempty"` } -func (m *ContainerInsertRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ContainerInsertRequest.Unmarshal(m, b) -} -func (m *ContainerInsertRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ContainerInsertRequest.Marshal(b, m, deterministic) -} -func (m *ContainerInsertRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ContainerInsertRequest.Merge(m, src) +func (x *ContainerInsertRequest) Reset() { + *x = ContainerInsertRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ContainerInsertRequest) XXX_Size() int { - return xxx_messageInfo_ContainerInsertRequest.Size(m) + +func (x *ContainerInsertRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ContainerInsertRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ContainerInsertRequest.DiscardUnknown(m) + +func (*ContainerInsertRequest) ProtoMessage() {} + +func (x *ContainerInsertRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ContainerInsertRequest proto.InternalMessageInfo +// Deprecated: Use ContainerInsertRequest.ProtoReflect.Descriptor instead. +func (*ContainerInsertRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{2} +} -func (m *ContainerInsertRequest) GetContainer() []*ContainerMdProto { - if m != nil { - return m.Container +func (x *ContainerInsertRequest) GetContainer() []*ContainerMdProto { + if x != nil { + return x.Container } return nil } -func (m *ContainerInsertRequest) GetAuthkey() string { - if m != nil { - return m.Authkey +func (x *ContainerInsertRequest) GetAuthkey() string { + if x != nil { + return x.Authkey } return "" } -func (m *ContainerInsertRequest) GetInheritMd() bool { - if m != nil { - return m.InheritMd +func (x *ContainerInsertRequest) GetInheritMd() bool { + if x != nil { + return x.InheritMd } return false } type FileInsertRequest struct { - Files []*FileMdProto `protobuf:"bytes,1,rep,name=files,proto3" json:"files,omitempty"` - Authkey string `protobuf:"bytes,2,opt,name=authkey,proto3" json:"authkey,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *FileInsertRequest) Reset() { *m = FileInsertRequest{} } -func (m *FileInsertRequest) String() string { return proto.CompactTextString(m) } -func (*FileInsertRequest) ProtoMessage() {} -func (*FileInsertRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{3} + Files []*FileMdProto `protobuf:"bytes,1,rep,name=files,proto3" json:"files,omitempty"` + Authkey string `protobuf:"bytes,2,opt,name=authkey,proto3" json:"authkey,omitempty"` } -func (m *FileInsertRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FileInsertRequest.Unmarshal(m, b) -} -func (m *FileInsertRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FileInsertRequest.Marshal(b, m, deterministic) -} -func (m *FileInsertRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_FileInsertRequest.Merge(m, src) +func (x *FileInsertRequest) Reset() { + *x = FileInsertRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *FileInsertRequest) XXX_Size() int { - return xxx_messageInfo_FileInsertRequest.Size(m) + +func (x *FileInsertRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *FileInsertRequest) XXX_DiscardUnknown() { - xxx_messageInfo_FileInsertRequest.DiscardUnknown(m) + +func (*FileInsertRequest) ProtoMessage() {} + +func (x *FileInsertRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_FileInsertRequest proto.InternalMessageInfo +// Deprecated: Use FileInsertRequest.ProtoReflect.Descriptor instead. +func (*FileInsertRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{3} +} -func (m *FileInsertRequest) GetFiles() []*FileMdProto { - if m != nil { - return m.Files +func (x *FileInsertRequest) GetFiles() []*FileMdProto { + if x != nil { + return x.Files } return nil } -func (m *FileInsertRequest) GetAuthkey() string { - if m != nil { - return m.Authkey +func (x *FileInsertRequest) GetAuthkey() string { + if x != nil { + return x.Authkey } return "" } type InsertReply struct { - Message []string `protobuf:"bytes,1,rep,name=message,proto3" json:"message,omitempty"` - Retc []uint32 `protobuf:"varint,2,rep,packed,name=retc,proto3" json:"retc,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *InsertReply) Reset() { *m = InsertReply{} } -func (m *InsertReply) String() string { return proto.CompactTextString(m) } -func (*InsertReply) ProtoMessage() {} -func (*InsertReply) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{4} + Message []string `protobuf:"bytes,1,rep,name=message,proto3" json:"message,omitempty"` + Retc []uint32 `protobuf:"varint,2,rep,packed,name=retc,proto3" json:"retc,omitempty"` } -func (m *InsertReply) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_InsertReply.Unmarshal(m, b) -} -func (m *InsertReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_InsertReply.Marshal(b, m, deterministic) -} -func (m *InsertReply) XXX_Merge(src proto.Message) { - xxx_messageInfo_InsertReply.Merge(m, src) +func (x *InsertReply) Reset() { + *x = InsertReply{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *InsertReply) XXX_Size() int { - return xxx_messageInfo_InsertReply.Size(m) + +func (x *InsertReply) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *InsertReply) XXX_DiscardUnknown() { - xxx_messageInfo_InsertReply.DiscardUnknown(m) + +func (*InsertReply) ProtoMessage() {} + +func (x *InsertReply) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_InsertReply proto.InternalMessageInfo +// Deprecated: Use InsertReply.ProtoReflect.Descriptor instead. +func (*InsertReply) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{4} +} -func (m *InsertReply) GetMessage() []string { - if m != nil { - return m.Message +func (x *InsertReply) GetMessage() []string { + if x != nil { + return x.Message } return nil } -func (m *InsertReply) GetRetc() []uint32 { - if m != nil { - return m.Retc +func (x *InsertReply) GetRetc() []uint32 { + if x != nil { + return x.Retc } return nil } type Time struct { - Sec uint64 `protobuf:"varint,1,opt,name=sec,proto3" json:"sec,omitempty"` - NSec uint64 `protobuf:"varint,2,opt,name=n_sec,json=nSec,proto3" json:"n_sec,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *Time) Reset() { *m = Time{} } -func (m *Time) String() string { return proto.CompactTextString(m) } -func (*Time) ProtoMessage() {} -func (*Time) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{5} + Sec uint64 `protobuf:"varint,1,opt,name=sec,proto3" json:"sec,omitempty"` + NSec uint64 `protobuf:"varint,2,opt,name=n_sec,json=nSec,proto3" json:"n_sec,omitempty"` } -func (m *Time) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Time.Unmarshal(m, b) -} -func (m *Time) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Time.Marshal(b, m, deterministic) -} -func (m *Time) XXX_Merge(src proto.Message) { - xxx_messageInfo_Time.Merge(m, src) +func (x *Time) Reset() { + *x = Time{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Time) XXX_Size() int { - return xxx_messageInfo_Time.Size(m) + +func (x *Time) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Time) XXX_DiscardUnknown() { - xxx_messageInfo_Time.DiscardUnknown(m) + +func (*Time) ProtoMessage() {} + +func (x *Time) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_Time proto.InternalMessageInfo +// Deprecated: Use Time.ProtoReflect.Descriptor instead. +func (*Time) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{5} +} -func (m *Time) GetSec() uint64 { - if m != nil { - return m.Sec +func (x *Time) GetSec() uint64 { + if x != nil { + return x.Sec } return 0 } -func (m *Time) GetNSec() uint64 { - if m != nil { - return m.NSec +func (x *Time) GetNSec() uint64 { + if x != nil { + return x.NSec } return 0 } type Checksum struct { - Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` - Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *Checksum) Reset() { *m = Checksum{} } -func (m *Checksum) String() string { return proto.CompactTextString(m) } -func (*Checksum) ProtoMessage() {} -func (*Checksum) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{6} + Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` + Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` } -func (m *Checksum) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Checksum.Unmarshal(m, b) -} -func (m *Checksum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Checksum.Marshal(b, m, deterministic) -} -func (m *Checksum) XXX_Merge(src proto.Message) { - xxx_messageInfo_Checksum.Merge(m, src) +func (x *Checksum) Reset() { + *x = Checksum{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Checksum) XXX_Size() int { - return xxx_messageInfo_Checksum.Size(m) + +func (x *Checksum) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Checksum) XXX_DiscardUnknown() { - xxx_messageInfo_Checksum.DiscardUnknown(m) + +func (*Checksum) ProtoMessage() {} + +func (x *Checksum) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_Checksum proto.InternalMessageInfo +// Deprecated: Use Checksum.ProtoReflect.Descriptor instead. +func (*Checksum) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{6} +} -func (m *Checksum) GetValue() []byte { - if m != nil { - return m.Value +func (x *Checksum) GetValue() []byte { + if x != nil { + return x.Value } return nil } -func (m *Checksum) GetType() string { - if m != nil { - return m.Type +func (x *Checksum) GetType() string { + if x != nil { + return x.Type } return "" } type FileMdProto struct { - Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - ContId uint64 `protobuf:"varint,2,opt,name=cont_id,json=contId,proto3" json:"cont_id,omitempty"` - Uid uint64 `protobuf:"varint,3,opt,name=uid,proto3" json:"uid,omitempty"` - Gid uint64 `protobuf:"varint,4,opt,name=gid,proto3" json:"gid,omitempty"` - Size uint64 `protobuf:"varint,5,opt,name=size,proto3" json:"size,omitempty"` - LayoutId uint32 `protobuf:"varint,6,opt,name=layout_id,json=layoutId,proto3" json:"layout_id,omitempty"` - Flags uint32 `protobuf:"varint,7,opt,name=flags,proto3" json:"flags,omitempty"` - Name []byte `protobuf:"bytes,8,opt,name=name,proto3" json:"name,omitempty"` - LinkName []byte `protobuf:"bytes,9,opt,name=link_name,json=linkName,proto3" json:"link_name,omitempty"` - Ctime *Time `protobuf:"bytes,10,opt,name=ctime,proto3" json:"ctime,omitempty"` - Mtime *Time `protobuf:"bytes,11,opt,name=mtime,proto3" json:"mtime,omitempty"` - Checksum *Checksum `protobuf:"bytes,12,opt,name=checksum,proto3" json:"checksum,omitempty"` - Locations []uint32 `protobuf:"varint,13,rep,packed,name=locations,proto3" json:"locations,omitempty"` - UnlinkLocations []uint32 `protobuf:"varint,14,rep,packed,name=unlink_locations,json=unlinkLocations,proto3" json:"unlink_locations,omitempty"` - Xattrs map[string][]byte `protobuf:"bytes,15,rep,name=xattrs,proto3" json:"xattrs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Path []byte `protobuf:"bytes,16,opt,name=path,proto3" json:"path,omitempty"` - Etag string `protobuf:"bytes,17,opt,name=etag,proto3" json:"etag,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FileMdProto) Reset() { *m = FileMdProto{} } -func (m *FileMdProto) String() string { return proto.CompactTextString(m) } -func (*FileMdProto) ProtoMessage() {} -func (*FileMdProto) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{7} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *FileMdProto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FileMdProto.Unmarshal(m, b) + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + ContId uint64 `protobuf:"varint,2,opt,name=cont_id,json=contId,proto3" json:"cont_id,omitempty"` + Uid uint64 `protobuf:"varint,3,opt,name=uid,proto3" json:"uid,omitempty"` + Gid uint64 `protobuf:"varint,4,opt,name=gid,proto3" json:"gid,omitempty"` + Size uint64 `protobuf:"varint,5,opt,name=size,proto3" json:"size,omitempty"` + LayoutId uint32 `protobuf:"varint,6,opt,name=layout_id,json=layoutId,proto3" json:"layout_id,omitempty"` + Flags uint32 `protobuf:"varint,7,opt,name=flags,proto3" json:"flags,omitempty"` + Name []byte `protobuf:"bytes,8,opt,name=name,proto3" json:"name,omitempty"` + LinkName []byte `protobuf:"bytes,9,opt,name=link_name,json=linkName,proto3" json:"link_name,omitempty"` + Ctime *Time `protobuf:"bytes,10,opt,name=ctime,proto3" json:"ctime,omitempty"` // change time + Mtime *Time `protobuf:"bytes,11,opt,name=mtime,proto3" json:"mtime,omitempty"` // modification time + Checksum *Checksum `protobuf:"bytes,12,opt,name=checksum,proto3" json:"checksum,omitempty"` + Locations []uint32 `protobuf:"varint,13,rep,packed,name=locations,proto3" json:"locations,omitempty"` + UnlinkLocations []uint32 `protobuf:"varint,14,rep,packed,name=unlink_locations,json=unlinkLocations,proto3" json:"unlink_locations,omitempty"` + Xattrs map[string][]byte `protobuf:"bytes,15,rep,name=xattrs,proto3" json:"xattrs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Path []byte `protobuf:"bytes,16,opt,name=path,proto3" json:"path,omitempty"` + Etag string `protobuf:"bytes,17,opt,name=etag,proto3" json:"etag,omitempty"` } -func (m *FileMdProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FileMdProto.Marshal(b, m, deterministic) -} -func (m *FileMdProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_FileMdProto.Merge(m, src) + +func (x *FileMdProto) Reset() { + *x = FileMdProto{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *FileMdProto) XXX_Size() int { - return xxx_messageInfo_FileMdProto.Size(m) + +func (x *FileMdProto) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *FileMdProto) XXX_DiscardUnknown() { - xxx_messageInfo_FileMdProto.DiscardUnknown(m) + +func (*FileMdProto) ProtoMessage() {} + +func (x *FileMdProto) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_FileMdProto proto.InternalMessageInfo +// Deprecated: Use FileMdProto.ProtoReflect.Descriptor instead. +func (*FileMdProto) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{7} +} -func (m *FileMdProto) GetId() uint64 { - if m != nil { - return m.Id +func (x *FileMdProto) GetId() uint64 { + if x != nil { + return x.Id } return 0 } -func (m *FileMdProto) GetContId() uint64 { - if m != nil { - return m.ContId +func (x *FileMdProto) GetContId() uint64 { + if x != nil { + return x.ContId } return 0 } -func (m *FileMdProto) GetUid() uint64 { - if m != nil { - return m.Uid +func (x *FileMdProto) GetUid() uint64 { + if x != nil { + return x.Uid } return 0 } -func (m *FileMdProto) GetGid() uint64 { - if m != nil { - return m.Gid +func (x *FileMdProto) GetGid() uint64 { + if x != nil { + return x.Gid } return 0 } -func (m *FileMdProto) GetSize() uint64 { - if m != nil { - return m.Size +func (x *FileMdProto) GetSize() uint64 { + if x != nil { + return x.Size } return 0 } -func (m *FileMdProto) GetLayoutId() uint32 { - if m != nil { - return m.LayoutId +func (x *FileMdProto) GetLayoutId() uint32 { + if x != nil { + return x.LayoutId } return 0 } -func (m *FileMdProto) GetFlags() uint32 { - if m != nil { - return m.Flags +func (x *FileMdProto) GetFlags() uint32 { + if x != nil { + return x.Flags } return 0 } -func (m *FileMdProto) GetName() []byte { - if m != nil { - return m.Name +func (x *FileMdProto) GetName() []byte { + if x != nil { + return x.Name } return nil } -func (m *FileMdProto) GetLinkName() []byte { - if m != nil { - return m.LinkName +func (x *FileMdProto) GetLinkName() []byte { + if x != nil { + return x.LinkName } return nil } -func (m *FileMdProto) GetCtime() *Time { - if m != nil { - return m.Ctime +func (x *FileMdProto) GetCtime() *Time { + if x != nil { + return x.Ctime } return nil } -func (m *FileMdProto) GetMtime() *Time { - if m != nil { - return m.Mtime +func (x *FileMdProto) GetMtime() *Time { + if x != nil { + return x.Mtime } return nil } -func (m *FileMdProto) GetChecksum() *Checksum { - if m != nil { - return m.Checksum +func (x *FileMdProto) GetChecksum() *Checksum { + if x != nil { + return x.Checksum } return nil } -func (m *FileMdProto) GetLocations() []uint32 { - if m != nil { - return m.Locations +func (x *FileMdProto) GetLocations() []uint32 { + if x != nil { + return x.Locations } return nil } -func (m *FileMdProto) GetUnlinkLocations() []uint32 { - if m != nil { - return m.UnlinkLocations +func (x *FileMdProto) GetUnlinkLocations() []uint32 { + if x != nil { + return x.UnlinkLocations } return nil } -func (m *FileMdProto) GetXattrs() map[string][]byte { - if m != nil { - return m.Xattrs +func (x *FileMdProto) GetXattrs() map[string][]byte { + if x != nil { + return x.Xattrs } return nil } -func (m *FileMdProto) GetPath() []byte { - if m != nil { - return m.Path +func (x *FileMdProto) GetPath() []byte { + if x != nil { + return x.Path } return nil } -func (m *FileMdProto) GetEtag() string { - if m != nil { - return m.Etag +func (x *FileMdProto) GetEtag() string { + if x != nil { + return x.Etag } return "" } type ContainerMdProto struct { - Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - ParentId uint64 `protobuf:"varint,2,opt,name=parent_id,json=parentId,proto3" json:"parent_id,omitempty"` - Uid uint64 `protobuf:"varint,3,opt,name=uid,proto3" json:"uid,omitempty"` - Gid uint64 `protobuf:"varint,4,opt,name=gid,proto3" json:"gid,omitempty"` - TreeSize int64 `protobuf:"varint,6,opt,name=tree_size,json=treeSize,proto3" json:"tree_size,omitempty"` - Mode uint32 `protobuf:"varint,5,opt,name=mode,proto3" json:"mode,omitempty"` - Flags uint32 `protobuf:"varint,7,opt,name=flags,proto3" json:"flags,omitempty"` - Name []byte `protobuf:"bytes,8,opt,name=name,proto3" json:"name,omitempty"` - Ctime *Time `protobuf:"bytes,9,opt,name=ctime,proto3" json:"ctime,omitempty"` - Mtime *Time `protobuf:"bytes,10,opt,name=mtime,proto3" json:"mtime,omitempty"` - Stime *Time `protobuf:"bytes,11,opt,name=stime,proto3" json:"stime,omitempty"` - Xattrs map[string][]byte `protobuf:"bytes,12,rep,name=xattrs,proto3" json:"xattrs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Path []byte `protobuf:"bytes,13,opt,name=path,proto3" json:"path,omitempty"` - Etag string `protobuf:"bytes,14,opt,name=etag,proto3" json:"etag,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ContainerMdProto) Reset() { *m = ContainerMdProto{} } -func (m *ContainerMdProto) String() string { return proto.CompactTextString(m) } -func (*ContainerMdProto) ProtoMessage() {} -func (*ContainerMdProto) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{8} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *ContainerMdProto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ContainerMdProto.Unmarshal(m, b) + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + ParentId uint64 `protobuf:"varint,2,opt,name=parent_id,json=parentId,proto3" json:"parent_id,omitempty"` + Uid uint64 `protobuf:"varint,3,opt,name=uid,proto3" json:"uid,omitempty"` + Gid uint64 `protobuf:"varint,4,opt,name=gid,proto3" json:"gid,omitempty"` + TreeSize int64 `protobuf:"varint,6,opt,name=tree_size,json=treeSize,proto3" json:"tree_size,omitempty"` + Mode uint32 `protobuf:"varint,5,opt,name=mode,proto3" json:"mode,omitempty"` + Flags uint32 `protobuf:"varint,7,opt,name=flags,proto3" json:"flags,omitempty"` + Name []byte `protobuf:"bytes,8,opt,name=name,proto3" json:"name,omitempty"` + Ctime *Time `protobuf:"bytes,9,opt,name=ctime,proto3" json:"ctime,omitempty"` // change time + Mtime *Time `protobuf:"bytes,10,opt,name=mtime,proto3" json:"mtime,omitempty"` // modification time + Stime *Time `protobuf:"bytes,11,opt,name=stime,proto3" json:"stime,omitempty"` // sync time + Xattrs map[string][]byte `protobuf:"bytes,12,rep,name=xattrs,proto3" json:"xattrs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Path []byte `protobuf:"bytes,13,opt,name=path,proto3" json:"path,omitempty"` + Etag string `protobuf:"bytes,14,opt,name=etag,proto3" json:"etag,omitempty"` } -func (m *ContainerMdProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ContainerMdProto.Marshal(b, m, deterministic) -} -func (m *ContainerMdProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_ContainerMdProto.Merge(m, src) + +func (x *ContainerMdProto) Reset() { + *x = ContainerMdProto{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ContainerMdProto) XXX_Size() int { - return xxx_messageInfo_ContainerMdProto.Size(m) + +func (x *ContainerMdProto) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ContainerMdProto) XXX_DiscardUnknown() { - xxx_messageInfo_ContainerMdProto.DiscardUnknown(m) + +func (*ContainerMdProto) ProtoMessage() {} + +func (x *ContainerMdProto) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ContainerMdProto proto.InternalMessageInfo +// Deprecated: Use ContainerMdProto.ProtoReflect.Descriptor instead. +func (*ContainerMdProto) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{8} +} -func (m *ContainerMdProto) GetId() uint64 { - if m != nil { - return m.Id +func (x *ContainerMdProto) GetId() uint64 { + if x != nil { + return x.Id } return 0 } -func (m *ContainerMdProto) GetParentId() uint64 { - if m != nil { - return m.ParentId +func (x *ContainerMdProto) GetParentId() uint64 { + if x != nil { + return x.ParentId } return 0 } -func (m *ContainerMdProto) GetUid() uint64 { - if m != nil { - return m.Uid +func (x *ContainerMdProto) GetUid() uint64 { + if x != nil { + return x.Uid } return 0 } -func (m *ContainerMdProto) GetGid() uint64 { - if m != nil { - return m.Gid +func (x *ContainerMdProto) GetGid() uint64 { + if x != nil { + return x.Gid } return 0 } -func (m *ContainerMdProto) GetTreeSize() int64 { - if m != nil { - return m.TreeSize +func (x *ContainerMdProto) GetTreeSize() int64 { + if x != nil { + return x.TreeSize } return 0 } -func (m *ContainerMdProto) GetMode() uint32 { - if m != nil { - return m.Mode +func (x *ContainerMdProto) GetMode() uint32 { + if x != nil { + return x.Mode } return 0 } -func (m *ContainerMdProto) GetFlags() uint32 { - if m != nil { - return m.Flags +func (x *ContainerMdProto) GetFlags() uint32 { + if x != nil { + return x.Flags } return 0 } -func (m *ContainerMdProto) GetName() []byte { - if m != nil { - return m.Name +func (x *ContainerMdProto) GetName() []byte { + if x != nil { + return x.Name } return nil } -func (m *ContainerMdProto) GetCtime() *Time { - if m != nil { - return m.Ctime +func (x *ContainerMdProto) GetCtime() *Time { + if x != nil { + return x.Ctime } return nil } -func (m *ContainerMdProto) GetMtime() *Time { - if m != nil { - return m.Mtime +func (x *ContainerMdProto) GetMtime() *Time { + if x != nil { + return x.Mtime } return nil } -func (m *ContainerMdProto) GetStime() *Time { - if m != nil { - return m.Stime +func (x *ContainerMdProto) GetStime() *Time { + if x != nil { + return x.Stime } return nil } -func (m *ContainerMdProto) GetXattrs() map[string][]byte { - if m != nil { - return m.Xattrs +func (x *ContainerMdProto) GetXattrs() map[string][]byte { + if x != nil { + return x.Xattrs } return nil } -func (m *ContainerMdProto) GetPath() []byte { - if m != nil { - return m.Path +func (x *ContainerMdProto) GetPath() []byte { + if x != nil { + return x.Path } return nil } -func (m *ContainerMdProto) GetEtag() string { - if m != nil { - return m.Etag +func (x *ContainerMdProto) GetEtag() string { + if x != nil { + return x.Etag } return "" } type QuotaProto struct { - Path []byte `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Type QUOTATYPE `protobuf:"varint,3,opt,name=type,proto3,enum=eos.rpc.QUOTATYPE" json:"type,omitempty"` - Usedbytes uint64 `protobuf:"varint,4,opt,name=usedbytes,proto3" json:"usedbytes,omitempty"` - Usedlogicalbytes uint64 `protobuf:"varint,5,opt,name=usedlogicalbytes,proto3" json:"usedlogicalbytes,omitempty"` - Usedfiles uint64 `protobuf:"varint,6,opt,name=usedfiles,proto3" json:"usedfiles,omitempty"` - Maxbytes uint64 `protobuf:"varint,7,opt,name=maxbytes,proto3" json:"maxbytes,omitempty"` - Maxlogicalbytes uint64 `protobuf:"varint,8,opt,name=maxlogicalbytes,proto3" json:"maxlogicalbytes,omitempty"` - Maxfiles uint64 `protobuf:"varint,9,opt,name=maxfiles,proto3" json:"maxfiles,omitempty"` - Percentageusedbytes float32 `protobuf:"fixed32,10,opt,name=percentageusedbytes,proto3" json:"percentageusedbytes,omitempty"` - Percentageusedfiles float32 `protobuf:"fixed32,11,opt,name=percentageusedfiles,proto3" json:"percentageusedfiles,omitempty"` - Statusbytes string `protobuf:"bytes,12,opt,name=statusbytes,proto3" json:"statusbytes,omitempty"` - Statusfiles string `protobuf:"bytes,13,opt,name=statusfiles,proto3" json:"statusfiles,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *QuotaProto) Reset() { *m = QuotaProto{} } -func (m *QuotaProto) String() string { return proto.CompactTextString(m) } -func (*QuotaProto) ProtoMessage() {} -func (*QuotaProto) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{9} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *QuotaProto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_QuotaProto.Unmarshal(m, b) -} -func (m *QuotaProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_QuotaProto.Marshal(b, m, deterministic) + Path []byte `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` // quota node path + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // associated name for the given type + Type QUOTATYPE `protobuf:"varint,3,opt,name=type,proto3,enum=eos.rpc.QUOTATYPE" json:"type,omitempty"` // user,group,project or all quota + Usedbytes uint64 `protobuf:"varint,4,opt,name=usedbytes,proto3" json:"usedbytes,omitempty"` // bytes used physical + Usedlogicalbytes uint64 `protobuf:"varint,5,opt,name=usedlogicalbytes,proto3" json:"usedlogicalbytes,omitempty"` // bytes used logical + Usedfiles uint64 `protobuf:"varint,6,opt,name=usedfiles,proto3" json:"usedfiles,omitempty"` // number of files used + Maxbytes uint64 `protobuf:"varint,7,opt,name=maxbytes,proto3" json:"maxbytes,omitempty"` // maximum number of bytes (volume quota) + Maxlogicalbytes uint64 `protobuf:"varint,8,opt,name=maxlogicalbytes,proto3" json:"maxlogicalbytes,omitempty"` // maximum number of logical bytes (logical volume quota) + Maxfiles uint64 `protobuf:"varint,9,opt,name=maxfiles,proto3" json:"maxfiles,omitempty"` // maximum number of files (inode quota) + Percentageusedbytes float32 `protobuf:"fixed32,10,opt,name=percentageusedbytes,proto3" json:"percentageusedbytes,omitempty"` // percentage of volume quota used from 0 to 100 + Percentageusedfiles float32 `protobuf:"fixed32,11,opt,name=percentageusedfiles,proto3" json:"percentageusedfiles,omitempty"` // percentag of inode quota used from 0 to 100 + Statusbytes string `protobuf:"bytes,12,opt,name=statusbytes,proto3" json:"statusbytes,omitempty"` // status string for volume quota ok,warning,exceeded + Statusfiles string `protobuf:"bytes,13,opt,name=statusfiles,proto3" json:"statusfiles,omitempty"` // status string for inode quota ok,warning,exceeded } -func (m *QuotaProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_QuotaProto.Merge(m, src) + +func (x *QuotaProto) Reset() { + *x = QuotaProto{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *QuotaProto) XXX_Size() int { - return xxx_messageInfo_QuotaProto.Size(m) + +func (x *QuotaProto) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *QuotaProto) XXX_DiscardUnknown() { - xxx_messageInfo_QuotaProto.DiscardUnknown(m) + +func (*QuotaProto) ProtoMessage() {} + +func (x *QuotaProto) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_QuotaProto proto.InternalMessageInfo +// Deprecated: Use QuotaProto.ProtoReflect.Descriptor instead. +func (*QuotaProto) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{9} +} -func (m *QuotaProto) GetPath() []byte { - if m != nil { - return m.Path +func (x *QuotaProto) GetPath() []byte { + if x != nil { + return x.Path } return nil } -func (m *QuotaProto) GetName() string { - if m != nil { - return m.Name +func (x *QuotaProto) GetName() string { + if x != nil { + return x.Name } return "" } -func (m *QuotaProto) GetType() QUOTATYPE { - if m != nil { - return m.Type +func (x *QuotaProto) GetType() QUOTATYPE { + if x != nil { + return x.Type } return QUOTATYPE_USER } -func (m *QuotaProto) GetUsedbytes() uint64 { - if m != nil { - return m.Usedbytes +func (x *QuotaProto) GetUsedbytes() uint64 { + if x != nil { + return x.Usedbytes } return 0 } -func (m *QuotaProto) GetUsedlogicalbytes() uint64 { - if m != nil { - return m.Usedlogicalbytes +func (x *QuotaProto) GetUsedlogicalbytes() uint64 { + if x != nil { + return x.Usedlogicalbytes } return 0 } -func (m *QuotaProto) GetUsedfiles() uint64 { - if m != nil { - return m.Usedfiles +func (x *QuotaProto) GetUsedfiles() uint64 { + if x != nil { + return x.Usedfiles } return 0 } -func (m *QuotaProto) GetMaxbytes() uint64 { - if m != nil { - return m.Maxbytes +func (x *QuotaProto) GetMaxbytes() uint64 { + if x != nil { + return x.Maxbytes } return 0 } -func (m *QuotaProto) GetMaxlogicalbytes() uint64 { - if m != nil { - return m.Maxlogicalbytes +func (x *QuotaProto) GetMaxlogicalbytes() uint64 { + if x != nil { + return x.Maxlogicalbytes } return 0 } -func (m *QuotaProto) GetMaxfiles() uint64 { - if m != nil { - return m.Maxfiles +func (x *QuotaProto) GetMaxfiles() uint64 { + if x != nil { + return x.Maxfiles } return 0 } -func (m *QuotaProto) GetPercentageusedbytes() float32 { - if m != nil { - return m.Percentageusedbytes +func (x *QuotaProto) GetPercentageusedbytes() float32 { + if x != nil { + return x.Percentageusedbytes } return 0 } -func (m *QuotaProto) GetPercentageusedfiles() float32 { - if m != nil { - return m.Percentageusedfiles +func (x *QuotaProto) GetPercentageusedfiles() float32 { + if x != nil { + return x.Percentageusedfiles } return 0 } -func (m *QuotaProto) GetStatusbytes() string { - if m != nil { - return m.Statusbytes +func (x *QuotaProto) GetStatusbytes() string { + if x != nil { + return x.Statusbytes } return "" } -func (m *QuotaProto) GetStatusfiles() string { - if m != nil { - return m.Statusfiles +func (x *QuotaProto) GetStatusfiles() string { + if x != nil { + return x.Statusfiles } return "" } type RoleId struct { - Uid uint64 `protobuf:"varint,1,opt,name=uid,proto3" json:"uid,omitempty"` - Gid uint64 `protobuf:"varint,2,opt,name=gid,proto3" json:"gid,omitempty"` - Username string `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"` - Groupname string `protobuf:"bytes,4,opt,name=groupname,proto3" json:"groupname,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RoleId) Reset() { *m = RoleId{} } -func (m *RoleId) String() string { return proto.CompactTextString(m) } -func (*RoleId) ProtoMessage() {} -func (*RoleId) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{10} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *RoleId) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_RoleId.Unmarshal(m, b) -} -func (m *RoleId) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_RoleId.Marshal(b, m, deterministic) + Uid uint64 `protobuf:"varint,1,opt,name=uid,proto3" json:"uid,omitempty"` + Gid uint64 `protobuf:"varint,2,opt,name=gid,proto3" json:"gid,omitempty"` + Username string `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"` + Groupname string `protobuf:"bytes,4,opt,name=groupname,proto3" json:"groupname,omitempty"` } -func (m *RoleId) XXX_Merge(src proto.Message) { - xxx_messageInfo_RoleId.Merge(m, src) + +func (x *RoleId) Reset() { + *x = RoleId{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *RoleId) XXX_Size() int { - return xxx_messageInfo_RoleId.Size(m) + +func (x *RoleId) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RoleId) XXX_DiscardUnknown() { - xxx_messageInfo_RoleId.DiscardUnknown(m) + +func (*RoleId) ProtoMessage() {} + +func (x *RoleId) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_RoleId proto.InternalMessageInfo +// Deprecated: Use RoleId.ProtoReflect.Descriptor instead. +func (*RoleId) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{10} +} -func (m *RoleId) GetUid() uint64 { - if m != nil { - return m.Uid +func (x *RoleId) GetUid() uint64 { + if x != nil { + return x.Uid } return 0 } -func (m *RoleId) GetGid() uint64 { - if m != nil { - return m.Gid +func (x *RoleId) GetGid() uint64 { + if x != nil { + return x.Gid } return 0 } -func (m *RoleId) GetUsername() string { - if m != nil { - return m.Username +func (x *RoleId) GetUsername() string { + if x != nil { + return x.Username } return "" } -func (m *RoleId) GetGroupname() string { - if m != nil { - return m.Groupname +func (x *RoleId) GetGroupname() string { + if x != nil { + return x.Groupname } return "" } type MDId struct { - Path []byte `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` - Id uint64 `protobuf:"fixed64,2,opt,name=id,proto3" json:"id,omitempty"` - Ino uint64 `protobuf:"fixed64,3,opt,name=ino,proto3" json:"ino,omitempty"` - Type TYPE `protobuf:"varint,4,opt,name=type,proto3,enum=eos.rpc.TYPE" json:"type,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *MDId) Reset() { *m = MDId{} } -func (m *MDId) String() string { return proto.CompactTextString(m) } -func (*MDId) ProtoMessage() {} -func (*MDId) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{11} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *MDId) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MDId.Unmarshal(m, b) + Path []byte `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + Id uint64 `protobuf:"fixed64,2,opt,name=id,proto3" json:"id,omitempty"` + Ino uint64 `protobuf:"fixed64,3,opt,name=ino,proto3" json:"ino,omitempty"` + Type TYPE `protobuf:"varint,4,opt,name=type,proto3,enum=eos.rpc.TYPE" json:"type,omitempty"` } -func (m *MDId) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MDId.Marshal(b, m, deterministic) -} -func (m *MDId) XXX_Merge(src proto.Message) { - xxx_messageInfo_MDId.Merge(m, src) + +func (x *MDId) Reset() { + *x = MDId{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *MDId) XXX_Size() int { - return xxx_messageInfo_MDId.Size(m) + +func (x *MDId) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *MDId) XXX_DiscardUnknown() { - xxx_messageInfo_MDId.DiscardUnknown(m) + +func (*MDId) ProtoMessage() {} + +func (x *MDId) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_MDId proto.InternalMessageInfo +// Deprecated: Use MDId.ProtoReflect.Descriptor instead. +func (*MDId) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{11} +} -func (m *MDId) GetPath() []byte { - if m != nil { - return m.Path +func (x *MDId) GetPath() []byte { + if x != nil { + return x.Path } return nil } -func (m *MDId) GetId() uint64 { - if m != nil { - return m.Id +func (x *MDId) GetId() uint64 { + if x != nil { + return x.Id } return 0 } -func (m *MDId) GetIno() uint64 { - if m != nil { - return m.Ino +func (x *MDId) GetIno() uint64 { + if x != nil { + return x.Ino } return 0 } -func (m *MDId) GetType() TYPE { - if m != nil { - return m.Type +func (x *MDId) GetType() TYPE { + if x != nil { + return x.Type } return TYPE_FILE } type Limit struct { - Zero bool `protobuf:"varint,1,opt,name=zero,proto3" json:"zero,omitempty"` - Min uint64 `protobuf:"varint,2,opt,name=min,proto3" json:"min,omitempty"` - Max uint64 `protobuf:"varint,3,opt,name=max,proto3" json:"max,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *Limit) Reset() { *m = Limit{} } -func (m *Limit) String() string { return proto.CompactTextString(m) } -func (*Limit) ProtoMessage() {} -func (*Limit) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{12} + Zero bool `protobuf:"varint,1,opt,name=zero,proto3" json:"zero,omitempty"` + Min uint64 `protobuf:"varint,2,opt,name=min,proto3" json:"min,omitempty"` + Max uint64 `protobuf:"varint,3,opt,name=max,proto3" json:"max,omitempty"` } -func (m *Limit) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Limit.Unmarshal(m, b) -} -func (m *Limit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Limit.Marshal(b, m, deterministic) -} -func (m *Limit) XXX_Merge(src proto.Message) { - xxx_messageInfo_Limit.Merge(m, src) +func (x *Limit) Reset() { + *x = Limit{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Limit) XXX_Size() int { - return xxx_messageInfo_Limit.Size(m) + +func (x *Limit) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Limit) XXX_DiscardUnknown() { - xxx_messageInfo_Limit.DiscardUnknown(m) + +func (*Limit) ProtoMessage() {} + +func (x *Limit) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_Limit proto.InternalMessageInfo +// Deprecated: Use Limit.ProtoReflect.Descriptor instead. +func (*Limit) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{12} +} -func (m *Limit) GetZero() bool { - if m != nil { - return m.Zero +func (x *Limit) GetZero() bool { + if x != nil { + return x.Zero } return false } -func (m *Limit) GetMin() uint64 { - if m != nil { - return m.Min +func (x *Limit) GetMin() uint64 { + if x != nil { + return x.Min } return 0 } -func (m *Limit) GetMax() uint64 { - if m != nil { - return m.Max +func (x *Limit) GetMax() uint64 { + if x != nil { + return x.Max } return 0 } type MDSelection struct { - Select bool `protobuf:"varint,1,opt,name=select,proto3" json:"select,omitempty"` - Ctime *Limit `protobuf:"bytes,2,opt,name=ctime,proto3" json:"ctime,omitempty"` - Mtime *Limit `protobuf:"bytes,3,opt,name=mtime,proto3" json:"mtime,omitempty"` - Stime *Limit `protobuf:"bytes,4,opt,name=stime,proto3" json:"stime,omitempty"` - Size *Limit `protobuf:"bytes,5,opt,name=size,proto3" json:"size,omitempty"` - Treesize *Limit `protobuf:"bytes,6,opt,name=treesize,proto3" json:"treesize,omitempty"` - Children *Limit `protobuf:"bytes,7,opt,name=children,proto3" json:"children,omitempty"` - Locations *Limit `protobuf:"bytes,8,opt,name=locations,proto3" json:"locations,omitempty"` - UnlinkedLocations *Limit `protobuf:"bytes,9,opt,name=unlinked_locations,json=unlinkedLocations,proto3" json:"unlinked_locations,omitempty"` - Layoutid uint64 `protobuf:"varint,10,opt,name=layoutid,proto3" json:"layoutid,omitempty"` - Flags uint64 `protobuf:"varint,11,opt,name=flags,proto3" json:"flags,omitempty"` - Symlink bool `protobuf:"varint,12,opt,name=symlink,proto3" json:"symlink,omitempty"` - Checksum *Checksum `protobuf:"bytes,13,opt,name=checksum,proto3" json:"checksum,omitempty"` - Owner uint32 `protobuf:"varint,14,opt,name=owner,proto3" json:"owner,omitempty"` - Group uint32 `protobuf:"varint,15,opt,name=group,proto3" json:"group,omitempty"` - OwnerRoot bool `protobuf:"varint,16,opt,name=owner_root,json=ownerRoot,proto3" json:"owner_root,omitempty"` - GroupRoot bool `protobuf:"varint,17,opt,name=group_root,json=groupRoot,proto3" json:"group_root,omitempty"` - RegexpFilename []byte `protobuf:"bytes,18,opt,name=regexp_filename,json=regexpFilename,proto3" json:"regexp_filename,omitempty"` - RegexpDirname []byte `protobuf:"bytes,19,opt,name=regexp_dirname,json=regexpDirname,proto3" json:"regexp_dirname,omitempty"` - Xattr map[string][]byte `protobuf:"bytes,20,rep,name=xattr,proto3" json:"xattr,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *MDSelection) Reset() { *m = MDSelection{} } -func (m *MDSelection) String() string { return proto.CompactTextString(m) } -func (*MDSelection) ProtoMessage() {} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Select bool `protobuf:"varint,1,opt,name=select,proto3" json:"select,omitempty"` + Ctime *Limit `protobuf:"bytes,2,opt,name=ctime,proto3" json:"ctime,omitempty"` + Mtime *Limit `protobuf:"bytes,3,opt,name=mtime,proto3" json:"mtime,omitempty"` + Stime *Limit `protobuf:"bytes,4,opt,name=stime,proto3" json:"stime,omitempty"` + Size *Limit `protobuf:"bytes,5,opt,name=size,proto3" json:"size,omitempty"` + Treesize *Limit `protobuf:"bytes,6,opt,name=treesize,proto3" json:"treesize,omitempty"` + Children *Limit `protobuf:"bytes,7,opt,name=children,proto3" json:"children,omitempty"` + Locations *Limit `protobuf:"bytes,8,opt,name=locations,proto3" json:"locations,omitempty"` + UnlinkedLocations *Limit `protobuf:"bytes,9,opt,name=unlinked_locations,json=unlinkedLocations,proto3" json:"unlinked_locations,omitempty"` + Layoutid uint64 `protobuf:"varint,10,opt,name=layoutid,proto3" json:"layoutid,omitempty"` + Flags uint64 `protobuf:"varint,11,opt,name=flags,proto3" json:"flags,omitempty"` + Symlink bool `protobuf:"varint,12,opt,name=symlink,proto3" json:"symlink,omitempty"` + Checksum *Checksum `protobuf:"bytes,13,opt,name=checksum,proto3" json:"checksum,omitempty"` + Owner uint32 `protobuf:"varint,14,opt,name=owner,proto3" json:"owner,omitempty"` + Group uint32 `protobuf:"varint,15,opt,name=group,proto3" json:"group,omitempty"` + OwnerRoot bool `protobuf:"varint,16,opt,name=owner_root,json=ownerRoot,proto3" json:"owner_root,omitempty"` + GroupRoot bool `protobuf:"varint,17,opt,name=group_root,json=groupRoot,proto3" json:"group_root,omitempty"` + RegexpFilename []byte `protobuf:"bytes,18,opt,name=regexp_filename,json=regexpFilename,proto3" json:"regexp_filename,omitempty"` + RegexpDirname []byte `protobuf:"bytes,19,opt,name=regexp_dirname,json=regexpDirname,proto3" json:"regexp_dirname,omitempty"` + Xattr map[string][]byte `protobuf:"bytes,20,rep,name=xattr,proto3" json:"xattr,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *MDSelection) Reset() { + *x = MDSelection{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MDSelection) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MDSelection) ProtoMessage() {} + +func (x *MDSelection) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MDSelection.ProtoReflect.Descriptor instead. func (*MDSelection) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{13} -} - -func (m *MDSelection) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MDSelection.Unmarshal(m, b) -} -func (m *MDSelection) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MDSelection.Marshal(b, m, deterministic) -} -func (m *MDSelection) XXX_Merge(src proto.Message) { - xxx_messageInfo_MDSelection.Merge(m, src) -} -func (m *MDSelection) XXX_Size() int { - return xxx_messageInfo_MDSelection.Size(m) + return file_Rpc_proto_rawDescGZIP(), []int{13} } -func (m *MDSelection) XXX_DiscardUnknown() { - xxx_messageInfo_MDSelection.DiscardUnknown(m) -} - -var xxx_messageInfo_MDSelection proto.InternalMessageInfo -func (m *MDSelection) GetSelect() bool { - if m != nil { - return m.Select +func (x *MDSelection) GetSelect() bool { + if x != nil { + return x.Select } return false } -func (m *MDSelection) GetCtime() *Limit { - if m != nil { - return m.Ctime +func (x *MDSelection) GetCtime() *Limit { + if x != nil { + return x.Ctime } return nil } -func (m *MDSelection) GetMtime() *Limit { - if m != nil { - return m.Mtime +func (x *MDSelection) GetMtime() *Limit { + if x != nil { + return x.Mtime } return nil } -func (m *MDSelection) GetStime() *Limit { - if m != nil { - return m.Stime +func (x *MDSelection) GetStime() *Limit { + if x != nil { + return x.Stime } return nil } -func (m *MDSelection) GetSize() *Limit { - if m != nil { - return m.Size +func (x *MDSelection) GetSize() *Limit { + if x != nil { + return x.Size } return nil } -func (m *MDSelection) GetTreesize() *Limit { - if m != nil { - return m.Treesize +func (x *MDSelection) GetTreesize() *Limit { + if x != nil { + return x.Treesize } return nil } -func (m *MDSelection) GetChildren() *Limit { - if m != nil { - return m.Children +func (x *MDSelection) GetChildren() *Limit { + if x != nil { + return x.Children } return nil } -func (m *MDSelection) GetLocations() *Limit { - if m != nil { - return m.Locations +func (x *MDSelection) GetLocations() *Limit { + if x != nil { + return x.Locations } return nil } -func (m *MDSelection) GetUnlinkedLocations() *Limit { - if m != nil { - return m.UnlinkedLocations +func (x *MDSelection) GetUnlinkedLocations() *Limit { + if x != nil { + return x.UnlinkedLocations } return nil } -func (m *MDSelection) GetLayoutid() uint64 { - if m != nil { - return m.Layoutid +func (x *MDSelection) GetLayoutid() uint64 { + if x != nil { + return x.Layoutid } return 0 } -func (m *MDSelection) GetFlags() uint64 { - if m != nil { - return m.Flags +func (x *MDSelection) GetFlags() uint64 { + if x != nil { + return x.Flags } return 0 } -func (m *MDSelection) GetSymlink() bool { - if m != nil { - return m.Symlink +func (x *MDSelection) GetSymlink() bool { + if x != nil { + return x.Symlink } return false } -func (m *MDSelection) GetChecksum() *Checksum { - if m != nil { - return m.Checksum +func (x *MDSelection) GetChecksum() *Checksum { + if x != nil { + return x.Checksum } return nil } -func (m *MDSelection) GetOwner() uint32 { - if m != nil { - return m.Owner +func (x *MDSelection) GetOwner() uint32 { + if x != nil { + return x.Owner } return 0 } -func (m *MDSelection) GetGroup() uint32 { - if m != nil { - return m.Group +func (x *MDSelection) GetGroup() uint32 { + if x != nil { + return x.Group } return 0 } -func (m *MDSelection) GetOwnerRoot() bool { - if m != nil { - return m.OwnerRoot +func (x *MDSelection) GetOwnerRoot() bool { + if x != nil { + return x.OwnerRoot } return false } -func (m *MDSelection) GetGroupRoot() bool { - if m != nil { - return m.GroupRoot +func (x *MDSelection) GetGroupRoot() bool { + if x != nil { + return x.GroupRoot } return false } -func (m *MDSelection) GetRegexpFilename() []byte { - if m != nil { - return m.RegexpFilename +func (x *MDSelection) GetRegexpFilename() []byte { + if x != nil { + return x.RegexpFilename } return nil } -func (m *MDSelection) GetRegexpDirname() []byte { - if m != nil { - return m.RegexpDirname +func (x *MDSelection) GetRegexpDirname() []byte { + if x != nil { + return x.RegexpDirname } return nil } -func (m *MDSelection) GetXattr() map[string][]byte { - if m != nil { - return m.Xattr +func (x *MDSelection) GetXattr() map[string][]byte { + if x != nil { + return x.Xattr } return nil } type MDRequest struct { - Type TYPE `protobuf:"varint,1,opt,name=type,proto3,enum=eos.rpc.TYPE" json:"type,omitempty"` - Id *MDId `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` - Authkey string `protobuf:"bytes,3,opt,name=authkey,proto3" json:"authkey,omitempty"` - Role *RoleId `protobuf:"bytes,4,opt,name=role,proto3" json:"role,omitempty"` - Selection *MDSelection `protobuf:"bytes,5,opt,name=selection,proto3" json:"selection,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *MDRequest) Reset() { *m = MDRequest{} } -func (m *MDRequest) String() string { return proto.CompactTextString(m) } -func (*MDRequest) ProtoMessage() {} -func (*MDRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{14} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *MDRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MDRequest.Unmarshal(m, b) + Type TYPE `protobuf:"varint,1,opt,name=type,proto3,enum=eos.rpc.TYPE" json:"type,omitempty"` + Id *MDId `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` + Authkey string `protobuf:"bytes,3,opt,name=authkey,proto3" json:"authkey,omitempty"` + Role *RoleId `protobuf:"bytes,4,opt,name=role,proto3" json:"role,omitempty"` + Selection *MDSelection `protobuf:"bytes,5,opt,name=selection,proto3" json:"selection,omitempty"` } -func (m *MDRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MDRequest.Marshal(b, m, deterministic) -} -func (m *MDRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_MDRequest.Merge(m, src) + +func (x *MDRequest) Reset() { + *x = MDRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *MDRequest) XXX_Size() int { - return xxx_messageInfo_MDRequest.Size(m) + +func (x *MDRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *MDRequest) XXX_DiscardUnknown() { - xxx_messageInfo_MDRequest.DiscardUnknown(m) + +func (*MDRequest) ProtoMessage() {} + +func (x *MDRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_MDRequest proto.InternalMessageInfo +// Deprecated: Use MDRequest.ProtoReflect.Descriptor instead. +func (*MDRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{14} +} -func (m *MDRequest) GetType() TYPE { - if m != nil { - return m.Type +func (x *MDRequest) GetType() TYPE { + if x != nil { + return x.Type } return TYPE_FILE } -func (m *MDRequest) GetId() *MDId { - if m != nil { - return m.Id +func (x *MDRequest) GetId() *MDId { + if x != nil { + return x.Id } return nil } -func (m *MDRequest) GetAuthkey() string { - if m != nil { - return m.Authkey +func (x *MDRequest) GetAuthkey() string { + if x != nil { + return x.Authkey } return "" } -func (m *MDRequest) GetRole() *RoleId { - if m != nil { - return m.Role +func (x *MDRequest) GetRole() *RoleId { + if x != nil { + return x.Role } return nil } -func (m *MDRequest) GetSelection() *MDSelection { - if m != nil { - return m.Selection +func (x *MDRequest) GetSelection() *MDSelection { + if x != nil { + return x.Selection } return nil } type MDResponse struct { - Type TYPE `protobuf:"varint,1,opt,name=type,proto3,enum=eos.rpc.TYPE" json:"type,omitempty"` - Fmd *FileMdProto `protobuf:"bytes,2,opt,name=fmd,proto3" json:"fmd,omitempty"` - Cmd *ContainerMdProto `protobuf:"bytes,3,opt,name=cmd,proto3" json:"cmd,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *MDResponse) Reset() { *m = MDResponse{} } -func (m *MDResponse) String() string { return proto.CompactTextString(m) } -func (*MDResponse) ProtoMessage() {} -func (*MDResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{15} + Type TYPE `protobuf:"varint,1,opt,name=type,proto3,enum=eos.rpc.TYPE" json:"type,omitempty"` + Fmd *FileMdProto `protobuf:"bytes,2,opt,name=fmd,proto3" json:"fmd,omitempty"` + Cmd *ContainerMdProto `protobuf:"bytes,3,opt,name=cmd,proto3" json:"cmd,omitempty"` } -func (m *MDResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MDResponse.Unmarshal(m, b) -} -func (m *MDResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MDResponse.Marshal(b, m, deterministic) -} -func (m *MDResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MDResponse.Merge(m, src) +func (x *MDResponse) Reset() { + *x = MDResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *MDResponse) XXX_Size() int { - return xxx_messageInfo_MDResponse.Size(m) + +func (x *MDResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *MDResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MDResponse.DiscardUnknown(m) + +func (*MDResponse) ProtoMessage() {} + +func (x *MDResponse) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_MDResponse proto.InternalMessageInfo +// Deprecated: Use MDResponse.ProtoReflect.Descriptor instead. +func (*MDResponse) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{15} +} -func (m *MDResponse) GetType() TYPE { - if m != nil { - return m.Type +func (x *MDResponse) GetType() TYPE { + if x != nil { + return x.Type } return TYPE_FILE } -func (m *MDResponse) GetFmd() *FileMdProto { - if m != nil { - return m.Fmd +func (x *MDResponse) GetFmd() *FileMdProto { + if x != nil { + return x.Fmd } return nil } -func (m *MDResponse) GetCmd() *ContainerMdProto { - if m != nil { - return m.Cmd +func (x *MDResponse) GetCmd() *ContainerMdProto { + if x != nil { + return x.Cmd } return nil } type FindRequest struct { - Type TYPE `protobuf:"varint,1,opt,name=type,proto3,enum=eos.rpc.TYPE" json:"type,omitempty"` - Id *MDId `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` - Role *RoleId `protobuf:"bytes,3,opt,name=role,proto3" json:"role,omitempty"` - Authkey string `protobuf:"bytes,4,opt,name=authkey,proto3" json:"authkey,omitempty"` - Maxdepth uint64 `protobuf:"varint,5,opt,name=maxdepth,proto3" json:"maxdepth,omitempty"` - Selection *MDSelection `protobuf:"bytes,6,opt,name=selection,proto3" json:"selection,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FindRequest) Reset() { *m = FindRequest{} } -func (m *FindRequest) String() string { return proto.CompactTextString(m) } -func (*FindRequest) ProtoMessage() {} -func (*FindRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{16} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *FindRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FindRequest.Unmarshal(m, b) + Type TYPE `protobuf:"varint,1,opt,name=type,proto3,enum=eos.rpc.TYPE" json:"type,omitempty"` + Id *MDId `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` + Role *RoleId `protobuf:"bytes,3,opt,name=role,proto3" json:"role,omitempty"` + Authkey string `protobuf:"bytes,4,opt,name=authkey,proto3" json:"authkey,omitempty"` + Maxdepth uint64 `protobuf:"varint,5,opt,name=maxdepth,proto3" json:"maxdepth,omitempty"` + Selection *MDSelection `protobuf:"bytes,6,opt,name=selection,proto3" json:"selection,omitempty"` } -func (m *FindRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FindRequest.Marshal(b, m, deterministic) -} -func (m *FindRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_FindRequest.Merge(m, src) + +func (x *FindRequest) Reset() { + *x = FindRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *FindRequest) XXX_Size() int { - return xxx_messageInfo_FindRequest.Size(m) + +func (x *FindRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *FindRequest) XXX_DiscardUnknown() { - xxx_messageInfo_FindRequest.DiscardUnknown(m) + +func (*FindRequest) ProtoMessage() {} + +func (x *FindRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_FindRequest proto.InternalMessageInfo +// Deprecated: Use FindRequest.ProtoReflect.Descriptor instead. +func (*FindRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{16} +} -func (m *FindRequest) GetType() TYPE { - if m != nil { - return m.Type +func (x *FindRequest) GetType() TYPE { + if x != nil { + return x.Type } return TYPE_FILE } -func (m *FindRequest) GetId() *MDId { - if m != nil { - return m.Id +func (x *FindRequest) GetId() *MDId { + if x != nil { + return x.Id } return nil } -func (m *FindRequest) GetRole() *RoleId { - if m != nil { - return m.Role +func (x *FindRequest) GetRole() *RoleId { + if x != nil { + return x.Role } return nil } -func (m *FindRequest) GetAuthkey() string { - if m != nil { - return m.Authkey +func (x *FindRequest) GetAuthkey() string { + if x != nil { + return x.Authkey } return "" } -func (m *FindRequest) GetMaxdepth() uint64 { - if m != nil { - return m.Maxdepth +func (x *FindRequest) GetMaxdepth() uint64 { + if x != nil { + return x.Maxdepth } return 0 } -func (m *FindRequest) GetSelection() *MDSelection { - if m != nil { - return m.Selection +func (x *FindRequest) GetSelection() *MDSelection { + if x != nil { + return x.Selection } return nil } type ShareAuth struct { - Prot string `protobuf:"bytes,1,opt,name=prot,proto3" json:"prot,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Host string `protobuf:"bytes,3,opt,name=host,proto3" json:"host,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *ShareAuth) Reset() { *m = ShareAuth{} } -func (m *ShareAuth) String() string { return proto.CompactTextString(m) } -func (*ShareAuth) ProtoMessage() {} -func (*ShareAuth) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{17} + Prot string `protobuf:"bytes,1,opt,name=prot,proto3" json:"prot,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Host string `protobuf:"bytes,3,opt,name=host,proto3" json:"host,omitempty"` } -func (m *ShareAuth) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ShareAuth.Unmarshal(m, b) -} -func (m *ShareAuth) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ShareAuth.Marshal(b, m, deterministic) -} -func (m *ShareAuth) XXX_Merge(src proto.Message) { - xxx_messageInfo_ShareAuth.Merge(m, src) +func (x *ShareAuth) Reset() { + *x = ShareAuth{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ShareAuth) XXX_Size() int { - return xxx_messageInfo_ShareAuth.Size(m) + +func (x *ShareAuth) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ShareAuth) XXX_DiscardUnknown() { - xxx_messageInfo_ShareAuth.DiscardUnknown(m) + +func (*ShareAuth) ProtoMessage() {} + +func (x *ShareAuth) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ShareAuth proto.InternalMessageInfo +// Deprecated: Use ShareAuth.ProtoReflect.Descriptor instead. +func (*ShareAuth) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{17} +} -func (m *ShareAuth) GetProt() string { - if m != nil { - return m.Prot +func (x *ShareAuth) GetProt() string { + if x != nil { + return x.Prot } return "" } -func (m *ShareAuth) GetName() string { - if m != nil { - return m.Name +func (x *ShareAuth) GetName() string { + if x != nil { + return x.Name } return "" } -func (m *ShareAuth) GetHost() string { - if m != nil { - return m.Host +func (x *ShareAuth) GetHost() string { + if x != nil { + return x.Host } return "" } type ShareProto struct { - Permission string `protobuf:"bytes,1,opt,name=permission,proto3" json:"permission,omitempty"` - Expires uint64 `protobuf:"varint,2,opt,name=expires,proto3" json:"expires,omitempty"` - Owner string `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"` - Group string `protobuf:"bytes,4,opt,name=group,proto3" json:"group,omitempty"` - Generation uint64 `protobuf:"varint,5,opt,name=generation,proto3" json:"generation,omitempty"` - Path string `protobuf:"bytes,6,opt,name=path,proto3" json:"path,omitempty"` - Allowtree bool `protobuf:"varint,7,opt,name=allowtree,proto3" json:"allowtree,omitempty"` - Vtoken string `protobuf:"bytes,8,opt,name=vtoken,proto3" json:"vtoken,omitempty"` - Origins []*ShareAuth `protobuf:"bytes,9,rep,name=origins,proto3" json:"origins,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ShareProto) Reset() { *m = ShareProto{} } -func (m *ShareProto) String() string { return proto.CompactTextString(m) } -func (*ShareProto) ProtoMessage() {} -func (*ShareProto) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{18} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *ShareProto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ShareProto.Unmarshal(m, b) -} -func (m *ShareProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ShareProto.Marshal(b, m, deterministic) + Permission string `protobuf:"bytes,1,opt,name=permission,proto3" json:"permission,omitempty"` + Expires uint64 `protobuf:"varint,2,opt,name=expires,proto3" json:"expires,omitempty"` + Owner string `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"` + Group string `protobuf:"bytes,4,opt,name=group,proto3" json:"group,omitempty"` + Generation uint64 `protobuf:"varint,5,opt,name=generation,proto3" json:"generation,omitempty"` + Path string `protobuf:"bytes,6,opt,name=path,proto3" json:"path,omitempty"` + Allowtree bool `protobuf:"varint,7,opt,name=allowtree,proto3" json:"allowtree,omitempty"` + Vtoken string `protobuf:"bytes,8,opt,name=vtoken,proto3" json:"vtoken,omitempty"` + Origins []*ShareAuth `protobuf:"bytes,9,rep,name=origins,proto3" json:"origins,omitempty"` } -func (m *ShareProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_ShareProto.Merge(m, src) + +func (x *ShareProto) Reset() { + *x = ShareProto{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ShareProto) XXX_Size() int { - return xxx_messageInfo_ShareProto.Size(m) + +func (x *ShareProto) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ShareProto) XXX_DiscardUnknown() { - xxx_messageInfo_ShareProto.DiscardUnknown(m) + +func (*ShareProto) ProtoMessage() {} + +func (x *ShareProto) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ShareProto proto.InternalMessageInfo +// Deprecated: Use ShareProto.ProtoReflect.Descriptor instead. +func (*ShareProto) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{18} +} -func (m *ShareProto) GetPermission() string { - if m != nil { - return m.Permission +func (x *ShareProto) GetPermission() string { + if x != nil { + return x.Permission } return "" } -func (m *ShareProto) GetExpires() uint64 { - if m != nil { - return m.Expires +func (x *ShareProto) GetExpires() uint64 { + if x != nil { + return x.Expires } return 0 } -func (m *ShareProto) GetOwner() string { - if m != nil { - return m.Owner +func (x *ShareProto) GetOwner() string { + if x != nil { + return x.Owner } return "" } -func (m *ShareProto) GetGroup() string { - if m != nil { - return m.Group +func (x *ShareProto) GetGroup() string { + if x != nil { + return x.Group } return "" } -func (m *ShareProto) GetGeneration() uint64 { - if m != nil { - return m.Generation +func (x *ShareProto) GetGeneration() uint64 { + if x != nil { + return x.Generation } return 0 } -func (m *ShareProto) GetPath() string { - if m != nil { - return m.Path +func (x *ShareProto) GetPath() string { + if x != nil { + return x.Path } return "" } -func (m *ShareProto) GetAllowtree() bool { - if m != nil { - return m.Allowtree +func (x *ShareProto) GetAllowtree() bool { + if x != nil { + return x.Allowtree } return false } -func (m *ShareProto) GetVtoken() string { - if m != nil { - return m.Vtoken +func (x *ShareProto) GetVtoken() string { + if x != nil { + return x.Vtoken } return "" } -func (m *ShareProto) GetOrigins() []*ShareAuth { - if m != nil { - return m.Origins +func (x *ShareProto) GetOrigins() []*ShareAuth { + if x != nil { + return x.Origins } return nil } type ShareToken struct { - Token *ShareProto `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` - Signature []byte `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"` - Serialized []byte `protobuf:"bytes,3,opt,name=serialized,proto3" json:"serialized,omitempty"` - Seed int32 `protobuf:"varint,4,opt,name=seed,proto3" json:"seed,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ShareToken) Reset() { *m = ShareToken{} } -func (m *ShareToken) String() string { return proto.CompactTextString(m) } -func (*ShareToken) ProtoMessage() {} -func (*ShareToken) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{19} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *ShareToken) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ShareToken.Unmarshal(m, b) -} -func (m *ShareToken) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ShareToken.Marshal(b, m, deterministic) + Token *ShareProto `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` + Signature []byte `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"` + Serialized []byte `protobuf:"bytes,3,opt,name=serialized,proto3" json:"serialized,omitempty"` + Seed int32 `protobuf:"varint,4,opt,name=seed,proto3" json:"seed,omitempty"` } -func (m *ShareToken) XXX_Merge(src proto.Message) { - xxx_messageInfo_ShareToken.Merge(m, src) + +func (x *ShareToken) Reset() { + *x = ShareToken{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ShareToken) XXX_Size() int { - return xxx_messageInfo_ShareToken.Size(m) + +func (x *ShareToken) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ShareToken) XXX_DiscardUnknown() { - xxx_messageInfo_ShareToken.DiscardUnknown(m) + +func (*ShareToken) ProtoMessage() {} + +func (x *ShareToken) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ShareToken proto.InternalMessageInfo +// Deprecated: Use ShareToken.ProtoReflect.Descriptor instead. +func (*ShareToken) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{19} +} -func (m *ShareToken) GetToken() *ShareProto { - if m != nil { - return m.Token +func (x *ShareToken) GetToken() *ShareProto { + if x != nil { + return x.Token } return nil } -func (m *ShareToken) GetSignature() []byte { - if m != nil { - return m.Signature +func (x *ShareToken) GetSignature() []byte { + if x != nil { + return x.Signature } return nil } -func (m *ShareToken) GetSerialized() []byte { - if m != nil { - return m.Serialized +func (x *ShareToken) GetSerialized() []byte { + if x != nil { + return x.Serialized } return nil } -func (m *ShareToken) GetSeed() int32 { - if m != nil { - return m.Seed +func (x *ShareToken) GetSeed() int32 { + if x != nil { + return x.Seed } return 0 } type NSRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + Authkey string `protobuf:"bytes,1,opt,name=authkey,proto3" json:"authkey,omitempty"` Role *RoleId `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` // Actual request data object // - // Types that are valid to be assigned to Command: + // Types that are assignable to Command: // *NSRequest_Mkdir // *NSRequest_Rmdir // *NSRequest_Touch @@ -1931,64 +2429,188 @@ type NSRequest struct { // *NSRequest_Acl // *NSRequest_Token // *NSRequest_Quota - Command isNSRequest_Command `protobuf_oneof:"command"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + // *NSRequest_Share + Command isNSRequest_Command `protobuf_oneof:"command"` } -func (m *NSRequest) Reset() { *m = NSRequest{} } -func (m *NSRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest) ProtoMessage() {} -func (*NSRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20} +func (x *NSRequest) Reset() { + *x = NSRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest.Unmarshal(m, b) +func (x *NSRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NSRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest.Marshal(b, m, deterministic) -} -func (m *NSRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest.Merge(m, src) -} -func (m *NSRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest.Size(m) -} -func (m *NSRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest.DiscardUnknown(m) + +func (*NSRequest) ProtoMessage() {} + +func (x *NSRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_NSRequest proto.InternalMessageInfo +// Deprecated: Use NSRequest.ProtoReflect.Descriptor instead. +func (*NSRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20} +} -func (m *NSRequest) GetAuthkey() string { - if m != nil { - return m.Authkey +func (x *NSRequest) GetAuthkey() string { + if x != nil { + return x.Authkey } return "" } -func (m *NSRequest) GetRole() *RoleId { - if m != nil { - return m.Role +func (x *NSRequest) GetRole() *RoleId { + if x != nil { + return x.Role } return nil } -type isNSRequest_Command interface { - isNSRequest_Command() +func (m *NSRequest) GetCommand() isNSRequest_Command { + if m != nil { + return m.Command + } + return nil } -type NSRequest_Mkdir struct { - Mkdir *NSRequest_MkdirRequest `protobuf:"bytes,21,opt,name=mkdir,proto3,oneof"` +func (x *NSRequest) GetMkdir() *NSRequest_MkdirRequest { + if x, ok := x.GetCommand().(*NSRequest_Mkdir); ok { + return x.Mkdir + } + return nil } -type NSRequest_Rmdir struct { - Rmdir *NSRequest_RmdirRequest `protobuf:"bytes,22,opt,name=rmdir,proto3,oneof"` +func (x *NSRequest) GetRmdir() *NSRequest_RmdirRequest { + if x, ok := x.GetCommand().(*NSRequest_Rmdir); ok { + return x.Rmdir + } + return nil } -type NSRequest_Touch struct { +func (x *NSRequest) GetTouch() *NSRequest_TouchRequest { + if x, ok := x.GetCommand().(*NSRequest_Touch); ok { + return x.Touch + } + return nil +} + +func (x *NSRequest) GetUnlink() *NSRequest_UnlinkRequest { + if x, ok := x.GetCommand().(*NSRequest_Unlink); ok { + return x.Unlink + } + return nil +} + +func (x *NSRequest) GetRm() *NSRequest_RmRequest { + if x, ok := x.GetCommand().(*NSRequest_Rm); ok { + return x.Rm + } + return nil +} + +func (x *NSRequest) GetRename() *NSRequest_RenameRequest { + if x, ok := x.GetCommand().(*NSRequest_Rename); ok { + return x.Rename + } + return nil +} + +func (x *NSRequest) GetSymlink() *NSRequest_SymlinkRequest { + if x, ok := x.GetCommand().(*NSRequest_Symlink); ok { + return x.Symlink + } + return nil +} + +func (x *NSRequest) GetVersion() *NSRequest_VersionRequest { + if x, ok := x.GetCommand().(*NSRequest_Version); ok { + return x.Version + } + return nil +} + +func (x *NSRequest) GetRecycle() *NSRequest_RecycleRequest { + if x, ok := x.GetCommand().(*NSRequest_Recycle); ok { + return x.Recycle + } + return nil +} + +func (x *NSRequest) GetXattr() *NSRequest_SetXAttrRequest { + if x, ok := x.GetCommand().(*NSRequest_Xattr); ok { + return x.Xattr + } + return nil +} + +func (x *NSRequest) GetChown() *NSRequest_ChownRequest { + if x, ok := x.GetCommand().(*NSRequest_Chown); ok { + return x.Chown + } + return nil +} + +func (x *NSRequest) GetChmod() *NSRequest_ChmodRequest { + if x, ok := x.GetCommand().(*NSRequest_Chmod); ok { + return x.Chmod + } + return nil +} + +func (x *NSRequest) GetAcl() *NSRequest_AclRequest { + if x, ok := x.GetCommand().(*NSRequest_Acl); ok { + return x.Acl + } + return nil +} + +func (x *NSRequest) GetToken() *NSRequest_TokenRequest { + if x, ok := x.GetCommand().(*NSRequest_Token); ok { + return x.Token + } + return nil +} + +func (x *NSRequest) GetQuota() *NSRequest_QuotaRequest { + if x, ok := x.GetCommand().(*NSRequest_Quota); ok { + return x.Quota + } + return nil +} + +func (x *NSRequest) GetShare() *NSRequest_ShareRequest { + if x, ok := x.GetCommand().(*NSRequest_Share); ok { + return x.Share + } + return nil +} + +type isNSRequest_Command interface { + isNSRequest_Command() +} + +type NSRequest_Mkdir struct { + Mkdir *NSRequest_MkdirRequest `protobuf:"bytes,21,opt,name=mkdir,proto3,oneof"` +} + +type NSRequest_Rmdir struct { + Rmdir *NSRequest_RmdirRequest `protobuf:"bytes,22,opt,name=rmdir,proto3,oneof"` +} + +type NSRequest_Touch struct { Touch *NSRequest_TouchRequest `protobuf:"bytes,23,opt,name=touch,proto3,oneof"` } @@ -2040,6 +2662,10 @@ type NSRequest_Quota struct { Quota *NSRequest_QuotaRequest `protobuf:"bytes,35,opt,name=quota,proto3,oneof"` } +type NSRequest_Share struct { + Share *NSRequest_ShareRequest `protobuf:"bytes,36,opt,name=share,proto3,oneof"` +} + func (*NSRequest_Mkdir) isNSRequest_Command() {} func (*NSRequest_Rmdir) isNSRequest_Command() {} @@ -2070,2628 +2696,4130 @@ func (*NSRequest_Token) isNSRequest_Command() {} func (*NSRequest_Quota) isNSRequest_Command() {} -func (m *NSRequest) GetCommand() isNSRequest_Command { - if m != nil { - return m.Command - } - return nil +func (*NSRequest_Share) isNSRequest_Command() {} + +type NSResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Error *NSResponse_ErrorResponse `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` + Version *NSResponse_VersionResponse `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + Recycle *NSResponse_RecycleResponse `protobuf:"bytes,3,opt,name=recycle,proto3" json:"recycle,omitempty"` + Acl *NSResponse_AclResponse `protobuf:"bytes,4,opt,name=acl,proto3" json:"acl,omitempty"` + Quota *NSResponse_QuotaResponse `protobuf:"bytes,5,opt,name=quota,proto3" json:"quota,omitempty"` + Share *NSResponse_ShareResponse `protobuf:"bytes,6,opt,name=share,proto3" json:"share,omitempty"` } -func (m *NSRequest) GetMkdir() *NSRequest_MkdirRequest { - if x, ok := m.GetCommand().(*NSRequest_Mkdir); ok { - return x.Mkdir +func (x *NSResponse) Reset() { + *x = NSResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return nil } -func (m *NSRequest) GetRmdir() *NSRequest_RmdirRequest { - if x, ok := m.GetCommand().(*NSRequest_Rmdir); ok { - return x.Rmdir - } - return nil +func (x *NSResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NSRequest) GetTouch() *NSRequest_TouchRequest { - if x, ok := m.GetCommand().(*NSRequest_Touch); ok { - return x.Touch +func (*NSResponse) ProtoMessage() {} + +func (x *NSResponse) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (m *NSRequest) GetUnlink() *NSRequest_UnlinkRequest { - if x, ok := m.GetCommand().(*NSRequest_Unlink); ok { - return x.Unlink +// Deprecated: Use NSResponse.ProtoReflect.Descriptor instead. +func (*NSResponse) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{21} +} + +func (x *NSResponse) GetError() *NSResponse_ErrorResponse { + if x != nil { + return x.Error } return nil } -func (m *NSRequest) GetRm() *NSRequest_RmRequest { - if x, ok := m.GetCommand().(*NSRequest_Rm); ok { - return x.Rm +func (x *NSResponse) GetVersion() *NSResponse_VersionResponse { + if x != nil { + return x.Version } return nil } -func (m *NSRequest) GetRename() *NSRequest_RenameRequest { - if x, ok := m.GetCommand().(*NSRequest_Rename); ok { - return x.Rename +func (x *NSResponse) GetRecycle() *NSResponse_RecycleResponse { + if x != nil { + return x.Recycle } return nil } -func (m *NSRequest) GetSymlink() *NSRequest_SymlinkRequest { - if x, ok := m.GetCommand().(*NSRequest_Symlink); ok { - return x.Symlink +func (x *NSResponse) GetAcl() *NSResponse_AclResponse { + if x != nil { + return x.Acl } return nil } -func (m *NSRequest) GetVersion() *NSRequest_VersionRequest { - if x, ok := m.GetCommand().(*NSRequest_Version); ok { - return x.Version +func (x *NSResponse) GetQuota() *NSResponse_QuotaResponse { + if x != nil { + return x.Quota } return nil } -func (m *NSRequest) GetRecycle() *NSRequest_RecycleRequest { - if x, ok := m.GetCommand().(*NSRequest_Recycle); ok { - return x.Recycle +func (x *NSResponse) GetShare() *NSResponse_ShareResponse { + if x != nil { + return x.Share } return nil } -func (m *NSRequest) GetXattr() *NSRequest_SetXAttrRequest { - if x, ok := m.GetCommand().(*NSRequest_Xattr); ok { - return x.Xattr +type NsStatRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Authkey string `protobuf:"bytes,1,opt,name=authkey,proto3" json:"authkey,omitempty"` +} + +func (x *NsStatRequest) Reset() { + *x = NsStatRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return nil } -func (m *NSRequest) GetChown() *NSRequest_ChownRequest { - if x, ok := m.GetCommand().(*NSRequest_Chown); ok { - return x.Chown +func (x *NsStatRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NsStatRequest) ProtoMessage() {} + +func (x *NsStatRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (m *NSRequest) GetChmod() *NSRequest_ChmodRequest { - if x, ok := m.GetCommand().(*NSRequest_Chmod); ok { - return x.Chmod +// Deprecated: Use NsStatRequest.ProtoReflect.Descriptor instead. +func (*NsStatRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{22} +} + +func (x *NsStatRequest) GetAuthkey() string { + if x != nil { + return x.Authkey } - return nil + return "" } -func (m *NSRequest) GetAcl() *NSRequest_AclRequest { - if x, ok := m.GetCommand().(*NSRequest_Acl); ok { - return x.Acl +type NsStatResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Emsg string `protobuf:"bytes,2,opt,name=emsg,proto3" json:"emsg,omitempty"` + State string `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` + Nfiles uint64 `protobuf:"varint,4,opt,name=nfiles,proto3" json:"nfiles,omitempty"` + Ncontainers uint64 `protobuf:"varint,5,opt,name=ncontainers,proto3" json:"ncontainers,omitempty"` + BootTime uint64 `protobuf:"varint,6,opt,name=boot_time,json=bootTime,proto3" json:"boot_time,omitempty"` + CurrentFid uint64 `protobuf:"varint,7,opt,name=current_fid,json=currentFid,proto3" json:"current_fid,omitempty"` + CurrentCid uint64 `protobuf:"varint,8,opt,name=current_cid,json=currentCid,proto3" json:"current_cid,omitempty"` + MemVirtual uint64 `protobuf:"varint,9,opt,name=mem_virtual,json=memVirtual,proto3" json:"mem_virtual,omitempty"` + MemResident uint64 `protobuf:"varint,10,opt,name=mem_resident,json=memResident,proto3" json:"mem_resident,omitempty"` + MemShare uint64 `protobuf:"varint,11,opt,name=mem_share,json=memShare,proto3" json:"mem_share,omitempty"` + MemGrowth uint64 `protobuf:"varint,12,opt,name=mem_growth,json=memGrowth,proto3" json:"mem_growth,omitempty"` + Threads uint64 `protobuf:"varint,13,opt,name=threads,proto3" json:"threads,omitempty"` + Fds uint64 `protobuf:"varint,14,opt,name=fds,proto3" json:"fds,omitempty"` + Uptime uint64 `protobuf:"varint,15,opt,name=uptime,proto3" json:"uptime,omitempty"` +} + +func (x *NsStatResponse) Reset() { + *x = NsStatResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return nil } -func (m *NSRequest) GetToken() *NSRequest_TokenRequest { - if x, ok := m.GetCommand().(*NSRequest_Token); ok { - return x.Token +func (x *NsStatResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NsStatResponse) ProtoMessage() {} + +func (x *NsStatResponse) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (m *NSRequest) GetQuota() *NSRequest_QuotaRequest { - if x, ok := m.GetCommand().(*NSRequest_Quota); ok { - return x.Quota +// Deprecated: Use NsStatResponse.ProtoReflect.Descriptor instead. +func (*NsStatResponse) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{23} +} + +func (x *NsStatResponse) GetCode() int64 { + if x != nil { + return x.Code } - return nil + return 0 } -// XXX_OneofWrappers is for the internal use of the proto package. -func (*NSRequest) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*NSRequest_Mkdir)(nil), - (*NSRequest_Rmdir)(nil), - (*NSRequest_Touch)(nil), - (*NSRequest_Unlink)(nil), - (*NSRequest_Rm)(nil), - (*NSRequest_Rename)(nil), - (*NSRequest_Symlink)(nil), - (*NSRequest_Version)(nil), - (*NSRequest_Recycle)(nil), - (*NSRequest_Xattr)(nil), - (*NSRequest_Chown)(nil), - (*NSRequest_Chmod)(nil), - (*NSRequest_Acl)(nil), - (*NSRequest_Token)(nil), - (*NSRequest_Quota)(nil), +func (x *NsStatResponse) GetEmsg() string { + if x != nil { + return x.Emsg } + return "" } -type NSRequest_MkdirRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Recursive bool `protobuf:"varint,2,opt,name=recursive,proto3" json:"recursive,omitempty"` - Mode int64 `protobuf:"varint,3,opt,name=mode,proto3" json:"mode,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (x *NsStatResponse) GetState() string { + if x != nil { + return x.State + } + return "" } -func (m *NSRequest_MkdirRequest) Reset() { *m = NSRequest_MkdirRequest{} } -func (m *NSRequest_MkdirRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_MkdirRequest) ProtoMessage() {} -func (*NSRequest_MkdirRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 0} +func (x *NsStatResponse) GetNfiles() uint64 { + if x != nil { + return x.Nfiles + } + return 0 } -func (m *NSRequest_MkdirRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_MkdirRequest.Unmarshal(m, b) +func (x *NsStatResponse) GetNcontainers() uint64 { + if x != nil { + return x.Ncontainers + } + return 0 } -func (m *NSRequest_MkdirRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_MkdirRequest.Marshal(b, m, deterministic) + +func (x *NsStatResponse) GetBootTime() uint64 { + if x != nil { + return x.BootTime + } + return 0 } -func (m *NSRequest_MkdirRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_MkdirRequest.Merge(m, src) + +func (x *NsStatResponse) GetCurrentFid() uint64 { + if x != nil { + return x.CurrentFid + } + return 0 } -func (m *NSRequest_MkdirRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_MkdirRequest.Size(m) + +func (x *NsStatResponse) GetCurrentCid() uint64 { + if x != nil { + return x.CurrentCid + } + return 0 } -func (m *NSRequest_MkdirRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_MkdirRequest.DiscardUnknown(m) + +func (x *NsStatResponse) GetMemVirtual() uint64 { + if x != nil { + return x.MemVirtual + } + return 0 } -var xxx_messageInfo_NSRequest_MkdirRequest proto.InternalMessageInfo +func (x *NsStatResponse) GetMemResident() uint64 { + if x != nil { + return x.MemResident + } + return 0 +} -func (m *NSRequest_MkdirRequest) GetId() *MDId { - if m != nil { - return m.Id +func (x *NsStatResponse) GetMemShare() uint64 { + if x != nil { + return x.MemShare } - return nil + return 0 } -func (m *NSRequest_MkdirRequest) GetRecursive() bool { - if m != nil { - return m.Recursive +func (x *NsStatResponse) GetMemGrowth() uint64 { + if x != nil { + return x.MemGrowth } - return false + return 0 } -func (m *NSRequest_MkdirRequest) GetMode() int64 { - if m != nil { - return m.Mode +func (x *NsStatResponse) GetThreads() uint64 { + if x != nil { + return x.Threads } return 0 } -type NSRequest_RmdirRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (x *NsStatResponse) GetFds() uint64 { + if x != nil { + return x.Fds + } + return 0 } -func (m *NSRequest_RmdirRequest) Reset() { *m = NSRequest_RmdirRequest{} } -func (m *NSRequest_RmdirRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_RmdirRequest) ProtoMessage() {} -func (*NSRequest_RmdirRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 1} +func (x *NsStatResponse) GetUptime() uint64 { + if x != nil { + return x.Uptime + } + return 0 } -func (m *NSRequest_RmdirRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_RmdirRequest.Unmarshal(m, b) +type ManilaRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RequestType MANILA_REQUEST_TYPE `protobuf:"varint,1,opt,name=request_type,json=requestType,proto3,enum=eos.rpc.MANILA_REQUEST_TYPE" json:"request_type,omitempty"` + AuthKey string `protobuf:"bytes,2,opt,name=auth_key,json=authKey,proto3" json:"auth_key,omitempty"` + Protocol string `protobuf:"bytes,3,opt,name=protocol,proto3" json:"protocol,omitempty"` + ShareName string `protobuf:"bytes,4,opt,name=share_name,json=shareName,proto3" json:"share_name,omitempty"` + Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"` + ShareId string `protobuf:"bytes,6,opt,name=share_id,json=shareId,proto3" json:"share_id,omitempty"` + ShareGroupId string `protobuf:"bytes,7,opt,name=share_group_id,json=shareGroupId,proto3" json:"share_group_id,omitempty"` + Quota int32 `protobuf:"varint,8,opt,name=quota,proto3" json:"quota,omitempty"` + Creator string `protobuf:"bytes,9,opt,name=creator,proto3" json:"creator,omitempty"` + Egroup string `protobuf:"bytes,10,opt,name=egroup,proto3" json:"egroup,omitempty"` + AdminEgroup string `protobuf:"bytes,11,opt,name=admin_egroup,json=adminEgroup,proto3" json:"admin_egroup,omitempty"` + ShareHost string `protobuf:"bytes,12,opt,name=share_host,json=shareHost,proto3" json:"share_host,omitempty"` + ShareLocation string `protobuf:"bytes,13,opt,name=share_location,json=shareLocation,proto3" json:"share_location,omitempty"` } -func (m *NSRequest_RmdirRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_RmdirRequest.Marshal(b, m, deterministic) + +func (x *ManilaRequest) Reset() { + *x = ManilaRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest_RmdirRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_RmdirRequest.Merge(m, src) + +func (x *ManilaRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NSRequest_RmdirRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_RmdirRequest.Size(m) + +func (*ManilaRequest) ProtoMessage() {} + +func (x *ManilaRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func (m *NSRequest_RmdirRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_RmdirRequest.DiscardUnknown(m) + +// Deprecated: Use ManilaRequest.ProtoReflect.Descriptor instead. +func (*ManilaRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{24} } -var xxx_messageInfo_NSRequest_RmdirRequest proto.InternalMessageInfo +func (x *ManilaRequest) GetRequestType() MANILA_REQUEST_TYPE { + if x != nil { + return x.RequestType + } + return MANILA_REQUEST_TYPE_CREATE_SHARE +} -func (m *NSRequest_RmdirRequest) GetId() *MDId { - if m != nil { - return m.Id +func (x *ManilaRequest) GetAuthKey() string { + if x != nil { + return x.AuthKey } - return nil + return "" } -type NSRequest_TouchRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (x *ManilaRequest) GetProtocol() string { + if x != nil { + return x.Protocol + } + return "" } -func (m *NSRequest_TouchRequest) Reset() { *m = NSRequest_TouchRequest{} } -func (m *NSRequest_TouchRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_TouchRequest) ProtoMessage() {} -func (*NSRequest_TouchRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 2} +func (x *ManilaRequest) GetShareName() string { + if x != nil { + return x.ShareName + } + return "" } -func (m *NSRequest_TouchRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_TouchRequest.Unmarshal(m, b) +func (x *ManilaRequest) GetDescription() string { + if x != nil { + return x.Description + } + return "" } -func (m *NSRequest_TouchRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_TouchRequest.Marshal(b, m, deterministic) + +func (x *ManilaRequest) GetShareId() string { + if x != nil { + return x.ShareId + } + return "" } -func (m *NSRequest_TouchRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_TouchRequest.Merge(m, src) + +func (x *ManilaRequest) GetShareGroupId() string { + if x != nil { + return x.ShareGroupId + } + return "" } -func (m *NSRequest_TouchRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_TouchRequest.Size(m) + +func (x *ManilaRequest) GetQuota() int32 { + if x != nil { + return x.Quota + } + return 0 } -func (m *NSRequest_TouchRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_TouchRequest.DiscardUnknown(m) + +func (x *ManilaRequest) GetCreator() string { + if x != nil { + return x.Creator + } + return "" } -var xxx_messageInfo_NSRequest_TouchRequest proto.InternalMessageInfo +func (x *ManilaRequest) GetEgroup() string { + if x != nil { + return x.Egroup + } + return "" +} -func (m *NSRequest_TouchRequest) GetId() *MDId { - if m != nil { - return m.Id +func (x *ManilaRequest) GetAdminEgroup() string { + if x != nil { + return x.AdminEgroup } - return nil + return "" } -type NSRequest_UnlinkRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Norecycle bool `protobuf:"varint,3,opt,name=norecycle,proto3" json:"norecycle,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (x *ManilaRequest) GetShareHost() string { + if x != nil { + return x.ShareHost + } + return "" } -func (m *NSRequest_UnlinkRequest) Reset() { *m = NSRequest_UnlinkRequest{} } -func (m *NSRequest_UnlinkRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_UnlinkRequest) ProtoMessage() {} -func (*NSRequest_UnlinkRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 3} +func (x *ManilaRequest) GetShareLocation() string { + if x != nil { + return x.ShareLocation + } + return "" } -func (m *NSRequest_UnlinkRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_UnlinkRequest.Unmarshal(m, b) +type ManilaResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` //for generic messages + Code int32 `protobuf:"varint,2,opt,name=code,proto3" json:"code,omitempty"` // < 1 is an error -- > 1 is OK + TotalUsed int64 `protobuf:"varint,3,opt,name=total_used,json=totalUsed,proto3" json:"total_used,omitempty"` + TotalCapacity int64 `protobuf:"varint,4,opt,name=total_capacity,json=totalCapacity,proto3" json:"total_capacity,omitempty"` + NewShareQuota int64 `protobuf:"varint,5,opt,name=new_share_quota,json=newShareQuota,proto3" json:"new_share_quota,omitempty"` + NewSharePath string `protobuf:"bytes,6,opt,name=new_share_path,json=newSharePath,proto3" json:"new_share_path,omitempty"` } -func (m *NSRequest_UnlinkRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_UnlinkRequest.Marshal(b, m, deterministic) + +func (x *ManilaResponse) Reset() { + *x = ManilaResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest_UnlinkRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_UnlinkRequest.Merge(m, src) + +func (x *ManilaResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NSRequest_UnlinkRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_UnlinkRequest.Size(m) + +func (*ManilaResponse) ProtoMessage() {} + +func (x *ManilaResponse) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func (m *NSRequest_UnlinkRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_UnlinkRequest.DiscardUnknown(m) + +// Deprecated: Use ManilaResponse.ProtoReflect.Descriptor instead. +func (*ManilaResponse) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{25} } -var xxx_messageInfo_NSRequest_UnlinkRequest proto.InternalMessageInfo +func (x *ManilaResponse) GetMsg() string { + if x != nil { + return x.Msg + } + return "" +} -func (m *NSRequest_UnlinkRequest) GetId() *MDId { - if m != nil { - return m.Id +func (x *ManilaResponse) GetCode() int32 { + if x != nil { + return x.Code } - return nil + return 0 } -func (m *NSRequest_UnlinkRequest) GetNorecycle() bool { - if m != nil { - return m.Norecycle +func (x *ManilaResponse) GetTotalUsed() int64 { + if x != nil { + return x.TotalUsed } - return false + return 0 } -type NSRequest_RmRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Recursive bool `protobuf:"varint,2,opt,name=recursive,proto3" json:"recursive,omitempty"` - Norecycle bool `protobuf:"varint,3,opt,name=norecycle,proto3" json:"norecycle,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (x *ManilaResponse) GetTotalCapacity() int64 { + if x != nil { + return x.TotalCapacity + } + return 0 } -func (m *NSRequest_RmRequest) Reset() { *m = NSRequest_RmRequest{} } -func (m *NSRequest_RmRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_RmRequest) ProtoMessage() {} -func (*NSRequest_RmRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 4} +func (x *ManilaResponse) GetNewShareQuota() int64 { + if x != nil { + return x.NewShareQuota + } + return 0 } -func (m *NSRequest_RmRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_RmRequest.Unmarshal(m, b) +func (x *ManilaResponse) GetNewSharePath() string { + if x != nil { + return x.NewSharePath + } + return "" } -func (m *NSRequest_RmRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_RmRequest.Marshal(b, m, deterministic) + +type NSRequest_MkdirRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Recursive bool `protobuf:"varint,2,opt,name=recursive,proto3" json:"recursive,omitempty"` + Mode int64 `protobuf:"varint,3,opt,name=mode,proto3" json:"mode,omitempty"` } -func (m *NSRequest_RmRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_RmRequest.Merge(m, src) + +func (x *NSRequest_MkdirRequest) Reset() { + *x = NSRequest_MkdirRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest_RmRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_RmRequest.Size(m) + +func (x *NSRequest_MkdirRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NSRequest_RmRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_RmRequest.DiscardUnknown(m) + +func (*NSRequest_MkdirRequest) ProtoMessage() {} + +func (x *NSRequest_MkdirRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[29] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_NSRequest_RmRequest proto.InternalMessageInfo +// Deprecated: Use NSRequest_MkdirRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_MkdirRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 0} +} -func (m *NSRequest_RmRequest) GetId() *MDId { - if m != nil { - return m.Id +func (x *NSRequest_MkdirRequest) GetId() *MDId { + if x != nil { + return x.Id } return nil } -func (m *NSRequest_RmRequest) GetRecursive() bool { - if m != nil { - return m.Recursive +func (x *NSRequest_MkdirRequest) GetRecursive() bool { + if x != nil { + return x.Recursive } return false } -func (m *NSRequest_RmRequest) GetNorecycle() bool { - if m != nil { - return m.Norecycle +func (x *NSRequest_MkdirRequest) GetMode() int64 { + if x != nil { + return x.Mode } - return false + return 0 } -type NSRequest_RenameRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Target []byte `protobuf:"bytes,2,opt,name=target,proto3" json:"target,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} +type NSRequest_RmdirRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *NSRequest_RenameRequest) Reset() { *m = NSRequest_RenameRequest{} } -func (m *NSRequest_RenameRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_RenameRequest) ProtoMessage() {} -func (*NSRequest_RenameRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 5} + Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` } -func (m *NSRequest_RenameRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_RenameRequest.Unmarshal(m, b) -} -func (m *NSRequest_RenameRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_RenameRequest.Marshal(b, m, deterministic) -} -func (m *NSRequest_RenameRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_RenameRequest.Merge(m, src) +func (x *NSRequest_RmdirRequest) Reset() { + *x = NSRequest_RmdirRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest_RenameRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_RenameRequest.Size(m) + +func (x *NSRequest_RmdirRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NSRequest_RenameRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_RenameRequest.DiscardUnknown(m) + +func (*NSRequest_RmdirRequest) ProtoMessage() {} + +func (x *NSRequest_RmdirRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[30] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_NSRequest_RenameRequest proto.InternalMessageInfo +// Deprecated: Use NSRequest_RmdirRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_RmdirRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 1} +} -func (m *NSRequest_RenameRequest) GetId() *MDId { - if m != nil { - return m.Id +func (x *NSRequest_RmdirRequest) GetId() *MDId { + if x != nil { + return x.Id } return nil } -func (m *NSRequest_RenameRequest) GetTarget() []byte { - if m != nil { - return m.Target +type NSRequest_TouchRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *NSRequest_TouchRequest) Reset() { + *x = NSRequest_TouchRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return nil } -type NSRequest_SymlinkRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Target []byte `protobuf:"bytes,2,opt,name=target,proto3" json:"target,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (x *NSRequest_TouchRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NSRequest_SymlinkRequest) Reset() { *m = NSRequest_SymlinkRequest{} } -func (m *NSRequest_SymlinkRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_SymlinkRequest) ProtoMessage() {} -func (*NSRequest_SymlinkRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 6} +func (*NSRequest_TouchRequest) ProtoMessage() {} + +func (x *NSRequest_TouchRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[31] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func (m *NSRequest_SymlinkRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_SymlinkRequest.Unmarshal(m, b) +// Deprecated: Use NSRequest_TouchRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_TouchRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 2} } -func (m *NSRequest_SymlinkRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_SymlinkRequest.Marshal(b, m, deterministic) + +func (x *NSRequest_TouchRequest) GetId() *MDId { + if x != nil { + return x.Id + } + return nil } -func (m *NSRequest_SymlinkRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_SymlinkRequest.Merge(m, src) + +type NSRequest_UnlinkRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Norecycle bool `protobuf:"varint,3,opt,name=norecycle,proto3" json:"norecycle,omitempty"` } -func (m *NSRequest_SymlinkRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_SymlinkRequest.Size(m) + +func (x *NSRequest_UnlinkRequest) Reset() { + *x = NSRequest_UnlinkRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest_SymlinkRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_SymlinkRequest.DiscardUnknown(m) + +func (x *NSRequest_UnlinkRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_NSRequest_SymlinkRequest proto.InternalMessageInfo +func (*NSRequest_UnlinkRequest) ProtoMessage() {} -func (m *NSRequest_SymlinkRequest) GetId() *MDId { - if m != nil { - return m.Id +func (x *NSRequest_UnlinkRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[32] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (m *NSRequest_SymlinkRequest) GetTarget() []byte { - if m != nil { - return m.Target +// Deprecated: Use NSRequest_UnlinkRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_UnlinkRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 3} +} + +func (x *NSRequest_UnlinkRequest) GetId() *MDId { + if x != nil { + return x.Id } return nil } -type NSRequest_VersionRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Cmd NSRequest_VersionRequest_VERSION_CMD `protobuf:"varint,2,opt,name=cmd,proto3,enum=eos.rpc.NSRequest_VersionRequest_VERSION_CMD" json:"cmd,omitempty"` - Maxversion int32 `protobuf:"varint,3,opt,name=maxversion,proto3" json:"maxversion,omitempty"` - Grabversion string `protobuf:"bytes,4,opt,name=grabversion,proto3" json:"grabversion,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest_VersionRequest) Reset() { *m = NSRequest_VersionRequest{} } -func (m *NSRequest_VersionRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_VersionRequest) ProtoMessage() {} -func (*NSRequest_VersionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 7} +func (x *NSRequest_UnlinkRequest) GetNorecycle() bool { + if x != nil { + return x.Norecycle + } + return false } -func (m *NSRequest_VersionRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_VersionRequest.Unmarshal(m, b) -} -func (m *NSRequest_VersionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_VersionRequest.Marshal(b, m, deterministic) -} -func (m *NSRequest_VersionRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_VersionRequest.Merge(m, src) +type NSRequest_RmRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Recursive bool `protobuf:"varint,2,opt,name=recursive,proto3" json:"recursive,omitempty"` + Norecycle bool `protobuf:"varint,3,opt,name=norecycle,proto3" json:"norecycle,omitempty"` } -func (m *NSRequest_VersionRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_VersionRequest.Size(m) + +func (x *NSRequest_RmRequest) Reset() { + *x = NSRequest_RmRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest_VersionRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_VersionRequest.DiscardUnknown(m) + +func (x *NSRequest_RmRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_NSRequest_VersionRequest proto.InternalMessageInfo +func (*NSRequest_RmRequest) ProtoMessage() {} -func (m *NSRequest_VersionRequest) GetId() *MDId { - if m != nil { - return m.Id +func (x *NSRequest_RmRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[33] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (m *NSRequest_VersionRequest) GetCmd() NSRequest_VersionRequest_VERSION_CMD { - if m != nil { - return m.Cmd - } - return NSRequest_VersionRequest_CREATE +// Deprecated: Use NSRequest_RmRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_RmRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 4} } -func (m *NSRequest_VersionRequest) GetMaxversion() int32 { - if m != nil { - return m.Maxversion +func (x *NSRequest_RmRequest) GetId() *MDId { + if x != nil { + return x.Id } - return 0 + return nil } -func (m *NSRequest_VersionRequest) GetGrabversion() string { - if m != nil { - return m.Grabversion +func (x *NSRequest_RmRequest) GetRecursive() bool { + if x != nil { + return x.Recursive } - return "" + return false } -type NSRequest_RecycleRequest struct { - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - Cmd NSRequest_RecycleRequest_RECYCLE_CMD `protobuf:"varint,2,opt,name=cmd,proto3,enum=eos.rpc.NSRequest_RecycleRequest_RECYCLE_CMD" json:"cmd,omitempty"` - Restoreflag *NSRequest_RecycleRequest_RestoreFlags `protobuf:"bytes,3,opt,name=restoreflag,proto3" json:"restoreflag,omitempty"` - Purgedate *NSRequest_RecycleRequest_PurgeDate `protobuf:"bytes,4,opt,name=purgedate,proto3" json:"purgedate,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest_RecycleRequest) Reset() { *m = NSRequest_RecycleRequest{} } -func (m *NSRequest_RecycleRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_RecycleRequest) ProtoMessage() {} -func (*NSRequest_RecycleRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 8} +func (x *NSRequest_RmRequest) GetNorecycle() bool { + if x != nil { + return x.Norecycle + } + return false } -func (m *NSRequest_RecycleRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_RecycleRequest.Unmarshal(m, b) -} -func (m *NSRequest_RecycleRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_RecycleRequest.Marshal(b, m, deterministic) -} -func (m *NSRequest_RecycleRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_RecycleRequest.Merge(m, src) +type NSRequest_RenameRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Target []byte `protobuf:"bytes,2,opt,name=target,proto3" json:"target,omitempty"` } -func (m *NSRequest_RecycleRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_RecycleRequest.Size(m) + +func (x *NSRequest_RenameRequest) Reset() { + *x = NSRequest_RenameRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest_RecycleRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_RecycleRequest.DiscardUnknown(m) + +func (x *NSRequest_RenameRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_NSRequest_RecycleRequest proto.InternalMessageInfo +func (*NSRequest_RenameRequest) ProtoMessage() {} -func (m *NSRequest_RecycleRequest) GetKey() string { - if m != nil { - return m.Key +func (x *NSRequest_RenameRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[34] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -func (m *NSRequest_RecycleRequest) GetCmd() NSRequest_RecycleRequest_RECYCLE_CMD { - if m != nil { - return m.Cmd - } - return NSRequest_RecycleRequest_RESTORE +// Deprecated: Use NSRequest_RenameRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_RenameRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 5} } -func (m *NSRequest_RecycleRequest) GetRestoreflag() *NSRequest_RecycleRequest_RestoreFlags { - if m != nil { - return m.Restoreflag +func (x *NSRequest_RenameRequest) GetId() *MDId { + if x != nil { + return x.Id } return nil } -func (m *NSRequest_RecycleRequest) GetPurgedate() *NSRequest_RecycleRequest_PurgeDate { - if m != nil { - return m.Purgedate +func (x *NSRequest_RenameRequest) GetTarget() []byte { + if x != nil { + return x.Target } return nil } -type NSRequest_RecycleRequest_RestoreFlags struct { - Force bool `protobuf:"varint,1,opt,name=force,proto3" json:"force,omitempty"` - Mkpath bool `protobuf:"varint,2,opt,name=mkpath,proto3" json:"mkpath,omitempty"` - Versions bool `protobuf:"varint,3,opt,name=versions,proto3" json:"versions,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +type NSRequest_SymlinkRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Target []byte `protobuf:"bytes,2,opt,name=target,proto3" json:"target,omitempty"` } -func (m *NSRequest_RecycleRequest_RestoreFlags) Reset() { *m = NSRequest_RecycleRequest_RestoreFlags{} } -func (m *NSRequest_RecycleRequest_RestoreFlags) String() string { return proto.CompactTextString(m) } -func (*NSRequest_RecycleRequest_RestoreFlags) ProtoMessage() {} -func (*NSRequest_RecycleRequest_RestoreFlags) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 8, 0} +func (x *NSRequest_SymlinkRequest) Reset() { + *x = NSRequest_SymlinkRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NSRequest_SymlinkRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NSRequest_SymlinkRequest) ProtoMessage() {} + +func (x *NSRequest_SymlinkRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[35] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NSRequest_SymlinkRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_SymlinkRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 6} } -func (m *NSRequest_RecycleRequest_RestoreFlags) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_RecycleRequest_RestoreFlags.Unmarshal(m, b) +func (x *NSRequest_SymlinkRequest) GetId() *MDId { + if x != nil { + return x.Id + } + return nil } -func (m *NSRequest_RecycleRequest_RestoreFlags) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_RecycleRequest_RestoreFlags.Marshal(b, m, deterministic) + +func (x *NSRequest_SymlinkRequest) GetTarget() []byte { + if x != nil { + return x.Target + } + return nil } -func (m *NSRequest_RecycleRequest_RestoreFlags) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_RecycleRequest_RestoreFlags.Merge(m, src) + +type NSRequest_VersionRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Cmd NSRequest_VersionRequest_VERSION_CMD `protobuf:"varint,2,opt,name=cmd,proto3,enum=eos.rpc.NSRequest_VersionRequest_VERSION_CMD" json:"cmd,omitempty"` + Maxversion int32 `protobuf:"varint,3,opt,name=maxversion,proto3" json:"maxversion,omitempty"` + Grabversion string `protobuf:"bytes,4,opt,name=grabversion,proto3" json:"grabversion,omitempty"` } -func (m *NSRequest_RecycleRequest_RestoreFlags) XXX_Size() int { - return xxx_messageInfo_NSRequest_RecycleRequest_RestoreFlags.Size(m) + +func (x *NSRequest_VersionRequest) Reset() { + *x = NSRequest_VersionRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest_RecycleRequest_RestoreFlags) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_RecycleRequest_RestoreFlags.DiscardUnknown(m) + +func (x *NSRequest_VersionRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_NSRequest_RecycleRequest_RestoreFlags proto.InternalMessageInfo +func (*NSRequest_VersionRequest) ProtoMessage() {} -func (m *NSRequest_RecycleRequest_RestoreFlags) GetForce() bool { - if m != nil { - return m.Force +func (x *NSRequest_VersionRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[36] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return false + return mi.MessageOf(x) } -func (m *NSRequest_RecycleRequest_RestoreFlags) GetMkpath() bool { - if m != nil { - return m.Mkpath +// Deprecated: Use NSRequest_VersionRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_VersionRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 7} +} + +func (x *NSRequest_VersionRequest) GetId() *MDId { + if x != nil { + return x.Id } - return false + return nil } -func (m *NSRequest_RecycleRequest_RestoreFlags) GetVersions() bool { - if m != nil { - return m.Versions +func (x *NSRequest_VersionRequest) GetCmd() NSRequest_VersionRequest_VERSION_CMD { + if x != nil { + return x.Cmd } - return false + return NSRequest_VersionRequest_CREATE } -type NSRequest_RecycleRequest_PurgeDate struct { - Year int32 `protobuf:"varint,1,opt,name=year,proto3" json:"year,omitempty"` - Month int32 `protobuf:"varint,2,opt,name=month,proto3" json:"month,omitempty"` - Day int32 `protobuf:"varint,3,opt,name=day,proto3" json:"day,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (x *NSRequest_VersionRequest) GetMaxversion() int32 { + if x != nil { + return x.Maxversion + } + return 0 } -func (m *NSRequest_RecycleRequest_PurgeDate) Reset() { *m = NSRequest_RecycleRequest_PurgeDate{} } -func (m *NSRequest_RecycleRequest_PurgeDate) String() string { return proto.CompactTextString(m) } -func (*NSRequest_RecycleRequest_PurgeDate) ProtoMessage() {} -func (*NSRequest_RecycleRequest_PurgeDate) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 8, 1} +func (x *NSRequest_VersionRequest) GetGrabversion() string { + if x != nil { + return x.Grabversion + } + return "" } -func (m *NSRequest_RecycleRequest_PurgeDate) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_RecycleRequest_PurgeDate.Unmarshal(m, b) +type NSRequest_RecycleRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Cmd NSRequest_RecycleRequest_RECYCLE_CMD `protobuf:"varint,2,opt,name=cmd,proto3,enum=eos.rpc.NSRequest_RecycleRequest_RECYCLE_CMD" json:"cmd,omitempty"` + Restoreflag *NSRequest_RecycleRequest_RestoreFlags `protobuf:"bytes,3,opt,name=restoreflag,proto3" json:"restoreflag,omitempty"` + Purgedate *NSRequest_RecycleRequest_PurgeDate `protobuf:"bytes,4,opt,name=purgedate,proto3" json:"purgedate,omitempty"` } -func (m *NSRequest_RecycleRequest_PurgeDate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_RecycleRequest_PurgeDate.Marshal(b, m, deterministic) + +func (x *NSRequest_RecycleRequest) Reset() { + *x = NSRequest_RecycleRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest_RecycleRequest_PurgeDate) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_RecycleRequest_PurgeDate.Merge(m, src) + +func (x *NSRequest_RecycleRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NSRequest_RecycleRequest_PurgeDate) XXX_Size() int { - return xxx_messageInfo_NSRequest_RecycleRequest_PurgeDate.Size(m) + +func (*NSRequest_RecycleRequest) ProtoMessage() {} + +func (x *NSRequest_RecycleRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[37] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func (m *NSRequest_RecycleRequest_PurgeDate) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_RecycleRequest_PurgeDate.DiscardUnknown(m) + +// Deprecated: Use NSRequest_RecycleRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_RecycleRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 8} } -var xxx_messageInfo_NSRequest_RecycleRequest_PurgeDate proto.InternalMessageInfo +func (x *NSRequest_RecycleRequest) GetKey() string { + if x != nil { + return x.Key + } + return "" +} -func (m *NSRequest_RecycleRequest_PurgeDate) GetYear() int32 { - if m != nil { - return m.Year +func (x *NSRequest_RecycleRequest) GetCmd() NSRequest_RecycleRequest_RECYCLE_CMD { + if x != nil { + return x.Cmd } - return 0 + return NSRequest_RecycleRequest_RESTORE } -func (m *NSRequest_RecycleRequest_PurgeDate) GetMonth() int32 { - if m != nil { - return m.Month +func (x *NSRequest_RecycleRequest) GetRestoreflag() *NSRequest_RecycleRequest_RestoreFlags { + if x != nil { + return x.Restoreflag } - return 0 + return nil } -func (m *NSRequest_RecycleRequest_PurgeDate) GetDay() int32 { - if m != nil { - return m.Day +func (x *NSRequest_RecycleRequest) GetPurgedate() *NSRequest_RecycleRequest_PurgeDate { + if x != nil { + return x.Purgedate } - return 0 + return nil } type NSRequest_SetXAttrRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Xattrs map[string][]byte `protobuf:"bytes,2,rep,name=xattrs,proto3" json:"xattrs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Recursive bool `protobuf:"varint,3,opt,name=recursive,proto3" json:"recursive,omitempty"` - Keystodelete []string `protobuf:"bytes,4,rep,name=keystodelete,proto3" json:"keystodelete,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest_SetXAttrRequest) Reset() { *m = NSRequest_SetXAttrRequest{} } -func (m *NSRequest_SetXAttrRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_SetXAttrRequest) ProtoMessage() {} -func (*NSRequest_SetXAttrRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 9} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *NSRequest_SetXAttrRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_SetXAttrRequest.Unmarshal(m, b) + Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Xattrs map[string][]byte `protobuf:"bytes,2,rep,name=xattrs,proto3" json:"xattrs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Recursive bool `protobuf:"varint,3,opt,name=recursive,proto3" json:"recursive,omitempty"` + Keystodelete []string `protobuf:"bytes,4,rep,name=keystodelete,proto3" json:"keystodelete,omitempty"` + Create bool `protobuf:"varint,5,opt,name=create,proto3" json:"create,omitempty"` } -func (m *NSRequest_SetXAttrRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_SetXAttrRequest.Marshal(b, m, deterministic) -} -func (m *NSRequest_SetXAttrRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_SetXAttrRequest.Merge(m, src) + +func (x *NSRequest_SetXAttrRequest) Reset() { + *x = NSRequest_SetXAttrRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest_SetXAttrRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_SetXAttrRequest.Size(m) + +func (x *NSRequest_SetXAttrRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NSRequest_SetXAttrRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_SetXAttrRequest.DiscardUnknown(m) + +func (*NSRequest_SetXAttrRequest) ProtoMessage() {} + +func (x *NSRequest_SetXAttrRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[38] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_NSRequest_SetXAttrRequest proto.InternalMessageInfo +// Deprecated: Use NSRequest_SetXAttrRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_SetXAttrRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 9} +} -func (m *NSRequest_SetXAttrRequest) GetId() *MDId { - if m != nil { - return m.Id +func (x *NSRequest_SetXAttrRequest) GetId() *MDId { + if x != nil { + return x.Id } return nil } -func (m *NSRequest_SetXAttrRequest) GetXattrs() map[string][]byte { - if m != nil { - return m.Xattrs +func (x *NSRequest_SetXAttrRequest) GetXattrs() map[string][]byte { + if x != nil { + return x.Xattrs } return nil } -func (m *NSRequest_SetXAttrRequest) GetRecursive() bool { - if m != nil { - return m.Recursive +func (x *NSRequest_SetXAttrRequest) GetRecursive() bool { + if x != nil { + return x.Recursive } return false } -func (m *NSRequest_SetXAttrRequest) GetKeystodelete() []string { - if m != nil { - return m.Keystodelete +func (x *NSRequest_SetXAttrRequest) GetKeystodelete() []string { + if x != nil { + return x.Keystodelete } return nil } -type NSRequest_ChownRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Owner *RoleId `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (x *NSRequest_SetXAttrRequest) GetCreate() bool { + if x != nil { + return x.Create + } + return false } -func (m *NSRequest_ChownRequest) Reset() { *m = NSRequest_ChownRequest{} } -func (m *NSRequest_ChownRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_ChownRequest) ProtoMessage() {} -func (*NSRequest_ChownRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 10} -} +type NSRequest_ChownRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *NSRequest_ChownRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_ChownRequest.Unmarshal(m, b) -} -func (m *NSRequest_ChownRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_ChownRequest.Marshal(b, m, deterministic) + Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Owner *RoleId `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"` } -func (m *NSRequest_ChownRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_ChownRequest.Merge(m, src) + +func (x *NSRequest_ChownRequest) Reset() { + *x = NSRequest_ChownRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest_ChownRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_ChownRequest.Size(m) + +func (x *NSRequest_ChownRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NSRequest_ChownRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_ChownRequest.DiscardUnknown(m) + +func (*NSRequest_ChownRequest) ProtoMessage() {} + +func (x *NSRequest_ChownRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[39] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_NSRequest_ChownRequest proto.InternalMessageInfo +// Deprecated: Use NSRequest_ChownRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_ChownRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 10} +} -func (m *NSRequest_ChownRequest) GetId() *MDId { - if m != nil { - return m.Id +func (x *NSRequest_ChownRequest) GetId() *MDId { + if x != nil { + return x.Id } return nil } -func (m *NSRequest_ChownRequest) GetOwner() *RoleId { - if m != nil { - return m.Owner +func (x *NSRequest_ChownRequest) GetOwner() *RoleId { + if x != nil { + return x.Owner } return nil } type NSRequest_ChmodRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Mode int64 `protobuf:"varint,2,opt,name=mode,proto3" json:"mode,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *NSRequest_ChmodRequest) Reset() { *m = NSRequest_ChmodRequest{} } -func (m *NSRequest_ChmodRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_ChmodRequest) ProtoMessage() {} -func (*NSRequest_ChmodRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 11} + Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Mode int64 `protobuf:"varint,2,opt,name=mode,proto3" json:"mode,omitempty"` } -func (m *NSRequest_ChmodRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_ChmodRequest.Unmarshal(m, b) -} -func (m *NSRequest_ChmodRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_ChmodRequest.Marshal(b, m, deterministic) -} -func (m *NSRequest_ChmodRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_ChmodRequest.Merge(m, src) +func (x *NSRequest_ChmodRequest) Reset() { + *x = NSRequest_ChmodRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest_ChmodRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_ChmodRequest.Size(m) + +func (x *NSRequest_ChmodRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NSRequest_ChmodRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_ChmodRequest.DiscardUnknown(m) + +func (*NSRequest_ChmodRequest) ProtoMessage() {} + +func (x *NSRequest_ChmodRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[40] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_NSRequest_ChmodRequest proto.InternalMessageInfo +// Deprecated: Use NSRequest_ChmodRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_ChmodRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 11} +} -func (m *NSRequest_ChmodRequest) GetId() *MDId { - if m != nil { - return m.Id +func (x *NSRequest_ChmodRequest) GetId() *MDId { + if x != nil { + return x.Id } return nil } -func (m *NSRequest_ChmodRequest) GetMode() int64 { - if m != nil { - return m.Mode +func (x *NSRequest_ChmodRequest) GetMode() int64 { + if x != nil { + return x.Mode } return 0 } type NSRequest_AclRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Cmd NSRequest_AclRequest_ACL_COMMAND `protobuf:"varint,2,opt,name=cmd,proto3,enum=eos.rpc.NSRequest_AclRequest_ACL_COMMAND" json:"cmd,omitempty"` - Recursive bool `protobuf:"varint,3,opt,name=recursive,proto3" json:"recursive,omitempty"` - Type NSRequest_AclRequest_ACL_TYPE `protobuf:"varint,4,opt,name=type,proto3,enum=eos.rpc.NSRequest_AclRequest_ACL_TYPE" json:"type,omitempty"` - Rule string `protobuf:"bytes,5,opt,name=rule,proto3" json:"rule,omitempty"` - Position uint32 `protobuf:"varint,6,opt,name=position,proto3" json:"position,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest_AclRequest) Reset() { *m = NSRequest_AclRequest{} } -func (m *NSRequest_AclRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_AclRequest) ProtoMessage() {} -func (*NSRequest_AclRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 12} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *NSRequest_AclRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_AclRequest.Unmarshal(m, b) -} -func (m *NSRequest_AclRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_AclRequest.Marshal(b, m, deterministic) + Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Cmd NSRequest_AclRequest_ACL_COMMAND `protobuf:"varint,2,opt,name=cmd,proto3,enum=eos.rpc.NSRequest_AclRequest_ACL_COMMAND" json:"cmd,omitempty"` + Recursive bool `protobuf:"varint,3,opt,name=recursive,proto3" json:"recursive,omitempty"` + Type NSRequest_AclRequest_ACL_TYPE `protobuf:"varint,4,opt,name=type,proto3,enum=eos.rpc.NSRequest_AclRequest_ACL_TYPE" json:"type,omitempty"` + Rule string `protobuf:"bytes,5,opt,name=rule,proto3" json:"rule,omitempty"` + Position uint32 `protobuf:"varint,6,opt,name=position,proto3" json:"position,omitempty"` } -func (m *NSRequest_AclRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_AclRequest.Merge(m, src) + +func (x *NSRequest_AclRequest) Reset() { + *x = NSRequest_AclRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest_AclRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_AclRequest.Size(m) + +func (x *NSRequest_AclRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NSRequest_AclRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_AclRequest.DiscardUnknown(m) + +func (*NSRequest_AclRequest) ProtoMessage() {} + +func (x *NSRequest_AclRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[41] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_NSRequest_AclRequest proto.InternalMessageInfo +// Deprecated: Use NSRequest_AclRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_AclRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 12} +} -func (m *NSRequest_AclRequest) GetId() *MDId { - if m != nil { - return m.Id +func (x *NSRequest_AclRequest) GetId() *MDId { + if x != nil { + return x.Id } return nil } -func (m *NSRequest_AclRequest) GetCmd() NSRequest_AclRequest_ACL_COMMAND { - if m != nil { - return m.Cmd +func (x *NSRequest_AclRequest) GetCmd() NSRequest_AclRequest_ACL_COMMAND { + if x != nil { + return x.Cmd } return NSRequest_AclRequest_NONE } -func (m *NSRequest_AclRequest) GetRecursive() bool { - if m != nil { - return m.Recursive +func (x *NSRequest_AclRequest) GetRecursive() bool { + if x != nil { + return x.Recursive } return false } -func (m *NSRequest_AclRequest) GetType() NSRequest_AclRequest_ACL_TYPE { - if m != nil { - return m.Type +func (x *NSRequest_AclRequest) GetType() NSRequest_AclRequest_ACL_TYPE { + if x != nil { + return x.Type } return NSRequest_AclRequest_USER_ACL } -func (m *NSRequest_AclRequest) GetRule() string { - if m != nil { - return m.Rule +func (x *NSRequest_AclRequest) GetRule() string { + if x != nil { + return x.Rule } return "" } -func (m *NSRequest_AclRequest) GetPosition() uint32 { - if m != nil { - return m.Position +func (x *NSRequest_AclRequest) GetPosition() uint32 { + if x != nil { + return x.Position } return 0 } type NSRequest_TokenRequest struct { - Token *ShareToken `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *NSRequest_TokenRequest) Reset() { *m = NSRequest_TokenRequest{} } -func (m *NSRequest_TokenRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_TokenRequest) ProtoMessage() {} -func (*NSRequest_TokenRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 13} + Token *ShareToken `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` } -func (m *NSRequest_TokenRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_TokenRequest.Unmarshal(m, b) -} -func (m *NSRequest_TokenRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_TokenRequest.Marshal(b, m, deterministic) -} -func (m *NSRequest_TokenRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_TokenRequest.Merge(m, src) +func (x *NSRequest_TokenRequest) Reset() { + *x = NSRequest_TokenRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest_TokenRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_TokenRequest.Size(m) + +func (x *NSRequest_TokenRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NSRequest_TokenRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_TokenRequest.DiscardUnknown(m) + +func (*NSRequest_TokenRequest) ProtoMessage() {} + +func (x *NSRequest_TokenRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[42] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_NSRequest_TokenRequest proto.InternalMessageInfo +// Deprecated: Use NSRequest_TokenRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_TokenRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 13} +} -func (m *NSRequest_TokenRequest) GetToken() *ShareToken { - if m != nil { - return m.Token +func (x *NSRequest_TokenRequest) GetToken() *ShareToken { + if x != nil { + return x.Token } return nil } type NSRequest_QuotaRequest struct { - Path []byte `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` - Id *RoleId `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` - Op QUOTAOP `protobuf:"varint,3,opt,name=op,proto3,enum=eos.rpc.QUOTAOP" json:"op,omitempty"` - Maxfiles uint64 `protobuf:"varint,4,opt,name=maxfiles,proto3" json:"maxfiles,omitempty"` - Maxbytes uint64 `protobuf:"varint,5,opt,name=maxbytes,proto3" json:"maxbytes,omitempty"` - Entry QUOTAENTRY `protobuf:"varint,6,opt,name=entry,proto3,enum=eos.rpc.QUOTAENTRY" json:"entry,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest_QuotaRequest) Reset() { *m = NSRequest_QuotaRequest{} } -func (m *NSRequest_QuotaRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_QuotaRequest) ProtoMessage() {} -func (*NSRequest_QuotaRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 14} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *NSRequest_QuotaRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_QuotaRequest.Unmarshal(m, b) -} -func (m *NSRequest_QuotaRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_QuotaRequest.Marshal(b, m, deterministic) + Path []byte `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + Id *RoleId `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` + Op QUOTAOP `protobuf:"varint,3,opt,name=op,proto3,enum=eos.rpc.QUOTAOP" json:"op,omitempty"` // get or set, rm or rmnode + Maxfiles uint64 `protobuf:"varint,4,opt,name=maxfiles,proto3" json:"maxfiles,omitempty"` // maximum number of bytes (volume quota) for setting + Maxbytes uint64 `protobuf:"varint,5,opt,name=maxbytes,proto3" json:"maxbytes,omitempty"` // maximum number of bytes (volume quota) for setting + Entry QUOTAENTRY `protobuf:"varint,6,opt,name=entry,proto3,enum=eos.rpc.QUOTAENTRY" json:"entry,omitempty"` // select volume or inode entry for deletion } -func (m *NSRequest_QuotaRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_QuotaRequest.Merge(m, src) + +func (x *NSRequest_QuotaRequest) Reset() { + *x = NSRequest_QuotaRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest_QuotaRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_QuotaRequest.Size(m) + +func (x *NSRequest_QuotaRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NSRequest_QuotaRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_QuotaRequest.DiscardUnknown(m) + +func (*NSRequest_QuotaRequest) ProtoMessage() {} + +func (x *NSRequest_QuotaRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[43] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_NSRequest_QuotaRequest proto.InternalMessageInfo +// Deprecated: Use NSRequest_QuotaRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_QuotaRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 14} +} -func (m *NSRequest_QuotaRequest) GetPath() []byte { - if m != nil { - return m.Path +func (x *NSRequest_QuotaRequest) GetPath() []byte { + if x != nil { + return x.Path } return nil } -func (m *NSRequest_QuotaRequest) GetId() *RoleId { - if m != nil { - return m.Id +func (x *NSRequest_QuotaRequest) GetId() *RoleId { + if x != nil { + return x.Id } return nil } -func (m *NSRequest_QuotaRequest) GetOp() QUOTAOP { - if m != nil { - return m.Op +func (x *NSRequest_QuotaRequest) GetOp() QUOTAOP { + if x != nil { + return x.Op } return QUOTAOP_GET } -func (m *NSRequest_QuotaRequest) GetMaxfiles() uint64 { - if m != nil { - return m.Maxfiles +func (x *NSRequest_QuotaRequest) GetMaxfiles() uint64 { + if x != nil { + return x.Maxfiles } return 0 } -func (m *NSRequest_QuotaRequest) GetMaxbytes() uint64 { - if m != nil { - return m.Maxbytes +func (x *NSRequest_QuotaRequest) GetMaxbytes() uint64 { + if x != nil { + return x.Maxbytes } return 0 } -func (m *NSRequest_QuotaRequest) GetEntry() QUOTAENTRY { - if m != nil { - return m.Entry +func (x *NSRequest_QuotaRequest) GetEntry() QUOTAENTRY { + if x != nil { + return x.Entry } return QUOTAENTRY_NONE } -type NSResponse struct { - Error *NSResponse_ErrorResponse `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Version *NSResponse_VersionResponse `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` - Recycle *NSResponse_RecycleResponse `protobuf:"bytes,3,opt,name=recycle,proto3" json:"recycle,omitempty"` - Acl *NSResponse_AclResponse `protobuf:"bytes,4,opt,name=acl,proto3" json:"acl,omitempty"` - Quota *NSResponse_QuotaResponse `protobuf:"bytes,5,opt,name=quota,proto3" json:"quota,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSResponse) Reset() { *m = NSResponse{} } -func (m *NSResponse) String() string { return proto.CompactTextString(m) } -func (*NSResponse) ProtoMessage() {} -func (*NSResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{21} -} +type NSRequest_ShareRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *NSResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSResponse.Unmarshal(m, b) -} -func (m *NSResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSResponse.Marshal(b, m, deterministic) + // Types that are assignable to Subcmd: + // *NSRequest_ShareRequest_Ls + // *NSRequest_ShareRequest_Op + Subcmd isNSRequest_ShareRequest_Subcmd `protobuf_oneof:"subcmd"` } -func (m *NSResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSResponse.Merge(m, src) -} -func (m *NSResponse) XXX_Size() int { - return xxx_messageInfo_NSResponse.Size(m) + +func (x *NSRequest_ShareRequest) Reset() { + *x = NSRequest_ShareRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSResponse) XXX_DiscardUnknown() { - xxx_messageInfo_NSResponse.DiscardUnknown(m) + +func (x *NSRequest_ShareRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_NSResponse proto.InternalMessageInfo +func (*NSRequest_ShareRequest) ProtoMessage() {} -func (m *NSResponse) GetError() *NSResponse_ErrorResponse { - if m != nil { - return m.Error +func (x *NSRequest_ShareRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[44] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (m *NSResponse) GetVersion() *NSResponse_VersionResponse { - if m != nil { - return m.Version - } - return nil +// Deprecated: Use NSRequest_ShareRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_ShareRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 15} } -func (m *NSResponse) GetRecycle() *NSResponse_RecycleResponse { +func (m *NSRequest_ShareRequest) GetSubcmd() isNSRequest_ShareRequest_Subcmd { if m != nil { - return m.Recycle + return m.Subcmd } return nil } -func (m *NSResponse) GetAcl() *NSResponse_AclResponse { - if m != nil { - return m.Acl +func (x *NSRequest_ShareRequest) GetLs() *NSRequest_ShareRequest_LsShare { + if x, ok := x.GetSubcmd().(*NSRequest_ShareRequest_Ls); ok { + return x.Ls } return nil } -func (m *NSResponse) GetQuota() *NSResponse_QuotaResponse { - if m != nil { - return m.Quota +func (x *NSRequest_ShareRequest) GetOp() *NSRequest_ShareRequest_OperateShare { + if x, ok := x.GetSubcmd().(*NSRequest_ShareRequest_Op); ok { + return x.Op } return nil } -type NSResponse_ErrorResponse struct { - Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` - Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +type isNSRequest_ShareRequest_Subcmd interface { + isNSRequest_ShareRequest_Subcmd() } -func (m *NSResponse_ErrorResponse) Reset() { *m = NSResponse_ErrorResponse{} } -func (m *NSResponse_ErrorResponse) String() string { return proto.CompactTextString(m) } -func (*NSResponse_ErrorResponse) ProtoMessage() {} -func (*NSResponse_ErrorResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{21, 0} +type NSRequest_ShareRequest_Ls struct { + Ls *NSRequest_ShareRequest_LsShare `protobuf:"bytes,1,opt,name=ls,proto3,oneof"` } -func (m *NSResponse_ErrorResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSResponse_ErrorResponse.Unmarshal(m, b) -} -func (m *NSResponse_ErrorResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSResponse_ErrorResponse.Marshal(b, m, deterministic) -} -func (m *NSResponse_ErrorResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSResponse_ErrorResponse.Merge(m, src) -} -func (m *NSResponse_ErrorResponse) XXX_Size() int { - return xxx_messageInfo_NSResponse_ErrorResponse.Size(m) -} -func (m *NSResponse_ErrorResponse) XXX_DiscardUnknown() { - xxx_messageInfo_NSResponse_ErrorResponse.DiscardUnknown(m) +type NSRequest_ShareRequest_Op struct { + Op *NSRequest_ShareRequest_OperateShare `protobuf:"bytes,2,opt,name=op,proto3,oneof"` } -var xxx_messageInfo_NSResponse_ErrorResponse proto.InternalMessageInfo +func (*NSRequest_ShareRequest_Ls) isNSRequest_ShareRequest_Subcmd() {} -func (m *NSResponse_ErrorResponse) GetCode() int64 { - if m != nil { - return m.Code - } - return 0 -} +func (*NSRequest_ShareRequest_Op) isNSRequest_ShareRequest_Subcmd() {} -func (m *NSResponse_ErrorResponse) GetMsg() string { - if m != nil { - return m.Msg - } - return "" -} +type NSRequest_RecycleRequest_RestoreFlags struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -type NSResponse_VersionResponse struct { - Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` - Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` - Versions []*NSResponse_VersionResponse_VersionInfo `protobuf:"bytes,3,rep,name=versions,proto3" json:"versions,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Force bool `protobuf:"varint,1,opt,name=force,proto3" json:"force,omitempty"` + Mkpath bool `protobuf:"varint,2,opt,name=mkpath,proto3" json:"mkpath,omitempty"` + Versions bool `protobuf:"varint,3,opt,name=versions,proto3" json:"versions,omitempty"` } -func (m *NSResponse_VersionResponse) Reset() { *m = NSResponse_VersionResponse{} } -func (m *NSResponse_VersionResponse) String() string { return proto.CompactTextString(m) } -func (*NSResponse_VersionResponse) ProtoMessage() {} -func (*NSResponse_VersionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{21, 1} +func (x *NSRequest_RecycleRequest_RestoreFlags) Reset() { + *x = NSRequest_RecycleRequest_RestoreFlags{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[45] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSResponse_VersionResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSResponse_VersionResponse.Unmarshal(m, b) -} -func (m *NSResponse_VersionResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSResponse_VersionResponse.Marshal(b, m, deterministic) -} -func (m *NSResponse_VersionResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSResponse_VersionResponse.Merge(m, src) -} -func (m *NSResponse_VersionResponse) XXX_Size() int { - return xxx_messageInfo_NSResponse_VersionResponse.Size(m) -} -func (m *NSResponse_VersionResponse) XXX_DiscardUnknown() { - xxx_messageInfo_NSResponse_VersionResponse.DiscardUnknown(m) +func (x *NSRequest_RecycleRequest_RestoreFlags) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_NSResponse_VersionResponse proto.InternalMessageInfo +func (*NSRequest_RecycleRequest_RestoreFlags) ProtoMessage() {} -func (m *NSResponse_VersionResponse) GetCode() int64 { - if m != nil { - return m.Code +func (x *NSRequest_RecycleRequest_RestoreFlags) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[45] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return 0 + return mi.MessageOf(x) } -func (m *NSResponse_VersionResponse) GetMsg() string { - if m != nil { - return m.Msg - } - return "" +// Deprecated: Use NSRequest_RecycleRequest_RestoreFlags.ProtoReflect.Descriptor instead. +func (*NSRequest_RecycleRequest_RestoreFlags) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 8, 0} } -func (m *NSResponse_VersionResponse) GetVersions() []*NSResponse_VersionResponse_VersionInfo { - if m != nil { - return m.Versions +func (x *NSRequest_RecycleRequest_RestoreFlags) GetForce() bool { + if x != nil { + return x.Force } - return nil -} - -type NSResponse_VersionResponse_VersionInfo struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Mtime *Time `protobuf:"bytes,2,opt,name=mtime,proto3" json:"mtime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSResponse_VersionResponse_VersionInfo) Reset() { - *m = NSResponse_VersionResponse_VersionInfo{} -} -func (m *NSResponse_VersionResponse_VersionInfo) String() string { return proto.CompactTextString(m) } -func (*NSResponse_VersionResponse_VersionInfo) ProtoMessage() {} -func (*NSResponse_VersionResponse_VersionInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{21, 1, 0} -} - -func (m *NSResponse_VersionResponse_VersionInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSResponse_VersionResponse_VersionInfo.Unmarshal(m, b) -} -func (m *NSResponse_VersionResponse_VersionInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSResponse_VersionResponse_VersionInfo.Marshal(b, m, deterministic) -} -func (m *NSResponse_VersionResponse_VersionInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSResponse_VersionResponse_VersionInfo.Merge(m, src) -} -func (m *NSResponse_VersionResponse_VersionInfo) XXX_Size() int { - return xxx_messageInfo_NSResponse_VersionResponse_VersionInfo.Size(m) -} -func (m *NSResponse_VersionResponse_VersionInfo) XXX_DiscardUnknown() { - xxx_messageInfo_NSResponse_VersionResponse_VersionInfo.DiscardUnknown(m) + return false } -var xxx_messageInfo_NSResponse_VersionResponse_VersionInfo proto.InternalMessageInfo - -func (m *NSResponse_VersionResponse_VersionInfo) GetId() *MDId { - if m != nil { - return m.Id +func (x *NSRequest_RecycleRequest_RestoreFlags) GetMkpath() bool { + if x != nil { + return x.Mkpath } - return nil + return false } -func (m *NSResponse_VersionResponse_VersionInfo) GetMtime() *Time { - if m != nil { - return m.Mtime +func (x *NSRequest_RecycleRequest_RestoreFlags) GetVersions() bool { + if x != nil { + return x.Versions } - return nil -} - -type NSResponse_RecycleResponse struct { - Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` - Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` - Recycles []*NSResponse_RecycleResponse_RecycleInfo `protobuf:"bytes,3,rep,name=recycles,proto3" json:"recycles,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSResponse_RecycleResponse) Reset() { *m = NSResponse_RecycleResponse{} } -func (m *NSResponse_RecycleResponse) String() string { return proto.CompactTextString(m) } -func (*NSResponse_RecycleResponse) ProtoMessage() {} -func (*NSResponse_RecycleResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{21, 2} -} - -func (m *NSResponse_RecycleResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSResponse_RecycleResponse.Unmarshal(m, b) -} -func (m *NSResponse_RecycleResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSResponse_RecycleResponse.Marshal(b, m, deterministic) -} -func (m *NSResponse_RecycleResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSResponse_RecycleResponse.Merge(m, src) -} -func (m *NSResponse_RecycleResponse) XXX_Size() int { - return xxx_messageInfo_NSResponse_RecycleResponse.Size(m) -} -func (m *NSResponse_RecycleResponse) XXX_DiscardUnknown() { - xxx_messageInfo_NSResponse_RecycleResponse.DiscardUnknown(m) + return false } -var xxx_messageInfo_NSResponse_RecycleResponse proto.InternalMessageInfo - -func (m *NSResponse_RecycleResponse) GetCode() int64 { - if m != nil { - return m.Code - } - return 0 -} +type NSRequest_RecycleRequest_PurgeDate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *NSResponse_RecycleResponse) GetMsg() string { - if m != nil { - return m.Msg - } - return "" + Year int32 `protobuf:"varint,1,opt,name=year,proto3" json:"year,omitempty"` + Month int32 `protobuf:"varint,2,opt,name=month,proto3" json:"month,omitempty"` + Day int32 `protobuf:"varint,3,opt,name=day,proto3" json:"day,omitempty"` } -func (m *NSResponse_RecycleResponse) GetRecycles() []*NSResponse_RecycleResponse_RecycleInfo { - if m != nil { - return m.Recycles +func (x *NSRequest_RecycleRequest_PurgeDate) Reset() { + *x = NSRequest_RecycleRequest_PurgeDate{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return nil -} - -type NSResponse_RecycleResponse_RecycleInfo struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Owner *RoleId `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"` - Dtime *Time `protobuf:"bytes,3,opt,name=dtime,proto3" json:"dtime,omitempty"` - Size uint64 `protobuf:"varint,4,opt,name=size,proto3" json:"size,omitempty"` - Type NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE `protobuf:"varint,5,opt,name=type,proto3,enum=eos.rpc.NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE" json:"type,omitempty"` - Key string `protobuf:"bytes,6,opt,name=key,proto3" json:"key,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSResponse_RecycleResponse_RecycleInfo) Reset() { - *m = NSResponse_RecycleResponse_RecycleInfo{} -} -func (m *NSResponse_RecycleResponse_RecycleInfo) String() string { return proto.CompactTextString(m) } -func (*NSResponse_RecycleResponse_RecycleInfo) ProtoMessage() {} -func (*NSResponse_RecycleResponse_RecycleInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{21, 2, 0} } -func (m *NSResponse_RecycleResponse_RecycleInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSResponse_RecycleResponse_RecycleInfo.Unmarshal(m, b) -} -func (m *NSResponse_RecycleResponse_RecycleInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSResponse_RecycleResponse_RecycleInfo.Marshal(b, m, deterministic) -} -func (m *NSResponse_RecycleResponse_RecycleInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSResponse_RecycleResponse_RecycleInfo.Merge(m, src) -} -func (m *NSResponse_RecycleResponse_RecycleInfo) XXX_Size() int { - return xxx_messageInfo_NSResponse_RecycleResponse_RecycleInfo.Size(m) -} -func (m *NSResponse_RecycleResponse_RecycleInfo) XXX_DiscardUnknown() { - xxx_messageInfo_NSResponse_RecycleResponse_RecycleInfo.DiscardUnknown(m) +func (x *NSRequest_RecycleRequest_PurgeDate) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_NSResponse_RecycleResponse_RecycleInfo proto.InternalMessageInfo +func (*NSRequest_RecycleRequest_PurgeDate) ProtoMessage() {} -func (m *NSResponse_RecycleResponse_RecycleInfo) GetId() *MDId { - if m != nil { - return m.Id +func (x *NSRequest_RecycleRequest_PurgeDate) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[46] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (m *NSResponse_RecycleResponse_RecycleInfo) GetOwner() *RoleId { - if m != nil { - return m.Owner - } - return nil +// Deprecated: Use NSRequest_RecycleRequest_PurgeDate.ProtoReflect.Descriptor instead. +func (*NSRequest_RecycleRequest_PurgeDate) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 8, 1} } -func (m *NSResponse_RecycleResponse_RecycleInfo) GetDtime() *Time { - if m != nil { - return m.Dtime +func (x *NSRequest_RecycleRequest_PurgeDate) GetYear() int32 { + if x != nil { + return x.Year } - return nil + return 0 } -func (m *NSResponse_RecycleResponse_RecycleInfo) GetSize() uint64 { - if m != nil { - return m.Size +func (x *NSRequest_RecycleRequest_PurgeDate) GetMonth() int32 { + if x != nil { + return x.Month } return 0 } -func (m *NSResponse_RecycleResponse_RecycleInfo) GetType() NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE { - if m != nil { - return m.Type +func (x *NSRequest_RecycleRequest_PurgeDate) GetDay() int32 { + if x != nil { + return x.Day } - return NSResponse_RecycleResponse_RecycleInfo_FILE + return 0 } -func (m *NSResponse_RecycleResponse_RecycleInfo) GetKey() string { - if m != nil { - return m.Key - } - return "" -} +type NSRequest_ShareRequest_LsShare struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -type NSResponse_AclResponse struct { - Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` - Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` - Rule string `protobuf:"bytes,3,opt,name=rule,proto3" json:"rule,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Outformat NSRequest_ShareRequest_LsShare_OutFormat `protobuf:"varint,1,opt,name=outformat,proto3,enum=eos.rpc.NSRequest_ShareRequest_LsShare_OutFormat" json:"outformat,omitempty"` // + Selection string `protobuf:"bytes,2,opt,name=selection,proto3" json:"selection,omitempty"` // } -func (m *NSResponse_AclResponse) Reset() { *m = NSResponse_AclResponse{} } -func (m *NSResponse_AclResponse) String() string { return proto.CompactTextString(m) } -func (*NSResponse_AclResponse) ProtoMessage() {} -func (*NSResponse_AclResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{21, 3} +func (x *NSRequest_ShareRequest_LsShare) Reset() { + *x = NSRequest_ShareRequest_LsShare{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[48] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSResponse_AclResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSResponse_AclResponse.Unmarshal(m, b) -} -func (m *NSResponse_AclResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSResponse_AclResponse.Marshal(b, m, deterministic) -} -func (m *NSResponse_AclResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSResponse_AclResponse.Merge(m, src) -} -func (m *NSResponse_AclResponse) XXX_Size() int { - return xxx_messageInfo_NSResponse_AclResponse.Size(m) -} -func (m *NSResponse_AclResponse) XXX_DiscardUnknown() { - xxx_messageInfo_NSResponse_AclResponse.DiscardUnknown(m) +func (x *NSRequest_ShareRequest_LsShare) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_NSResponse_AclResponse proto.InternalMessageInfo +func (*NSRequest_ShareRequest_LsShare) ProtoMessage() {} -func (m *NSResponse_AclResponse) GetCode() int64 { - if m != nil { - return m.Code +func (x *NSRequest_ShareRequest_LsShare) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[48] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return 0 + return mi.MessageOf(x) } -func (m *NSResponse_AclResponse) GetMsg() string { - if m != nil { - return m.Msg +// Deprecated: Use NSRequest_ShareRequest_LsShare.ProtoReflect.Descriptor instead. +func (*NSRequest_ShareRequest_LsShare) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 15, 0} +} + +func (x *NSRequest_ShareRequest_LsShare) GetOutformat() NSRequest_ShareRequest_LsShare_OutFormat { + if x != nil { + return x.Outformat } - return "" + return NSRequest_ShareRequest_LsShare_NONE } -func (m *NSResponse_AclResponse) GetRule() string { - if m != nil { - return m.Rule +func (x *NSRequest_ShareRequest_LsShare) GetSelection() string { + if x != nil { + return x.Selection } return "" } -type NSResponse_QuotaResponse struct { - Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` - Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` - Quotanode []*QuotaProto `protobuf:"bytes,3,rep,name=quotanode,proto3" json:"quotanode,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} +type NSRequest_ShareRequest_OperateShare struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *NSResponse_QuotaResponse) Reset() { *m = NSResponse_QuotaResponse{} } -func (m *NSResponse_QuotaResponse) String() string { return proto.CompactTextString(m) } -func (*NSResponse_QuotaResponse) ProtoMessage() {} -func (*NSResponse_QuotaResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{21, 4} + Op NSRequest_ShareRequest_OperateShare_Op `protobuf:"varint,1,opt,name=op,proto3,enum=eos.rpc.NSRequest_ShareRequest_OperateShare_Op" json:"op,omitempty"` + Share string `protobuf:"bytes,2,opt,name=share,proto3" json:"share,omitempty"` + Acl string `protobuf:"bytes,3,opt,name=acl,proto3" json:"acl,omitempty"` + Path string `protobuf:"bytes,4,opt,name=path,proto3" json:"path,omitempty"` + User string `protobuf:"bytes,5,opt,name=user,proto3" json:"user,omitempty"` + Group string `protobuf:"bytes,6,opt,name=group,proto3" json:"group,omitempty"` } -func (m *NSResponse_QuotaResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSResponse_QuotaResponse.Unmarshal(m, b) -} -func (m *NSResponse_QuotaResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSResponse_QuotaResponse.Marshal(b, m, deterministic) -} -func (m *NSResponse_QuotaResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSResponse_QuotaResponse.Merge(m, src) -} -func (m *NSResponse_QuotaResponse) XXX_Size() int { - return xxx_messageInfo_NSResponse_QuotaResponse.Size(m) +func (x *NSRequest_ShareRequest_OperateShare) Reset() { + *x = NSRequest_ShareRequest_OperateShare{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[49] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSResponse_QuotaResponse) XXX_DiscardUnknown() { - xxx_messageInfo_NSResponse_QuotaResponse.DiscardUnknown(m) + +func (x *NSRequest_ShareRequest_OperateShare) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_NSResponse_QuotaResponse proto.InternalMessageInfo +func (*NSRequest_ShareRequest_OperateShare) ProtoMessage() {} -func (m *NSResponse_QuotaResponse) GetCode() int64 { - if m != nil { - return m.Code +func (x *NSRequest_ShareRequest_OperateShare) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[49] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return 0 + return mi.MessageOf(x) } -func (m *NSResponse_QuotaResponse) GetMsg() string { - if m != nil { - return m.Msg - } - return "" +// Deprecated: Use NSRequest_ShareRequest_OperateShare.ProtoReflect.Descriptor instead. +func (*NSRequest_ShareRequest_OperateShare) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 15, 1} } -func (m *NSResponse_QuotaResponse) GetQuotanode() []*QuotaProto { - if m != nil { - return m.Quotanode +func (x *NSRequest_ShareRequest_OperateShare) GetOp() NSRequest_ShareRequest_OperateShare_Op { + if x != nil { + return x.Op } - return nil + return NSRequest_ShareRequest_OperateShare_CREATE } -type NsStatRequest struct { - Authkey string `protobuf:"bytes,1,opt,name=authkey,proto3" json:"authkey,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (x *NSRequest_ShareRequest_OperateShare) GetShare() string { + if x != nil { + return x.Share + } + return "" } -func (m *NsStatRequest) Reset() { *m = NsStatRequest{} } -func (m *NsStatRequest) String() string { return proto.CompactTextString(m) } -func (*NsStatRequest) ProtoMessage() {} -func (*NsStatRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{22} +func (x *NSRequest_ShareRequest_OperateShare) GetAcl() string { + if x != nil { + return x.Acl + } + return "" } -func (m *NsStatRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NsStatRequest.Unmarshal(m, b) -} -func (m *NsStatRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NsStatRequest.Marshal(b, m, deterministic) -} -func (m *NsStatRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NsStatRequest.Merge(m, src) -} -func (m *NsStatRequest) XXX_Size() int { - return xxx_messageInfo_NsStatRequest.Size(m) -} -func (m *NsStatRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NsStatRequest.DiscardUnknown(m) +func (x *NSRequest_ShareRequest_OperateShare) GetPath() string { + if x != nil { + return x.Path + } + return "" } -var xxx_messageInfo_NsStatRequest proto.InternalMessageInfo - -func (m *NsStatRequest) GetAuthkey() string { - if m != nil { - return m.Authkey +func (x *NSRequest_ShareRequest_OperateShare) GetUser() string { + if x != nil { + return x.User } return "" } -type NsStatResponse struct { - Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` - Emsg string `protobuf:"bytes,2,opt,name=emsg,proto3" json:"emsg,omitempty"` - State string `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` - Nfiles uint64 `protobuf:"varint,4,opt,name=nfiles,proto3" json:"nfiles,omitempty"` - Ncontainers uint64 `protobuf:"varint,5,opt,name=ncontainers,proto3" json:"ncontainers,omitempty"` - BootTime uint64 `protobuf:"varint,6,opt,name=boot_time,json=bootTime,proto3" json:"boot_time,omitempty"` - CurrentFid uint64 `protobuf:"varint,7,opt,name=current_fid,json=currentFid,proto3" json:"current_fid,omitempty"` - CurrentCid uint64 `protobuf:"varint,8,opt,name=current_cid,json=currentCid,proto3" json:"current_cid,omitempty"` - MemVirtual uint64 `protobuf:"varint,9,opt,name=mem_virtual,json=memVirtual,proto3" json:"mem_virtual,omitempty"` - MemResident uint64 `protobuf:"varint,10,opt,name=mem_resident,json=memResident,proto3" json:"mem_resident,omitempty"` - MemShare uint64 `protobuf:"varint,11,opt,name=mem_share,json=memShare,proto3" json:"mem_share,omitempty"` - MemGrowth uint64 `protobuf:"varint,12,opt,name=mem_growth,json=memGrowth,proto3" json:"mem_growth,omitempty"` - Threads uint64 `protobuf:"varint,13,opt,name=threads,proto3" json:"threads,omitempty"` - Fds uint64 `protobuf:"varint,14,opt,name=fds,proto3" json:"fds,omitempty"` - Uptime uint64 `protobuf:"varint,15,opt,name=uptime,proto3" json:"uptime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NsStatResponse) Reset() { *m = NsStatResponse{} } -func (m *NsStatResponse) String() string { return proto.CompactTextString(m) } -func (*NsStatResponse) ProtoMessage() {} -func (*NsStatResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{23} +func (x *NSRequest_ShareRequest_OperateShare) GetGroup() string { + if x != nil { + return x.Group + } + return "" } -func (m *NsStatResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NsStatResponse.Unmarshal(m, b) -} -func (m *NsStatResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NsStatResponse.Marshal(b, m, deterministic) +type NSResponse_ErrorResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` } -func (m *NsStatResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_NsStatResponse.Merge(m, src) + +func (x *NSResponse_ErrorResponse) Reset() { + *x = NSResponse_ErrorResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[50] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NsStatResponse) XXX_Size() int { - return xxx_messageInfo_NsStatResponse.Size(m) + +func (x *NSResponse_ErrorResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NsStatResponse) XXX_DiscardUnknown() { - xxx_messageInfo_NsStatResponse.DiscardUnknown(m) + +func (*NSResponse_ErrorResponse) ProtoMessage() {} + +func (x *NSResponse_ErrorResponse) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[50] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_NsStatResponse proto.InternalMessageInfo +// Deprecated: Use NSResponse_ErrorResponse.ProtoReflect.Descriptor instead. +func (*NSResponse_ErrorResponse) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{21, 0} +} -func (m *NsStatResponse) GetCode() int64 { - if m != nil { - return m.Code +func (x *NSResponse_ErrorResponse) GetCode() int64 { + if x != nil { + return x.Code } return 0 } -func (m *NsStatResponse) GetEmsg() string { - if m != nil { - return m.Emsg +func (x *NSResponse_ErrorResponse) GetMsg() string { + if x != nil { + return x.Msg } return "" } -func (m *NsStatResponse) GetState() string { - if m != nil { - return m.State - } - return "" +type NSResponse_VersionResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` + Versions []*NSResponse_VersionResponse_VersionInfo `protobuf:"bytes,3,rep,name=versions,proto3" json:"versions,omitempty"` } -func (m *NsStatResponse) GetNfiles() uint64 { - if m != nil { - return m.Nfiles +func (x *NSResponse_VersionResponse) Reset() { + *x = NSResponse_VersionResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[51] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return 0 } -func (m *NsStatResponse) GetNcontainers() uint64 { - if m != nil { - return m.Ncontainers - } - return 0 +func (x *NSResponse_VersionResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NsStatResponse) GetBootTime() uint64 { - if m != nil { - return m.BootTime +func (*NSResponse_VersionResponse) ProtoMessage() {} + +func (x *NSResponse_VersionResponse) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[51] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return 0 + return mi.MessageOf(x) } -func (m *NsStatResponse) GetCurrentFid() uint64 { - if m != nil { - return m.CurrentFid - } - return 0 +// Deprecated: Use NSResponse_VersionResponse.ProtoReflect.Descriptor instead. +func (*NSResponse_VersionResponse) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{21, 1} } -func (m *NsStatResponse) GetCurrentCid() uint64 { - if m != nil { - return m.CurrentCid +func (x *NSResponse_VersionResponse) GetCode() int64 { + if x != nil { + return x.Code } return 0 } -func (m *NsStatResponse) GetMemVirtual() uint64 { - if m != nil { - return m.MemVirtual +func (x *NSResponse_VersionResponse) GetMsg() string { + if x != nil { + return x.Msg } - return 0 + return "" } -func (m *NsStatResponse) GetMemResident() uint64 { - if m != nil { - return m.MemResident +func (x *NSResponse_VersionResponse) GetVersions() []*NSResponse_VersionResponse_VersionInfo { + if x != nil { + return x.Versions } - return 0 + return nil } -func (m *NsStatResponse) GetMemShare() uint64 { - if m != nil { - return m.MemShare - } - return 0 +type NSResponse_RecycleResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` + Recycles []*NSResponse_RecycleResponse_RecycleInfo `protobuf:"bytes,3,rep,name=recycles,proto3" json:"recycles,omitempty"` } -func (m *NsStatResponse) GetMemGrowth() uint64 { - if m != nil { - return m.MemGrowth +func (x *NSResponse_RecycleResponse) Reset() { + *x = NSResponse_RecycleResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[52] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return 0 } -func (m *NsStatResponse) GetThreads() uint64 { - if m != nil { - return m.Threads - } - return 0 +func (x *NSResponse_RecycleResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NsStatResponse) GetFds() uint64 { - if m != nil { - return m.Fds +func (*NSResponse_RecycleResponse) ProtoMessage() {} + +func (x *NSResponse_RecycleResponse) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[52] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return 0 + return mi.MessageOf(x) } -func (m *NsStatResponse) GetUptime() uint64 { - if m != nil { - return m.Uptime +// Deprecated: Use NSResponse_RecycleResponse.ProtoReflect.Descriptor instead. +func (*NSResponse_RecycleResponse) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{21, 2} +} + +func (x *NSResponse_RecycleResponse) GetCode() int64 { + if x != nil { + return x.Code } return 0 } -type ManilaRequest struct { - RequestType MANILA_REQUEST_TYPE `protobuf:"varint,1,opt,name=request_type,json=requestType,proto3,enum=eos.rpc.MANILA_REQUEST_TYPE" json:"request_type,omitempty"` - AuthKey string `protobuf:"bytes,2,opt,name=auth_key,json=authKey,proto3" json:"auth_key,omitempty"` - Protocol string `protobuf:"bytes,3,opt,name=protocol,proto3" json:"protocol,omitempty"` - ShareName string `protobuf:"bytes,4,opt,name=share_name,json=shareName,proto3" json:"share_name,omitempty"` - Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"` - ShareId string `protobuf:"bytes,6,opt,name=share_id,json=shareId,proto3" json:"share_id,omitempty"` - ShareGroupId string `protobuf:"bytes,7,opt,name=share_group_id,json=shareGroupId,proto3" json:"share_group_id,omitempty"` - Quota int32 `protobuf:"varint,8,opt,name=quota,proto3" json:"quota,omitempty"` - Creator string `protobuf:"bytes,9,opt,name=creator,proto3" json:"creator,omitempty"` - Egroup string `protobuf:"bytes,10,opt,name=egroup,proto3" json:"egroup,omitempty"` - AdminEgroup string `protobuf:"bytes,11,opt,name=admin_egroup,json=adminEgroup,proto3" json:"admin_egroup,omitempty"` - ShareHost string `protobuf:"bytes,12,opt,name=share_host,json=shareHost,proto3" json:"share_host,omitempty"` - ShareLocation string `protobuf:"bytes,13,opt,name=share_location,json=shareLocation,proto3" json:"share_location,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ManilaRequest) Reset() { *m = ManilaRequest{} } -func (m *ManilaRequest) String() string { return proto.CompactTextString(m) } -func (*ManilaRequest) ProtoMessage() {} -func (*ManilaRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{24} +func (x *NSResponse_RecycleResponse) GetMsg() string { + if x != nil { + return x.Msg + } + return "" } -func (m *ManilaRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ManilaRequest.Unmarshal(m, b) -} -func (m *ManilaRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ManilaRequest.Marshal(b, m, deterministic) +func (x *NSResponse_RecycleResponse) GetRecycles() []*NSResponse_RecycleResponse_RecycleInfo { + if x != nil { + return x.Recycles + } + return nil } -func (m *ManilaRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ManilaRequest.Merge(m, src) + +type NSResponse_AclResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` + Rule string `protobuf:"bytes,3,opt,name=rule,proto3" json:"rule,omitempty"` } -func (m *ManilaRequest) XXX_Size() int { - return xxx_messageInfo_ManilaRequest.Size(m) + +func (x *NSResponse_AclResponse) Reset() { + *x = NSResponse_AclResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[53] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ManilaRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ManilaRequest.DiscardUnknown(m) + +func (x *NSResponse_AclResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_ManilaRequest proto.InternalMessageInfo +func (*NSResponse_AclResponse) ProtoMessage() {} -func (m *ManilaRequest) GetRequestType() MANILA_REQUEST_TYPE { - if m != nil { - return m.RequestType +func (x *NSResponse_AclResponse) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[53] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return MANILA_REQUEST_TYPE_CREATE_SHARE + return mi.MessageOf(x) } -func (m *ManilaRequest) GetAuthKey() string { - if m != nil { - return m.AuthKey - } - return "" +// Deprecated: Use NSResponse_AclResponse.ProtoReflect.Descriptor instead. +func (*NSResponse_AclResponse) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{21, 3} } -func (m *ManilaRequest) GetProtocol() string { - if m != nil { - return m.Protocol +func (x *NSResponse_AclResponse) GetCode() int64 { + if x != nil { + return x.Code } - return "" + return 0 } -func (m *ManilaRequest) GetShareName() string { - if m != nil { - return m.ShareName +func (x *NSResponse_AclResponse) GetMsg() string { + if x != nil { + return x.Msg } return "" } -func (m *ManilaRequest) GetDescription() string { - if m != nil { - return m.Description +func (x *NSResponse_AclResponse) GetRule() string { + if x != nil { + return x.Rule } return "" } -func (m *ManilaRequest) GetShareId() string { - if m != nil { - return m.ShareId - } - return "" +type NSResponse_QuotaResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` + Quotanode []*QuotaProto `protobuf:"bytes,3,rep,name=quotanode,proto3" json:"quotanode,omitempty"` } -func (m *ManilaRequest) GetShareGroupId() string { - if m != nil { - return m.ShareGroupId +func (x *NSResponse_QuotaResponse) Reset() { + *x = NSResponse_QuotaResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[54] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return "" } -func (m *ManilaRequest) GetQuota() int32 { - if m != nil { - return m.Quota - } - return 0 +func (x *NSResponse_QuotaResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ManilaRequest) GetCreator() string { - if m != nil { - return m.Creator +func (*NSResponse_QuotaResponse) ProtoMessage() {} + +func (x *NSResponse_QuotaResponse) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[54] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -func (m *ManilaRequest) GetEgroup() string { - if m != nil { - return m.Egroup - } - return "" +// Deprecated: Use NSResponse_QuotaResponse.ProtoReflect.Descriptor instead. +func (*NSResponse_QuotaResponse) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{21, 4} } -func (m *ManilaRequest) GetAdminEgroup() string { - if m != nil { - return m.AdminEgroup +func (x *NSResponse_QuotaResponse) GetCode() int64 { + if x != nil { + return x.Code } - return "" + return 0 } -func (m *ManilaRequest) GetShareHost() string { - if m != nil { - return m.ShareHost +func (x *NSResponse_QuotaResponse) GetMsg() string { + if x != nil { + return x.Msg } return "" } -func (m *ManilaRequest) GetShareLocation() string { - if m != nil { - return m.ShareLocation +func (x *NSResponse_QuotaResponse) GetQuotanode() []*QuotaProto { + if x != nil { + return x.Quotanode } - return "" + return nil } -type ManilaResponse struct { - Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` - Code int32 `protobuf:"varint,2,opt,name=code,proto3" json:"code,omitempty"` - TotalUsed int64 `protobuf:"varint,3,opt,name=total_used,json=totalUsed,proto3" json:"total_used,omitempty"` - TotalCapacity int64 `protobuf:"varint,4,opt,name=total_capacity,json=totalCapacity,proto3" json:"total_capacity,omitempty"` - NewShareQuota int64 `protobuf:"varint,5,opt,name=new_share_quota,json=newShareQuota,proto3" json:"new_share_quota,omitempty"` - NewSharePath string `protobuf:"bytes,6,opt,name=new_share_path,json=newSharePath,proto3" json:"new_share_path,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ManilaResponse) Reset() { *m = ManilaResponse{} } -func (m *ManilaResponse) String() string { return proto.CompactTextString(m) } -func (*ManilaResponse) ProtoMessage() {} -func (*ManilaResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{25} -} +type NSResponse_ShareInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *ManilaResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ManilaResponse.Unmarshal(m, b) -} -func (m *ManilaResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ManilaResponse.Marshal(b, m, deterministic) + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Root string `protobuf:"bytes,2,opt,name=root,proto3" json:"root,omitempty"` + Rule string `protobuf:"bytes,3,opt,name=rule,proto3" json:"rule,omitempty"` + Uid uint64 `protobuf:"varint,4,opt,name=uid,proto3" json:"uid,omitempty"` + Nshared uint64 `protobuf:"varint,5,opt,name=nshared,proto3" json:"nshared,omitempty"` } -func (m *ManilaResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ManilaResponse.Merge(m, src) + +func (x *NSResponse_ShareInfo) Reset() { + *x = NSResponse_ShareInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[55] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ManilaResponse) XXX_Size() int { - return xxx_messageInfo_ManilaResponse.Size(m) + +func (x *NSResponse_ShareInfo) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ManilaResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ManilaResponse.DiscardUnknown(m) + +func (*NSResponse_ShareInfo) ProtoMessage() {} + +func (x *NSResponse_ShareInfo) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[55] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ManilaResponse proto.InternalMessageInfo +// Deprecated: Use NSResponse_ShareInfo.ProtoReflect.Descriptor instead. +func (*NSResponse_ShareInfo) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{21, 5} +} -func (m *ManilaResponse) GetMsg() string { - if m != nil { - return m.Msg +func (x *NSResponse_ShareInfo) GetName() string { + if x != nil { + return x.Name } return "" } -func (m *ManilaResponse) GetCode() int32 { - if m != nil { - return m.Code +func (x *NSResponse_ShareInfo) GetRoot() string { + if x != nil { + return x.Root } - return 0 + return "" } -func (m *ManilaResponse) GetTotalUsed() int64 { - if m != nil { - return m.TotalUsed +func (x *NSResponse_ShareInfo) GetRule() string { + if x != nil { + return x.Rule } - return 0 + return "" } -func (m *ManilaResponse) GetTotalCapacity() int64 { - if m != nil { - return m.TotalCapacity +func (x *NSResponse_ShareInfo) GetUid() uint64 { + if x != nil { + return x.Uid } return 0 } -func (m *ManilaResponse) GetNewShareQuota() int64 { - if m != nil { - return m.NewShareQuota +func (x *NSResponse_ShareInfo) GetNshared() uint64 { + if x != nil { + return x.Nshared } return 0 } -func (m *ManilaResponse) GetNewSharePath() string { - if m != nil { - return m.NewSharePath +type NSResponse_ShareAccess struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Granted bool `protobuf:"varint,2,opt,name=granted,proto3" json:"granted,omitempty"` +} + +func (x *NSResponse_ShareAccess) Reset() { + *x = NSResponse_ShareAccess{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[56] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return "" } -func init() { - proto.RegisterEnum("eos.rpc.TYPE", TYPE_name, TYPE_value) - proto.RegisterEnum("eos.rpc.QUOTATYPE", QUOTATYPE_name, QUOTATYPE_value) - proto.RegisterEnum("eos.rpc.QUOTAOP", QUOTAOP_name, QUOTAOP_value) - proto.RegisterEnum("eos.rpc.QUOTAENTRY", QUOTAENTRY_name, QUOTAENTRY_value) - proto.RegisterEnum("eos.rpc.MANILA_REQUEST_TYPE", MANILA_REQUEST_TYPE_name, MANILA_REQUEST_TYPE_value) - proto.RegisterEnum("eos.rpc.NSRequest_VersionRequest_VERSION_CMD", NSRequest_VersionRequest_VERSION_CMD_name, NSRequest_VersionRequest_VERSION_CMD_value) - proto.RegisterEnum("eos.rpc.NSRequest_RecycleRequest_RECYCLE_CMD", NSRequest_RecycleRequest_RECYCLE_CMD_name, NSRequest_RecycleRequest_RECYCLE_CMD_value) - proto.RegisterEnum("eos.rpc.NSRequest_AclRequest_ACL_COMMAND", NSRequest_AclRequest_ACL_COMMAND_name, NSRequest_AclRequest_ACL_COMMAND_value) - proto.RegisterEnum("eos.rpc.NSRequest_AclRequest_ACL_TYPE", NSRequest_AclRequest_ACL_TYPE_name, NSRequest_AclRequest_ACL_TYPE_value) - proto.RegisterEnum("eos.rpc.NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE", NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE_name, NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE_value) - proto.RegisterType((*PingRequest)(nil), "eos.rpc.PingRequest") - proto.RegisterType((*PingReply)(nil), "eos.rpc.PingReply") - proto.RegisterType((*ContainerInsertRequest)(nil), "eos.rpc.ContainerInsertRequest") - proto.RegisterType((*FileInsertRequest)(nil), "eos.rpc.FileInsertRequest") - proto.RegisterType((*InsertReply)(nil), "eos.rpc.InsertReply") - proto.RegisterType((*Time)(nil), "eos.rpc.Time") - proto.RegisterType((*Checksum)(nil), "eos.rpc.Checksum") - proto.RegisterType((*FileMdProto)(nil), "eos.rpc.FileMdProto") - proto.RegisterMapType((map[string][]byte)(nil), "eos.rpc.FileMdProto.XattrsEntry") - proto.RegisterType((*ContainerMdProto)(nil), "eos.rpc.ContainerMdProto") - proto.RegisterMapType((map[string][]byte)(nil), "eos.rpc.ContainerMdProto.XattrsEntry") - proto.RegisterType((*QuotaProto)(nil), "eos.rpc.QuotaProto") - proto.RegisterType((*RoleId)(nil), "eos.rpc.RoleId") - proto.RegisterType((*MDId)(nil), "eos.rpc.MDId") - proto.RegisterType((*Limit)(nil), "eos.rpc.Limit") - proto.RegisterType((*MDSelection)(nil), "eos.rpc.MDSelection") - proto.RegisterMapType((map[string][]byte)(nil), "eos.rpc.MDSelection.XattrEntry") - proto.RegisterType((*MDRequest)(nil), "eos.rpc.MDRequest") - proto.RegisterType((*MDResponse)(nil), "eos.rpc.MDResponse") - proto.RegisterType((*FindRequest)(nil), "eos.rpc.FindRequest") - proto.RegisterType((*ShareAuth)(nil), "eos.rpc.ShareAuth") - proto.RegisterType((*ShareProto)(nil), "eos.rpc.ShareProto") - proto.RegisterType((*ShareToken)(nil), "eos.rpc.ShareToken") - proto.RegisterType((*NSRequest)(nil), "eos.rpc.NSRequest") - proto.RegisterType((*NSRequest_MkdirRequest)(nil), "eos.rpc.NSRequest.MkdirRequest") - proto.RegisterType((*NSRequest_RmdirRequest)(nil), "eos.rpc.NSRequest.RmdirRequest") - proto.RegisterType((*NSRequest_TouchRequest)(nil), "eos.rpc.NSRequest.TouchRequest") - proto.RegisterType((*NSRequest_UnlinkRequest)(nil), "eos.rpc.NSRequest.UnlinkRequest") - proto.RegisterType((*NSRequest_RmRequest)(nil), "eos.rpc.NSRequest.RmRequest") - proto.RegisterType((*NSRequest_RenameRequest)(nil), "eos.rpc.NSRequest.RenameRequest") - proto.RegisterType((*NSRequest_SymlinkRequest)(nil), "eos.rpc.NSRequest.SymlinkRequest") - proto.RegisterType((*NSRequest_VersionRequest)(nil), "eos.rpc.NSRequest.VersionRequest") - proto.RegisterType((*NSRequest_RecycleRequest)(nil), "eos.rpc.NSRequest.RecycleRequest") - proto.RegisterType((*NSRequest_RecycleRequest_RestoreFlags)(nil), "eos.rpc.NSRequest.RecycleRequest.RestoreFlags") - proto.RegisterType((*NSRequest_RecycleRequest_PurgeDate)(nil), "eos.rpc.NSRequest.RecycleRequest.PurgeDate") - proto.RegisterType((*NSRequest_SetXAttrRequest)(nil), "eos.rpc.NSRequest.SetXAttrRequest") - proto.RegisterMapType((map[string][]byte)(nil), "eos.rpc.NSRequest.SetXAttrRequest.XattrsEntry") - proto.RegisterType((*NSRequest_ChownRequest)(nil), "eos.rpc.NSRequest.ChownRequest") - proto.RegisterType((*NSRequest_ChmodRequest)(nil), "eos.rpc.NSRequest.ChmodRequest") - proto.RegisterType((*NSRequest_AclRequest)(nil), "eos.rpc.NSRequest.AclRequest") - proto.RegisterType((*NSRequest_TokenRequest)(nil), "eos.rpc.NSRequest.TokenRequest") - proto.RegisterType((*NSRequest_QuotaRequest)(nil), "eos.rpc.NSRequest.QuotaRequest") - proto.RegisterType((*NSResponse)(nil), "eos.rpc.NSResponse") - proto.RegisterType((*NSResponse_ErrorResponse)(nil), "eos.rpc.NSResponse.ErrorResponse") - proto.RegisterType((*NSResponse_VersionResponse)(nil), "eos.rpc.NSResponse.VersionResponse") - proto.RegisterType((*NSResponse_VersionResponse_VersionInfo)(nil), "eos.rpc.NSResponse.VersionResponse.VersionInfo") - proto.RegisterType((*NSResponse_RecycleResponse)(nil), "eos.rpc.NSResponse.RecycleResponse") - proto.RegisterType((*NSResponse_RecycleResponse_RecycleInfo)(nil), "eos.rpc.NSResponse.RecycleResponse.RecycleInfo") - proto.RegisterType((*NSResponse_AclResponse)(nil), "eos.rpc.NSResponse.AclResponse") - proto.RegisterType((*NSResponse_QuotaResponse)(nil), "eos.rpc.NSResponse.QuotaResponse") - proto.RegisterType((*NsStatRequest)(nil), "eos.rpc.NsStatRequest") - proto.RegisterType((*NsStatResponse)(nil), "eos.rpc.NsStatResponse") - proto.RegisterType((*ManilaRequest)(nil), "eos.rpc.ManilaRequest") - proto.RegisterType((*ManilaResponse)(nil), "eos.rpc.ManilaResponse") -} - -func init() { proto.RegisterFile("Rpc.proto", fileDescriptor_979aee4989bceb08) } - -var fileDescriptor_979aee4989bceb08 = []byte{ - // 3612 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x3a, 0x4b, 0x70, 0x1b, 0xc7, - 0x72, 0x5a, 0x2c, 0x00, 0x62, 0x1b, 0x00, 0x09, 0x8d, 0x14, 0x19, 0x86, 0x24, 0x8b, 0x5e, 0x59, - 0x0e, 0xa5, 0xf7, 0x44, 0xd9, 0x4a, 0x1c, 0xfb, 0xd9, 0x71, 0x39, 0x30, 0x09, 0x52, 0x78, 0x26, - 0x41, 0x7a, 0x00, 0xba, 0xa4, 0x5c, 0x50, 0xab, 0xdd, 0x21, 0xb8, 0x25, 0xec, 0x2e, 0xde, 0xee, - 0x42, 0x22, 0x7d, 0xce, 0x25, 0xef, 0x96, 0xaa, 0x77, 0xcb, 0x2d, 0x87, 0x5c, 0x72, 0xca, 0x35, - 0xa7, 0x1c, 0x5f, 0xe5, 0x90, 0x5c, 0x52, 0x95, 0x5b, 0x8e, 0xb9, 0x24, 0xd7, 0xdc, 0x53, 0xdd, - 0x33, 0xfb, 0x23, 0x41, 0x82, 0xce, 0xf3, 0x65, 0x6b, 0xba, 0xa7, 0xbb, 0x67, 0xa6, 0xa7, 0x7f, - 0x33, 0xb3, 0x60, 0xf0, 0x99, 0xbd, 0x39, 0x0b, 0x83, 0x38, 0x60, 0x2b, 0x22, 0x88, 0x36, 0xc3, - 0x99, 0x6d, 0x76, 0xa1, 0x7e, 0xe8, 0xfa, 0x13, 0x2e, 0x7e, 0x33, 0x17, 0x51, 0xcc, 0xda, 0xb0, - 0x62, 0xcd, 0xe3, 0x93, 0x37, 0xe2, 0xac, 0xad, 0xad, 0x6b, 0x1b, 0x06, 0x4f, 0x40, 0xec, 0xf1, - 0x44, 0x14, 0x59, 0x13, 0xd1, 0x2e, 0xad, 0x6b, 0x1b, 0x0d, 0x9e, 0x80, 0xe6, 0x23, 0x30, 0xa4, - 0x88, 0xd9, 0xb4, 0x40, 0xa6, 0x15, 0xc9, 0x7e, 0xab, 0xc1, 0x9d, 0xad, 0xc0, 0x8f, 0x2d, 0xd7, - 0x17, 0x61, 0xdf, 0x8f, 0x44, 0x18, 0x27, 0xa3, 0x7e, 0x0e, 0x86, 0x9d, 0xf4, 0xb4, 0xb5, 0x75, - 0x7d, 0xa3, 0xfe, 0xfc, 0xfd, 0x4d, 0x35, 0xc3, 0xcd, 0x94, 0x67, 0xdf, 0x39, 0xc4, 0xb9, 0xf3, - 0x8c, 0x36, 0x3f, 0xdd, 0x52, 0x71, 0xba, 0xf7, 0x01, 0x5c, 0xff, 0x44, 0x84, 0x6e, 0x3c, 0xf6, - 0x9c, 0xb6, 0xbe, 0xae, 0x6d, 0xd4, 0xb8, 0xa1, 0x30, 0xfb, 0x8e, 0xf9, 0x0a, 0x6e, 0xee, 0xb8, - 0x53, 0x51, 0x9c, 0xc6, 0x13, 0xa8, 0x1c, 0xbb, 0x53, 0x11, 0xa9, 0x29, 0xdc, 0x4e, 0xa7, 0x80, - 0xa4, 0xc9, 0xe8, 0x92, 0xe4, 0xf2, 0x91, 0xcd, 0xaf, 0xa0, 0x9e, 0x88, 0xbd, 0xa0, 0x10, 0x1d, - 0x09, 0x15, 0xc8, 0x18, 0x94, 0x43, 0x11, 0xdb, 0xed, 0xd2, 0xba, 0xbe, 0xd1, 0xe4, 0xd4, 0x36, - 0x9f, 0x42, 0x79, 0xe4, 0x7a, 0x82, 0xb5, 0x40, 0x8f, 0x84, 0x4d, 0x2a, 0x2c, 0x73, 0x6c, 0xb2, - 0x5b, 0x50, 0xf1, 0xc7, 0x88, 0x2b, 0x11, 0xae, 0xec, 0x0f, 0x85, 0x6d, 0xfe, 0x29, 0xd4, 0xb6, - 0x4e, 0x84, 0xfd, 0x26, 0x9a, 0x7b, 0xec, 0x36, 0x54, 0xde, 0x5a, 0xd3, 0x79, 0xa2, 0x77, 0x09, - 0xe0, 0x20, 0xf1, 0xd9, 0x4c, 0xa8, 0x49, 0x52, 0xdb, 0xfc, 0xc7, 0x32, 0xd4, 0x73, 0x4b, 0x62, - 0xab, 0x50, 0x72, 0x1d, 0x35, 0x56, 0xc9, 0x75, 0xd8, 0x7b, 0xb0, 0x82, 0x2a, 0x1e, 0xbb, 0x8e, - 0x1a, 0xac, 0x8a, 0x60, 0xdf, 0xc1, 0x59, 0xcd, 0x5d, 0xa9, 0xcd, 0x32, 0xc7, 0x26, 0x62, 0x26, - 0xae, 0xd3, 0x2e, 0x4b, 0xcc, 0xc4, 0x75, 0x70, 0xc0, 0xc8, 0xfd, 0x51, 0xb4, 0x2b, 0x72, 0x9a, - 0xd8, 0x66, 0x77, 0xc1, 0x98, 0x5a, 0x67, 0xc1, 0x9c, 0x44, 0x56, 0xd7, 0xb5, 0x8d, 0x26, 0xaf, - 0x49, 0x44, 0xdf, 0xc1, 0x79, 0x1f, 0x4f, 0xad, 0x49, 0xd4, 0x5e, 0xa1, 0x0e, 0x09, 0xa0, 0x18, - 0xdf, 0xf2, 0x44, 0xbb, 0x46, 0x8b, 0xa1, 0x36, 0x89, 0x71, 0xfd, 0x37, 0x63, 0xea, 0x30, 0xa8, - 0xa3, 0x86, 0x88, 0x01, 0x76, 0x3e, 0x84, 0x8a, 0x1d, 0xbb, 0x9e, 0x68, 0xc3, 0xba, 0xb6, 0x51, - 0x7f, 0xde, 0x4c, 0x37, 0x0f, 0xf5, 0xc9, 0x65, 0x1f, 0x12, 0x79, 0x44, 0x54, 0x5f, 0x48, 0x44, - 0x7d, 0xec, 0x29, 0xd4, 0x6c, 0xa5, 0xd4, 0x76, 0x83, 0xe8, 0x6e, 0x66, 0xc6, 0xa8, 0x3a, 0x78, - 0x4a, 0xc2, 0xee, 0x81, 0x31, 0x0d, 0x6c, 0x2b, 0x76, 0x03, 0x3f, 0x6a, 0x37, 0x69, 0x2f, 0x33, - 0x04, 0x7b, 0x0c, 0xad, 0xb9, 0x4f, 0xb3, 0xce, 0x88, 0x56, 0x89, 0x68, 0x4d, 0xe2, 0xf7, 0x52, - 0xd2, 0x2f, 0xa0, 0x7a, 0x6a, 0xc5, 0x71, 0x18, 0xb5, 0xd7, 0xc8, 0xfe, 0xd6, 0x17, 0xd9, 0xdf, - 0xe6, 0x4b, 0x22, 0xe9, 0xf9, 0x71, 0x78, 0xc6, 0x15, 0x3d, 0x2a, 0x6b, 0x66, 0xc5, 0x27, 0xed, - 0x96, 0x54, 0x16, 0xb6, 0x11, 0x27, 0x62, 0x6b, 0xd2, 0xbe, 0x29, 0x37, 0x1e, 0xdb, 0x9d, 0x5f, - 0x41, 0x3d, 0xc7, 0x8e, 0x9b, 0x97, 0x39, 0x3a, 0x36, 0x33, 0x1b, 0x2a, 0xe5, 0x6c, 0xe8, 0xcb, - 0xd2, 0x17, 0x9a, 0xf9, 0x6f, 0x3a, 0xb4, 0xce, 0x7b, 0xe2, 0x05, 0xc3, 0xb9, 0x0b, 0xc6, 0xcc, - 0x0a, 0x45, 0xde, 0x74, 0x6a, 0x12, 0x71, 0x4d, 0xe3, 0xb9, 0x0b, 0x46, 0x1c, 0x0a, 0x31, 0x26, - 0x0b, 0x42, 0x43, 0xd1, 0x79, 0x0d, 0x11, 0x43, 0xb4, 0x22, 0x06, 0x65, 0x2f, 0x70, 0xa4, 0x65, - 0x35, 0x39, 0xb5, 0x7f, 0x82, 0xf1, 0xa4, 0xf6, 0x61, 0x5c, 0xc7, 0x3e, 0xe0, 0x0a, 0xfb, 0x78, - 0x08, 0x95, 0xe8, 0x0a, 0x23, 0xa2, 0x3e, 0xf6, 0x75, 0xba, 0x99, 0x0d, 0xda, 0xcc, 0x47, 0x97, - 0xc6, 0xb3, 0x2b, 0x77, 0xb4, 0xb9, 0x60, 0x47, 0x57, 0x7f, 0x9e, 0x1d, 0xfd, 0x57, 0x1d, 0xe0, - 0xfb, 0x79, 0x10, 0x5b, 0x72, 0x2f, 0x93, 0x11, 0xb5, 0xe2, 0x88, 0xa4, 0x47, 0x15, 0x3c, 0x48, - 0x8f, 0x1f, 0xab, 0x80, 0x82, 0xfb, 0xb8, 0xfa, 0x9c, 0xa5, 0xcb, 0xfa, 0xfe, 0xe8, 0x60, 0xd4, - 0x1d, 0xbd, 0x3a, 0xec, 0xc9, 0x20, 0x83, 0x6e, 0x31, 0x8f, 0x84, 0xf3, 0xfa, 0x2c, 0x16, 0x91, - 0xda, 0xe2, 0x0c, 0xc1, 0x9e, 0x40, 0x0b, 0x81, 0x69, 0x30, 0x71, 0x6d, 0x6b, 0x2a, 0x89, 0x64, - 0xc4, 0xb8, 0x80, 0x4f, 0x24, 0xc9, 0xd0, 0x5c, 0xcd, 0x24, 0xc9, 0x40, 0xdc, 0x81, 0x9a, 0x67, - 0x9d, 0x4a, 0x09, 0x2b, 0xd2, 0xe4, 0x12, 0x98, 0x6d, 0xc0, 0x9a, 0x67, 0x9d, 0x16, 0x06, 0xa9, - 0x11, 0xc9, 0x79, 0xb4, 0x92, 0x22, 0x87, 0x30, 0x52, 0x29, 0x72, 0x84, 0x4f, 0xe0, 0xd6, 0x4c, - 0x84, 0xb6, 0xf0, 0x63, 0x6b, 0x22, 0xb2, 0x35, 0xa1, 0x89, 0x94, 0xf8, 0xa2, 0xae, 0x8b, 0x1c, - 0x52, 0x70, 0x7d, 0x11, 0x87, 0x1c, 0x63, 0x1d, 0xea, 0x51, 0x6c, 0xc5, 0xf3, 0x48, 0xca, 0x6e, - 0x90, 0xc2, 0xf3, 0xa8, 0x8c, 0x42, 0xca, 0x6a, 0xe6, 0x29, 0x08, 0x65, 0x1e, 0x43, 0x95, 0x07, - 0x53, 0x91, 0xb9, 0x9a, 0x76, 0xc1, 0xd5, 0x4a, 0x99, 0xab, 0x75, 0xa0, 0x36, 0x8f, 0x44, 0x48, - 0xfb, 0xab, 0x93, 0xb0, 0x14, 0x46, 0x8d, 0x4f, 0xc2, 0x60, 0x3e, 0xa3, 0xce, 0x32, 0x75, 0x66, - 0x08, 0x73, 0x0c, 0xe5, 0xfd, 0xed, 0xbe, 0xb3, 0xd0, 0x62, 0x64, 0x44, 0xc0, 0x61, 0xaa, 0x14, - 0x11, 0x5a, 0xa0, 0xbb, 0x7e, 0x40, 0x03, 0x54, 0x39, 0x36, 0xd9, 0x87, 0xca, 0x7e, 0xca, 0x64, - 0x3f, 0x39, 0xe7, 0x49, 0x4d, 0xc7, 0xfc, 0x06, 0x2a, 0x7b, 0xae, 0xe7, 0xc6, 0x38, 0xc2, 0x8f, - 0x22, 0x0c, 0x68, 0x84, 0x1a, 0xa7, 0x36, 0x4a, 0xf4, 0x5c, 0x3f, 0x59, 0x89, 0xe7, 0xfa, 0x84, - 0xb1, 0x4e, 0x93, 0xc0, 0xe2, 0x59, 0xa7, 0xe6, 0xdf, 0x57, 0xa1, 0xbe, 0xbf, 0x3d, 0x14, 0x53, - 0x61, 0x63, 0x68, 0x65, 0x77, 0xa0, 0x1a, 0x11, 0xa0, 0x24, 0x29, 0x88, 0x7d, 0x94, 0xc4, 0x84, - 0x12, 0x79, 0xf2, 0x6a, 0x3a, 0x19, 0x1a, 0x3e, 0x09, 0x0a, 0x1f, 0x25, 0x41, 0x41, 0x5f, 0x4c, - 0xe5, 0x25, 0x54, 0x32, 0x2a, 0x94, 0x17, 0x53, 0xc9, 0xb0, 0x60, 0xe6, 0xb2, 0xe3, 0x45, 0x22, - 0x99, 0x2d, 0x9f, 0x00, 0xc5, 0xbc, 0x34, 0x06, 0x5e, 0xa4, 0x4b, 0xfb, 0x91, 0xd6, 0x3e, 0x71, - 0xa7, 0x4e, 0x28, 0x7c, 0xb2, 0xfe, 0x05, 0xb4, 0x49, 0x3f, 0xfb, 0x65, 0x3e, 0x51, 0xd5, 0x16, - 0x12, 0xe7, 0x12, 0xd7, 0xd7, 0xc0, 0x64, 0x82, 0x12, 0x4e, 0x2e, 0x75, 0x19, 0x0b, 0xd9, 0x6e, - 0x26, 0x94, 0x59, 0x32, 0xeb, 0x80, 0xca, 0xf0, 0xae, 0x43, 0x9e, 0x52, 0xe6, 0x29, 0x9c, 0x05, - 0xed, 0x3a, 0x75, 0xa8, 0xa0, 0xdd, 0x86, 0x95, 0xe8, 0xcc, 0x43, 0x39, 0x64, 0xfe, 0x35, 0x9e, - 0x80, 0x85, 0x84, 0xdc, 0x5c, 0x9e, 0x90, 0x6f, 0x43, 0x25, 0x78, 0x87, 0x95, 0xe4, 0xaa, 0xcc, - 0x09, 0x04, 0x20, 0x96, 0x4c, 0xb8, 0xbd, 0x26, 0xb1, 0x04, 0x60, 0x99, 0x48, 0xdd, 0xe3, 0x30, - 0x08, 0x62, 0xca, 0x9f, 0x35, 0x6e, 0x10, 0x86, 0x07, 0x41, 0x8c, 0xdd, 0x44, 0x27, 0xbb, 0x6f, - 0xca, 0x6e, 0xc2, 0x50, 0xf7, 0x1f, 0xc3, 0x5a, 0x28, 0x26, 0xe2, 0x74, 0x36, 0x46, 0x0f, 0x24, - 0x6f, 0x61, 0xe4, 0x0c, 0xab, 0x12, 0xbd, 0xa3, 0xb0, 0xec, 0x11, 0x28, 0xcc, 0xd8, 0x71, 0xa5, - 0xcb, 0xdd, 0x22, 0xba, 0xa6, 0xc4, 0x6e, 0x4b, 0x24, 0xfb, 0x0c, 0x2a, 0x14, 0xff, 0xdb, 0xb7, - 0x29, 0x67, 0x3c, 0x48, 0x57, 0x99, 0x33, 0x66, 0x99, 0x2e, 0x64, 0xb6, 0x90, 0xd4, 0x9d, 0x2f, - 0x00, 0x32, 0xe4, 0x4f, 0xca, 0x01, 0xff, 0xac, 0x81, 0xb1, 0xbf, 0x9d, 0xd4, 0xbf, 0x89, 0x6b, - 0x6a, 0x97, 0xba, 0x26, 0xbb, 0x9f, 0xfa, 0x77, 0x3e, 0xf1, 0x61, 0x38, 0x20, 0x77, 0xcf, 0x55, - 0xc5, 0x7a, 0xb1, 0x1e, 0x7f, 0x08, 0xe5, 0x30, 0x98, 0x26, 0xde, 0xb1, 0x96, 0xb2, 0xca, 0x88, - 0xc5, 0xa9, 0x93, 0x3d, 0x07, 0x23, 0x4a, 0xd6, 0xa9, 0x5c, 0xe4, 0xf6, 0x22, 0x1d, 0xf0, 0x8c, - 0xcc, 0xfc, 0x2b, 0x0d, 0x00, 0x97, 0x10, 0xcd, 0x02, 0x3f, 0x12, 0xd7, 0x59, 0xc3, 0xc7, 0xa0, - 0x1f, 0x7b, 0xc9, 0x22, 0x16, 0x17, 0xf9, 0x48, 0xc0, 0x7e, 0x01, 0xba, 0xad, 0xce, 0x0e, 0x57, - 0x9e, 0x47, 0x90, 0xca, 0xfc, 0x4f, 0x0d, 0x6b, 0x6a, 0xdf, 0xf9, 0xf9, 0x74, 0x99, 0x68, 0x4c, - 0xbf, 0x4a, 0x63, 0x39, 0x85, 0x97, 0x8b, 0x0a, 0x97, 0x19, 0xcd, 0x11, 0xb3, 0xf8, 0x44, 0x65, - 0xd6, 0x14, 0x2e, 0xea, 0xb9, 0x7a, 0x3d, 0x3d, 0xef, 0x82, 0x31, 0x3c, 0xb1, 0x42, 0xd1, 0x9d, - 0xcb, 0xc2, 0x00, 0xcf, 0x91, 0xca, 0xc8, 0xa8, 0xbd, 0xb0, 0x58, 0x60, 0x50, 0x3e, 0x09, 0xa2, - 0x58, 0x19, 0x03, 0xb5, 0xcd, 0xdf, 0x96, 0x00, 0x48, 0x92, 0xac, 0x3b, 0x3e, 0x00, 0x98, 0x89, - 0xd0, 0x73, 0xa3, 0x08, 0x27, 0x23, 0x05, 0xe6, 0x30, 0xb8, 0x42, 0x71, 0x3a, 0x73, 0x43, 0x11, - 0xa9, 0x98, 0x9f, 0x80, 0x99, 0x9f, 0x4b, 0xe9, 0xe7, 0xfd, 0x5c, 0xea, 0x43, 0xf9, 0xf9, 0x07, - 0x00, 0x13, 0xe1, 0x8b, 0xd0, 0x4a, 0x4d, 0xab, 0xcc, 0x73, 0x98, 0x34, 0x97, 0x55, 0xd5, 0x82, - 0x30, 0x97, 0xdd, 0x03, 0xc3, 0x9a, 0x4e, 0x83, 0x77, 0x18, 0x6c, 0x29, 0xb8, 0xd6, 0x78, 0x86, - 0xc0, 0x9c, 0xf2, 0x36, 0x0e, 0xde, 0x08, 0x9f, 0x42, 0xa9, 0xc1, 0x15, 0xc4, 0x7e, 0x09, 0x2b, - 0x41, 0xe8, 0x4e, 0x5c, 0x0a, 0x96, 0xe8, 0xc5, 0x59, 0x89, 0x94, 0xea, 0x8f, 0x27, 0x24, 0xe6, - 0x5f, 0x6b, 0x4a, 0x19, 0x23, 0x62, 0x7e, 0x0c, 0x15, 0x29, 0x53, 0xa3, 0x4d, 0xb9, 0x55, 0x64, - 0x55, 0x07, 0x50, 0x39, 0xce, 0x3d, 0x30, 0x22, 0x77, 0xe2, 0x5b, 0xf1, 0x3c, 0x4c, 0x1c, 0x3b, - 0x43, 0xe0, 0x7a, 0x23, 0x11, 0xba, 0xd6, 0xd4, 0xfd, 0x51, 0x48, 0x13, 0x6e, 0xf0, 0x1c, 0x86, - 0x4e, 0x69, 0x42, 0xc8, 0xda, 0xbb, 0xc2, 0xa9, 0x6d, 0xfe, 0x57, 0x1b, 0x8c, 0xc1, 0x70, 0xf9, - 0x4d, 0x40, 0x62, 0x98, 0xa5, 0xab, 0x0c, 0xf3, 0x73, 0xa8, 0x78, 0x6f, 0x1c, 0x37, 0x6c, 0xff, - 0x11, 0x51, 0x65, 0xa1, 0x2c, 0x1d, 0x61, 0x73, 0x1f, 0xfb, 0x15, 0xf0, 0xe2, 0x06, 0x97, 0xf4, - 0xc8, 0x18, 0x7a, 0xc8, 0x78, 0xe7, 0x52, 0x46, 0xee, 0x15, 0x19, 0x89, 0x1e, 0x19, 0xe3, 0x60, - 0x6e, 0x9f, 0xb4, 0xdf, 0xbb, 0x94, 0x71, 0x84, 0xfd, 0x39, 0x46, 0xa2, 0x67, 0x5f, 0x42, 0x55, - 0xe6, 0xaf, 0x76, 0x9b, 0x38, 0xd7, 0x17, 0x70, 0x1e, 0x11, 0x41, 0xc6, 0xaa, 0x38, 0xd8, 0x26, - 0x94, 0x42, 0xaf, 0xfd, 0x3e, 0xf1, 0xdd, 0x5b, 0x38, 0xd5, 0x8c, 0xa7, 0x14, 0x7a, 0x38, 0x56, - 0x28, 0x13, 0x45, 0xe7, 0xd2, 0xb1, 0x38, 0x11, 0xe4, 0xc6, 0x92, 0x1c, 0xec, 0xeb, 0x2c, 0x41, - 0xde, 0x25, 0xe6, 0x0f, 0x17, 0x30, 0x0f, 0x25, 0x45, 0xc6, 0x9d, 0x66, 0xd1, 0xaf, 0x61, 0xe5, - 0xad, 0x08, 0xc9, 0xcb, 0xee, 0x5d, 0xca, 0xfe, 0x83, 0xa4, 0xc8, 0xb1, 0x2b, 0x1e, 0x64, 0x0f, - 0x85, 0x7d, 0x66, 0x4f, 0x45, 0xfb, 0xfe, 0xa5, 0xec, 0x5c, 0x52, 0xe4, 0xd8, 0x15, 0x0f, 0xfb, - 0x32, 0x49, 0x6d, 0x1f, 0x10, 0xb3, 0xb9, 0x68, 0xea, 0x22, 0x7e, 0xd9, 0x8d, 0xe3, 0xfc, 0xce, - 0x12, 0x0b, 0xee, 0xac, 0x7d, 0x12, 0xbc, 0xf3, 0xdb, 0x0f, 0x2e, 0xdd, 0xd9, 0x2d, 0xec, 0xcf, - 0x31, 0x12, 0xbd, 0x64, 0xf4, 0x02, 0xa7, 0xbd, 0x7e, 0x05, 0xa3, 0x17, 0x38, 0x05, 0x46, 0x2f, - 0x70, 0xd8, 0xa7, 0xa0, 0x5b, 0xf6, 0xb4, 0xfd, 0x21, 0xb1, 0xdd, 0x5f, 0xc0, 0xd6, 0xb5, 0xa7, - 0x19, 0x13, 0xd2, 0x4a, 0xf3, 0x43, 0xd7, 0x35, 0xaf, 0x30, 0xbf, 0x37, 0xc2, 0x2f, 0x98, 0x1f, - 0x3a, 0xf2, 0xe7, 0x50, 0xf9, 0x0d, 0x1e, 0xc3, 0xda, 0x0f, 0x2f, 0x65, 0xa4, 0x63, 0x5a, 0x8e, - 0x91, 0xe8, 0x3b, 0x63, 0x68, 0xe4, 0x5d, 0x48, 0xe5, 0x13, 0xed, 0xb2, 0x7c, 0x72, 0x0f, 0x8c, - 0x50, 0xd8, 0xf3, 0x30, 0x72, 0xdf, 0x4a, 0xdf, 0xad, 0xf1, 0x0c, 0x91, 0x1e, 0xae, 0x75, 0x3a, - 0x74, 0x53, 0xbb, 0xf3, 0x14, 0x1a, 0x79, 0x57, 0x5b, 0x32, 0x00, 0x92, 0xe7, 0x1d, 0x6c, 0x19, - 0xf9, 0x1e, 0x34, 0x0b, 0x5e, 0x75, 0x8d, 0xf9, 0xfb, 0x41, 0x62, 0x82, 0xea, 0x42, 0x2f, 0x45, - 0x74, 0x8e, 0xc1, 0x48, 0x7d, 0xed, 0x0f, 0xd3, 0xc4, 0xd5, 0xe3, 0xec, 0x40, 0xb3, 0xe0, 0x9f, - 0xcb, 0xc6, 0xba, 0x03, 0xd5, 0xd8, 0x0a, 0x27, 0x22, 0x56, 0x31, 0x5a, 0x41, 0x9d, 0x5d, 0x58, - 0x2d, 0xba, 0xea, 0xff, 0x57, 0xd0, 0xff, 0x68, 0xb0, 0x5a, 0xf4, 0xda, 0x65, 0x92, 0xbe, 0x91, - 0x75, 0x4d, 0x89, 0x2a, 0x93, 0xa7, 0x4b, 0x83, 0xc0, 0xe6, 0x0f, 0x3d, 0x3e, 0xec, 0x1f, 0x0c, - 0xc6, 0x5b, 0xfb, 0xdb, 0x54, 0xeb, 0x60, 0x72, 0xf1, 0xac, 0xd3, 0x24, 0x98, 0xe8, 0x94, 0x42, - 0x72, 0x18, 0x3c, 0xaa, 0x4e, 0x42, 0xeb, 0x75, 0x42, 0x20, 0x13, 0x71, 0x1e, 0x65, 0x7e, 0x01, - 0xf5, 0x9c, 0x54, 0x06, 0x50, 0xdd, 0xe2, 0xbd, 0xee, 0xa8, 0xd7, 0xba, 0xc1, 0x0c, 0xa8, 0x1c, - 0x1e, 0xf1, 0xdd, 0x5e, 0x4b, 0x63, 0x35, 0x28, 0xef, 0xf5, 0x87, 0xa3, 0x56, 0x09, 0x5b, 0xbb, - 0xbc, 0xfb, 0x6d, 0x4b, 0xef, 0xfc, 0xbb, 0x0e, 0xab, 0xc5, 0x28, 0xb3, 0xa0, 0xe0, 0x5d, 0xba, - 0xc2, 0xa2, 0x84, 0x4d, 0xde, 0xdb, 0x7a, 0xb5, 0xb5, 0xd7, 0xcb, 0x56, 0x78, 0x08, 0xf5, 0x50, - 0x44, 0x71, 0x10, 0x0a, 0x3c, 0x9b, 0xa8, 0x12, 0x6c, 0xf3, 0x1a, 0x82, 0x24, 0xd3, 0x0e, 0x1e, - 0x68, 0x78, 0x5e, 0x04, 0xeb, 0x83, 0x31, 0x9b, 0x87, 0x13, 0xe1, 0x58, 0x71, 0x52, 0x04, 0xff, - 0x62, 0xb9, 0xbc, 0x43, 0x64, 0xd9, 0xb6, 0x62, 0xc1, 0x33, 0xee, 0xce, 0x4b, 0x68, 0xe4, 0xc7, - 0xa1, 0xe3, 0x54, 0x10, 0xda, 0x42, 0x1d, 0x6e, 0x25, 0x80, 0xf6, 0xe2, 0xbd, 0xa1, 0x9a, 0x46, - 0x5a, 0xb8, 0x82, 0xb0, 0x2e, 0x54, 0xbb, 0x10, 0x29, 0xeb, 0x4e, 0xe1, 0xce, 0x2e, 0x18, 0xe9, - 0x88, 0x18, 0x11, 0xce, 0x84, 0x15, 0x92, 0xd4, 0x0a, 0xa7, 0x36, 0x0e, 0xe5, 0x05, 0xbe, 0x92, - 0x59, 0xe1, 0x12, 0xc0, 0x0d, 0x70, 0xac, 0x33, 0x65, 0x08, 0xd8, 0x34, 0x9f, 0x41, 0x3d, 0xa7, - 0x53, 0x56, 0x87, 0x15, 0xde, 0x1b, 0x8e, 0x0e, 0xf8, 0x65, 0x1b, 0xdc, 0xf9, 0x5f, 0x0d, 0xd6, - 0xce, 0xc5, 0xff, 0x65, 0x66, 0xbc, 0x93, 0xde, 0xb0, 0x95, 0xa8, 0xce, 0xda, 0x5c, 0x9e, 0x52, - 0x16, 0x5e, 0xb5, 0x15, 0xa2, 0x81, 0x7e, 0x3e, 0x1a, 0x98, 0xd0, 0x78, 0x23, 0xce, 0xa2, 0x38, - 0x70, 0xc4, 0x54, 0xd0, 0xd6, 0xe9, 0x1b, 0x06, 0x2f, 0xe0, 0xfe, 0x80, 0x4b, 0xb8, 0xce, 0x08, - 0x1a, 0xf9, 0xd4, 0xb5, 0x6c, 0xcd, 0x8f, 0x92, 0x92, 0xf7, 0x92, 0xda, 0x4b, 0xf6, 0x76, 0xba, - 0x28, 0x35, 0xcb, 0x6b, 0xcb, 0xa4, 0x26, 0xb1, 0xbf, 0x94, 0x8b, 0xfd, 0xbf, 0x2f, 0x01, 0x64, - 0x49, 0x6e, 0x99, 0x84, 0xaf, 0xf2, 0x0e, 0xf7, 0xf8, 0xca, 0x7c, 0xb9, 0xd9, 0xdd, 0xda, 0x1b, - 0x6f, 0x1d, 0xec, 0xef, 0x77, 0x07, 0xca, 0xd9, 0xae, 0xde, 0x80, 0x2f, 0x0b, 0xf7, 0x45, 0x1f, - 0x2f, 0x97, 0x9d, 0x3b, 0x61, 0x31, 0x28, 0x87, 0xf3, 0xa9, 0xbc, 0x6d, 0x31, 0x38, 0xb5, 0xd1, - 0xfe, 0x67, 0x41, 0xe4, 0xa6, 0x47, 0x9f, 0x26, 0x4f, 0x61, 0xf3, 0x29, 0xd4, 0x73, 0xb3, 0x43, - 0xf3, 0x1c, 0x1c, 0x0c, 0xd0, 0x66, 0x01, 0xaa, 0xfb, 0x07, 0xdb, 0xfd, 0x9d, 0x57, 0x79, 0xa3, - 0x35, 0x1f, 0x41, 0x2d, 0x19, 0x90, 0x35, 0xa0, 0x76, 0x34, 0xec, 0xf1, 0x71, 0x77, 0x6b, 0xaf, - 0x75, 0x03, 0x0d, 0x7e, 0xf8, 0x6a, 0x48, 0x80, 0xd6, 0xf9, 0x15, 0xe6, 0xc5, 0x2c, 0xf3, 0x2f, - 0x29, 0xf2, 0x25, 0xa9, 0xa4, 0xe8, 0xfc, 0x5e, 0x83, 0x46, 0x3e, 0xf9, 0x2f, 0xbc, 0x73, 0x7b, - 0x90, 0x3b, 0x47, 0x5e, 0xb0, 0x08, 0xdc, 0x9d, 0x75, 0x28, 0x05, 0x33, 0x75, 0x61, 0xdb, 0x2a, - 0x5e, 0xd8, 0x1e, 0x1c, 0xf2, 0x52, 0x30, 0x2b, 0x5c, 0x7f, 0x96, 0xcf, 0x5d, 0x7f, 0xe6, 0x2f, - 0x58, 0x2b, 0xe7, 0x2e, 0x58, 0x1f, 0x43, 0x45, 0xa0, 0xcd, 0x93, 0x26, 0x57, 0x73, 0x4b, 0x21, - 0xe1, 0xbd, 0xc1, 0x88, 0xbf, 0xe2, 0x92, 0xe2, 0x5b, 0x03, 0x56, 0xec, 0xc0, 0xf3, 0x2c, 0xdf, - 0x31, 0xff, 0xc6, 0x00, 0xc0, 0xed, 0x53, 0x47, 0xf6, 0xcf, 0xa1, 0x22, 0xc2, 0x30, 0x08, 0x95, - 0x3e, 0x8a, 0x75, 0xa5, 0xa4, 0xd9, 0xec, 0x21, 0x41, 0x02, 0x71, 0x49, 0x9f, 0xaf, 0x68, 0xe5, - 0xea, 0x1f, 0x2e, 0x62, 0x4d, 0xb3, 0x99, 0x62, 0x5e, 0x54, 0xd1, 0xea, 0x97, 0xb3, 0xa7, 0x11, - 0x39, 0x61, 0x4f, 0x2a, 0x5a, 0x55, 0x23, 0x96, 0x17, 0x54, 0x6d, 0x8a, 0x95, 0x0c, 0x53, 0xb1, - 0x25, 0x35, 0xa2, 0x2c, 0xf5, 0x2a, 0x97, 0xaf, 0x54, 0x6d, 0x77, 0xb2, 0x52, 0x59, 0xea, 0x7d, - 0x06, 0xcd, 0x82, 0x06, 0xd0, 0x0e, 0x6c, 0x74, 0x59, 0x4d, 0xba, 0x2c, 0xb6, 0xe9, 0x1e, 0x34, - 0x9a, 0xa8, 0xf3, 0x37, 0x36, 0x3b, 0xff, 0xa1, 0xc1, 0xda, 0xb9, 0xe5, 0x5f, 0x8f, 0x93, 0x7d, - 0x57, 0xc8, 0x12, 0x18, 0x5e, 0x9f, 0x5d, 0x43, 0xb7, 0x09, 0xdc, 0xf7, 0x8f, 0x83, 0x5c, 0x5a, - 0xf9, 0x1e, 0xea, 0xb9, 0x8e, 0x65, 0xb1, 0x24, 0x7d, 0x83, 0x29, 0x5d, 0xfe, 0x06, 0xd3, 0xf9, - 0x5b, 0x1d, 0xd6, 0xce, 0xed, 0xcc, 0xf5, 0x57, 0xa6, 0x76, 0xf0, 0xca, 0x95, 0x9d, 0x13, 0x9e, - 0xc0, 0x72, 0x65, 0x89, 0x80, 0xce, 0xef, 0x4a, 0x50, 0xcf, 0xf5, 0xfc, 0x3c, 0xe1, 0x1b, 0x35, - 0xe0, 0xe4, 0x2e, 0x9c, 0xcf, 0x6b, 0x80, 0xfa, 0xd2, 0x77, 0xd6, 0x72, 0xee, 0x9d, 0xf5, 0x50, - 0xc5, 0xca, 0x0a, 0x79, 0xe3, 0x9f, 0xff, 0xc4, 0x75, 0x6d, 0x6e, 0xf7, 0xf6, 0x7a, 0xa3, 0xfe, - 0xc1, 0x20, 0x17, 0x41, 0x55, 0x2e, 0xab, 0xa6, 0xb9, 0xcc, 0x34, 0xa1, 0x91, 0xa7, 0xc3, 0x70, - 0xb8, 0xd3, 0xdf, 0xc3, 0x20, 0x59, 0x83, 0xf2, 0x88, 0xf7, 0x7a, 0x2d, 0xad, 0xb3, 0x0b, 0xf5, - 0x9c, 0xed, 0x5f, 0x73, 0x63, 0x92, 0x60, 0xad, 0x67, 0xc1, 0xba, 0x73, 0x02, 0xcd, 0x82, 0x3f, - 0x5c, 0x53, 0xd4, 0xa7, 0x60, 0x90, 0xdf, 0xf8, 0xf2, 0x44, 0xa3, 0x17, 0xa2, 0x6c, 0xf6, 0xe6, - 0xc5, 0x33, 0x2a, 0xf3, 0x31, 0x34, 0x07, 0xd1, 0x30, 0xb6, 0xe2, 0xa5, 0xf7, 0x1f, 0xe6, 0x3f, - 0xe8, 0xb0, 0x9a, 0xd0, 0x5e, 0x31, 0x2d, 0x06, 0x65, 0x91, 0xcd, 0x8b, 0xda, 0x58, 0x08, 0x44, - 0x31, 0x56, 0x80, 0xea, 0xca, 0x8a, 0x00, 0x2c, 0xd5, 0xfc, 0x7c, 0xec, 0x55, 0x10, 0xd6, 0xd1, - 0x7e, 0xfa, 0xaf, 0x43, 0x12, 0x7c, 0xf3, 0x28, 0x76, 0x17, 0x8c, 0xd7, 0x41, 0x10, 0x8f, 0xc9, - 0x5a, 0xe4, 0xd3, 0x58, 0x0d, 0x11, 0xf4, 0x0f, 0xc1, 0x03, 0xa8, 0xdb, 0xf3, 0x90, 0x9e, 0x63, - 0x8f, 0x5d, 0x47, 0x3d, 0x8e, 0x81, 0x42, 0xed, 0xb8, 0x4e, 0x9e, 0xc0, 0x76, 0x1d, 0xf5, 0x34, - 0x96, 0x10, 0x6c, 0x49, 0x02, 0x4f, 0x78, 0xe3, 0xb7, 0x6e, 0x18, 0xcf, 0xad, 0xa9, 0x7a, 0x18, - 0x03, 0x4f, 0x78, 0x3f, 0x48, 0x0c, 0xfb, 0x10, 0x1a, 0x48, 0x10, 0x8a, 0xc8, 0x75, 0x84, 0x1f, - 0xab, 0x9b, 0x7e, 0x64, 0xe2, 0x0a, 0x85, 0x53, 0x44, 0x92, 0x08, 0x73, 0x9b, 0xba, 0xf0, 0xaf, - 0x79, 0xc2, 0xa3, 0x5c, 0xc7, 0xee, 0x03, 0x4a, 0x1b, 0x4f, 0xc2, 0xe0, 0x5d, 0x7c, 0x42, 0xd7, - 0xfe, 0x65, 0x8e, 0xe4, 0xbb, 0x84, 0xc0, 0x3d, 0x88, 0x4f, 0x42, 0x61, 0x39, 0xf2, 0xbd, 0xab, - 0xcc, 0x13, 0x10, 0xf7, 0xfc, 0xd8, 0x89, 0xe8, 0x86, 0xbf, 0xcc, 0xb1, 0x89, 0x4a, 0x9c, 0xcf, - 0x48, 0x0f, 0x6b, 0x52, 0x89, 0x12, 0x32, 0xff, 0x49, 0x87, 0xe6, 0xbe, 0xe5, 0xbb, 0xd3, 0x34, - 0x87, 0x7e, 0x03, 0x8d, 0x50, 0x36, 0xc7, 0xb9, 0x2b, 0xda, 0xec, 0xf6, 0x66, 0xbf, 0x3b, 0xe8, - 0xef, 0x75, 0xc7, 0xbc, 0xf7, 0xfd, 0x51, 0x6f, 0x38, 0x92, 0xf5, 0x44, 0x5d, 0x71, 0x8c, 0xd0, - 0x29, 0xde, 0x87, 0x1a, 0xda, 0xc2, 0xf8, 0xdc, 0xcf, 0x1f, 0xdf, 0xc9, 0x5b, 0x57, 0xfa, 0xc1, - 0xc6, 0x0e, 0xa6, 0xc9, 0xab, 0x5a, 0x02, 0xe3, 0x62, 0x49, 0x0b, 0xe3, 0xfc, 0xb3, 0x1a, 0x61, - 0xe8, 0x07, 0x86, 0x75, 0xa8, 0x3b, 0x22, 0xb2, 0x43, 0x77, 0x96, 0xde, 0x51, 0x1a, 0x3c, 0x8f, - 0xc2, 0x71, 0xa5, 0x00, 0xf5, 0x17, 0x85, 0xc1, 0x57, 0x08, 0xee, 0x3b, 0xec, 0x23, 0x58, 0x95, - 0x5d, 0xf2, 0xb9, 0x42, 0x6d, 0xb7, 0xc1, 0x1b, 0x84, 0xdd, 0x45, 0xa4, 0xfc, 0xd5, 0x42, 0xe6, - 0x9f, 0x9a, 0x2c, 0xdf, 0x09, 0x40, 0x2d, 0xdb, 0xa1, 0xb0, 0xe2, 0x20, 0xa4, 0x1d, 0x36, 0x78, - 0x02, 0xa2, 0x4e, 0x85, 0xbc, 0x4c, 0x05, 0x79, 0xc7, 0x29, 0x21, 0xdc, 0x76, 0xcb, 0xf1, 0x5c, - 0x7f, 0xac, 0x7a, 0xeb, 0x72, 0xae, 0x84, 0xeb, 0xa5, 0x0f, 0x2b, 0x72, 0x42, 0x74, 0xff, 0xdb, - 0xc8, 0x2d, 0xf6, 0x45, 0x10, 0xc5, 0xec, 0x51, 0x32, 0xdf, 0xe4, 0x69, 0x49, 0x3d, 0x68, 0x36, - 0x09, 0x9b, 0x3c, 0x23, 0x99, 0xff, 0xa2, 0xc1, 0x6a, 0xb2, 0x79, 0xca, 0xd5, 0x94, 0xb7, 0x6b, - 0x85, 0xc0, 0x61, 0x27, 0xe5, 0x6b, 0x45, 0x39, 0xdf, 0x7d, 0x80, 0x38, 0x88, 0xad, 0xe9, 0x78, - 0x1e, 0xa9, 0xfb, 0x4f, 0x9d, 0x1b, 0x84, 0x39, 0x8a, 0x04, 0x06, 0xe2, 0x55, 0xd9, 0x6d, 0x5b, - 0x33, 0xcb, 0x76, 0x63, 0x79, 0x7b, 0xae, 0xf3, 0x26, 0x61, 0xb7, 0x14, 0x92, 0x7d, 0x0c, 0x6b, - 0xbe, 0x78, 0x27, 0x6d, 0x77, 0x9c, 0x65, 0x6e, 0x9d, 0x37, 0x7d, 0xf1, 0x8e, 0x2c, 0x98, 0x82, - 0x09, 0x6a, 0x3f, 0xa3, 0xcb, 0xdd, 0x23, 0x37, 0x12, 0xb2, 0x43, 0x2b, 0x3e, 0x79, 0xf2, 0x67, - 0x50, 0x3e, 0x17, 0x31, 0x9b, 0x60, 0x6c, 0x1d, 0x0c, 0x46, 0xdd, 0xfe, 0xa0, 0xc7, 0x5b, 0x1a, - 0x56, 0x8d, 0x58, 0x59, 0xf6, 0x07, 0xbb, 0xf2, 0xc8, 0x3b, 0x1c, 0x75, 0x47, 0x2d, 0xfd, 0xc9, - 0x53, 0x30, 0xd2, 0xc7, 0x75, 0x44, 0x63, 0x9d, 0x29, 0xcf, 0x51, 0xbb, 0xfc, 0xe0, 0xe8, 0xb0, - 0x55, 0x42, 0xc6, 0x43, 0x7e, 0xf0, 0xeb, 0xde, 0x16, 0x92, 0x3f, 0x83, 0x15, 0x55, 0xda, 0xb1, - 0x15, 0xd0, 0x77, 0x7b, 0xa3, 0xd6, 0x0d, 0x6c, 0x0c, 0x7b, 0xa3, 0x96, 0xc6, 0xaa, 0x50, 0xe2, - 0xfb, 0xad, 0x12, 0x16, 0xb4, 0x7c, 0x7f, 0x70, 0xb0, 0xdd, 0x23, 0xf9, 0x90, 0x95, 0x6b, 0xc5, - 0xa2, 0xf7, 0x87, 0x83, 0xbd, 0xa3, 0x7d, 0x3c, 0xa9, 0x19, 0x50, 0xe9, 0x13, 0x79, 0xe9, 0xc9, - 0xef, 0x34, 0xb8, 0xb5, 0xc0, 0x45, 0x58, 0x0b, 0x1a, 0xf2, 0x10, 0x3f, 0x1e, 0xbe, 0xe8, 0xd2, - 0x49, 0xaf, 0xa5, 0x52, 0x45, 0x82, 0xd1, 0x10, 0xd3, 0x7b, 0x39, 0xea, 0x0d, 0xb6, 0x15, 0xa6, - 0x84, 0x98, 0xe1, 0x0b, 0xde, 0x1f, 0x7c, 0xa7, 0x30, 0x3a, 0xbb, 0x05, 0x6b, 0xfb, 0xdd, 0x41, - 0x77, 0xb7, 0x37, 0xee, 0xbd, 0x54, 0xda, 0x28, 0x53, 0x79, 0x3d, 0x90, 0xe8, 0x56, 0x85, 0x31, - 0x58, 0xdd, 0xed, 0x8d, 0xc6, 0x5b, 0xdd, 0xc3, 0xee, 0x56, 0x7f, 0xd4, 0xef, 0x0d, 0x5b, 0xd5, - 0xe7, 0xff, 0xad, 0x83, 0xde, 0x0b, 0x22, 0xf6, 0x1c, 0xca, 0x87, 0xae, 0x3f, 0x61, 0xd9, 0x83, - 0x46, 0xee, 0xff, 0xb6, 0x0e, 0x3b, 0x87, 0x9d, 0x4d, 0xcf, 0xcc, 0x1b, 0xec, 0x53, 0x28, 0xed, - 0x6f, 0x33, 0x96, 0x4b, 0xd8, 0x09, 0xfd, 0xad, 0x02, 0x4e, 0x9a, 0xa0, 0x79, 0xe3, 0x13, 0x8d, - 0x7d, 0x06, 0xe5, 0x1d, 0xd7, 0x77, 0x58, 0xfe, 0xfd, 0x28, 0x7d, 0xfd, 0xb9, 0x9c, 0xed, 0x2b, - 0xa8, 0xca, 0xd4, 0xc1, 0xee, 0x64, 0xd9, 0x39, 0x9f, 0x77, 0x3a, 0xef, 0x5d, 0xc0, 0x27, 0xec, - 0xec, 0xd7, 0xb0, 0x76, 0xee, 0x07, 0x3a, 0xf6, 0xe0, 0xe2, 0xb3, 0x54, 0xe1, 0x9f, 0xb6, 0x4e, - 0x36, 0xbf, 0xdc, 0x4f, 0x69, 0xe6, 0x0d, 0xf6, 0x17, 0x00, 0xd9, 0x0f, 0x70, 0xac, 0x53, 0x78, - 0x05, 0xbb, 0x9e, 0x84, 0x4f, 0xa1, 0xdc, 0x3b, 0x15, 0x76, 0x4e, 0x6d, 0xe9, 0x91, 0x2c, 0xb7, - 0xfe, 0xac, 0xf4, 0x30, 0x6f, 0xb0, 0x17, 0x70, 0x4b, 0x7a, 0xf3, 0x50, 0x84, 0x6f, 0x45, 0x7a, - 0xd0, 0xcf, 0x54, 0x51, 0x08, 0xd4, 0x39, 0x55, 0x14, 0x63, 0x80, 0x79, 0xe3, 0xdb, 0x23, 0x58, - 0x73, 0x83, 0xcd, 0x09, 0xf6, 0x29, 0x9a, 0x6f, 0x6b, 0xbd, 0x20, 0xa2, 0xb4, 0x7e, 0xa8, 0xfd, - 0xe5, 0x27, 0x13, 0x37, 0x3e, 0x99, 0xbf, 0xde, 0xb4, 0x03, 0xef, 0x99, 0x2d, 0x42, 0xff, 0xa9, - 0x08, 0xa2, 0x67, 0x48, 0xfd, 0x94, 0xa2, 0xf1, 0x33, 0xfa, 0xbe, 0x9e, 0x1f, 0x7f, 0x25, 0x82, - 0x68, 0x8c, 0xf8, 0xbf, 0x2b, 0xe9, 0xbd, 0x83, 0xe1, 0xeb, 0x2a, 0x75, 0xfc, 0xc9, 0xff, 0x05, - 0x00, 0x00, 0xff, 0xff, 0x28, 0x5f, 0x99, 0x96, 0x2a, 0x29, 0x00, 0x00, -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// EosClient is the client API for Eos service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type EosClient interface { - // Replies to a ping - Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*PingReply, error) - // Replies to MD requests with a stream - MD(ctx context.Context, in *MDRequest, opts ...grpc.CallOption) (Eos_MDClient, error) - // Replies to Find requests with a stream - Find(ctx context.Context, in *FindRequest, opts ...grpc.CallOption) (Eos_FindClient, error) - // Replies to a NsStat operation - NsStat(ctx context.Context, in *NsStatRequest, opts ...grpc.CallOption) (*NsStatResponse, error) - // Replies to an insert - ContainerInsert(ctx context.Context, in *ContainerInsertRequest, opts ...grpc.CallOption) (*InsertReply, error) - FileInsert(ctx context.Context, in *FileInsertRequest, opts ...grpc.CallOption) (*InsertReply, error) - // Replies to a NsRequest operation - Exec(ctx context.Context, in *NSRequest, opts ...grpc.CallOption) (*NSResponse, error) - // Manila Driver - ManilaServerRequest(ctx context.Context, in *ManilaRequest, opts ...grpc.CallOption) (*ManilaResponse, error) +func (x *NSResponse_ShareAccess) String() string { + return protoimpl.X.MessageStringOf(x) } -type eosClient struct { - cc *grpc.ClientConn +func (*NSResponse_ShareAccess) ProtoMessage() {} + +func (x *NSResponse_ShareAccess) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[56] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func NewEosClient(cc *grpc.ClientConn) EosClient { - return &eosClient{cc} +// Deprecated: Use NSResponse_ShareAccess.ProtoReflect.Descriptor instead. +func (*NSResponse_ShareAccess) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{21, 6} } -func (c *eosClient) Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*PingReply, error) { - out := new(PingReply) - err := c.cc.Invoke(ctx, "/eos.rpc.Eos/Ping", in, out, opts...) - if err != nil { - return nil, err +func (x *NSResponse_ShareAccess) GetName() string { + if x != nil { + return x.Name } - return out, nil + return "" } -func (c *eosClient) MD(ctx context.Context, in *MDRequest, opts ...grpc.CallOption) (Eos_MDClient, error) { - stream, err := c.cc.NewStream(ctx, &_Eos_serviceDesc.Streams[0], "/eos.rpc.Eos/MD", opts...) - if err != nil { - return nil, err - } - x := &eosMDClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err +func (x *NSResponse_ShareAccess) GetGranted() bool { + if x != nil { + return x.Granted } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil + return false } -type Eos_MDClient interface { - Recv() (*MDResponse, error) - grpc.ClientStream -} +type NSResponse_ShareResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -type eosMDClient struct { - grpc.ClientStream + Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` + Shares []*NSResponse_ShareInfo `protobuf:"bytes,3,rep,name=shares,proto3" json:"shares,omitempty"` + Access []*NSResponse_ShareAccess `protobuf:"bytes,4,rep,name=access,proto3" json:"access,omitempty"` } -func (x *eosMDClient) Recv() (*MDResponse, error) { - m := new(MDResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err +func (x *NSResponse_ShareResponse) Reset() { + *x = NSResponse_ShareResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[57] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return m, nil } -func (c *eosClient) Find(ctx context.Context, in *FindRequest, opts ...grpc.CallOption) (Eos_FindClient, error) { - stream, err := c.cc.NewStream(ctx, &_Eos_serviceDesc.Streams[1], "/eos.rpc.Eos/Find", opts...) - if err != nil { - return nil, err - } - x := &eosFindClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil +func (x *NSResponse_ShareResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -type Eos_FindClient interface { - Recv() (*MDResponse, error) - grpc.ClientStream +func (*NSResponse_ShareResponse) ProtoMessage() {} + +func (x *NSResponse_ShareResponse) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[57] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -type eosFindClient struct { - grpc.ClientStream +// Deprecated: Use NSResponse_ShareResponse.ProtoReflect.Descriptor instead. +func (*NSResponse_ShareResponse) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{21, 7} } -func (x *eosFindClient) Recv() (*MDResponse, error) { - m := new(MDResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err +func (x *NSResponse_ShareResponse) GetCode() int64 { + if x != nil { + return x.Code } - return m, nil + return 0 } -func (c *eosClient) NsStat(ctx context.Context, in *NsStatRequest, opts ...grpc.CallOption) (*NsStatResponse, error) { - out := new(NsStatResponse) - err := c.cc.Invoke(ctx, "/eos.rpc.Eos/NsStat", in, out, opts...) - if err != nil { - return nil, err +func (x *NSResponse_ShareResponse) GetMsg() string { + if x != nil { + return x.Msg } - return out, nil + return "" } -func (c *eosClient) ContainerInsert(ctx context.Context, in *ContainerInsertRequest, opts ...grpc.CallOption) (*InsertReply, error) { - out := new(InsertReply) - err := c.cc.Invoke(ctx, "/eos.rpc.Eos/ContainerInsert", in, out, opts...) - if err != nil { - return nil, err +func (x *NSResponse_ShareResponse) GetShares() []*NSResponse_ShareInfo { + if x != nil { + return x.Shares } - return out, nil + return nil } -func (c *eosClient) FileInsert(ctx context.Context, in *FileInsertRequest, opts ...grpc.CallOption) (*InsertReply, error) { - out := new(InsertReply) - err := c.cc.Invoke(ctx, "/eos.rpc.Eos/FileInsert", in, out, opts...) - if err != nil { - return nil, err +func (x *NSResponse_ShareResponse) GetAccess() []*NSResponse_ShareAccess { + if x != nil { + return x.Access } - return out, nil + return nil } -func (c *eosClient) Exec(ctx context.Context, in *NSRequest, opts ...grpc.CallOption) (*NSResponse, error) { - out := new(NSResponse) - err := c.cc.Invoke(ctx, "/eos.rpc.Eos/Exec", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil +type NSResponse_VersionResponse_VersionInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Mtime *Time `protobuf:"bytes,2,opt,name=mtime,proto3" json:"mtime,omitempty"` } -func (c *eosClient) ManilaServerRequest(ctx context.Context, in *ManilaRequest, opts ...grpc.CallOption) (*ManilaResponse, error) { - out := new(ManilaResponse) - err := c.cc.Invoke(ctx, "/eos.rpc.Eos/ManilaServerRequest", in, out, opts...) - if err != nil { - return nil, err +func (x *NSResponse_VersionResponse_VersionInfo) Reset() { + *x = NSResponse_VersionResponse_VersionInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[58] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return out, nil } -// EosServer is the server API for Eos service. -type EosServer interface { - // Replies to a ping - Ping(context.Context, *PingRequest) (*PingReply, error) - // Replies to MD requests with a stream - MD(*MDRequest, Eos_MDServer) error - // Replies to Find requests with a stream - Find(*FindRequest, Eos_FindServer) error - // Replies to a NsStat operation - NsStat(context.Context, *NsStatRequest) (*NsStatResponse, error) - // Replies to an insert - ContainerInsert(context.Context, *ContainerInsertRequest) (*InsertReply, error) - FileInsert(context.Context, *FileInsertRequest) (*InsertReply, error) - // Replies to a NsRequest operation - Exec(context.Context, *NSRequest) (*NSResponse, error) - // Manila Driver - ManilaServerRequest(context.Context, *ManilaRequest) (*ManilaResponse, error) +func (x *NSResponse_VersionResponse_VersionInfo) String() string { + return protoimpl.X.MessageStringOf(x) } -// UnimplementedEosServer can be embedded to have forward compatible implementations. -type UnimplementedEosServer struct { -} +func (*NSResponse_VersionResponse_VersionInfo) ProtoMessage() {} -func (*UnimplementedEosServer) Ping(ctx context.Context, req *PingRequest) (*PingReply, error) { - return nil, status.Errorf(codes.Unimplemented, "method Ping not implemented") -} -func (*UnimplementedEosServer) MD(req *MDRequest, srv Eos_MDServer) error { - return status.Errorf(codes.Unimplemented, "method MD not implemented") -} -func (*UnimplementedEosServer) Find(req *FindRequest, srv Eos_FindServer) error { - return status.Errorf(codes.Unimplemented, "method Find not implemented") -} -func (*UnimplementedEosServer) NsStat(ctx context.Context, req *NsStatRequest) (*NsStatResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method NsStat not implemented") -} -func (*UnimplementedEosServer) ContainerInsert(ctx context.Context, req *ContainerInsertRequest) (*InsertReply, error) { - return nil, status.Errorf(codes.Unimplemented, "method ContainerInsert not implemented") -} -func (*UnimplementedEosServer) FileInsert(ctx context.Context, req *FileInsertRequest) (*InsertReply, error) { - return nil, status.Errorf(codes.Unimplemented, "method FileInsert not implemented") -} -func (*UnimplementedEosServer) Exec(ctx context.Context, req *NSRequest) (*NSResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Exec not implemented") -} -func (*UnimplementedEosServer) ManilaServerRequest(ctx context.Context, req *ManilaRequest) (*ManilaResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ManilaServerRequest not implemented") +func (x *NSResponse_VersionResponse_VersionInfo) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[58] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func RegisterEosServer(s *grpc.Server, srv EosServer) { - s.RegisterService(&_Eos_serviceDesc, srv) +// Deprecated: Use NSResponse_VersionResponse_VersionInfo.ProtoReflect.Descriptor instead. +func (*NSResponse_VersionResponse_VersionInfo) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{21, 1, 0} } -func _Eos_Ping_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PingRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(EosServer).Ping(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/eos.rpc.Eos/Ping", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(EosServer).Ping(ctx, req.(*PingRequest)) +func (x *NSResponse_VersionResponse_VersionInfo) GetId() *MDId { + if x != nil { + return x.Id } - return interceptor(ctx, in, info, handler) + return nil } -func _Eos_MD_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(MDRequest) - if err := stream.RecvMsg(m); err != nil { - return err +func (x *NSResponse_VersionResponse_VersionInfo) GetMtime() *Time { + if x != nil { + return x.Mtime } - return srv.(EosServer).MD(m, &eosMDServer{stream}) -} - -type Eos_MDServer interface { - Send(*MDResponse) error - grpc.ServerStream + return nil } -type eosMDServer struct { - grpc.ServerStream -} +type NSResponse_RecycleResponse_RecycleInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (x *eosMDServer) Send(m *MDResponse) error { - return x.ServerStream.SendMsg(m) + Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Owner *RoleId `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"` + Dtime *Time `protobuf:"bytes,3,opt,name=dtime,proto3" json:"dtime,omitempty"` + Size uint64 `protobuf:"varint,4,opt,name=size,proto3" json:"size,omitempty"` + Type NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE `protobuf:"varint,5,opt,name=type,proto3,enum=eos.rpc.NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE" json:"type,omitempty"` + Key string `protobuf:"bytes,6,opt,name=key,proto3" json:"key,omitempty"` } -func _Eos_Find_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(FindRequest) - if err := stream.RecvMsg(m); err != nil { - return err +func (x *NSResponse_RecycleResponse_RecycleInfo) Reset() { + *x = NSResponse_RecycleResponse_RecycleInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[59] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return srv.(EosServer).Find(m, &eosFindServer{stream}) } -type Eos_FindServer interface { - Send(*MDResponse) error - grpc.ServerStream +func (x *NSResponse_RecycleResponse_RecycleInfo) String() string { + return protoimpl.X.MessageStringOf(x) } -type eosFindServer struct { - grpc.ServerStream +func (*NSResponse_RecycleResponse_RecycleInfo) ProtoMessage() {} + +func (x *NSResponse_RecycleResponse_RecycleInfo) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[59] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func (x *eosFindServer) Send(m *MDResponse) error { - return x.ServerStream.SendMsg(m) +// Deprecated: Use NSResponse_RecycleResponse_RecycleInfo.ProtoReflect.Descriptor instead. +func (*NSResponse_RecycleResponse_RecycleInfo) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{21, 2, 0} } -func _Eos_NsStat_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(NsStatRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(EosServer).NsStat(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/eos.rpc.Eos/NsStat", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(EosServer).NsStat(ctx, req.(*NsStatRequest)) +func (x *NSResponse_RecycleResponse_RecycleInfo) GetId() *MDId { + if x != nil { + return x.Id } - return interceptor(ctx, in, info, handler) + return nil } -func _Eos_ContainerInsert_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ContainerInsertRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(EosServer).ContainerInsert(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/eos.rpc.Eos/ContainerInsert", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(EosServer).ContainerInsert(ctx, req.(*ContainerInsertRequest)) +func (x *NSResponse_RecycleResponse_RecycleInfo) GetOwner() *RoleId { + if x != nil { + return x.Owner } - return interceptor(ctx, in, info, handler) + return nil } -func _Eos_FileInsert_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(FileInsertRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(EosServer).FileInsert(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/eos.rpc.Eos/FileInsert", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(EosServer).FileInsert(ctx, req.(*FileInsertRequest)) +func (x *NSResponse_RecycleResponse_RecycleInfo) GetDtime() *Time { + if x != nil { + return x.Dtime } - return interceptor(ctx, in, info, handler) + return nil } -func _Eos_Exec_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(NSRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(EosServer).Exec(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/eos.rpc.Eos/Exec", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(EosServer).Exec(ctx, req.(*NSRequest)) +func (x *NSResponse_RecycleResponse_RecycleInfo) GetSize() uint64 { + if x != nil { + return x.Size } - return interceptor(ctx, in, info, handler) + return 0 } -func _Eos_ManilaServerRequest_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ManilaRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(EosServer).ManilaServerRequest(ctx, in) +func (x *NSResponse_RecycleResponse_RecycleInfo) GetType() NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE { + if x != nil { + return x.Type } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/eos.rpc.Eos/ManilaServerRequest", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(EosServer).ManilaServerRequest(ctx, req.(*ManilaRequest)) + return NSResponse_RecycleResponse_RecycleInfo_FILE +} + +func (x *NSResponse_RecycleResponse_RecycleInfo) GetKey() string { + if x != nil { + return x.Key } - return interceptor(ctx, in, info, handler) + return "" } -var _Eos_serviceDesc = grpc.ServiceDesc{ - ServiceName: "eos.rpc.Eos", - HandlerType: (*EosServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Ping", - Handler: _Eos_Ping_Handler, - }, - { - MethodName: "NsStat", - Handler: _Eos_NsStat_Handler, - }, - { - MethodName: "ContainerInsert", - Handler: _Eos_ContainerInsert_Handler, - }, - { - MethodName: "FileInsert", - Handler: _Eos_FileInsert_Handler, - }, - { - MethodName: "Exec", - Handler: _Eos_Exec_Handler, - }, - { - MethodName: "ManilaServerRequest", - Handler: _Eos_ManilaServerRequest_Handler, - }, - }, - Streams: []grpc.StreamDesc{ - { - StreamName: "MD", - Handler: _Eos_MD_Handler, - ServerStreams: true, - }, - { - StreamName: "Find", - Handler: _Eos_Find_Handler, - ServerStreams: true, +var File_Rpc_proto protoreflect.FileDescriptor + +var file_Rpc_proto_rawDesc = []byte{ + 0x0a, 0x09, 0x52, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x07, 0x65, 0x6f, 0x73, + 0x2e, 0x72, 0x70, 0x63, 0x22, 0x41, 0x0a, 0x0b, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x12, 0x18, 0x0a, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x25, 0x0a, 0x09, 0x50, 0x69, 0x6e, 0x67, 0x52, + 0x65, 0x70, 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x8a, + 0x01, 0x0a, 0x16, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x65, + 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x09, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x4d, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, + 0x69, 0x6e, 0x68, 0x65, 0x72, 0x69, 0x74, 0x5f, 0x6d, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x09, 0x69, 0x6e, 0x68, 0x65, 0x72, 0x69, 0x74, 0x4d, 0x64, 0x22, 0x59, 0x0a, 0x11, 0x46, + 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x2a, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x64, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, + 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, + 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x22, 0x3b, 0x0a, 0x0b, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, + 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x72, 0x65, 0x74, 0x63, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x04, 0x72, + 0x65, 0x74, 0x63, 0x22, 0x2d, 0x0a, 0x04, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, + 0x65, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x73, 0x65, 0x63, 0x12, 0x13, 0x0a, + 0x05, 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x6e, 0x53, + 0x65, 0x63, 0x22, 0x34, 0x0a, 0x08, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xb1, 0x04, 0x0a, 0x0b, 0x46, 0x69, 0x6c, + 0x65, 0x4d, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x74, 0x49, + 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, + 0x75, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x03, 0x67, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x61, 0x79, + 0x6f, 0x75, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6c, 0x61, + 0x79, 0x6f, 0x75, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6c, 0x69, 0x6e, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, + 0x05, 0x63, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x05, 0x63, 0x74, 0x69, + 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x52, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x73, 0x75, 0x6d, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x65, 0x6f, 0x73, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x52, 0x08, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x75, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x6c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0f, + 0x75, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x38, 0x0a, 0x06, 0x78, 0x61, 0x74, 0x74, 0x72, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x20, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x64, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x58, 0x61, 0x74, 0x74, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x06, 0x78, 0x61, 0x74, 0x74, 0x72, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, + 0x68, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, + 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, + 0x67, 0x1a, 0x39, 0x0a, 0x0b, 0x58, 0x61, 0x74, 0x74, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xcf, 0x03, 0x0a, + 0x10, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4d, 0x64, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x10, + 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x75, 0x69, 0x64, + 0x12, 0x10, 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x67, + 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x72, 0x65, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x74, 0x72, 0x65, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x6d, + 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, + 0x05, 0x63, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x05, 0x63, 0x74, 0x69, + 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x52, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x05, 0x73, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x05, 0x73, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x06, + 0x78, 0x61, 0x74, 0x74, 0x72, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x4d, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x58, 0x61, 0x74, 0x74, 0x72, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x06, 0x78, 0x61, 0x74, 0x74, 0x72, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, + 0x61, 0x74, 0x68, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, + 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, + 0x74, 0x61, 0x67, 0x1a, 0x39, 0x0a, 0x0b, 0x58, 0x61, 0x74, 0x74, 0x72, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xce, + 0x03, 0x0a, 0x0a, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, + 0x68, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x51, 0x55, + 0x4f, 0x54, 0x41, 0x54, 0x59, 0x50, 0x45, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x75, 0x73, 0x65, 0x64, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x09, 0x75, 0x73, 0x65, 0x64, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x75, + 0x73, 0x65, 0x64, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x75, 0x73, 0x65, 0x64, 0x6c, 0x6f, 0x67, 0x69, 0x63, + 0x61, 0x6c, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x64, 0x66, + 0x69, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x75, 0x73, 0x65, 0x64, + 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x62, 0x79, 0x74, 0x65, + 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x62, 0x79, 0x74, 0x65, + 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x62, + 0x79, 0x74, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x6d, 0x61, 0x78, 0x6c, + 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6d, + 0x61, 0x78, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, + 0x61, 0x78, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x61, 0x67, 0x65, 0x75, 0x73, 0x65, 0x64, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, + 0x75, 0x73, 0x65, 0x64, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x75, 0x73, 0x65, 0x64, 0x66, 0x69, 0x6c, 0x65, 0x73, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, + 0x67, 0x65, 0x75, 0x73, 0x65, 0x64, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x20, 0x0a, + 0x0b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x22, + 0x66, 0x0a, 0x06, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x67, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x67, 0x69, 0x64, 0x12, 0x1a, 0x0a, + 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x5f, 0x0a, 0x04, 0x4d, 0x44, 0x49, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, + 0x61, 0x74, 0x68, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x06, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x6e, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x06, + 0x52, 0x03, 0x69, 0x6e, 0x6f, 0x12, 0x21, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x59, + 0x50, 0x45, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3f, 0x0a, 0x05, 0x4c, 0x69, 0x6d, 0x69, + 0x74, 0x12, 0x12, 0x0a, 0x04, 0x7a, 0x65, 0x72, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x04, 0x7a, 0x65, 0x72, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x22, 0xa6, 0x06, 0x0a, 0x0b, 0x4d, 0x44, + 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x12, 0x24, 0x0a, 0x05, 0x63, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, + 0x52, 0x05, 0x63, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, + 0x05, 0x73, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x05, 0x73, 0x74, + 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, 0x69, + 0x74, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x2a, 0x0a, 0x08, 0x74, 0x72, 0x65, 0x65, 0x73, + 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x08, 0x74, 0x72, 0x65, 0x65, 0x73, + 0x69, 0x7a, 0x65, 0x12, 0x2a, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x12, + 0x2c, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, + 0x69, 0x74, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3d, 0x0a, + 0x12, 0x75, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x11, 0x75, 0x6e, 0x6c, 0x69, 0x6e, + 0x6b, 0x65, 0x64, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, + 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, + 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, + 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x18, + 0x0a, 0x07, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x07, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x2d, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, + 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x65, 0x6f, 0x73, + 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x52, 0x08, 0x63, + 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, + 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x14, 0x0a, + 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x72, 0x6f, 0x6f, + 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x6f, + 0x6f, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x72, 0x6f, 0x6f, 0x74, + 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x6f, 0x6f, + 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x70, 0x5f, 0x66, 0x69, 0x6c, 0x65, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x72, 0x65, 0x67, 0x65, + 0x78, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, + 0x67, 0x65, 0x78, 0x70, 0x5f, 0x64, 0x69, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x13, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x0d, 0x72, 0x65, 0x67, 0x65, 0x78, 0x70, 0x44, 0x69, 0x72, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x35, 0x0a, 0x05, 0x78, 0x61, 0x74, 0x74, 0x72, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x53, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x58, 0x61, 0x74, 0x74, 0x72, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x05, 0x78, 0x61, 0x74, 0x74, 0x72, 0x1a, 0x38, 0x0a, 0x0a, 0x58, 0x61, 0x74, 0x74, + 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0xc0, 0x01, 0x0a, 0x09, 0x4d, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x21, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, + 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x59, 0x50, 0x45, 0x52, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x04, + 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x65, 0x6f, 0x73, + 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x52, 0x04, 0x72, 0x6f, 0x6c, + 0x65, 0x12, 0x32, 0x0a, 0x09, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, + 0x44, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x73, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x84, 0x01, 0x0a, 0x0a, 0x4d, 0x44, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x59, 0x50, + 0x45, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x03, 0x66, 0x6d, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x46, + 0x69, 0x6c, 0x65, 0x4d, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x03, 0x66, 0x6d, 0x64, 0x12, + 0x2b, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x4d, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x03, 0x63, 0x6d, 0x64, 0x22, 0xde, 0x01, 0x0a, + 0x0b, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, + 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x59, 0x50, 0x45, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, + 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, + 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x52, 0x04, 0x72, + 0x6f, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x12, 0x1a, 0x0a, + 0x08, 0x6d, 0x61, 0x78, 0x64, 0x65, 0x70, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x08, 0x6d, 0x61, 0x78, 0x64, 0x65, 0x70, 0x74, 0x68, 0x12, 0x32, 0x0a, 0x09, 0x73, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x09, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x47, 0x0a, + 0x09, 0x53, 0x68, 0x61, 0x72, 0x65, 0x41, 0x75, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x72, + 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x72, 0x6f, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x22, 0x8a, 0x02, 0x0a, 0x0a, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x12, + 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1e, 0x0a, 0x0a, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x70, + 0x61, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, + 0x1c, 0x0a, 0x09, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x74, 0x72, 0x65, 0x65, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x09, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x74, 0x72, 0x65, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x76, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x76, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2c, 0x0a, 0x07, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x73, + 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x41, 0x75, 0x74, 0x68, 0x52, 0x07, 0x6f, 0x72, 0x69, 0x67, + 0x69, 0x6e, 0x73, 0x22, 0x89, 0x01, 0x0a, 0x0a, 0x53, 0x68, 0x61, 0x72, 0x65, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x12, 0x29, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x68, 0x61, 0x72, + 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1c, 0x0a, + 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x73, + 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x0a, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, + 0x65, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x65, 0x65, 0x64, 0x22, + 0x8c, 0x1e, 0x0a, 0x09, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, + 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x37, 0x0a, 0x05, + 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, + 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x4d, 0x6b, 0x64, 0x69, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, + 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x12, 0x37, 0x0a, 0x05, 0x72, 0x6d, 0x64, 0x69, 0x72, 0x18, 0x16, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, + 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x6d, 0x64, 0x69, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x72, 0x6d, 0x64, 0x69, 0x72, 0x12, 0x37, + 0x0a, 0x05, 0x74, 0x6f, 0x75, 0x63, 0x68, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x2e, 0x54, 0x6f, 0x75, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, + 0x52, 0x05, 0x74, 0x6f, 0x75, 0x63, 0x68, 0x12, 0x3a, 0x0a, 0x06, 0x75, 0x6e, 0x6c, 0x69, 0x6e, + 0x6b, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, 0x6e, 0x6c, 0x69, + 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x75, 0x6e, 0x6c, + 0x69, 0x6e, 0x6b, 0x12, 0x2e, 0x0a, 0x02, 0x72, 0x6d, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x52, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, + 0x02, 0x72, 0x6d, 0x12, 0x3a, 0x0a, 0x06, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x1a, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x3d, 0x0a, 0x07, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x3d, + 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x21, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, + 0x07, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, + 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x3a, 0x0a, 0x05, + 0x78, 0x61, 0x74, 0x74, 0x72, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65, 0x6f, + 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x53, 0x65, 0x74, 0x58, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, + 0x00, 0x52, 0x05, 0x78, 0x61, 0x74, 0x74, 0x72, 0x12, 0x37, 0x0a, 0x05, 0x63, 0x68, 0x6f, 0x77, + 0x6e, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x68, 0x6f, 0x77, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x63, 0x68, 0x6f, 0x77, + 0x6e, 0x12, 0x37, 0x0a, 0x05, 0x63, 0x68, 0x6d, 0x6f, 0x64, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x68, 0x6d, 0x6f, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x48, 0x00, 0x52, 0x05, 0x63, 0x68, 0x6d, 0x6f, 0x64, 0x12, 0x31, 0x0a, 0x03, 0x61, 0x63, + 0x6c, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x63, 0x6c, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x03, 0x61, 0x63, 0x6c, 0x12, 0x37, 0x0a, + 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, + 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x37, 0x0a, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x18, + 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x12, + 0x37, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, + 0x00, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x1a, 0x5f, 0x0a, 0x0c, 0x4d, 0x6b, 0x64, 0x69, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, + 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, + 0x73, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, + 0x72, 0x73, 0x69, 0x76, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x1a, 0x2d, 0x0a, 0x0c, 0x52, 0x6d, 0x64, + 0x69, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x1a, 0x2d, 0x0a, 0x0c, 0x54, 0x6f, 0x75, 0x63, + 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, + 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x1a, 0x4c, 0x0a, 0x0d, 0x55, 0x6e, 0x6c, 0x69, 0x6e, + 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, + 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x6f, 0x72, 0x65, 0x63, + 0x79, 0x63, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6e, 0x6f, 0x72, 0x65, + 0x63, 0x79, 0x63, 0x6c, 0x65, 0x1a, 0x66, 0x0a, 0x09, 0x52, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, + 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x6e, 0x6f, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x09, 0x6e, 0x6f, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x1a, 0x46, 0x0a, + 0x0d, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, + 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, + 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x74, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x1a, 0x47, 0x0a, 0x0e, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, + 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x1a, 0xec, + 0x01, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, + 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x3f, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, + 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4d, 0x44, 0x52, 0x03, 0x63, 0x6d, + 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x67, 0x72, 0x61, 0x62, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x67, 0x72, 0x61, 0x62, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x22, 0x38, 0x0a, 0x0b, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x43, + 0x4d, 0x44, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x00, 0x12, 0x09, + 0x0a, 0x05, 0x50, 0x55, 0x52, 0x47, 0x45, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x53, + 0x54, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x52, 0x41, 0x42, 0x10, 0x03, 0x1a, 0xd4, 0x03, + 0x0a, 0x0e, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x3f, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x2d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x2e, 0x52, 0x45, 0x43, 0x59, 0x43, 0x4c, 0x45, 0x5f, 0x43, 0x4d, 0x44, 0x52, 0x03, + 0x63, 0x6d, 0x64, 0x12, 0x50, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x66, 0x6c, + 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x63, + 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x74, + 0x6f, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x0b, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x66, 0x6c, 0x61, 0x67, 0x12, 0x49, 0x0a, 0x09, 0x70, 0x75, 0x72, 0x67, 0x65, 0x64, 0x61, + 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x63, + 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x75, 0x72, 0x67, + 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x09, 0x70, 0x75, 0x72, 0x67, 0x65, 0x64, 0x61, 0x74, 0x65, + 0x1a, 0x58, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, + 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x6b, 0x70, 0x61, 0x74, 0x68, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6d, 0x6b, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1a, + 0x0a, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x47, 0x0a, 0x09, 0x50, 0x75, + 0x72, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x79, 0x65, 0x61, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x79, 0x65, 0x61, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, + 0x64, 0x61, 0x79, 0x22, 0x2f, 0x0a, 0x0b, 0x52, 0x45, 0x43, 0x59, 0x43, 0x4c, 0x45, 0x5f, 0x43, + 0x4d, 0x44, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x10, 0x00, 0x12, + 0x09, 0x0a, 0x05, 0x50, 0x55, 0x52, 0x47, 0x45, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, + 0x53, 0x54, 0x10, 0x02, 0x1a, 0x8d, 0x02, 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x58, 0x41, 0x74, 0x74, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, + 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x46, 0x0a, 0x06, 0x78, 0x61, 0x74, 0x74, 0x72, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x74, 0x58, + 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x58, 0x61, 0x74, 0x74, + 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x78, 0x61, 0x74, 0x74, 0x72, 0x73, 0x12, + 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x12, 0x22, 0x0a, + 0x0c, 0x6b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0c, 0x6b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x64, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x1a, 0x39, 0x0a, 0x0b, 0x58, 0x61, 0x74, + 0x74, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x54, 0x0a, 0x0c, 0x43, 0x68, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x6c, + 0x65, 0x49, 0x64, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x1a, 0x41, 0x0a, 0x0c, 0x43, 0x68, + 0x6d, 0x6f, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x1a, 0xc8, 0x02, + 0x0a, 0x0a, 0x41, 0x63, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x03, 0x63, + 0x6d, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x63, 0x6c, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x43, 0x4c, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, + 0x41, 0x4e, 0x44, 0x52, 0x03, 0x63, 0x6d, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, + 0x72, 0x73, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, + 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x12, 0x3a, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, + 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x63, 0x6c, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x41, 0x43, 0x4c, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x52, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x22, 0x2d, 0x0a, 0x0b, 0x41, 0x43, 0x4c, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, + 0x44, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4d, + 0x4f, 0x44, 0x49, 0x46, 0x59, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x53, 0x54, 0x10, + 0x02, 0x22, 0x25, 0x0a, 0x08, 0x41, 0x43, 0x4c, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x12, 0x0c, 0x0a, + 0x08, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x41, 0x43, 0x4c, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x53, + 0x59, 0x53, 0x5f, 0x41, 0x43, 0x4c, 0x10, 0x01, 0x1a, 0x39, 0x0a, 0x0c, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x05, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x1a, 0xc8, 0x01, 0x0a, 0x0c, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1f, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x52, + 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x02, 0x6f, 0x70, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x51, 0x55, 0x4f, 0x54, 0x41, 0x4f, 0x50, 0x52, 0x02, 0x6f, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x6d, + 0x61, 0x78, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, + 0x61, 0x78, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x62, 0x79, + 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x62, 0x79, + 0x74, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x51, 0x55, 0x4f, + 0x54, 0x41, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x1a, 0xd2, + 0x04, 0x0a, 0x0c, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x39, 0x0a, 0x02, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x65, 0x6f, + 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x73, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x48, 0x00, 0x52, 0x02, 0x6c, 0x73, 0x12, 0x3e, 0x0a, 0x02, 0x6f, 0x70, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x48, 0x00, 0x52, 0x02, 0x6f, 0x70, 0x1a, 0xb6, 0x01, 0x0a, 0x07, 0x4c, + 0x73, 0x53, 0x68, 0x61, 0x72, 0x65, 0x12, 0x4f, 0x0a, 0x09, 0x6f, 0x75, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x65, 0x6f, 0x73, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x73, 0x53, 0x68, 0x61, + 0x72, 0x65, 0x2e, 0x4f, 0x75, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x09, 0x6f, 0x75, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3c, 0x0a, 0x09, 0x4f, 0x75, 0x74, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, + 0x4d, 0x4f, 0x4e, 0x49, 0x54, 0x4f, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, + 0x4c, 0x49, 0x53, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x4a, 0x53, 0x4f, + 0x4e, 0x10, 0x03, 0x1a, 0x83, 0x02, 0x0a, 0x0c, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x12, 0x3f, 0x0a, 0x02, 0x6f, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x2f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x2e, 0x4f, + 0x70, 0x52, 0x02, 0x6f, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x61, + 0x63, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x63, 0x6c, 0x12, 0x12, 0x0a, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, + 0x68, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x4c, 0x0a, 0x02, 0x4f, + 0x70, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, + 0x06, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x48, 0x41, + 0x52, 0x45, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, + 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x04, 0x12, 0x0a, 0x0a, + 0x06, 0x4d, 0x4f, 0x44, 0x49, 0x46, 0x59, 0x10, 0x05, 0x42, 0x08, 0x0a, 0x06, 0x73, 0x75, 0x62, + 0x63, 0x6d, 0x64, 0x42, 0x09, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0xa4, + 0x0c, 0x0a, 0x0a, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x3d, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x07, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x79, + 0x63, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x72, 0x65, 0x63, + 0x79, 0x63, 0x6c, 0x65, 0x12, 0x31, 0x0a, 0x03, 0x61, 0x63, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x63, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x52, 0x03, 0x61, 0x63, 0x6c, 0x12, 0x37, 0x0a, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x51, 0x75, 0x6f, 0x74, + 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, + 0x12, 0x37, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x21, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x1a, 0x35, 0x0a, 0x0d, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, + 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, + 0x1a, 0xd7, 0x01, 0x0a, 0x0f, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x4b, 0x0a, 0x08, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x51, 0x0a, 0x0b, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, + 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x52, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x1a, 0x9b, 0x03, 0x0a, 0x0f, 0x52, + 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6d, 0x73, 0x67, 0x12, 0x4b, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x79, + 0x63, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x79, + 0x63, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, + 0x73, 0x1a, 0x94, 0x02, 0x0a, 0x0b, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, + 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x25, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, + 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x05, 0x64, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x05, 0x64, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, + 0x12, 0x50, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3c, + 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, + 0x44, 0x45, 0x4c, 0x45, 0x54, 0x49, 0x4f, 0x4e, 0x54, 0x59, 0x50, 0x45, 0x52, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x22, 0x22, 0x0a, 0x0c, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x49, 0x4f, 0x4e, + 0x54, 0x59, 0x50, 0x45, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x00, 0x12, 0x08, + 0x0a, 0x04, 0x54, 0x52, 0x45, 0x45, 0x10, 0x01, 0x1a, 0x47, 0x0a, 0x0b, 0x41, 0x63, 0x6c, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, + 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x12, 0x0a, + 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x75, 0x6c, + 0x65, 0x1a, 0x68, 0x0a, 0x0d, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x31, 0x0a, 0x09, 0x71, 0x75, 0x6f, 0x74, + 0x61, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x65, 0x6f, + 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x52, 0x09, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x6e, 0x6f, 0x64, 0x65, 0x1a, 0x73, 0x0a, 0x09, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x72, 0x75, 0x6c, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x73, 0x68, 0x61, 0x72, 0x65, + 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x6e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, + 0x1a, 0x3b, 0x0a, 0x0b, 0x53, 0x68, 0x61, 0x72, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x1a, 0xa5, 0x01, + 0x0a, 0x0d, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x35, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x06, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x06, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x29, 0x0a, 0x0d, 0x4e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, + 0x22, 0xab, 0x03, 0x0a, 0x0e, 0x4e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x6d, 0x73, 0x67, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x6d, 0x73, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x06, 0x6e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, + 0x6e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x62, + 0x6f, 0x6f, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, + 0x62, 0x6f, 0x6f, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, + 0x6d, 0x5f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0a, 0x6d, 0x65, 0x6d, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x6d, + 0x65, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x1b, + 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x53, 0x68, 0x61, 0x72, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, + 0x65, 0x6d, 0x5f, 0x67, 0x72, 0x6f, 0x77, 0x74, 0x68, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x09, 0x6d, 0x65, 0x6d, 0x47, 0x72, 0x6f, 0x77, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x68, + 0x72, 0x65, 0x61, 0x64, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x68, 0x72, + 0x65, 0x61, 0x64, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x64, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x03, 0x66, 0x64, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x0f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x22, 0xba, + 0x03, 0x0a, 0x0d, 0x4d, 0x61, 0x6e, 0x69, 0x6c, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x3f, 0x0a, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x4d, 0x41, 0x4e, 0x49, 0x4c, 0x41, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x52, 0x0b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x68, 0x61, 0x72, + 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x68, + 0x61, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x68, 0x61, + 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x68, 0x61, + 0x72, 0x65, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x68, + 0x61, 0x72, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, + 0x6f, 0x74, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, + 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x65, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x45, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x68, + 0x6f, 0x73, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x68, 0x61, 0x72, 0x65, + 0x48, 0x6f, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x68, + 0x61, 0x72, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xca, 0x01, 0x0a, 0x0e, + 0x4d, 0x61, 0x6e, 0x69, 0x6c, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, + 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, + 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, 0x73, + 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x55, + 0x73, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x61, 0x70, + 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x6f, 0x74, + 0x61, 0x6c, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, + 0x77, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6e, 0x65, 0x77, 0x53, 0x68, 0x61, 0x72, 0x65, 0x51, 0x75, 0x6f, + 0x74, 0x61, 0x12, 0x24, 0x0a, 0x0e, 0x6e, 0x65, 0x77, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, + 0x70, 0x61, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, 0x65, 0x77, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x50, 0x61, 0x74, 0x68, 0x2a, 0x36, 0x0a, 0x04, 0x54, 0x59, 0x50, 0x45, + 0x12, 0x08, 0x0a, 0x04, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, + 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x4c, 0x49, 0x53, + 0x54, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x54, 0x41, 0x54, 0x10, 0x03, + 0x2a, 0x2d, 0x0a, 0x09, 0x51, 0x55, 0x4f, 0x54, 0x41, 0x54, 0x59, 0x50, 0x45, 0x12, 0x08, 0x0a, + 0x04, 0x55, 0x53, 0x45, 0x52, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x47, 0x52, 0x4f, 0x55, 0x50, + 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x03, 0x2a, + 0x2f, 0x0a, 0x07, 0x51, 0x55, 0x4f, 0x54, 0x41, 0x4f, 0x50, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x45, + 0x54, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x45, 0x54, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, + 0x52, 0x4d, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x4d, 0x4e, 0x4f, 0x44, 0x45, 0x10, 0x03, + 0x2a, 0x2d, 0x0a, 0x0a, 0x51, 0x55, 0x4f, 0x54, 0x41, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x12, 0x08, + 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x56, 0x4f, 0x4c, 0x55, + 0x4d, 0x45, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x4f, 0x44, 0x45, 0x10, 0x02, 0x2a, + 0x94, 0x01, 0x0a, 0x13, 0x4d, 0x41, 0x4e, 0x49, 0x4c, 0x41, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, + 0x53, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x52, 0x45, 0x41, 0x54, + 0x45, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x45, 0x4c, + 0x45, 0x54, 0x45, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x45, + 0x58, 0x54, 0x45, 0x4e, 0x44, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, 0x02, 0x12, 0x10, 0x0a, + 0x0c, 0x53, 0x48, 0x52, 0x49, 0x4e, 0x4b, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, 0x03, 0x12, + 0x13, 0x0a, 0x0f, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x49, + 0x4e, 0x47, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x55, 0x4e, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, + 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x47, 0x45, 0x54, 0x5f, 0x43, 0x41, 0x50, 0x41, 0x43, 0x49, + 0x54, 0x49, 0x45, 0x53, 0x10, 0x06, 0x32, 0xeb, 0x03, 0x0a, 0x03, 0x45, 0x6f, 0x73, 0x12, 0x32, + 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x6c, 0x79, + 0x22, 0x00, 0x12, 0x31, 0x0a, 0x02, 0x4d, 0x44, 0x12, 0x12, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x35, 0x0a, 0x04, 0x46, 0x69, 0x6e, 0x64, 0x12, 0x14, 0x2e, + 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x3b, 0x0a, 0x06, + 0x4e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x12, 0x16, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x4e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, + 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x12, 0x1f, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, + 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, + 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x0a, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x73, + 0x65, 0x72, 0x74, 0x12, 0x1a, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, + 0x6c, 0x65, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x14, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, + 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x04, 0x45, 0x78, 0x65, 0x63, 0x12, + 0x12, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x13, 0x4d, 0x61, + 0x6e, 0x69, 0x6c, 0x61, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x16, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x61, 0x6e, 0x69, + 0x6c, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x65, 0x6f, 0x73, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x6c, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x42, 0x55, 0x0a, 0x0f, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x42, 0x08, 0x45, 0x6f, 0x73, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x50, 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x63, 0x65, 0x72, 0x6e, 0x2d, 0x65, 0x6f, 0x73, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x3b, 0x65, 0x6f, 0x73, + 0x5f, 0x67, 0x72, 0x70, 0x63, 0xa2, 0x02, 0x03, 0x45, 0x4f, 0x53, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, +} + +var ( + file_Rpc_proto_rawDescOnce sync.Once + file_Rpc_proto_rawDescData = file_Rpc_proto_rawDesc +) + +func file_Rpc_proto_rawDescGZIP() []byte { + file_Rpc_proto_rawDescOnce.Do(func() { + file_Rpc_proto_rawDescData = protoimpl.X.CompressGZIP(file_Rpc_proto_rawDescData) + }) + return file_Rpc_proto_rawDescData +} + +var file_Rpc_proto_enumTypes = make([]protoimpl.EnumInfo, 12) +var file_Rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 60) +var file_Rpc_proto_goTypes = []interface{}{ + (TYPE)(0), // 0: eos.rpc.TYPE + (QUOTATYPE)(0), // 1: eos.rpc.QUOTATYPE + (QUOTAOP)(0), // 2: eos.rpc.QUOTAOP + (QUOTAENTRY)(0), // 3: eos.rpc.QUOTAENTRY + (MANILA_REQUEST_TYPE)(0), // 4: eos.rpc.MANILA_REQUEST_TYPE + (NSRequest_VersionRequest_VERSION_CMD)(0), // 5: eos.rpc.NSRequest.VersionRequest.VERSION_CMD + (NSRequest_RecycleRequest_RECYCLE_CMD)(0), // 6: eos.rpc.NSRequest.RecycleRequest.RECYCLE_CMD + (NSRequest_AclRequest_ACL_COMMAND)(0), // 7: eos.rpc.NSRequest.AclRequest.ACL_COMMAND + (NSRequest_AclRequest_ACL_TYPE)(0), // 8: eos.rpc.NSRequest.AclRequest.ACL_TYPE + (NSRequest_ShareRequest_LsShare_OutFormat)(0), // 9: eos.rpc.NSRequest.ShareRequest.LsShare.OutFormat + (NSRequest_ShareRequest_OperateShare_Op)(0), // 10: eos.rpc.NSRequest.ShareRequest.OperateShare.Op + (NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE)(0), // 11: eos.rpc.NSResponse.RecycleResponse.RecycleInfo.DELETIONTYPE + (*PingRequest)(nil), // 12: eos.rpc.PingRequest + (*PingReply)(nil), // 13: eos.rpc.PingReply + (*ContainerInsertRequest)(nil), // 14: eos.rpc.ContainerInsertRequest + (*FileInsertRequest)(nil), // 15: eos.rpc.FileInsertRequest + (*InsertReply)(nil), // 16: eos.rpc.InsertReply + (*Time)(nil), // 17: eos.rpc.Time + (*Checksum)(nil), // 18: eos.rpc.Checksum + (*FileMdProto)(nil), // 19: eos.rpc.FileMdProto + (*ContainerMdProto)(nil), // 20: eos.rpc.ContainerMdProto + (*QuotaProto)(nil), // 21: eos.rpc.QuotaProto + (*RoleId)(nil), // 22: eos.rpc.RoleId + (*MDId)(nil), // 23: eos.rpc.MDId + (*Limit)(nil), // 24: eos.rpc.Limit + (*MDSelection)(nil), // 25: eos.rpc.MDSelection + (*MDRequest)(nil), // 26: eos.rpc.MDRequest + (*MDResponse)(nil), // 27: eos.rpc.MDResponse + (*FindRequest)(nil), // 28: eos.rpc.FindRequest + (*ShareAuth)(nil), // 29: eos.rpc.ShareAuth + (*ShareProto)(nil), // 30: eos.rpc.ShareProto + (*ShareToken)(nil), // 31: eos.rpc.ShareToken + (*NSRequest)(nil), // 32: eos.rpc.NSRequest + (*NSResponse)(nil), // 33: eos.rpc.NSResponse + (*NsStatRequest)(nil), // 34: eos.rpc.NsStatRequest + (*NsStatResponse)(nil), // 35: eos.rpc.NsStatResponse + (*ManilaRequest)(nil), // 36: eos.rpc.ManilaRequest + (*ManilaResponse)(nil), // 37: eos.rpc.ManilaResponse + nil, // 38: eos.rpc.FileMdProto.XattrsEntry + nil, // 39: eos.rpc.ContainerMdProto.XattrsEntry + nil, // 40: eos.rpc.MDSelection.XattrEntry + (*NSRequest_MkdirRequest)(nil), // 41: eos.rpc.NSRequest.MkdirRequest + (*NSRequest_RmdirRequest)(nil), // 42: eos.rpc.NSRequest.RmdirRequest + (*NSRequest_TouchRequest)(nil), // 43: eos.rpc.NSRequest.TouchRequest + (*NSRequest_UnlinkRequest)(nil), // 44: eos.rpc.NSRequest.UnlinkRequest + (*NSRequest_RmRequest)(nil), // 45: eos.rpc.NSRequest.RmRequest + (*NSRequest_RenameRequest)(nil), // 46: eos.rpc.NSRequest.RenameRequest + (*NSRequest_SymlinkRequest)(nil), // 47: eos.rpc.NSRequest.SymlinkRequest + (*NSRequest_VersionRequest)(nil), // 48: eos.rpc.NSRequest.VersionRequest + (*NSRequest_RecycleRequest)(nil), // 49: eos.rpc.NSRequest.RecycleRequest + (*NSRequest_SetXAttrRequest)(nil), // 50: eos.rpc.NSRequest.SetXAttrRequest + (*NSRequest_ChownRequest)(nil), // 51: eos.rpc.NSRequest.ChownRequest + (*NSRequest_ChmodRequest)(nil), // 52: eos.rpc.NSRequest.ChmodRequest + (*NSRequest_AclRequest)(nil), // 53: eos.rpc.NSRequest.AclRequest + (*NSRequest_TokenRequest)(nil), // 54: eos.rpc.NSRequest.TokenRequest + (*NSRequest_QuotaRequest)(nil), // 55: eos.rpc.NSRequest.QuotaRequest + (*NSRequest_ShareRequest)(nil), // 56: eos.rpc.NSRequest.ShareRequest + (*NSRequest_RecycleRequest_RestoreFlags)(nil), // 57: eos.rpc.NSRequest.RecycleRequest.RestoreFlags + (*NSRequest_RecycleRequest_PurgeDate)(nil), // 58: eos.rpc.NSRequest.RecycleRequest.PurgeDate + nil, // 59: eos.rpc.NSRequest.SetXAttrRequest.XattrsEntry + (*NSRequest_ShareRequest_LsShare)(nil), // 60: eos.rpc.NSRequest.ShareRequest.LsShare + (*NSRequest_ShareRequest_OperateShare)(nil), // 61: eos.rpc.NSRequest.ShareRequest.OperateShare + (*NSResponse_ErrorResponse)(nil), // 62: eos.rpc.NSResponse.ErrorResponse + (*NSResponse_VersionResponse)(nil), // 63: eos.rpc.NSResponse.VersionResponse + (*NSResponse_RecycleResponse)(nil), // 64: eos.rpc.NSResponse.RecycleResponse + (*NSResponse_AclResponse)(nil), // 65: eos.rpc.NSResponse.AclResponse + (*NSResponse_QuotaResponse)(nil), // 66: eos.rpc.NSResponse.QuotaResponse + (*NSResponse_ShareInfo)(nil), // 67: eos.rpc.NSResponse.ShareInfo + (*NSResponse_ShareAccess)(nil), // 68: eos.rpc.NSResponse.ShareAccess + (*NSResponse_ShareResponse)(nil), // 69: eos.rpc.NSResponse.ShareResponse + (*NSResponse_VersionResponse_VersionInfo)(nil), // 70: eos.rpc.NSResponse.VersionResponse.VersionInfo + (*NSResponse_RecycleResponse_RecycleInfo)(nil), // 71: eos.rpc.NSResponse.RecycleResponse.RecycleInfo +} +var file_Rpc_proto_depIdxs = []int32{ + 20, // 0: eos.rpc.ContainerInsertRequest.container:type_name -> eos.rpc.ContainerMdProto + 19, // 1: eos.rpc.FileInsertRequest.files:type_name -> eos.rpc.FileMdProto + 17, // 2: eos.rpc.FileMdProto.ctime:type_name -> eos.rpc.Time + 17, // 3: eos.rpc.FileMdProto.mtime:type_name -> eos.rpc.Time + 18, // 4: eos.rpc.FileMdProto.checksum:type_name -> eos.rpc.Checksum + 38, // 5: eos.rpc.FileMdProto.xattrs:type_name -> eos.rpc.FileMdProto.XattrsEntry + 17, // 6: eos.rpc.ContainerMdProto.ctime:type_name -> eos.rpc.Time + 17, // 7: eos.rpc.ContainerMdProto.mtime:type_name -> eos.rpc.Time + 17, // 8: eos.rpc.ContainerMdProto.stime:type_name -> eos.rpc.Time + 39, // 9: eos.rpc.ContainerMdProto.xattrs:type_name -> eos.rpc.ContainerMdProto.XattrsEntry + 1, // 10: eos.rpc.QuotaProto.type:type_name -> eos.rpc.QUOTATYPE + 0, // 11: eos.rpc.MDId.type:type_name -> eos.rpc.TYPE + 24, // 12: eos.rpc.MDSelection.ctime:type_name -> eos.rpc.Limit + 24, // 13: eos.rpc.MDSelection.mtime:type_name -> eos.rpc.Limit + 24, // 14: eos.rpc.MDSelection.stime:type_name -> eos.rpc.Limit + 24, // 15: eos.rpc.MDSelection.size:type_name -> eos.rpc.Limit + 24, // 16: eos.rpc.MDSelection.treesize:type_name -> eos.rpc.Limit + 24, // 17: eos.rpc.MDSelection.children:type_name -> eos.rpc.Limit + 24, // 18: eos.rpc.MDSelection.locations:type_name -> eos.rpc.Limit + 24, // 19: eos.rpc.MDSelection.unlinked_locations:type_name -> eos.rpc.Limit + 18, // 20: eos.rpc.MDSelection.checksum:type_name -> eos.rpc.Checksum + 40, // 21: eos.rpc.MDSelection.xattr:type_name -> eos.rpc.MDSelection.XattrEntry + 0, // 22: eos.rpc.MDRequest.type:type_name -> eos.rpc.TYPE + 23, // 23: eos.rpc.MDRequest.id:type_name -> eos.rpc.MDId + 22, // 24: eos.rpc.MDRequest.role:type_name -> eos.rpc.RoleId + 25, // 25: eos.rpc.MDRequest.selection:type_name -> eos.rpc.MDSelection + 0, // 26: eos.rpc.MDResponse.type:type_name -> eos.rpc.TYPE + 19, // 27: eos.rpc.MDResponse.fmd:type_name -> eos.rpc.FileMdProto + 20, // 28: eos.rpc.MDResponse.cmd:type_name -> eos.rpc.ContainerMdProto + 0, // 29: eos.rpc.FindRequest.type:type_name -> eos.rpc.TYPE + 23, // 30: eos.rpc.FindRequest.id:type_name -> eos.rpc.MDId + 22, // 31: eos.rpc.FindRequest.role:type_name -> eos.rpc.RoleId + 25, // 32: eos.rpc.FindRequest.selection:type_name -> eos.rpc.MDSelection + 29, // 33: eos.rpc.ShareProto.origins:type_name -> eos.rpc.ShareAuth + 30, // 34: eos.rpc.ShareToken.token:type_name -> eos.rpc.ShareProto + 22, // 35: eos.rpc.NSRequest.role:type_name -> eos.rpc.RoleId + 41, // 36: eos.rpc.NSRequest.mkdir:type_name -> eos.rpc.NSRequest.MkdirRequest + 42, // 37: eos.rpc.NSRequest.rmdir:type_name -> eos.rpc.NSRequest.RmdirRequest + 43, // 38: eos.rpc.NSRequest.touch:type_name -> eos.rpc.NSRequest.TouchRequest + 44, // 39: eos.rpc.NSRequest.unlink:type_name -> eos.rpc.NSRequest.UnlinkRequest + 45, // 40: eos.rpc.NSRequest.rm:type_name -> eos.rpc.NSRequest.RmRequest + 46, // 41: eos.rpc.NSRequest.rename:type_name -> eos.rpc.NSRequest.RenameRequest + 47, // 42: eos.rpc.NSRequest.symlink:type_name -> eos.rpc.NSRequest.SymlinkRequest + 48, // 43: eos.rpc.NSRequest.version:type_name -> eos.rpc.NSRequest.VersionRequest + 49, // 44: eos.rpc.NSRequest.recycle:type_name -> eos.rpc.NSRequest.RecycleRequest + 50, // 45: eos.rpc.NSRequest.xattr:type_name -> eos.rpc.NSRequest.SetXAttrRequest + 51, // 46: eos.rpc.NSRequest.chown:type_name -> eos.rpc.NSRequest.ChownRequest + 52, // 47: eos.rpc.NSRequest.chmod:type_name -> eos.rpc.NSRequest.ChmodRequest + 53, // 48: eos.rpc.NSRequest.acl:type_name -> eos.rpc.NSRequest.AclRequest + 54, // 49: eos.rpc.NSRequest.token:type_name -> eos.rpc.NSRequest.TokenRequest + 55, // 50: eos.rpc.NSRequest.quota:type_name -> eos.rpc.NSRequest.QuotaRequest + 56, // 51: eos.rpc.NSRequest.share:type_name -> eos.rpc.NSRequest.ShareRequest + 62, // 52: eos.rpc.NSResponse.error:type_name -> eos.rpc.NSResponse.ErrorResponse + 63, // 53: eos.rpc.NSResponse.version:type_name -> eos.rpc.NSResponse.VersionResponse + 64, // 54: eos.rpc.NSResponse.recycle:type_name -> eos.rpc.NSResponse.RecycleResponse + 65, // 55: eos.rpc.NSResponse.acl:type_name -> eos.rpc.NSResponse.AclResponse + 66, // 56: eos.rpc.NSResponse.quota:type_name -> eos.rpc.NSResponse.QuotaResponse + 69, // 57: eos.rpc.NSResponse.share:type_name -> eos.rpc.NSResponse.ShareResponse + 4, // 58: eos.rpc.ManilaRequest.request_type:type_name -> eos.rpc.MANILA_REQUEST_TYPE + 23, // 59: eos.rpc.NSRequest.MkdirRequest.id:type_name -> eos.rpc.MDId + 23, // 60: eos.rpc.NSRequest.RmdirRequest.id:type_name -> eos.rpc.MDId + 23, // 61: eos.rpc.NSRequest.TouchRequest.id:type_name -> eos.rpc.MDId + 23, // 62: eos.rpc.NSRequest.UnlinkRequest.id:type_name -> eos.rpc.MDId + 23, // 63: eos.rpc.NSRequest.RmRequest.id:type_name -> eos.rpc.MDId + 23, // 64: eos.rpc.NSRequest.RenameRequest.id:type_name -> eos.rpc.MDId + 23, // 65: eos.rpc.NSRequest.SymlinkRequest.id:type_name -> eos.rpc.MDId + 23, // 66: eos.rpc.NSRequest.VersionRequest.id:type_name -> eos.rpc.MDId + 5, // 67: eos.rpc.NSRequest.VersionRequest.cmd:type_name -> eos.rpc.NSRequest.VersionRequest.VERSION_CMD + 6, // 68: eos.rpc.NSRequest.RecycleRequest.cmd:type_name -> eos.rpc.NSRequest.RecycleRequest.RECYCLE_CMD + 57, // 69: eos.rpc.NSRequest.RecycleRequest.restoreflag:type_name -> eos.rpc.NSRequest.RecycleRequest.RestoreFlags + 58, // 70: eos.rpc.NSRequest.RecycleRequest.purgedate:type_name -> eos.rpc.NSRequest.RecycleRequest.PurgeDate + 23, // 71: eos.rpc.NSRequest.SetXAttrRequest.id:type_name -> eos.rpc.MDId + 59, // 72: eos.rpc.NSRequest.SetXAttrRequest.xattrs:type_name -> eos.rpc.NSRequest.SetXAttrRequest.XattrsEntry + 23, // 73: eos.rpc.NSRequest.ChownRequest.id:type_name -> eos.rpc.MDId + 22, // 74: eos.rpc.NSRequest.ChownRequest.owner:type_name -> eos.rpc.RoleId + 23, // 75: eos.rpc.NSRequest.ChmodRequest.id:type_name -> eos.rpc.MDId + 23, // 76: eos.rpc.NSRequest.AclRequest.id:type_name -> eos.rpc.MDId + 7, // 77: eos.rpc.NSRequest.AclRequest.cmd:type_name -> eos.rpc.NSRequest.AclRequest.ACL_COMMAND + 8, // 78: eos.rpc.NSRequest.AclRequest.type:type_name -> eos.rpc.NSRequest.AclRequest.ACL_TYPE + 31, // 79: eos.rpc.NSRequest.TokenRequest.token:type_name -> eos.rpc.ShareToken + 22, // 80: eos.rpc.NSRequest.QuotaRequest.id:type_name -> eos.rpc.RoleId + 2, // 81: eos.rpc.NSRequest.QuotaRequest.op:type_name -> eos.rpc.QUOTAOP + 3, // 82: eos.rpc.NSRequest.QuotaRequest.entry:type_name -> eos.rpc.QUOTAENTRY + 60, // 83: eos.rpc.NSRequest.ShareRequest.ls:type_name -> eos.rpc.NSRequest.ShareRequest.LsShare + 61, // 84: eos.rpc.NSRequest.ShareRequest.op:type_name -> eos.rpc.NSRequest.ShareRequest.OperateShare + 9, // 85: eos.rpc.NSRequest.ShareRequest.LsShare.outformat:type_name -> eos.rpc.NSRequest.ShareRequest.LsShare.OutFormat + 10, // 86: eos.rpc.NSRequest.ShareRequest.OperateShare.op:type_name -> eos.rpc.NSRequest.ShareRequest.OperateShare.Op + 70, // 87: eos.rpc.NSResponse.VersionResponse.versions:type_name -> eos.rpc.NSResponse.VersionResponse.VersionInfo + 71, // 88: eos.rpc.NSResponse.RecycleResponse.recycles:type_name -> eos.rpc.NSResponse.RecycleResponse.RecycleInfo + 21, // 89: eos.rpc.NSResponse.QuotaResponse.quotanode:type_name -> eos.rpc.QuotaProto + 67, // 90: eos.rpc.NSResponse.ShareResponse.shares:type_name -> eos.rpc.NSResponse.ShareInfo + 68, // 91: eos.rpc.NSResponse.ShareResponse.access:type_name -> eos.rpc.NSResponse.ShareAccess + 23, // 92: eos.rpc.NSResponse.VersionResponse.VersionInfo.id:type_name -> eos.rpc.MDId + 17, // 93: eos.rpc.NSResponse.VersionResponse.VersionInfo.mtime:type_name -> eos.rpc.Time + 23, // 94: eos.rpc.NSResponse.RecycleResponse.RecycleInfo.id:type_name -> eos.rpc.MDId + 22, // 95: eos.rpc.NSResponse.RecycleResponse.RecycleInfo.owner:type_name -> eos.rpc.RoleId + 17, // 96: eos.rpc.NSResponse.RecycleResponse.RecycleInfo.dtime:type_name -> eos.rpc.Time + 11, // 97: eos.rpc.NSResponse.RecycleResponse.RecycleInfo.type:type_name -> eos.rpc.NSResponse.RecycleResponse.RecycleInfo.DELETIONTYPE + 12, // 98: eos.rpc.Eos.Ping:input_type -> eos.rpc.PingRequest + 26, // 99: eos.rpc.Eos.MD:input_type -> eos.rpc.MDRequest + 28, // 100: eos.rpc.Eos.Find:input_type -> eos.rpc.FindRequest + 34, // 101: eos.rpc.Eos.NsStat:input_type -> eos.rpc.NsStatRequest + 14, // 102: eos.rpc.Eos.ContainerInsert:input_type -> eos.rpc.ContainerInsertRequest + 15, // 103: eos.rpc.Eos.FileInsert:input_type -> eos.rpc.FileInsertRequest + 32, // 104: eos.rpc.Eos.Exec:input_type -> eos.rpc.NSRequest + 36, // 105: eos.rpc.Eos.ManilaServerRequest:input_type -> eos.rpc.ManilaRequest + 13, // 106: eos.rpc.Eos.Ping:output_type -> eos.rpc.PingReply + 27, // 107: eos.rpc.Eos.MD:output_type -> eos.rpc.MDResponse + 27, // 108: eos.rpc.Eos.Find:output_type -> eos.rpc.MDResponse + 35, // 109: eos.rpc.Eos.NsStat:output_type -> eos.rpc.NsStatResponse + 16, // 110: eos.rpc.Eos.ContainerInsert:output_type -> eos.rpc.InsertReply + 16, // 111: eos.rpc.Eos.FileInsert:output_type -> eos.rpc.InsertReply + 33, // 112: eos.rpc.Eos.Exec:output_type -> eos.rpc.NSResponse + 37, // 113: eos.rpc.Eos.ManilaServerRequest:output_type -> eos.rpc.ManilaResponse + 106, // [106:114] is the sub-list for method output_type + 98, // [98:106] is the sub-list for method input_type + 98, // [98:98] is the sub-list for extension type_name + 98, // [98:98] is the sub-list for extension extendee + 0, // [0:98] is the sub-list for field type_name +} + +func init() { file_Rpc_proto_init() } +func file_Rpc_proto_init() { + if File_Rpc_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_Rpc_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PingRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PingReply); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ContainerInsertRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FileInsertRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InsertReply); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Time); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Checksum); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FileMdProto); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ContainerMdProto); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QuotaProto); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RoleId); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MDId); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Limit); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MDSelection); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MDRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MDResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FindRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ShareAuth); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ShareProto); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ShareToken); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NsStatRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NsStatResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ManilaRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ManilaResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_MkdirRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_RmdirRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_TouchRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_UnlinkRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_RmRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_RenameRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_SymlinkRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_VersionRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_RecycleRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_SetXAttrRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_ChownRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_ChmodRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_AclRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_TokenRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_QuotaRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_ShareRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_RecycleRequest_RestoreFlags); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_RecycleRequest_PurgeDate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_ShareRequest_LsShare); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_ShareRequest_OperateShare); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSResponse_ErrorResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSResponse_VersionResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSResponse_RecycleResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSResponse_AclResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSResponse_QuotaResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSResponse_ShareInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSResponse_ShareAccess); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSResponse_ShareResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSResponse_VersionResponse_VersionInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSResponse_RecycleResponse_RecycleInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_Rpc_proto_msgTypes[20].OneofWrappers = []interface{}{ + (*NSRequest_Mkdir)(nil), + (*NSRequest_Rmdir)(nil), + (*NSRequest_Touch)(nil), + (*NSRequest_Unlink)(nil), + (*NSRequest_Rm)(nil), + (*NSRequest_Rename)(nil), + (*NSRequest_Symlink)(nil), + (*NSRequest_Version)(nil), + (*NSRequest_Recycle)(nil), + (*NSRequest_Xattr)(nil), + (*NSRequest_Chown)(nil), + (*NSRequest_Chmod)(nil), + (*NSRequest_Acl)(nil), + (*NSRequest_Token)(nil), + (*NSRequest_Quota)(nil), + (*NSRequest_Share)(nil), + } + file_Rpc_proto_msgTypes[44].OneofWrappers = []interface{}{ + (*NSRequest_ShareRequest_Ls)(nil), + (*NSRequest_ShareRequest_Op)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_Rpc_proto_rawDesc, + NumEnums: 12, + NumMessages: 60, + NumExtensions: 0, + NumServices: 1, }, - }, - Metadata: "Rpc.proto", + GoTypes: file_Rpc_proto_goTypes, + DependencyIndexes: file_Rpc_proto_depIdxs, + EnumInfos: file_Rpc_proto_enumTypes, + MessageInfos: file_Rpc_proto_msgTypes, + }.Build() + File_Rpc_proto = out.File + file_Rpc_proto_rawDesc = nil + file_Rpc_proto_goTypes = nil + file_Rpc_proto_depIdxs = nil } - -// Tue Jul 27 08:22:54 UTC 2021 diff --git a/pkg/eosclient/eosgrpc/eos_grpc/Rpc.proto b/pkg/eosclient/eosgrpc/eos_grpc/Rpc.proto index bc529c75ba..93f0e0be48 100644 --- a/pkg/eosclient/eosgrpc/eos_grpc/Rpc.proto +++ b/pkg/eosclient/eosgrpc/eos_grpc/Rpc.proto @@ -333,6 +333,7 @@ message NSRequest { map xattrs = 2; bool recursive = 3; repeated string keystodelete = 4; + bool create = 5; } message ChownRequest { @@ -378,8 +379,44 @@ message NSRequest { QUOTAENTRY entry = 6; // select volume or inode entry for deletion } + message ShareRequest { + message LsShare { + enum OutFormat { + NONE = 0; // + MONITORING = 1; // [-m] + LISTING = 2; // [-l] + JSON = 3; // [grpc] + } + OutFormat outformat = 1; // + string selection = 2; // + } + + message OperateShare { + enum Op { + CREATE = 0; + REMOVE = 1; + SHARE = 2; + UNSHARE = 3; + ACCESS = 4; + MODIFY = 5; + } + Op op = 1; + string share = 2; + string acl = 3; + string path = 4; + string user = 5; + string group = 6; + } + + oneof subcmd { + LsShare ls = 1; + OperateShare op = 2; + } + } + string authkey = 1; RoleId role = 2; + // Actual request data object oneof command { MkdirRequest mkdir = 21; @@ -397,6 +434,7 @@ message NSRequest { AclRequest acl = 33; TokenRequest token = 34; QuotaRequest quota = 35; + ShareRequest share = 36; } } @@ -447,11 +485,32 @@ message NSResponse { repeated QuotaProto quotanode = 3; } + message ShareInfo { + string name = 1; + string root = 2; + string rule = 3; + uint64 uid = 4; + uint64 nshared = 5; + } + + message ShareAccess { + string name = 1; + bool granted = 2; + } + + message ShareResponse { + int64 code = 1; + string msg = 2; + repeated ShareInfo shares = 3; + repeated ShareAccess access = 4; + } + ErrorResponse error = 1; VersionResponse version = 2; RecycleResponse recycle = 3; AclResponse acl = 4; QuotaResponse quota = 5; + ShareResponse share = 6; } message NsStatRequest { diff --git a/pkg/eosclient/eosgrpc/eos_grpc/Rpc_grpc.pb.go b/pkg/eosclient/eosgrpc/eos_grpc/Rpc_grpc.pb.go new file mode 100644 index 0000000000..039c255c8f --- /dev/null +++ b/pkg/eosclient/eosgrpc/eos_grpc/Rpc_grpc.pb.go @@ -0,0 +1,444 @@ +// Copyright 2018-2021 CERN +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// In applying this license, CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.2.0 +// - protoc v3.19.1 +// source: Rpc.proto + +package eos_grpc + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// EosClient is the client API for Eos service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type EosClient interface { + // Replies to a ping + Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*PingReply, error) + // Replies to MD requests with a stream + MD(ctx context.Context, in *MDRequest, opts ...grpc.CallOption) (Eos_MDClient, error) + // Replies to Find requests with a stream + Find(ctx context.Context, in *FindRequest, opts ...grpc.CallOption) (Eos_FindClient, error) + // Replies to a NsStat operation + NsStat(ctx context.Context, in *NsStatRequest, opts ...grpc.CallOption) (*NsStatResponse, error) + // Replies to an insert + ContainerInsert(ctx context.Context, in *ContainerInsertRequest, opts ...grpc.CallOption) (*InsertReply, error) + FileInsert(ctx context.Context, in *FileInsertRequest, opts ...grpc.CallOption) (*InsertReply, error) + // Replies to a NsRequest operation + Exec(ctx context.Context, in *NSRequest, opts ...grpc.CallOption) (*NSResponse, error) + // Manila Driver + ManilaServerRequest(ctx context.Context, in *ManilaRequest, opts ...grpc.CallOption) (*ManilaResponse, error) +} + +type eosClient struct { + cc grpc.ClientConnInterface +} + +func NewEosClient(cc grpc.ClientConnInterface) EosClient { + return &eosClient{cc} +} + +func (c *eosClient) Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*PingReply, error) { + out := new(PingReply) + err := c.cc.Invoke(ctx, "/eos.rpc.Eos/Ping", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *eosClient) MD(ctx context.Context, in *MDRequest, opts ...grpc.CallOption) (Eos_MDClient, error) { + stream, err := c.cc.NewStream(ctx, &Eos_ServiceDesc.Streams[0], "/eos.rpc.Eos/MD", opts...) + if err != nil { + return nil, err + } + x := &eosMDClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type Eos_MDClient interface { + Recv() (*MDResponse, error) + grpc.ClientStream +} + +type eosMDClient struct { + grpc.ClientStream +} + +func (x *eosMDClient) Recv() (*MDResponse, error) { + m := new(MDResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *eosClient) Find(ctx context.Context, in *FindRequest, opts ...grpc.CallOption) (Eos_FindClient, error) { + stream, err := c.cc.NewStream(ctx, &Eos_ServiceDesc.Streams[1], "/eos.rpc.Eos/Find", opts...) + if err != nil { + return nil, err + } + x := &eosFindClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type Eos_FindClient interface { + Recv() (*MDResponse, error) + grpc.ClientStream +} + +type eosFindClient struct { + grpc.ClientStream +} + +func (x *eosFindClient) Recv() (*MDResponse, error) { + m := new(MDResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *eosClient) NsStat(ctx context.Context, in *NsStatRequest, opts ...grpc.CallOption) (*NsStatResponse, error) { + out := new(NsStatResponse) + err := c.cc.Invoke(ctx, "/eos.rpc.Eos/NsStat", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *eosClient) ContainerInsert(ctx context.Context, in *ContainerInsertRequest, opts ...grpc.CallOption) (*InsertReply, error) { + out := new(InsertReply) + err := c.cc.Invoke(ctx, "/eos.rpc.Eos/ContainerInsert", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *eosClient) FileInsert(ctx context.Context, in *FileInsertRequest, opts ...grpc.CallOption) (*InsertReply, error) { + out := new(InsertReply) + err := c.cc.Invoke(ctx, "/eos.rpc.Eos/FileInsert", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *eosClient) Exec(ctx context.Context, in *NSRequest, opts ...grpc.CallOption) (*NSResponse, error) { + out := new(NSResponse) + err := c.cc.Invoke(ctx, "/eos.rpc.Eos/Exec", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *eosClient) ManilaServerRequest(ctx context.Context, in *ManilaRequest, opts ...grpc.CallOption) (*ManilaResponse, error) { + out := new(ManilaResponse) + err := c.cc.Invoke(ctx, "/eos.rpc.Eos/ManilaServerRequest", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// EosServer is the server API for Eos service. +// All implementations must embed UnimplementedEosServer +// for forward compatibility +type EosServer interface { + // Replies to a ping + Ping(context.Context, *PingRequest) (*PingReply, error) + // Replies to MD requests with a stream + MD(*MDRequest, Eos_MDServer) error + // Replies to Find requests with a stream + Find(*FindRequest, Eos_FindServer) error + // Replies to a NsStat operation + NsStat(context.Context, *NsStatRequest) (*NsStatResponse, error) + // Replies to an insert + ContainerInsert(context.Context, *ContainerInsertRequest) (*InsertReply, error) + FileInsert(context.Context, *FileInsertRequest) (*InsertReply, error) + // Replies to a NsRequest operation + Exec(context.Context, *NSRequest) (*NSResponse, error) + // Manila Driver + ManilaServerRequest(context.Context, *ManilaRequest) (*ManilaResponse, error) + mustEmbedUnimplementedEosServer() +} + +// UnimplementedEosServer must be embedded to have forward compatible implementations. +type UnimplementedEosServer struct { +} + +func (UnimplementedEosServer) Ping(context.Context, *PingRequest) (*PingReply, error) { + return nil, status.Errorf(codes.Unimplemented, "method Ping not implemented") +} +func (UnimplementedEosServer) MD(*MDRequest, Eos_MDServer) error { + return status.Errorf(codes.Unimplemented, "method MD not implemented") +} +func (UnimplementedEosServer) Find(*FindRequest, Eos_FindServer) error { + return status.Errorf(codes.Unimplemented, "method Find not implemented") +} +func (UnimplementedEosServer) NsStat(context.Context, *NsStatRequest) (*NsStatResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method NsStat not implemented") +} +func (UnimplementedEosServer) ContainerInsert(context.Context, *ContainerInsertRequest) (*InsertReply, error) { + return nil, status.Errorf(codes.Unimplemented, "method ContainerInsert not implemented") +} +func (UnimplementedEosServer) FileInsert(context.Context, *FileInsertRequest) (*InsertReply, error) { + return nil, status.Errorf(codes.Unimplemented, "method FileInsert not implemented") +} +func (UnimplementedEosServer) Exec(context.Context, *NSRequest) (*NSResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Exec not implemented") +} +func (UnimplementedEosServer) ManilaServerRequest(context.Context, *ManilaRequest) (*ManilaResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ManilaServerRequest not implemented") +} +func (UnimplementedEosServer) mustEmbedUnimplementedEosServer() {} + +// UnsafeEosServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to EosServer will +// result in compilation errors. +type UnsafeEosServer interface { + mustEmbedUnimplementedEosServer() +} + +func RegisterEosServer(s grpc.ServiceRegistrar, srv EosServer) { + s.RegisterService(&Eos_ServiceDesc, srv) +} + +func _Eos_Ping_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PingRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EosServer).Ping(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/eos.rpc.Eos/Ping", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EosServer).Ping(ctx, req.(*PingRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Eos_MD_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(MDRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(EosServer).MD(m, &eosMDServer{stream}) +} + +type Eos_MDServer interface { + Send(*MDResponse) error + grpc.ServerStream +} + +type eosMDServer struct { + grpc.ServerStream +} + +func (x *eosMDServer) Send(m *MDResponse) error { + return x.ServerStream.SendMsg(m) +} + +func _Eos_Find_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(FindRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(EosServer).Find(m, &eosFindServer{stream}) +} + +type Eos_FindServer interface { + Send(*MDResponse) error + grpc.ServerStream +} + +type eosFindServer struct { + grpc.ServerStream +} + +func (x *eosFindServer) Send(m *MDResponse) error { + return x.ServerStream.SendMsg(m) +} + +func _Eos_NsStat_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NsStatRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EosServer).NsStat(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/eos.rpc.Eos/NsStat", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EosServer).NsStat(ctx, req.(*NsStatRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Eos_ContainerInsert_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ContainerInsertRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EosServer).ContainerInsert(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/eos.rpc.Eos/ContainerInsert", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EosServer).ContainerInsert(ctx, req.(*ContainerInsertRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Eos_FileInsert_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(FileInsertRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EosServer).FileInsert(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/eos.rpc.Eos/FileInsert", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EosServer).FileInsert(ctx, req.(*FileInsertRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Eos_Exec_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NSRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EosServer).Exec(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/eos.rpc.Eos/Exec", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EosServer).Exec(ctx, req.(*NSRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Eos_ManilaServerRequest_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ManilaRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EosServer).ManilaServerRequest(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/eos.rpc.Eos/ManilaServerRequest", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EosServer).ManilaServerRequest(ctx, req.(*ManilaRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Eos_ServiceDesc is the grpc.ServiceDesc for Eos service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Eos_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "eos.rpc.Eos", + HandlerType: (*EosServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Ping", + Handler: _Eos_Ping_Handler, + }, + { + MethodName: "NsStat", + Handler: _Eos_NsStat_Handler, + }, + { + MethodName: "ContainerInsert", + Handler: _Eos_ContainerInsert_Handler, + }, + { + MethodName: "FileInsert", + Handler: _Eos_FileInsert_Handler, + }, + { + MethodName: "Exec", + Handler: _Eos_Exec_Handler, + }, + { + MethodName: "ManilaServerRequest", + Handler: _Eos_ManilaServerRequest_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "MD", + Handler: _Eos_MD_Handler, + ServerStreams: true, + }, + { + StreamName: "Find", + Handler: _Eos_Find_Handler, + ServerStreams: true, + }, + }, + Metadata: "Rpc.proto", +} From 941a29459fafd5b2bceeb3e5d1057cdbe02e9ea9 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Fri, 14 Jan 2022 17:30:53 +0100 Subject: [PATCH 06/55] eosgrpc: GetAttr implementation --- pkg/eosclient/eosgrpc/eosgrpc.go | 37 ++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/pkg/eosclient/eosgrpc/eosgrpc.go b/pkg/eosclient/eosgrpc/eosgrpc.go index 4b0ea59208..b70731ad37 100644 --- a/pkg/eosclient/eosgrpc/eosgrpc.go +++ b/pkg/eosclient/eosgrpc/eosgrpc.go @@ -37,6 +37,7 @@ import ( "github.com/cs3org/reva/pkg/eosclient" erpc "github.com/cs3org/reva/pkg/eosclient/eosgrpc/eos_grpc" + eos "github.com/cs3org/reva/pkg/eosclient/utils" "github.com/cs3org/reva/pkg/errtypes" "github.com/cs3org/reva/pkg/logger" "github.com/cs3org/reva/pkg/storage/utils/acl" @@ -613,8 +614,40 @@ func (c *Client) UnsetAttr(ctx context.Context, auth eosclient.Authorization, at } // GetAttr returns the attribute specified by key -func (c *Client) GetAttr(ctx context.Context, auth eosclient.Authorization, name, path string) (*eosclient.Attribute, error) { - return nil, errtypes.NotSupported("GetAttr function not yet implemented") +func (c *Client) GetAttr(ctx context.Context, auth eosclient.Authorization, key, path string) (*eosclient.Attribute, error) { + info, err := c.GetFileInfoByPath(ctx, auth, path) + if err != nil { + return nil, err + } + + for k, v := range info.Attrs { + if k == key { + attr, err := getAttribute(k, v) + if err != nil { + return nil, errors.Wrap(err, fmt.Sprintf("eosgrpc: cannot parse attribute key=%s value=%s", k, v)) + } + return attr, nil + } + } + return nil, errtypes.NotFound(fmt.Sprintf("key %s not found", key)) +} + +func getAttribute(key, val string) (*eosclient.Attribute, error) { + // key is in the form sys.forced.checksum + type2key := strings.SplitN(key, ".", 2) // type2key = ["sys", "forced.checksum"] + if len(type2key) != 2 { + return nil, errtypes.InternalError("wrong attr format to deserialize") + } + t, err := eos.AttrStringToType(type2key[0]) + if err != nil { + return nil, err + } + attr := &eosclient.Attribute{ + Type: t, + Key: type2key[1], + Val: val, + } + return attr, nil } // GetFileInfoByPath returns the FilInfo at the given path From 4cae13a2882447f39341c4eb1352bbc2c56bf157 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Fri, 14 Jan 2022 16:29:41 +0100 Subject: [PATCH 07/55] eosgrpc: add option to set an xattr only if does not exist --- pkg/eosclient/eosgrpc/eosgrpc.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkg/eosclient/eosgrpc/eosgrpc.go b/pkg/eosclient/eosgrpc/eosgrpc.go index b70731ad37..25e9d6ace6 100644 --- a/pkg/eosclient/eosgrpc/eosgrpc.go +++ b/pkg/eosclient/eosgrpc/eosgrpc.go @@ -550,6 +550,10 @@ func (c *Client) SetAttr(ctx context.Context, auth eosclient.Authorization, attr msg.Id = new(erpc.MDId) msg.Id.Path = []byte(path) + if errorIfExists { + msg.Create = true + } + rq.Command = &erpc.NSRequest_Xattr{Xattr: msg} // Now send the req and see what happens From 1277e4206c23ab8747e751e5314521fd45ed762a Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Fri, 28 Jan 2022 17:46:40 +0100 Subject: [PATCH 08/55] Implement GetLock method for eos storage --- pkg/storage/utils/eosfs/eosfs.go | 151 ++++++++++++++++++++++++++++++- 1 file changed, 148 insertions(+), 3 deletions(-) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index 50cdc8dfd9..388c99171f 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -53,6 +53,7 @@ import ( "github.com/cs3org/reva/pkg/storage/utils/chunking" "github.com/cs3org/reva/pkg/storage/utils/grants" "github.com/cs3org/reva/pkg/storage/utils/templates" + "github.com/cs3org/reva/pkg/utils" "github.com/pkg/errors" ) @@ -67,6 +68,9 @@ const ( UserAttr ) +// LockKeyAttr is the key in the xattr for sp +const LockKeyAttr = "user.iop.lock" + var hiddenReg = regexp.MustCompile(`\.sys\..#.`) func (c *Config) init() { @@ -537,12 +541,153 @@ func (fs *eosfs) UnsetArbitraryMetadata(ctx context.Context, ref *provider.Refer // GetLock returns an existing lock on the given reference func (fs *eosfs) GetLock(ctx context.Context, ref *provider.Reference) (*provider.Lock, error) { - return nil, errtypes.NotSupported("unimplemented") + path, err := fs.resolve(ctx, ref) + if err != nil { + return nil, errors.Wrap(err, "eosfs: error resolving reference") + } + path = fs.wrap(ctx, path) + + user, err := getUser(ctx) + if err != nil { + return nil, errors.Wrap(err, "eosfs: no user in ctx") + } + auth, err := fs.getUserAuth(ctx, user, path) + if err != nil { + return nil, errors.Wrap(err, "eosfs: error getting uid and gid for user") + } + + // the cs3apis require to have the read permission on the resource + // to get the eventual lock. + has, err := fs.hasReadAccess(ctx, user, ref) + if err != nil { + return nil, errors.Wrap(err, "eosfs: error checking read access to resource") + } + if !has { + return nil, errtypes.BadRequest("user has not read access on resource") + } + + attr, err := fs.c.GetAttr(ctx, auth, "user."+LockKeyAttr, path) + if err != nil { + return nil, errors.Wrap(err, "eosfs: error getting lock value") + } + + lock, err := decodeLock(attr.Val) + if err != nil { + return nil, errors.Wrap(err, "eosfs: error decoding attr value") + } + + // check if the lock is expired + if isExpired(lock) { + // we do not remove the attr at this point, as it will be + // removed by the next call to SetLock + return nil, errtypes.NotFound("resource not locked") + } + + return lock, nil } // SetLock puts a lock on the given reference -func (fs *eosfs) SetLock(ctx context.Context, ref *provider.Reference, lock *provider.Lock) error { - return errtypes.NotSupported("unimplemented") +func (fs *eosfs) SetLock(ctx context.Context, ref *provider.Reference, l *provider.Lock) error { + if l.Type == provider.LockType_LOCK_TYPE_SHARED { + return errtypes.NotSupported("shared lock not yet implemented") + } + + path, err := fs.resolve(ctx, ref) + if err != nil { + return errors.Wrap(err, "eosfs: error resolving reference") + } + path = fs.wrap(ctx, path) + + user, err := getUser(ctx) + if err != nil { + return errors.Wrap(err, "eosfs: no user in ctx") + } + auth, err := fs.getUserAuth(ctx, user, path) + if err != nil { + return errors.Wrap(err, "eosfs: error getting uid and gid for user") + } + + // the cs3apis require to have the write permission on the resource + // to set a lock. because in eos we can set attrs even if the user does + // not have the write permission, we need to check if the user that made + // the request has it + has, err := fs.hasWriteAccess(ctx, user, ref) + if err != nil { + return errors.Wrap(err, "eosfs: cannot check if user has write access on resource") + } + if !has { + return errtypes.BadRequest("user has not write access on resource") + } + + encodedLock, err := encodeLock(l) + if err != nil { + return errors.Wrap(err, "eosfs: error encoding lock") + } + + attr := &eosclient.Attribute{ + Type: UserAttr, + Key: LockKeyAttr, + Val: encodedLock, + } + + err = fs.c.SetAttr(ctx, auth, attr, true, false, path) + if err != nil { + if errors.Is(err, eosclient.AttrAlreadyExistsError) { + // the lock was already set, we need to check if it is expired + // and eventually "reset" it + oldLock, err := fs.GetLock(ctx, ref) + if err != nil { + return errors.Wrap(err, "eosfs: error getting lock") + } + if !isExpired(oldLock) { + return errtypes.BadRequest("lock already set") + } + // old lock expired + // TODO (gdelmont): make this part atomic + return fs.c.SetAttr(ctx, auth, attr, false, false, path) + } else { + return err + } + } + + return nil +} + +func (fs *eosfs) hasWriteAccess(ctx context.Context, user *userpb.User, ref *provider.Reference) (bool, error) { + resInfo, err := fs.GetMD(ctx, ref, nil) + if err != nil { + return false, err + } + return resInfo.PermissionSet.InitiateFileUpload, nil +} + +func (fs *eosfs) hasReadAccess(ctx context.Context, user *userpb.User, ref *provider.Reference) (bool, error) { + resInfo, err := fs.GetMD(ctx, ref, nil) + if err != nil { + return false, err + } + return resInfo.PermissionSet.InitiateFileDownload, nil +} + +func isExpired(l *provider.Lock) bool { + return uint64(time.Now().Unix()) > l.Expiration.Seconds +} + +func encodeLock(l *provider.Lock) (string, error) { + data, err := json.Marshal(l) + if err != nil { + return "", err + } + return string(data), nil +} + +func decodeLock(raw string) (*provider.Lock, error) { + l := new(provider.Lock) + err := json.Unmarshal([]byte(raw), l) + if err != nil { + return nil, err + } + return l, nil } // RefreshLock refreshes an existing lock on the given reference From 008683011bc42e3d20e8186bd5d8eb187b9a6235 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Thu, 13 Jan 2022 18:45:13 +0100 Subject: [PATCH 09/55] Implement Unlock method for eos storage --- pkg/storage/utils/eosfs/eosfs.go | 110 +++++++++++++++++++++++++++++-- 1 file changed, 106 insertions(+), 4 deletions(-) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index 388c99171f..6fb268ef69 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -69,7 +69,7 @@ const ( ) // LockKeyAttr is the key in the xattr for sp -const LockKeyAttr = "user.iop.lock" +const LockKeyAttr = "iop.lock" var hiddenReg = regexp.MustCompile(`\.sys\..#.`) @@ -691,13 +691,115 @@ func decodeLock(raw string) (*provider.Lock, error) { } // RefreshLock refreshes an existing lock on the given reference -func (fs *eosfs) RefreshLock(ctx context.Context, ref *provider.Reference, lock *provider.Lock) error { - return errtypes.NotSupported("unimplemented") +func (fs *eosfs) RefreshLock(ctx context.Context, ref *provider.Reference, newLock *provider.Lock) error { + // TODO (gdelmont): check if the new lock is already expired? + + oldLock, err := fs.GetLock(ctx, ref) + if err != nil { + switch err.(type) { + case errtypes.NotFound: + // the lock does not exist + return errtypes.BadRequest("file was not locked") + default: + return err + } + } + + user, err := getUser(ctx) + if err != nil { + return errors.Wrap(err, "eosfs: error getting user") + } + + // check if the user hold the old lock + if oldLock.User != nil && !utils.UserEqual(oldLock.User, user.Id) { + return errtypes.BadRequest("caller does not hold the lock") + } + + // check if the holder is the same of the new lock + if !sameHolder(oldLock, newLock) { + return errtypes.BadRequest("caller does not hold the lock") + } + + // the cs3apis require to have the write permission on the resource + // to set a lock + has, err := fs.hasWriteAccess(ctx, user, ref) + if err != nil { + return errors.Wrap(err, "eosfs: cannot check if user has write access on resource") + } + if !has { + return errtypes.BadRequest("user has not write access on resource") + } + + // set the xattr with the new value + path, err := fs.resolve(ctx, ref) + if err != nil { + return errors.Wrap(err, "eosfs: error resolving reference") + } + path = fs.wrap(ctx, path) + + auth, err := fs.getUserAuth(ctx, user, path) + if err != nil { + return errors.Wrap(err, "eosfs: error getting uid and gid for user") + } + + encodedLock, err := encodeLock(newLock) + if err != nil { + return errors.Wrap(err, "eosfs: error encoding lock") + } + + attr := &eosclient.Attribute{ + Type: UserAttr, + Key: LockKeyAttr, + Val: encodedLock, + } + + return fs.c.SetAttr(ctx, auth, attr, false, false, path) +} + +func sameHolder(l1, l2 *provider.Lock) bool { + same := true + if l1.User != nil || l2.User != nil { + same = utils.UserEqual(l1.User, l2.User) + } + if l1.AppName != "" || l2.AppName != "" { + same = l1.AppName == l2.AppName + } + return same } // Unlock removes an existing lock from the given reference func (fs *eosfs) Unlock(ctx context.Context, ref *provider.Reference) error { - return errtypes.NotSupported("unimplemented") + lock, err := fs.GetLock(ctx, ref) + if err != nil { + switch err.(type) { + case errtypes.NotFound: + // the lock does not exist + return errtypes.BadRequest("file was not locked") + default: + return err + } + } + + user, err := getUser(ctx) + if err != nil { + return errors.Wrap(err, "eosfs: no user in ctx") + } + + if lock.User != nil && !utils.UserEqual(lock.User, user.Id) { + return errtypes.BadRequest("caller does not hold the lock") + } + + path, err := fs.resolve(ctx, ref) + if err != nil { + return errors.Wrap(err, "eosfs: error resolving reference") + } + path = fs.wrap(ctx, path) + + auth, err := fs.getUserAuth(ctx, user, path) + if err != nil { + return errors.Wrap(err, "eosfs: error getting uid and gid for user") + } + return fs.c.UnsetAttr(ctx, auth, &eosclient.Attribute{Type: UserAttr, Key: LockKeyAttr}, false, path) } func (fs *eosfs) AddGrant(ctx context.Context, ref *provider.Reference, g *provider.Grant) error { From 9ae8dd5e227a3c09a27214e306d43f32a6734b22 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Fri, 28 Jan 2022 17:53:16 +0100 Subject: [PATCH 10/55] Implement SetLock (not atomic) and RefreshLock for eos storage --- pkg/storage/utils/eosfs/eosfs.go | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index 6fb268ef69..a41780b215 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -491,7 +491,7 @@ func (fs *eosfs) SetArbitraryMetadata(ctx context.Context, ref *provider.Referen // TODO(labkode): SetArbitraryMetadata does not have semantics for recursivity. // We set it to false - err := fs.c.SetAttr(ctx, auth, attr, false, fn) + err := fs.c.SetAttr(ctx, auth, attr, false, false, fn) if err != nil { return errors.Wrap(err, "eosfs: error setting xattr in eos driver") } @@ -645,9 +645,8 @@ func (fs *eosfs) SetLock(ctx context.Context, ref *provider.Reference, l *provid // old lock expired // TODO (gdelmont): make this part atomic return fs.c.SetAttr(ctx, auth, attr, false, false, path) - } else { - return err } + return err } return nil @@ -694,6 +693,10 @@ func decodeLock(raw string) (*provider.Lock, error) { func (fs *eosfs) RefreshLock(ctx context.Context, ref *provider.Reference, newLock *provider.Lock) error { // TODO (gdelmont): check if the new lock is already expired? + if newLock.Type == provider.LockType_LOCK_TYPE_SHARED { + return errtypes.NotSupported("shared lock not yet implemented") + } + oldLock, err := fs.GetLock(ctx, ref) if err != nil { switch err.(type) { @@ -1457,7 +1460,7 @@ func (fs *eosfs) createUserDir(ctx context.Context, u *userpb.User, path string, } for _, attr := range attrs { - err = fs.c.SetAttr(ctx, rootAuth, attr, recursiveAttr, path) + err = fs.c.SetAttr(ctx, rootAuth, attr, false, recursiveAttr, path) if err != nil { return errors.Wrap(err, "eosfs: error setting attribute") } @@ -1549,7 +1552,7 @@ func (fs *eosfs) CreateReference(ctx context.Context, p string, targetURI *url.U Val: targetURI.String(), } - if err := fs.c.SetAttr(ctx, rootAuth, attr, false, tmp); err != nil { + if err := fs.c.SetAttr(ctx, rootAuth, attr, false, false, tmp); err != nil { err = errors.Wrapf(err, "eosfs: error setting reva.ref attr on file: %q", tmp) return err } From 020dcbd1acce1316af2b0c066ac0446dd3ebd7b7 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Fri, 14 Jan 2022 10:52:42 +0100 Subject: [PATCH 11/55] Filter lock key while listing attr --- pkg/storage/utils/eosfs/eosfs.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index a41780b215..fcb6fd021f 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -2093,10 +2093,10 @@ func (fs *eosfs) convert(ctx context.Context, eosFileInfo *eosclient.FileInfo) ( } } - // filter 'sys' attrs + // filter 'sys' attrs and key attr filteredAttrs := make(map[string]string) for k, v := range eosFileInfo.Attrs { - if !strings.HasPrefix(k, "sys") { + if !strings.HasPrefix(k, "sys") && k != "user."+LockKeyAttr { filteredAttrs[k] = v } } From 5f0e29956355953003bc69da4bcdf83c8a2b1727 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Fri, 14 Jan 2022 10:58:13 +0100 Subject: [PATCH 12/55] Add changelog --- changelog/unreleased/eos-lock-implementation.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 changelog/unreleased/eos-lock-implementation.md diff --git a/changelog/unreleased/eos-lock-implementation.md b/changelog/unreleased/eos-lock-implementation.md new file mode 100644 index 0000000000..94913179d9 --- /dev/null +++ b/changelog/unreleased/eos-lock-implementation.md @@ -0,0 +1,4 @@ +Enhancement: Implement the CS3 Lock API in the EOS storage driver + +https://github.com/cs3org/cs3apis/pull/160 +https://github.com/cs3org/reva/pull/2444 \ No newline at end of file From 2ca669c98fed582e2407dfb79b5ff0545ab74b64 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Fri, 14 Jan 2022 16:22:55 +0100 Subject: [PATCH 13/55] Update grpc to version 1.43 --- go.mod | 3 +-- go.sum | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 61 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index abb2defa94..11802ea317 100644 --- a/go.mod +++ b/go.mod @@ -74,7 +74,7 @@ require ( golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359 golang.org/x/term v0.0.0-20210916214954-140adaaadfaf google.golang.org/genproto v0.0.0-20211021150943-2b146023228c - google.golang.org/grpc v1.42.0 + google.golang.org/grpc v1.43.0 google.golang.org/protobuf v1.27.1 gopkg.in/square/go-jose.v2 v2.6.0 // indirect gotest.tools v2.2.0+incompatible @@ -85,5 +85,4 @@ go 1.16 replace ( github.com/eventials/go-tus => github.com/andrewmostello/go-tus v0.0.0-20200314041820-904a9904af9a github.com/oleiade/reflections => github.com/oleiade/reflections v1.0.1 - google.golang.org/grpc => google.golang.org/grpc v1.26.0 // temporary downgrade ) diff --git a/go.sum b/go.sum index b2612f2e5c..bf2b6d812c 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,6 @@ bou.ke/monkey v1.0.2 h1:kWcnsrCNUatbxncxR/ThdYqbytgOIArtYWqcQLQzKLI= bou.ke/monkey v1.0.2/go.mod h1:OqickVX3tNx6t33n1xvtTtu85YN5s6cKwVug+oHMaIA= +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.40.0/go.mod h1:Tk58MuI9rbLMKlAjeO/bDnteAx7tX2gJIXw4T5Jwlro= @@ -85,6 +86,7 @@ github.com/alecthomas/units v0.0.0-20210208195552-ff826a37aa15/go.mod h1:OMCwj8V github.com/andrewmostello/go-tus v0.0.0-20200314041820-904a9904af9a h1:6tD4saJb8wmYF6Llz96ZJwUQ5r2GyTBFA2VEB5z8gVY= github.com/andrewmostello/go-tus v0.0.0-20200314041820-904a9904af9a/go.mod h1:XYuK1S5+kS6FGhlIUFuZFPvWiSrOIoLk6+ro33Xce3Y= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= @@ -127,6 +129,15 @@ github.com/cheggaaa/pb v1.0.29/go.mod h1:W40334L7FMC5JKWldsTWbdGjLo0RxUKK73K+TuP github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/coreos/go-oidc v2.2.1+incompatible h1:mh48q/BqXqgjVHpy2ZY7WnWAbenxRjsz9N1i1YxjHAk= github.com/coreos/go-oidc v2.2.1+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= @@ -144,7 +155,14 @@ github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDD github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s= @@ -155,6 +173,7 @@ github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWo github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/gdexlab/go-render v1.0.1 h1:rxqB3vo5s4n1kF0ySmoNeSPRYkEsyHgln4jFIQY7v0U= github.com/gdexlab/go-render v1.0.1/go.mod h1:wRi5nW2qfjiGj4mPukH4UV0IknS1cHD4VgFTmJX5JzM= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do= github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= @@ -307,7 +326,6 @@ github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zV github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -388,6 +406,7 @@ github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLe github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -400,6 +419,7 @@ github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORR github.com/grpc-ecosystem/go-grpc-middleware v1.1.0/go.mod h1:f5nM7jw/oeRSadq3xCzHAvxcr8HZnzsqU6ILg/0NiiE= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= @@ -615,6 +635,7 @@ github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3x github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/statsd_exporter v0.21.0 h1:hA05Q5RFeIjgwKIYEdFd59xu5Wwaznf33yKI+pyX6T8= github.com/prometheus/statsd_exporter v0.21.0/go.mod h1:rbT83sZq2V+p73lHhPZfMc3MLCHmSHelCh9hSGYNLTQ= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= @@ -723,6 +744,7 @@ go.opentelemetry.io/otel/sdk v1.3.0 h1:3278edCoH89MEJ0Ky8WQXVmDQv3FX4ZJ3Pp+9fJre go.opentelemetry.io/otel/sdk v1.3.0/go.mod h1:rIo4suHNhQwBIPg9axF8V9CA72Wz2mKF1teNrup8yzs= go.opentelemetry.io/otel/trace v1.3.0 h1:doy8Hzb1RJ+I3yFhtDmwNc7tIyw1tNMOIsyPzp1NOGY= go.opentelemetry.io/otel/trace v1.3.0/go.mod h1:c/VDhno8888bvQYmbYLqe41/Ldmr/KKunbvWM4/fEjk= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0= @@ -760,6 +782,7 @@ golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EH golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -785,6 +808,7 @@ golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -868,6 +892,7 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -968,6 +993,7 @@ golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -1070,6 +1096,7 @@ google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqiv google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= google.golang.org/api v0.58.0/go.mod h1:cAbP2FsxoGVNwtgNAmmn3y5G1TWAiVYRmg4yku3lv+E= google.golang.org/api v0.60.0/go.mod h1:d7rl65NZAkEQ90JFzqBjcRq1TVeG5ZoGV3sSpEnnVb4= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= @@ -1078,6 +1105,7 @@ google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCID google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -1103,6 +1131,7 @@ google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= @@ -1139,8 +1168,36 @@ google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ6 google.golang.org/genproto v0.0.0-20211016002631-37fc39342514/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211021150943-2b146023228c h1:FqrtZMB5Wr+/RecOM3uPJNPfWR8Upb5hAPnt7PU6i4k= google.golang.org/genproto v0.0.0-20211021150943-2b146023228c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/grpc v1.26.0 h1:2dTRdpdFEEhJYQD8EMLB61nnrzSCTbG38PhqdhvOltg= +google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= +google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.43.0 h1:Eeu7bZtDZ2DpRCsLhUlcrLnvYaMK1Gz86a+hMVvELmM= +google.golang.org/grpc v1.43.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -1178,6 +1235,7 @@ gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkep gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= From c86abb103928d0e7a4c8c613c50cbdf8220a70f6 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Fri, 28 Jan 2022 17:46:28 +0100 Subject: [PATCH 14/55] Update go-cs3api package (TO BE REMOVED BEFORE THE MERGE) --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 11802ea317..5ead56b71f 100644 --- a/go.mod +++ b/go.mod @@ -16,7 +16,7 @@ require ( github.com/cheggaaa/pb v1.0.29 github.com/coreos/go-oidc v2.2.1+incompatible github.com/cs3org/cato v0.0.0-20200828125504-e418fc54dd5e - github.com/cs3org/go-cs3apis v0.0.0-20211214102047-7ce3134d7bf8 + github.com/cs3org/go-cs3apis v0.0.0-20220126114148-64c025ccdd19 github.com/cubewise-code/go-mime v0.0.0-20200519001935-8c5762b177d8 github.com/eventials/go-tus v0.0.0-20200718001131-45c7ec8f5d59 github.com/gdexlab/go-render v1.0.1 diff --git a/go.sum b/go.sum index bf2b6d812c..b32f01c908 100644 --- a/go.sum +++ b/go.sum @@ -146,6 +146,8 @@ github.com/cs3org/cato v0.0.0-20200828125504-e418fc54dd5e h1:tqSPWQeueWTKnJVMJff github.com/cs3org/cato v0.0.0-20200828125504-e418fc54dd5e/go.mod h1:XJEZ3/EQuI3BXTp/6DUzFr850vlxq11I6satRtz0YQ4= github.com/cs3org/go-cs3apis v0.0.0-20211214102047-7ce3134d7bf8 h1:PqOprF37OvwCbAN5W23znknGk6N/LMayqLAeP904FHE= github.com/cs3org/go-cs3apis v0.0.0-20211214102047-7ce3134d7bf8/go.mod h1:UXha4TguuB52H14EMoSsCqDj7k8a/t7g4gVP+bgY5LY= +github.com/cs3org/go-cs3apis v0.0.0-20220126114148-64c025ccdd19 h1:1jqPH58jCxvbaJ9WLIJ7W2/m622bWS6ChptzljSG6IQ= +github.com/cs3org/go-cs3apis v0.0.0-20220126114148-64c025ccdd19/go.mod h1:UXha4TguuB52H14EMoSsCqDj7k8a/t7g4gVP+bgY5LY= github.com/cubewise-code/go-mime v0.0.0-20200519001935-8c5762b177d8 h1:Z9lwXumT5ACSmJ7WGnFl+OMLLjpz5uR2fyz7dC255FI= github.com/cubewise-code/go-mime v0.0.0-20200519001935-8c5762b177d8/go.mod h1:4abs/jPXcmJzYoYGF91JF9Uq9s/KL5n1jvFDix8KcqY= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= From e7b2b86b826e8cb53c902a17ff7951679109f240 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Mon, 31 Jan 2022 09:23:20 +0100 Subject: [PATCH 15/55] Removed all expiration logic --- pkg/storage/utils/eosfs/eosfs.go | 32 ++++---------------------------- 1 file changed, 4 insertions(+), 28 deletions(-) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index fcb6fd021f..9ed92a01f5 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -576,13 +576,6 @@ func (fs *eosfs) GetLock(ctx context.Context, ref *provider.Reference) (*provide return nil, errors.Wrap(err, "eosfs: error decoding attr value") } - // check if the lock is expired - if isExpired(lock) { - // we do not remove the attr at this point, as it will be - // removed by the next call to SetLock - return nil, errtypes.NotFound("resource not locked") - } - return lock, nil } @@ -631,25 +624,12 @@ func (fs *eosfs) SetLock(ctx context.Context, ref *provider.Reference, l *provid } err = fs.c.SetAttr(ctx, auth, attr, true, false, path) - if err != nil { - if errors.Is(err, eosclient.AttrAlreadyExistsError) { - // the lock was already set, we need to check if it is expired - // and eventually "reset" it - oldLock, err := fs.GetLock(ctx, ref) - if err != nil { - return errors.Wrap(err, "eosfs: error getting lock") - } - if !isExpired(oldLock) { - return errtypes.BadRequest("lock already set") - } - // old lock expired - // TODO (gdelmont): make this part atomic - return fs.c.SetAttr(ctx, auth, attr, false, false, path) - } + switch { + case errors.Is(err, eosclient.AttrAlreadyExistsError): + return errtypes.BadRequest("lock already set") + default: return err } - - return nil } func (fs *eosfs) hasWriteAccess(ctx context.Context, user *userpb.User, ref *provider.Reference) (bool, error) { @@ -668,10 +648,6 @@ func (fs *eosfs) hasReadAccess(ctx context.Context, user *userpb.User, ref *prov return resInfo.PermissionSet.InitiateFileDownload, nil } -func isExpired(l *provider.Lock) bool { - return uint64(time.Now().Unix()) > l.Expiration.Seconds -} - func encodeLock(l *provider.Lock) (string, error) { data, err := json.Marshal(l) if err != nil { From 02d10ebc961301865b5a4f8694a382ae755eed2a Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Mon, 31 Jan 2022 09:52:48 +0100 Subject: [PATCH 16/55] Move same eos logic in a common package --- pkg/eosclient/eosbinary/eosbinary.go | 32 +++++----------------- pkg/eosclient/eosgrpc/eosgrpc.go | 5 ++-- pkg/eosclient/utils.go | 40 ++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 28 deletions(-) create mode 100644 pkg/eosclient/utils.go diff --git a/pkg/eosclient/eosbinary/eosbinary.go b/pkg/eosclient/eosbinary/eosbinary.go index 2e8735cec0..71c8ee3bfc 100644 --- a/pkg/eosclient/eosbinary/eosbinary.go +++ b/pkg/eosclient/eosbinary/eosbinary.go @@ -48,42 +48,24 @@ const ( userACLEvalKey = "eval.useracl" ) -const ( - // SystemAttr is the system extended attribute. - SystemAttr eosclient.AttrType = iota - // UserAttr is the user extended attribute. - UserAttr -) - func serializeAttribute(a *eosclient.Attribute) string { return fmt.Sprintf("%s.%s=%s", attrTypeToString(a.Type), a.Key, a.Val) } func attrTypeToString(at eosclient.AttrType) string { switch at { - case SystemAttr: + case eosclient.SystemAttr: return "sys" - case UserAttr: + case eosclient.UserAttr: return "user" default: return "invalid" } } -func attrStringToType(t string) (eosclient.AttrType, error) { - switch t { - case "sys": - return SystemAttr, nil - case "user": - return UserAttr, nil - default: - return 0, errtypes.InternalError("attr type not existing") - } -} - func isValidAttribute(a *eosclient.Attribute) bool { // validate that an attribute is correct. - if (a.Type != SystemAttr && a.Type != UserAttr) || a.Key == "" { + if (a.Type != eosclient.SystemAttr && a.Type != eosclient.UserAttr) || a.Key == "" { return false } return true @@ -312,7 +294,7 @@ func (c *Client) AddACL(ctx context.Context, auth, rootAuth eosclient.Authorizat sysACL = a.CitrineSerialize() } sysACLAttr := &eosclient.Attribute{ - Type: SystemAttr, + Type: eosclient.SystemAttr, Key: lwShareAttrKey, Val: sysACL, } @@ -330,7 +312,7 @@ func (c *Client) AddACL(ctx context.Context, auth, rootAuth eosclient.Authorizat } else { args = append(args, "--user") userACLAttr := &eosclient.Attribute{ - Type: SystemAttr, + Type: eosclient.SystemAttr, Key: userACLEvalKey, Val: "1", } @@ -376,7 +358,7 @@ func (c *Client) RemoveACL(ctx context.Context, auth, rootAuth eosclient.Authori sysACL = a.CitrineSerialize() } sysACLAttr := &eosclient.Attribute{ - Type: SystemAttr, + Type: eosclient.SystemAttr, Key: lwShareAttrKey, Val: sysACL, } @@ -588,7 +570,7 @@ func deserializeAttribute(attrStr string) (*eosclient.Attribute, error) { if len(type2key) != 2 { return nil, errtypes.InternalError("wrong attr format to deserialize") } - t, err := attrStringToType(type2key[0]) + t, err := eosclient.AttrStringToType(type2key[0]) if err != nil { return nil, err } diff --git a/pkg/eosclient/eosgrpc/eosgrpc.go b/pkg/eosclient/eosgrpc/eosgrpc.go index 25e9d6ace6..a6e1f729c7 100644 --- a/pkg/eosclient/eosgrpc/eosgrpc.go +++ b/pkg/eosclient/eosgrpc/eosgrpc.go @@ -34,10 +34,9 @@ import ( "syscall" "github.com/cs3org/reva/pkg/appctx" - "github.com/cs3org/reva/pkg/eosclient" + "github.com/cs3org/reva/pkg/eosclient" erpc "github.com/cs3org/reva/pkg/eosclient/eosgrpc/eos_grpc" - eos "github.com/cs3org/reva/pkg/eosclient/utils" "github.com/cs3org/reva/pkg/errtypes" "github.com/cs3org/reva/pkg/logger" "github.com/cs3org/reva/pkg/storage/utils/acl" @@ -642,7 +641,7 @@ func getAttribute(key, val string) (*eosclient.Attribute, error) { if len(type2key) != 2 { return nil, errtypes.InternalError("wrong attr format to deserialize") } - t, err := eos.AttrStringToType(type2key[0]) + t, err := eosclient.AttrStringToType(type2key[0]) if err != nil { return nil, err } diff --git a/pkg/eosclient/utils.go b/pkg/eosclient/utils.go new file mode 100644 index 0000000000..8b04ebfb99 --- /dev/null +++ b/pkg/eosclient/utils.go @@ -0,0 +1,40 @@ +// Copyright 2018-2021 CERN +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// In applying this license, CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + +package eosclient + +import "github.com/cs3org/reva/pkg/errtypes" + +const ( + // SystemAttr is the system extended attribute. + SystemAttr AttrType = iota + // UserAttr is the user extended attribute. + UserAttr +) + +// AttrStringToType converts a string to an AttrType +func AttrStringToType(t string) (AttrType, error) { + switch t { + case "sys": + return SystemAttr, nil + case "user": + return UserAttr, nil + default: + return 0, errtypes.InternalError("attr type not existing") + } +} From faece4e5c758bf0f06849ba339fcedfdf0ec5344 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Mon, 31 Jan 2022 10:15:54 +0100 Subject: [PATCH 17/55] Fix AddACL linting --- pkg/eosclient/eosbinary/eosbinary.go | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/pkg/eosclient/eosbinary/eosbinary.go b/pkg/eosclient/eosbinary/eosbinary.go index 71c8ee3bfc..7847bc1a72 100644 --- a/pkg/eosclient/eosbinary/eosbinary.go +++ b/pkg/eosclient/eosbinary/eosbinary.go @@ -298,10 +298,7 @@ func (c *Client) AddACL(ctx context.Context, auth, rootAuth eosclient.Authorizat Key: lwShareAttrKey, Val: sysACL, } - if err = c.SetAttr(ctx, auth, sysACLAttr, false, finfo.IsDir, path); err != nil { - return err - } - return nil + return c.SetAttr(ctx, auth, sysACLAttr, false, finfo.IsDir, path) } sysACL := a.CitrineSerialize() From 08263028e3a43de3ec19b5ed0156f04e150296c5 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Mon, 31 Jan 2022 10:55:45 +0100 Subject: [PATCH 18/55] CLI cmds for lock --- cmd/reva/getlock.go | 54 ++++++++++++++++ cmd/reva/main.go | 3 + cmd/reva/setlock.go | 153 ++++++++++++++++++++++++++++++++++++++++++++ cmd/reva/unlock.go | 75 ++++++++++++++++++++++ 4 files changed, 285 insertions(+) create mode 100644 cmd/reva/getlock.go create mode 100644 cmd/reva/setlock.go create mode 100644 cmd/reva/unlock.go diff --git a/cmd/reva/getlock.go b/cmd/reva/getlock.go new file mode 100644 index 0000000000..a3d57ce3b1 --- /dev/null +++ b/cmd/reva/getlock.go @@ -0,0 +1,54 @@ +package main + +import ( + "errors" + "fmt" + "io" + + rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" + provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" + "github.com/gdexlab/go-render/render" +) + +func getlockCommand() *command { + cmd := newCommand("getlock") + cmd.Description = func() string { return "get a lock on a resource" } + cmd.Usage = func() string { return "Usage: getlock " } + + cmd.ResetFlags = func() { + return + } + + cmd.Action = func(w ...io.Writer) error { + if cmd.NArg() < 1 { + return errors.New("Invalid arguments: " + cmd.Usage()) + } + + fn := cmd.Args()[0] + client, err := getClient() + if err != nil { + return err + } + + ctx := getAuthContext() + + ref := &provider.Reference{Path: fn} + + res, err := client.GetLock(ctx, &provider.GetLockRequest{ + Ref: ref, + }) + + if err != nil { + return err + } + + if res.Status.Code != rpc.Code_CODE_OK { + return formatError(res.Status) + } + + fmt.Println(render.Render(res.Lock)) + + return nil + } + return cmd +} diff --git a/cmd/reva/main.go b/cmd/reva/main.go index a77df4b34f..518764f1fd 100644 --- a/cmd/reva/main.go +++ b/cmd/reva/main.go @@ -85,6 +85,9 @@ var ( appTokensListCommand(), appTokensRemoveCommand(), appTokensCreateCommand(), + setlockCommand(), + getlockCommand(), + unlockCommand(), helpCommand(), } ) diff --git a/cmd/reva/setlock.go b/cmd/reva/setlock.go new file mode 100644 index 0000000000..59003ea779 --- /dev/null +++ b/cmd/reva/setlock.go @@ -0,0 +1,153 @@ +package main + +import ( + "context" + "errors" + "fmt" + "io" + "time" + + gateway "github.com/cs3org/go-cs3apis/cs3/gateway/v1beta1" + user "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1" + rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" + provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" + types "github.com/cs3org/go-cs3apis/cs3/types/v1beta1" +) + +func setlockCommand() *command { + cmd := newCommand("setlock") + cmd.Description = func() string { return "set a lock on a resource" } + cmd.Usage = func() string { return "Usage: setlock [-flags] " } + + typeFlag := cmd.String("type", "write", "type of lock") + idFlag := cmd.String("id", "", "id of lock") + userFlag := cmd.String("user", "", "user associated to lock") + appFlag := cmd.String("app", "", "app associated to lock") + expFlag := cmd.String("exp", "", "lock expiration time") + refreshFlag := cmd.Bool("refresh", false, "refresh the lock") + + cmd.ResetFlags = func() { + *typeFlag, *idFlag, *userFlag, *appFlag, *expFlag, *refreshFlag = "", "", "", "", "", false + } + + cmd.Action = func(w ...io.Writer) error { + if cmd.NArg() < 1 { + return errors.New("Invalid arguments: " + cmd.Usage()) + } + + fn := cmd.Args()[0] + client, err := getClient() + if err != nil { + return err + } + + ctx := getAuthContext() + + lock, err := createLock(ctx, client, *typeFlag, *idFlag, *userFlag, *appFlag, *expFlag) + if err != nil { + return err + } + + ref := &provider.Reference{Path: fn} + + if !*refreshFlag { + res, err := client.SetLock(ctx, &provider.SetLockRequest{ + Ref: ref, + Lock: lock, + }) + if err != nil { + return err + } + + if res.Status.Code != rpc.Code_CODE_OK { + return formatError(res.Status) + } + } else { + res, err := client.RefreshLock(ctx, &provider.RefreshLockRequest{ + Ref: ref, + Lock: lock, + }) + if err != nil { + return err + } + + if res.Status.Code != rpc.Code_CODE_OK { + return formatError(res.Status) + } + } + + fmt.Println("OK") + + return nil + } + return cmd +} + +func createLock(ctx context.Context, client gateway.GatewayAPIClient, t, id, u, app, exp string) (*provider.Lock, error) { + type_, err := getType(t) + if err != nil { + return nil, err + } + var uId *user.UserId + if u != "" { + u, err := getUser(ctx, client, u) + if err != nil { + return nil, err + } + uId = u.GetId() + } + var expiration *types.Timestamp + if exp != "" { + expiration, err = getExpiration(exp) + if err != nil { + return nil, err + } + } + + lock := provider.Lock{ + LockId: id, + Type: type_, + User: uId, + AppName: app, + Expiration: expiration, + } + + return &lock, nil +} + +func getType(t string) (provider.LockType, error) { + switch t { + case "shared": + return provider.LockType_LOCK_TYPE_SHARED, nil + case "write": + return provider.LockType_LOCK_TYPE_WRITE, nil + case "exclusive": + return provider.LockType_LOCK_TYPE_EXCL, nil + default: + return provider.LockType_LOCK_TYPE_INVALID, errors.New("type not recognised") + } +} + +func getUser(ctx context.Context, client gateway.GatewayAPIClient, u string) (*user.User, error) { + res, err := client.GetUserByClaim(ctx, &user.GetUserByClaimRequest{ + Claim: "username", + Value: u, + }) + switch { + case res.Status.Code != rpc.Code_CODE_OK: + return nil, errors.New(res.Status.Message) + case err != nil: + return nil, err + } + return res.User, nil +} + +func getExpiration(exp string) (*types.Timestamp, error) { + t, err := time.Parse("2006-01-02", exp) + if err != nil { + return nil, err + } + return &types.Timestamp{ + Seconds: uint64(t.Unix()), + }, nil +} diff --git a/cmd/reva/unlock.go b/cmd/reva/unlock.go new file mode 100644 index 0000000000..debce9fd44 --- /dev/null +++ b/cmd/reva/unlock.go @@ -0,0 +1,75 @@ +package main + +import ( + "errors" + "fmt" + "io" + + rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" + provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" +) + +func unlockCommand() *command { + cmd := newCommand("unlock") + cmd.Description = func() string { return "remove a lock on a resource" } + cmd.Usage = func() string { return "Usage: unlock " } + + idFlag := cmd.String("id", "", "lock id") + + cmd.ResetFlags = func() { + *idFlag = "" + } + + cmd.Action = func(w ...io.Writer) error { + if cmd.NArg() < 1 { + return errors.New("Invalid arguments: " + cmd.Usage()) + } + + fn := cmd.Args()[0] + client, err := getClient() + if err != nil { + return err + } + + ctx := getAuthContext() + + ref := &provider.Reference{Path: fn} + + // get lock from the id if set + var lock *provider.Lock + if *idFlag == "" { + getLockRes, err := client.GetLock(ctx, &provider.GetLockRequest{ + Ref: ref, + }) + if err != nil { + return err + } + if getLockRes.Status.Code != rpc.Code_CODE_OK { + return formatError(getLockRes.Status) + } + lock = getLockRes.Lock + } else { + lock = &provider.Lock{ + LockId: *idFlag, + } + } + + res, err := client.Unlock(ctx, &provider.UnlockRequest{ + Ref: ref, + Lock: lock, + }) + + if err != nil { + return err + } + + if res.Status.Code != rpc.Code_CODE_OK { + return formatError(res.Status) + } + + fmt.Println("OK") + + return nil + } + return cmd +} From 4154f882ee40c9f5f71183cd052682f8adab03ae Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Mon, 31 Jan 2022 11:26:51 +0100 Subject: [PATCH 19/55] Encode and decode lock struct in eos in base64 --- pkg/storage/utils/eosfs/eosfs.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index 91b85f2be4..40bc738844 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -31,6 +31,8 @@ import ( "strings" "time" + b64 "encoding/base64" + "github.com/ReneKroon/ttlcache/v2" "github.com/bluele/gcache" grouppb "github.com/cs3org/go-cs3apis/cs3/identity/group/v1beta1" @@ -653,12 +655,16 @@ func encodeLock(l *provider.Lock) (string, error) { if err != nil { return "", err } - return string(data), nil + return b64.StdEncoding.EncodeToString(data), nil } func decodeLock(raw string) (*provider.Lock, error) { + data, err := b64.StdEncoding.DecodeString(raw) + if err != nil { + return nil, err + } l := new(provider.Lock) - err := json.Unmarshal([]byte(raw), l) + err = json.Unmarshal(data, l) if err != nil { return nil, err } From e6fd7dbd6e102db4aea93f78f9685b4ba13df9bc Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Mon, 31 Jan 2022 11:45:30 +0100 Subject: [PATCH 20/55] eosbinary: fix deserializeAttribute --- pkg/eosclient/eosbinary/eosbinary.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/eosclient/eosbinary/eosbinary.go b/pkg/eosclient/eosbinary/eosbinary.go index 7847bc1a72..e2447ca558 100644 --- a/pkg/eosclient/eosbinary/eosbinary.go +++ b/pkg/eosclient/eosbinary/eosbinary.go @@ -559,7 +559,7 @@ func (c *Client) GetAttr(ctx context.Context, auth eosclient.Authorization, key, func deserializeAttribute(attrStr string) (*eosclient.Attribute, error) { // the string is in the form sys.forced.checksum="adler" - keyValue := strings.Split(strings.TrimSpace(attrStr), "=") // keyValue = ["sys.forced.checksum", "\"adler\""] + keyValue := strings.SplitN(strings.TrimSpace(attrStr), "=", 2) // keyValue = ["sys.forced.checksum", "\"adler\""] if len(keyValue) != 2 { return nil, errtypes.InternalError("wrong attr format to deserialize") } From d74d4e3ebd86e4fcf8801bd515b0fce43511ecfc Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Tue, 1 Feb 2022 08:56:17 +0100 Subject: [PATCH 21/55] Change signature Unlock method to accept a lock parameter --- pkg/storage/storage.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/storage/storage.go b/pkg/storage/storage.go index ae5cba3428..b8af0eeb1a 100644 --- a/pkg/storage/storage.go +++ b/pkg/storage/storage.go @@ -61,7 +61,7 @@ type FS interface { SetLock(ctx context.Context, ref *provider.Reference, lock *provider.Lock) error GetLock(ctx context.Context, ref *provider.Reference) (*provider.Lock, error) RefreshLock(ctx context.Context, ref *provider.Reference, lock *provider.Lock) error - Unlock(ctx context.Context, ref *provider.Reference) error + Unlock(ctx context.Context, ref *provider.Reference, lock *provider.Lock) error ListStorageSpaces(ctx context.Context, filter []*provider.ListStorageSpacesRequest_Filter) ([]*provider.StorageSpace, error) CreateStorageSpace(ctx context.Context, req *provider.CreateStorageSpaceRequest) (*provider.CreateStorageSpaceResponse, error) UpdateStorageSpace(ctx context.Context, req *provider.UpdateStorageSpaceRequest) (*provider.UpdateStorageSpaceResponse, error) From b7281e74fc49037f7728bc6e98a371b4e5972f89 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Tue, 1 Feb 2022 08:57:58 +0100 Subject: [PATCH 22/55] Update signature Unlock in all storage driver to accept a lock parameter --- pkg/storage/fs/nextcloud/nextcloud.go | 2 +- pkg/storage/fs/owncloud/owncloud.go | 2 +- pkg/storage/fs/owncloudsql/owncloudsql.go | 2 +- pkg/storage/fs/s3/s3.go | 2 +- pkg/storage/utils/decomposedfs/decomposedfs.go | 2 +- pkg/storage/utils/eosfs/eosfs.go | 2 +- pkg/storage/utils/localfs/localfs.go | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pkg/storage/fs/nextcloud/nextcloud.go b/pkg/storage/fs/nextcloud/nextcloud.go index 34e2fe3452..c81a921e14 100644 --- a/pkg/storage/fs/nextcloud/nextcloud.go +++ b/pkg/storage/fs/nextcloud/nextcloud.go @@ -778,7 +778,7 @@ func (nc *StorageDriver) RefreshLock(ctx context.Context, ref *provider.Referenc } // Unlock removes an existing lock from the given reference -func (nc *StorageDriver) Unlock(ctx context.Context, ref *provider.Reference) error { +func (nc *StorageDriver) Unlock(ctx context.Context, ref *provider.Reference, lock *provider.Lock) error { return errtypes.NotSupported("unimplemented") } diff --git a/pkg/storage/fs/owncloud/owncloud.go b/pkg/storage/fs/owncloud/owncloud.go index c75f82fde1..3573bfc69b 100644 --- a/pkg/storage/fs/owncloud/owncloud.go +++ b/pkg/storage/fs/owncloud/owncloud.go @@ -1489,7 +1489,7 @@ func (fs *ocfs) RefreshLock(ctx context.Context, ref *provider.Reference, lock * } // Unlock removes an existing lock from the given reference -func (fs *ocfs) Unlock(ctx context.Context, ref *provider.Reference) error { +func (fs *ocfs) Unlock(ctx context.Context, ref *provider.Reference, lock *provider.Lock) error { return errtypes.NotSupported("unimplemented") } diff --git a/pkg/storage/fs/owncloudsql/owncloudsql.go b/pkg/storage/fs/owncloudsql/owncloudsql.go index ca38b13afe..9dbf6bf506 100644 --- a/pkg/storage/fs/owncloudsql/owncloudsql.go +++ b/pkg/storage/fs/owncloudsql/owncloudsql.go @@ -1040,7 +1040,7 @@ func (fs *owncloudsqlfs) RefreshLock(ctx context.Context, ref *provider.Referenc } // Unlock removes an existing lock from the given reference -func (fs *owncloudsqlfs) Unlock(ctx context.Context, ref *provider.Reference) error { +func (fs *owncloudsqlfs) Unlock(ctx context.Context, ref *provider.Reference, lock *provider.Lock) error { return errtypes.NotSupported("unimplemented") } diff --git a/pkg/storage/fs/s3/s3.go b/pkg/storage/fs/s3/s3.go index 76799b9047..b777697e64 100644 --- a/pkg/storage/fs/s3/s3.go +++ b/pkg/storage/fs/s3/s3.go @@ -296,7 +296,7 @@ func (fs *s3FS) RefreshLock(ctx context.Context, ref *provider.Reference, lock * } // Unlock removes an existing lock from the given reference -func (fs *s3FS) Unlock(ctx context.Context, ref *provider.Reference) error { +func (fs *s3FS) Unlock(ctx context.Context, ref *provider.Reference, lock *provider.Lock) error { return errtypes.NotSupported("unimplemented") } diff --git a/pkg/storage/utils/decomposedfs/decomposedfs.go b/pkg/storage/utils/decomposedfs/decomposedfs.go index b3ac9e138c..33dadb0d06 100644 --- a/pkg/storage/utils/decomposedfs/decomposedfs.go +++ b/pkg/storage/utils/decomposedfs/decomposedfs.go @@ -543,6 +543,6 @@ func (fs *Decomposedfs) RefreshLock(ctx context.Context, ref *provider.Reference } // Unlock removes an existing lock from the given reference -func (fs *Decomposedfs) Unlock(ctx context.Context, ref *provider.Reference) error { +func (fs *Decomposedfs) Unlock(ctx context.Context, ref *provider.Reference, lock *provider.Lock) error { return errtypes.NotSupported("unimplemented") } diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index 40bc738844..4482fc1b6a 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -753,7 +753,7 @@ func sameHolder(l1, l2 *provider.Lock) bool { } // Unlock removes an existing lock from the given reference -func (fs *eosfs) Unlock(ctx context.Context, ref *provider.Reference) error { +func (fs *eosfs) Unlock(ctx context.Context, ref *provider.Reference, lock *provider.Lock) error { lock, err := fs.GetLock(ctx, ref) if err != nil { switch err.(type) { diff --git a/pkg/storage/utils/localfs/localfs.go b/pkg/storage/utils/localfs/localfs.go index 4c1a68f225..047491f305 100644 --- a/pkg/storage/utils/localfs/localfs.go +++ b/pkg/storage/utils/localfs/localfs.go @@ -727,7 +727,7 @@ func (fs *localfs) RefreshLock(ctx context.Context, ref *provider.Reference, loc } // Unlock removes an existing lock from the given reference -func (fs *localfs) Unlock(ctx context.Context, ref *provider.Reference) error { +func (fs *localfs) Unlock(ctx context.Context, ref *provider.Reference, lock* provider.Lock) error { return errtypes.NotSupported("unimplemented") } From 16e12a9c03e51c330a6ae5cf063b4b0b2ace210b Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Tue, 1 Feb 2022 09:05:34 +0100 Subject: [PATCH 23/55] Check lock id when unlock --- pkg/storage/utils/eosfs/eosfs.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index 4482fc1b6a..43ed478346 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -754,7 +754,11 @@ func sameHolder(l1, l2 *provider.Lock) bool { // Unlock removes an existing lock from the given reference func (fs *eosfs) Unlock(ctx context.Context, ref *provider.Reference, lock *provider.Lock) error { - lock, err := fs.GetLock(ctx, ref) + if lock.Type == provider.LockType_LOCK_TYPE_SHARED { + return errtypes.NotSupported("shared lock not yet implemented") + } + + oldLock, err := fs.GetLock(ctx, ref) if err != nil { switch err.(type) { case errtypes.NotFound: @@ -765,12 +769,17 @@ func (fs *eosfs) Unlock(ctx context.Context, ref *provider.Reference, lock *prov } } + // check if the lock id of the lock corresponds to the stored lock + if oldLock.LockId != lock.LockId { + return errtypes.BadRequest("lock id does not match") + } + user, err := getUser(ctx) if err != nil { return errors.Wrap(err, "eosfs: no user in ctx") } - if lock.User != nil && !utils.UserEqual(lock.User, user.Id) { + if oldLock.User != nil && !utils.UserEqual(oldLock.User, user.Id) { return errtypes.BadRequest("caller does not hold the lock") } From 1c5ded009d7a105f1e3f6c29317bfe182c059255 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Tue, 1 Feb 2022 09:13:56 +0100 Subject: [PATCH 24/55] Pass lock to storage driver from the UnlockRequest --- internal/grpc/services/storageprovider/storageprovider.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/grpc/services/storageprovider/storageprovider.go b/internal/grpc/services/storageprovider/storageprovider.go index 82e09db0bb..4ddb2db1cd 100644 --- a/internal/grpc/services/storageprovider/storageprovider.go +++ b/internal/grpc/services/storageprovider/storageprovider.go @@ -368,7 +368,7 @@ func (s *service) Unlock(ctx context.Context, req *provider.UnlockRequest) (*pro }, nil } - if err = s.storage.Unlock(ctx, newRef); err != nil { + if err = s.storage.Unlock(ctx, newRef, req.Lock); err != nil { var st *rpc.Status switch err.(type) { case errtypes.IsNotFound: From 9565fcd3efb758f5d8388ce1a528962310068d39 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Tue, 1 Feb 2022 15:50:09 +0100 Subject: [PATCH 25/55] Review fixes --- pkg/storage/utils/eosfs/eosfs.go | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index 43ed478346..8849aa7e24 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -485,6 +485,10 @@ func (fs *eosfs) SetArbitraryMetadata(ctx context.Context, ref *provider.Referen return errtypes.BadRequest(fmt.Sprintf("eosfs: key or value is empty: key:%s, value:%s", k, v)) } + if k == LockKeyAttr { + return errtypes.BadRequest(fmt.Sprintf("eosfs: key %s not allowed", k)) + } + attr := &eosclient.Attribute{ Type: UserAttr, Key: k, @@ -695,11 +699,6 @@ func (fs *eosfs) RefreshLock(ctx context.Context, ref *provider.Reference, newLo return errors.Wrap(err, "eosfs: error getting user") } - // check if the user hold the old lock - if oldLock.User != nil && !utils.UserEqual(oldLock.User, user.Id) { - return errtypes.BadRequest("caller does not hold the lock") - } - // check if the holder is the same of the new lock if !sameHolder(oldLock, newLock) { return errtypes.BadRequest("caller does not hold the lock") @@ -2084,7 +2083,7 @@ func (fs *eosfs) convert(ctx context.Context, eosFileInfo *eosclient.FileInfo) ( } } - // filter 'sys' attrs and key attr + // filter 'sys' attrs and the reserved lock filteredAttrs := make(map[string]string) for k, v := range eosFileInfo.Attrs { if !strings.HasPrefix(k, "sys") && k != "user."+LockKeyAttr { From 956a161f0eca970999f9fa76c4c08e3eeed87da4 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Tue, 1 Feb 2022 16:40:28 +0100 Subject: [PATCH 26/55] Check same holde in unlock and check write access when setting lock when user's lock differs from the one in context --- pkg/storage/utils/eosfs/eosfs.go | 70 +++++++++++++++++++++++++++----- 1 file changed, 59 insertions(+), 11 deletions(-) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index 8849aa7e24..5b8a2592b5 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -564,7 +564,7 @@ func (fs *eosfs) GetLock(ctx context.Context, ref *provider.Reference) (*provide // the cs3apis require to have the read permission on the resource // to get the eventual lock. - has, err := fs.hasReadAccess(ctx, user, ref) + has, err := fs.userHasReadAccess(ctx, user, ref) if err != nil { return nil, errors.Wrap(err, "eosfs: error checking read access to resource") } @@ -610,7 +610,7 @@ func (fs *eosfs) SetLock(ctx context.Context, ref *provider.Reference, l *provid // to set a lock. because in eos we can set attrs even if the user does // not have the write permission, we need to check if the user that made // the request has it - has, err := fs.hasWriteAccess(ctx, user, ref) + has, err := fs.userHasWriteAccess(ctx, user, ref) if err != nil { return errors.Wrap(err, "eosfs: cannot check if user has write access on resource") } @@ -618,6 +618,18 @@ func (fs *eosfs) SetLock(ctx context.Context, ref *provider.Reference, l *provid return errtypes.BadRequest("user has not write access on resource") } + // the user in the lock could differ from the user in the context + // in that case, also the user in the lock MUST have the write permission + if !utils.UserEqual(user.Id, l.User) { + has, err := fs.userIDHasWriteAccess(ctx, l.User, ref) + if err != nil { + return errors.Wrap(err, "eosfs: cannot check if user has write access on resource") + } + if !has { + return errtypes.BadRequest("user has not write access on resource") + } + } + encodedLock, err := encodeLock(l) if err != nil { return errors.Wrap(err, "eosfs: error encoding lock") @@ -638,7 +650,26 @@ func (fs *eosfs) SetLock(ctx context.Context, ref *provider.Reference, l *provid } } -func (fs *eosfs) hasWriteAccess(ctx context.Context, user *userpb.User, ref *provider.Reference) (bool, error) { +func (fs *eosfs) getUserFromID(ctx context.Context, userID *userpb.UserId) (*userpb.User, error) { + client, err := pool.GetGatewayServiceClient(fs.conf.GatewaySvc) + if err != nil { + return nil, err + } + res, err := client.GetUser(ctx, &userpb.GetUserRequest{ + UserId: userID, + }) + + if err != nil { + return nil, err + } + if res.Status.Code != rpc.Code_CODE_OK { + return nil, errtypes.InternalError(res.Status.Message) + } + return res.User, nil +} + +func (fs *eosfs) userHasWriteAccess(ctx context.Context, user *userpb.User, ref *provider.Reference) (bool, error) { + ctx = ctxpkg.ContextSetUser(ctx, user) resInfo, err := fs.GetMD(ctx, ref, nil) if err != nil { return false, err @@ -646,7 +677,16 @@ func (fs *eosfs) hasWriteAccess(ctx context.Context, user *userpb.User, ref *pro return resInfo.PermissionSet.InitiateFileUpload, nil } -func (fs *eosfs) hasReadAccess(ctx context.Context, user *userpb.User, ref *provider.Reference) (bool, error) { +func (fs *eosfs) userIDHasWriteAccess(ctx context.Context, userID *userpb.UserId, ref *provider.Reference) (bool, error) { + user, err := fs.getUserFromID(ctx, userID) + if err != nil { + return false, nil + } + return fs.userHasWriteAccess(ctx, user, ref) +} + +func (fs *eosfs) userHasReadAccess(ctx context.Context, user *userpb.User, ref *provider.Reference) (bool, error) { + ctx = ctxpkg.ContextSetUser(ctx, user) resInfo, err := fs.GetMD(ctx, ref, nil) if err != nil { return false, err @@ -654,6 +694,14 @@ func (fs *eosfs) hasReadAccess(ctx context.Context, user *userpb.User, ref *prov return resInfo.PermissionSet.InitiateFileDownload, nil } +func (fs *eosfs) userIDHasReadAccess(ctx context.Context, userID *userpb.UserId, ref *provider.Reference) (bool, error) { + user, err := fs.getUserFromID(ctx, userID) + if err != nil { + return false, err + } + return fs.userHasReadAccess(ctx, user, ref) +} + func encodeLock(l *provider.Lock) (string, error) { data, err := json.Marshal(l) if err != nil { @@ -706,7 +754,7 @@ func (fs *eosfs) RefreshLock(ctx context.Context, ref *provider.Reference, newLo // the cs3apis require to have the write permission on the resource // to set a lock - has, err := fs.hasWriteAccess(ctx, user, ref) + has, err := fs.userHasWriteAccess(ctx, user, ref) if err != nil { return errors.Wrap(err, "eosfs: cannot check if user has write access on resource") } @@ -773,12 +821,7 @@ func (fs *eosfs) Unlock(ctx context.Context, ref *provider.Reference, lock *prov return errtypes.BadRequest("lock id does not match") } - user, err := getUser(ctx) - if err != nil { - return errors.Wrap(err, "eosfs: no user in ctx") - } - - if oldLock.User != nil && !utils.UserEqual(oldLock.User, user.Id) { + if !sameHolder(oldLock, lock) { return errtypes.BadRequest("caller does not hold the lock") } @@ -788,6 +831,11 @@ func (fs *eosfs) Unlock(ctx context.Context, ref *provider.Reference, lock *prov } path = fs.wrap(ctx, path) + user, err := getUser(ctx) + if err != nil { + return errors.Wrap(err, "eosfs: no user in ctx") + } + auth, err := fs.getUserAuth(ctx, user, path) if err != nil { return errors.Wrap(err, "eosfs: error getting uid and gid for user") From 82539d069e3e7dd14a55a4044839504c418c8e79 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Thu, 3 Feb 2022 15:40:47 +0100 Subject: [PATCH 27/55] Return right errors on set and unset attrs --- pkg/eosclient/eosgrpc/eosgrpc.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pkg/eosclient/eosgrpc/eosgrpc.go b/pkg/eosclient/eosgrpc/eosgrpc.go index a6e1f729c7..79cdde2fad 100644 --- a/pkg/eosclient/eosgrpc/eosgrpc.go +++ b/pkg/eosclient/eosgrpc/eosgrpc.go @@ -558,6 +558,11 @@ func (c *Client) SetAttr(ctx context.Context, auth eosclient.Authorization, attr // Now send the req and see what happens resp, err := c.cl.Exec(ctx, rq) e := c.getRespError(resp, err) + + if resp != nil && resp.Error != nil && resp.Error.Code == 17 { + return eosclient.AttrAlreadyExistsError + } + if e != nil { log.Error().Str("func", "SetAttr").Str("path", path).Str("err", e.Error()).Msg("") return e @@ -599,6 +604,11 @@ func (c *Client) UnsetAttr(ctx context.Context, auth eosclient.Authorization, at // Now send the req and see what happens resp, err := c.cl.Exec(ctx, rq) + + if resp != nil && resp.Error != nil && resp.Error.Code == 61 { + return eosclient.AttrNotExistsError + } + e := c.getRespError(resp, err) if e != nil { log.Error().Str("func", "UnsetAttr").Str("path", path).Str("err", e.Error()).Msg("") From 2d8e01314a71119ccb390952d18d9ffeea349d36 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Thu, 3 Feb 2022 16:05:29 +0100 Subject: [PATCH 28/55] eosfs: pass to write and read check the path already resolved --- pkg/storage/utils/eosfs/eosfs.go | 38 ++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index 5b8a2592b5..b58d9f2896 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -564,7 +564,7 @@ func (fs *eosfs) GetLock(ctx context.Context, ref *provider.Reference) (*provide // the cs3apis require to have the read permission on the resource // to get the eventual lock. - has, err := fs.userHasReadAccess(ctx, user, ref) + has, err := fs.userHasReadAccess(ctx, user, path) if err != nil { return nil, errors.Wrap(err, "eosfs: error checking read access to resource") } @@ -610,7 +610,7 @@ func (fs *eosfs) SetLock(ctx context.Context, ref *provider.Reference, l *provid // to set a lock. because in eos we can set attrs even if the user does // not have the write permission, we need to check if the user that made // the request has it - has, err := fs.userHasWriteAccess(ctx, user, ref) + has, err := fs.userHasWriteAccess(ctx, user, path) if err != nil { return errors.Wrap(err, "eosfs: cannot check if user has write access on resource") } @@ -621,7 +621,7 @@ func (fs *eosfs) SetLock(ctx context.Context, ref *provider.Reference, l *provid // the user in the lock could differ from the user in the context // in that case, also the user in the lock MUST have the write permission if !utils.UserEqual(user.Id, l.User) { - has, err := fs.userIDHasWriteAccess(ctx, l.User, ref) + has, err := fs.userIDHasWriteAccess(ctx, l.User, path) if err != nil { return errors.Wrap(err, "eosfs: cannot check if user has write access on resource") } @@ -668,8 +668,11 @@ func (fs *eosfs) getUserFromID(ctx context.Context, userID *userpb.UserId) (*use return res.User, nil } -func (fs *eosfs) userHasWriteAccess(ctx context.Context, user *userpb.User, ref *provider.Reference) (bool, error) { +func (fs *eosfs) userHasWriteAccess(ctx context.Context, user *userpb.User, path string) (bool, error) { ctx = ctxpkg.ContextSetUser(ctx, user) + ref := &provider.Reference{ + Path: path, + } resInfo, err := fs.GetMD(ctx, ref, nil) if err != nil { return false, err @@ -677,16 +680,19 @@ func (fs *eosfs) userHasWriteAccess(ctx context.Context, user *userpb.User, ref return resInfo.PermissionSet.InitiateFileUpload, nil } -func (fs *eosfs) userIDHasWriteAccess(ctx context.Context, userID *userpb.UserId, ref *provider.Reference) (bool, error) { +func (fs *eosfs) userIDHasWriteAccess(ctx context.Context, userID *userpb.UserId, path string) (bool, error) { user, err := fs.getUserFromID(ctx, userID) if err != nil { return false, nil } - return fs.userHasWriteAccess(ctx, user, ref) + return fs.userHasWriteAccess(ctx, user, path) } -func (fs *eosfs) userHasReadAccess(ctx context.Context, user *userpb.User, ref *provider.Reference) (bool, error) { +func (fs *eosfs) userHasReadAccess(ctx context.Context, user *userpb.User, path string) (bool, error) { ctx = ctxpkg.ContextSetUser(ctx, user) + ref := &provider.Reference{ + Path: path, + } resInfo, err := fs.GetMD(ctx, ref, nil) if err != nil { return false, err @@ -694,12 +700,12 @@ func (fs *eosfs) userHasReadAccess(ctx context.Context, user *userpb.User, ref * return resInfo.PermissionSet.InitiateFileDownload, nil } -func (fs *eosfs) userIDHasReadAccess(ctx context.Context, userID *userpb.UserId, ref *provider.Reference) (bool, error) { +func (fs *eosfs) userIDHasReadAccess(ctx context.Context, userID *userpb.UserId, path string) (bool, error) { user, err := fs.getUserFromID(ctx, userID) if err != nil { return false, err } - return fs.userHasReadAccess(ctx, user, ref) + return fs.userHasReadAccess(ctx, user, path) } func encodeLock(l *provider.Lock) (string, error) { @@ -752,9 +758,15 @@ func (fs *eosfs) RefreshLock(ctx context.Context, ref *provider.Reference, newLo return errtypes.BadRequest("caller does not hold the lock") } + path, err := fs.resolve(ctx, ref) + if err != nil { + return errors.Wrap(err, "eosfs: error resolving reference") + } + path = fs.wrap(ctx, path) + // the cs3apis require to have the write permission on the resource // to set a lock - has, err := fs.userHasWriteAccess(ctx, user, ref) + has, err := fs.userHasWriteAccess(ctx, user, path) if err != nil { return errors.Wrap(err, "eosfs: cannot check if user has write access on resource") } @@ -763,12 +775,6 @@ func (fs *eosfs) RefreshLock(ctx context.Context, ref *provider.Reference, newLo } // set the xattr with the new value - path, err := fs.resolve(ctx, ref) - if err != nil { - return errors.Wrap(err, "eosfs: error resolving reference") - } - path = fs.wrap(ctx, path) - auth, err := fs.getUserAuth(ctx, user, path) if err != nil { return errors.Wrap(err, "eosfs: error getting uid and gid for user") From 4eaa44c7d75e41692fd798bc5dd69a07c7822151 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Fri, 4 Feb 2022 17:29:15 +0100 Subject: [PATCH 29/55] Fixes --- pkg/eosclient/eosbinary/eosbinary.go | 4 ++++ pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go | 5 +++-- pkg/eosclient/eosgrpc/eos_grpc/Rpc_grpc.pb.go | 1 + pkg/storage/utils/eosfs/eosfs.go | 21 ++++++++----------- pkg/storage/utils/localfs/localfs.go | 2 +- 5 files changed, 18 insertions(+), 15 deletions(-) diff --git a/pkg/eosclient/eosbinary/eosbinary.go b/pkg/eosclient/eosbinary/eosbinary.go index e2447ca558..e7420c5030 100644 --- a/pkg/eosclient/eosbinary/eosbinary.go +++ b/pkg/eosclient/eosbinary/eosbinary.go @@ -548,6 +548,10 @@ func (c *Client) GetAttr(ctx context.Context, auth eosclient.Authorization, key, args := []string{"attr", "get", key, path} attrOut, _, err := c.executeEOS(ctx, args, auth) if err != nil { + var exErr *exec.ExitError + if errors.As(err, &exErr) && exErr.ExitCode() == 61 { + return nil, eosclient.AttrNotExistsError + } return nil, err } attr, err := deserializeAttribute(attrOut) diff --git a/pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go b/pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go index 4cc0dbff90..6f5502ee18 100644 --- a/pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go +++ b/pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go @@ -44,10 +44,11 @@ package eos_grpc import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" ) const ( diff --git a/pkg/eosclient/eosgrpc/eos_grpc/Rpc_grpc.pb.go b/pkg/eosclient/eosgrpc/eos_grpc/Rpc_grpc.pb.go index 039c255c8f..93c6a8bd5d 100644 --- a/pkg/eosclient/eosgrpc/eos_grpc/Rpc_grpc.pb.go +++ b/pkg/eosclient/eosgrpc/eos_grpc/Rpc_grpc.pb.go @@ -26,6 +26,7 @@ package eos_grpc import ( context "context" + grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index b58d9f2896..db92028a32 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -574,6 +574,9 @@ func (fs *eosfs) GetLock(ctx context.Context, ref *provider.Reference) (*provide attr, err := fs.c.GetAttr(ctx, auth, "user."+LockKeyAttr, path) if err != nil { + if err == eosclient.AttrNotExistsError { + return nil, errtypes.NotFound("eosfs: lock not found") + } return nil, errors.Wrap(err, "eosfs: error getting lock value") } @@ -668,11 +671,8 @@ func (fs *eosfs) getUserFromID(ctx context.Context, userID *userpb.UserId) (*use return res.User, nil } -func (fs *eosfs) userHasWriteAccess(ctx context.Context, user *userpb.User, path string) (bool, error) { +func (fs *eosfs) userHasWriteAccess(ctx context.Context, user *userpb.User, ref *provider.Reference) (bool, error) { ctx = ctxpkg.ContextSetUser(ctx, user) - ref := &provider.Reference{ - Path: path, - } resInfo, err := fs.GetMD(ctx, ref, nil) if err != nil { return false, err @@ -680,19 +680,16 @@ func (fs *eosfs) userHasWriteAccess(ctx context.Context, user *userpb.User, path return resInfo.PermissionSet.InitiateFileUpload, nil } -func (fs *eosfs) userIDHasWriteAccess(ctx context.Context, userID *userpb.UserId, path string) (bool, error) { +func (fs *eosfs) userIDHasWriteAccess(ctx context.Context, userID *userpb.UserId, ref *provider.Reference) (bool, error) { user, err := fs.getUserFromID(ctx, userID) if err != nil { return false, nil } - return fs.userHasWriteAccess(ctx, user, path) + return fs.userHasWriteAccess(ctx, user, ref) } -func (fs *eosfs) userHasReadAccess(ctx context.Context, user *userpb.User, path string) (bool, error) { +func (fs *eosfs) userHasReadAccess(ctx context.Context, user *userpb.User, ref *provider.Reference) (bool, error) { ctx = ctxpkg.ContextSetUser(ctx, user) - ref := &provider.Reference{ - Path: path, - } resInfo, err := fs.GetMD(ctx, ref, nil) if err != nil { return false, err @@ -700,12 +697,12 @@ func (fs *eosfs) userHasReadAccess(ctx context.Context, user *userpb.User, path return resInfo.PermissionSet.InitiateFileDownload, nil } -func (fs *eosfs) userIDHasReadAccess(ctx context.Context, userID *userpb.UserId, path string) (bool, error) { +func (fs *eosfs) userIDHasReadAccess(ctx context.Context, userID *userpb.UserId, ref *provider.Reference) (bool, error) { user, err := fs.getUserFromID(ctx, userID) if err != nil { return false, err } - return fs.userHasReadAccess(ctx, user, path) + return fs.userHasReadAccess(ctx, user, ref) } func encodeLock(l *provider.Lock) (string, error) { diff --git a/pkg/storage/utils/localfs/localfs.go b/pkg/storage/utils/localfs/localfs.go index 047491f305..3cbb0ef7b5 100644 --- a/pkg/storage/utils/localfs/localfs.go +++ b/pkg/storage/utils/localfs/localfs.go @@ -727,7 +727,7 @@ func (fs *localfs) RefreshLock(ctx context.Context, ref *provider.Reference, loc } // Unlock removes an existing lock from the given reference -func (fs *localfs) Unlock(ctx context.Context, ref *provider.Reference, lock* provider.Lock) error { +func (fs *localfs) Unlock(ctx context.Context, ref *provider.Reference, lock *provider.Lock) error { return errtypes.NotSupported("unimplemented") } From 1b28860cf71046b541e8e64f1387c30339d8c736 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte <39946305+gmgigi96@users.noreply.github.com> Date: Mon, 7 Feb 2022 09:05:15 +0100 Subject: [PATCH 30/55] check if user in lock is not nil Co-authored-by: Giuseppe Lo Presti --- pkg/storage/utils/eosfs/eosfs.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index db92028a32..cb8b9680ee 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -623,7 +623,7 @@ func (fs *eosfs) SetLock(ctx context.Context, ref *provider.Reference, l *provid // the user in the lock could differ from the user in the context // in that case, also the user in the lock MUST have the write permission - if !utils.UserEqual(user.Id, l.User) { + if l.User != nil && !utils.UserEqual(user.Id, l.User) { has, err := fs.userIDHasWriteAccess(ctx, l.User, path) if err != nil { return errors.Wrap(err, "eosfs: cannot check if user has write access on resource") From cd66d9d53e400005d6e8e0b9f41200765a6515f2 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Thu, 10 Feb 2022 12:33:49 +0100 Subject: [PATCH 31/55] Add Precondition Failed error --- pkg/rgrpc/status/status.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/pkg/rgrpc/status/status.go b/pkg/rgrpc/status/status.go index 8881ba984c..47da94647f 100644 --- a/pkg/rgrpc/status/status.go +++ b/pkg/rgrpc/status/status.go @@ -154,6 +154,17 @@ func NewConflict(ctx context.Context, err error, msg string) *rpc.Status { } } +// NewFailedPrecondition TODO +func NewFailedPrecondition(ctx context.Context, err error, msg string) *rpc.Status { + log := appctx.GetLogger(ctx).With().CallerWithSkipFrameCount(3).Logger() + log.Error().Err(err).Msg(msg) + return &rpc.Status{ + Code: rpc.Code_CODE_FAILED_PRECONDITION, + Message: msg, + Trace: getTrace(ctx), + } +} + // NewStatusFromErrType returns a status that corresponds to the given errtype func NewStatusFromErrType(ctx context.Context, msg string, err error) *rpc.Status { switch e := err.(type) { From fb081502ad209b961a6b90e80ffe6f2cedb547d9 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Thu, 10 Feb 2022 12:34:09 +0100 Subject: [PATCH 32/55] Fixed return errors --- .../storageprovider/storageprovider.go | 8 ++- pkg/eosclient/eosbinary/eosbinary.go | 4 -- pkg/storage/utils/eosfs/eosfs.go | 49 +++++++++---------- 3 files changed, 31 insertions(+), 30 deletions(-) diff --git a/internal/grpc/services/storageprovider/storageprovider.go b/internal/grpc/services/storageprovider/storageprovider.go index 4ddb2db1cd..abe51d9f30 100644 --- a/internal/grpc/services/storageprovider/storageprovider.go +++ b/internal/grpc/services/storageprovider/storageprovider.go @@ -280,6 +280,8 @@ func (s *service) SetLock(ctx context.Context, req *provider.SetLockRequest) (*p st = status.NewNotFound(ctx, "path not found when setting lock") case errtypes.PermissionDenied: st = status.NewPermissionDenied(ctx, err, "permission denied") + case errtypes.BadRequest: + st = status.NewFailedPrecondition(ctx, err, "reference already locked") default: st = status.NewInternal(ctx, err, "error setting lock: "+req.Ref.String()) } @@ -309,7 +311,7 @@ func (s *service) GetLock(ctx context.Context, req *provider.GetLockRequest) (*p var st *rpc.Status switch err.(type) { case errtypes.IsNotFound: - st = status.NewNotFound(ctx, "path not found when getting lock") + st = status.NewNotFound(ctx, "reference or lock not found") case errtypes.PermissionDenied: st = status.NewPermissionDenied(ctx, err, "permission denied") default: @@ -344,6 +346,8 @@ func (s *service) RefreshLock(ctx context.Context, req *provider.RefreshLockRequ st = status.NewNotFound(ctx, "path not found when refreshing lock") case errtypes.PermissionDenied: st = status.NewPermissionDenied(ctx, err, "permission denied") + case errtypes.BadRequest: + st = status.NewFailedPrecondition(ctx, err, "reference not locked or caller does not hold the lock") default: st = status.NewInternal(ctx, err, "error refreshing lock: "+req.Ref.String()) } @@ -375,6 +379,8 @@ func (s *service) Unlock(ctx context.Context, req *provider.UnlockRequest) (*pro st = status.NewNotFound(ctx, "path not found when unlocking") case errtypes.PermissionDenied: st = status.NewPermissionDenied(ctx, err, "permission denied") + case errtypes.BadRequest: + st = status.NewFailedPrecondition(ctx, err, "reference not locked") default: st = status.NewInternal(ctx, err, "error unlocking: "+req.Ref.String()) } diff --git a/pkg/eosclient/eosbinary/eosbinary.go b/pkg/eosclient/eosbinary/eosbinary.go index e7420c5030..e2447ca558 100644 --- a/pkg/eosclient/eosbinary/eosbinary.go +++ b/pkg/eosclient/eosbinary/eosbinary.go @@ -548,10 +548,6 @@ func (c *Client) GetAttr(ctx context.Context, auth eosclient.Authorization, key, args := []string{"attr", "get", key, path} attrOut, _, err := c.executeEOS(ctx, args, auth) if err != nil { - var exErr *exec.ExitError - if errors.As(err, &exErr) && exErr.ExitCode() == 61 { - return nil, eosclient.AttrNotExistsError - } return nil, err } attr, err := deserializeAttribute(attrOut) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index cb8b9680ee..853da4b7ec 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -564,7 +564,7 @@ func (fs *eosfs) GetLock(ctx context.Context, ref *provider.Reference) (*provide // the cs3apis require to have the read permission on the resource // to get the eventual lock. - has, err := fs.userHasReadAccess(ctx, user, path) + has, err := fs.userHasReadAccess(ctx, user, ref) if err != nil { return nil, errors.Wrap(err, "eosfs: error checking read access to resource") } @@ -574,10 +574,7 @@ func (fs *eosfs) GetLock(ctx context.Context, ref *provider.Reference) (*provide attr, err := fs.c.GetAttr(ctx, auth, "user."+LockKeyAttr, path) if err != nil { - if err == eosclient.AttrNotExistsError { - return nil, errtypes.NotFound("eosfs: lock not found") - } - return nil, errors.Wrap(err, "eosfs: error getting lock value") + return nil, err } lock, err := decodeLock(attr.Val) @@ -613,23 +610,23 @@ func (fs *eosfs) SetLock(ctx context.Context, ref *provider.Reference, l *provid // to set a lock. because in eos we can set attrs even if the user does // not have the write permission, we need to check if the user that made // the request has it - has, err := fs.userHasWriteAccess(ctx, user, path) + has, err := fs.userHasWriteAccess(ctx, user, ref) if err != nil { - return errors.Wrap(err, "eosfs: cannot check if user has write access on resource") + return errors.Wrap(err, fmt.Sprintf("eosfs: cannot check if user %s has write access on resource", user.Username)) } if !has { - return errtypes.BadRequest("user has not write access on resource") + return errtypes.PermissionDenied(fmt.Sprintf("user %s has not write access on resource", user.Username)) } // the user in the lock could differ from the user in the context // in that case, also the user in the lock MUST have the write permission if l.User != nil && !utils.UserEqual(user.Id, l.User) { - has, err := fs.userIDHasWriteAccess(ctx, l.User, path) + has, err := fs.userIDHasWriteAccess(ctx, l.User, ref) if err != nil { return errors.Wrap(err, "eosfs: cannot check if user has write access on resource") } if !has { - return errtypes.BadRequest("user has not write access on resource") + return errtypes.PermissionDenied(fmt.Sprintf("user %s has not write access on resource", user.Username)) } } @@ -697,14 +694,6 @@ func (fs *eosfs) userHasReadAccess(ctx context.Context, user *userpb.User, ref * return resInfo.PermissionSet.InitiateFileDownload, nil } -func (fs *eosfs) userIDHasReadAccess(ctx context.Context, userID *userpb.UserId, ref *provider.Reference) (bool, error) { - user, err := fs.getUserFromID(ctx, userID) - if err != nil { - return false, err - } - return fs.userHasReadAccess(ctx, user, ref) -} - func encodeLock(l *provider.Lock) (string, error) { data, err := json.Marshal(l) if err != nil { @@ -763,12 +752,12 @@ func (fs *eosfs) RefreshLock(ctx context.Context, ref *provider.Reference, newLo // the cs3apis require to have the write permission on the resource // to set a lock - has, err := fs.userHasWriteAccess(ctx, user, path) + has, err := fs.userHasWriteAccess(ctx, user, ref) if err != nil { return errors.Wrap(err, "eosfs: cannot check if user has write access on resource") } if !has { - return errtypes.BadRequest("user has not write access on resource") + return errtypes.PermissionDenied(fmt.Sprintf("user %s has not write access on resource", user.Username)) } // set the xattr with the new value @@ -828,17 +817,27 @@ func (fs *eosfs) Unlock(ctx context.Context, ref *provider.Reference, lock *prov return errtypes.BadRequest("caller does not hold the lock") } - path, err := fs.resolve(ctx, ref) + user, err := getUser(ctx) if err != nil { - return errors.Wrap(err, "eosfs: error resolving reference") + return errors.Wrap(err, "eosfs: error getting user") } - path = fs.wrap(ctx, path) - user, err := getUser(ctx) + // the cs3apis require to have the write permission on the resource + // to remove the lock + has, err := fs.userHasWriteAccess(ctx, user, ref) if err != nil { - return errors.Wrap(err, "eosfs: no user in ctx") + return errors.Wrap(err, "eosfs: cannot check if user has write access on resource") + } + if !has { + return errtypes.PermissionDenied(fmt.Sprintf("user %s has not write access on resource", user.Username)) } + path, err := fs.resolve(ctx, ref) + if err != nil { + return errors.Wrap(err, "eosfs: error resolving reference") + } + path = fs.wrap(ctx, path) + auth, err := fs.getUserAuth(ctx, user, path) if err != nil { return errors.Wrap(err, "eosfs: error getting uid and gid for user") From 4e2c5bc7eca8511affd391f36bb1f195cf649c3f Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Tue, 15 Feb 2022 12:23:56 +0100 Subject: [PATCH 33/55] fix error code xrdcp --- pkg/eosclient/eosbinary/eosbinary.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/pkg/eosclient/eosbinary/eosbinary.go b/pkg/eosclient/eosbinary/eosbinary.go index e2447ca558..33061cb319 100644 --- a/pkg/eosclient/eosbinary/eosbinary.go +++ b/pkg/eosclient/eosbinary/eosbinary.go @@ -193,14 +193,15 @@ func (c *Client) executeXRDCopy(ctx context.Context, cmdArgs []string) (string, } } + // check for operation not permitted error + if strings.Contains(errBuf.String(), "Operation not permitted") { + err = errtypes.InvalidCredentials("eosclient: no sufficient permissions for the operation") + } + args := fmt.Sprintf("%s", cmd.Args) env := fmt.Sprintf("%s", cmd.Env) log.Info().Str("args", args).Str("env", env).Int("exit", exitStatus).Msg("eos cmd") - if err != nil && exitStatus != int(syscall.ENOENT) { // don't wrap the errtypes.NotFoundError - err = errors.Wrap(err, "eosclient: error while executing command") - } - return outBuf.String(), errBuf.String(), err } From ba1521bd8aaf9e151aff67b2da0ba23d9aca6eb2 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Tue, 15 Feb 2022 12:29:52 +0100 Subject: [PATCH 34/55] fix linter --- cmd/reva/setlock.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/cmd/reva/setlock.go b/cmd/reva/setlock.go index 59003ea779..9d440499db 100644 --- a/cmd/reva/setlock.go +++ b/cmd/reva/setlock.go @@ -84,17 +84,17 @@ func setlockCommand() *command { } func createLock(ctx context.Context, client gateway.GatewayAPIClient, t, id, u, app, exp string) (*provider.Lock, error) { - type_, err := getType(t) + lockType, err := getType(t) if err != nil { return nil, err } - var uId *user.UserId + var uID *user.UserId if u != "" { u, err := getUser(ctx, client, u) if err != nil { return nil, err } - uId = u.GetId() + uID = u.GetId() } var expiration *types.Timestamp if exp != "" { @@ -106,8 +106,8 @@ func createLock(ctx context.Context, client gateway.GatewayAPIClient, t, id, u, lock := provider.Lock{ LockId: id, - Type: type_, - User: uId, + Type: lockType, + User: uID, AppName: app, Expiration: expiration, } From f5330e931263e3c7c4d7bcf63ec28c1003c87f4b Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Tue, 15 Feb 2022 12:31:04 +0100 Subject: [PATCH 35/55] check before err != nil --- cmd/reva/setlock.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/reva/setlock.go b/cmd/reva/setlock.go index 9d440499db..18026bed57 100644 --- a/cmd/reva/setlock.go +++ b/cmd/reva/setlock.go @@ -134,10 +134,10 @@ func getUser(ctx context.Context, client gateway.GatewayAPIClient, u string) (*u Value: u, }) switch { - case res.Status.Code != rpc.Code_CODE_OK: - return nil, errors.New(res.Status.Message) case err != nil: return nil, err + case res.Status.Code != rpc.Code_CODE_OK: + return nil, errors.New(res.Status.Message) } return res.User, nil } From d95e1780a81ff49e08579109aa4b00f0140d1afd Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Tue, 15 Feb 2022 12:34:29 +0100 Subject: [PATCH 36/55] go mod tidy --- go.sum | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/go.sum b/go.sum index 1a73c36b8a..a499644873 100644 --- a/go.sum +++ b/go.sum @@ -147,8 +147,6 @@ github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cs3org/cato v0.0.0-20200828125504-e418fc54dd5e h1:tqSPWQeueWTKnJVMJffz4pz0o1WuQxJ28+5x5JgaHD8= github.com/cs3org/cato v0.0.0-20200828125504-e418fc54dd5e/go.mod h1:XJEZ3/EQuI3BXTp/6DUzFr850vlxq11I6satRtz0YQ4= -github.com/cs3org/go-cs3apis v0.0.0-20211214102047-7ce3134d7bf8 h1:PqOprF37OvwCbAN5W23znknGk6N/LMayqLAeP904FHE= -github.com/cs3org/go-cs3apis v0.0.0-20211214102047-7ce3134d7bf8/go.mod h1:UXha4TguuB52H14EMoSsCqDj7k8a/t7g4gVP+bgY5LY= github.com/cs3org/go-cs3apis v0.0.0-20220126114148-64c025ccdd19 h1:1jqPH58jCxvbaJ9WLIJ7W2/m622bWS6ChptzljSG6IQ= github.com/cs3org/go-cs3apis v0.0.0-20220126114148-64c025ccdd19/go.mod h1:UXha4TguuB52H14EMoSsCqDj7k8a/t7g4gVP+bgY5LY= github.com/cubewise-code/go-mime v0.0.0-20200519001935-8c5762b177d8 h1:Z9lwXumT5ACSmJ7WGnFl+OMLLjpz5uR2fyz7dC255FI= @@ -337,6 +335,7 @@ github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zV github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= From 655daf1a7c3ee06eec82d3e577c38304ac97465b Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Tue, 15 Feb 2022 15:08:23 +0100 Subject: [PATCH 37/55] fix go sum --- go.sum | 1 + 1 file changed, 1 insertion(+) diff --git a/go.sum b/go.sum index fce1de7918..54b3485d36 100644 --- a/go.sum +++ b/go.sum @@ -183,6 +183,7 @@ github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3h github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4 h1:hzAQntlaYRkVSFEfj9OTWlVV1H155FMD8BTKktLv0QI= github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= From 3ca9223970865b9e6006664f4c5ccf89024dbc76 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Tue, 15 Feb 2022 16:11:25 +0100 Subject: [PATCH 38/55] add license header --- cmd/reva/getlock.go | 18 ++++++++++++++++++ cmd/reva/setlock.go | 18 ++++++++++++++++++ cmd/reva/unlock.go | 18 ++++++++++++++++++ 3 files changed, 54 insertions(+) diff --git a/cmd/reva/getlock.go b/cmd/reva/getlock.go index a3d57ce3b1..70a61fc725 100644 --- a/cmd/reva/getlock.go +++ b/cmd/reva/getlock.go @@ -1,3 +1,21 @@ +// Copyright 2018-2021 CERN +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// In applying this license, CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + package main import ( diff --git a/cmd/reva/setlock.go b/cmd/reva/setlock.go index 18026bed57..84bc266a65 100644 --- a/cmd/reva/setlock.go +++ b/cmd/reva/setlock.go @@ -1,3 +1,21 @@ +// Copyright 2018-2021 CERN +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// In applying this license, CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + package main import ( diff --git a/cmd/reva/unlock.go b/cmd/reva/unlock.go index debce9fd44..567c0a26d5 100644 --- a/cmd/reva/unlock.go +++ b/cmd/reva/unlock.go @@ -1,3 +1,21 @@ +// Copyright 2018-2021 CERN +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// In applying this license, CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + package main import ( From 5cd7c69d7ecba86a1411776d1965dd4b1b4ad87a Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Thu, 17 Feb 2022 09:18:04 +0100 Subject: [PATCH 39/55] Deprecate use of grpc.WithInsecure method --- cmd/reva/grpc.go | 3 ++- internal/grpc/services/gateway/appprovider.go | 7 ++++--- pkg/eosclient/eosgrpc/eosgrpc.go | 3 ++- pkg/rgrpc/todo/pool/pool.go | 3 ++- pkg/sdk/session.go | 7 ++++--- 5 files changed, 14 insertions(+), 9 deletions(-) diff --git a/cmd/reva/grpc.go b/cmd/reva/grpc.go index 71282c99e6..74988d9f88 100644 --- a/cmd/reva/grpc.go +++ b/cmd/reva/grpc.go @@ -30,6 +30,7 @@ import ( rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" ctxpkg "github.com/cs3org/reva/pkg/ctx" "google.golang.org/grpc" + ins "google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/metadata" ) @@ -56,7 +57,7 @@ func getClient() (gateway.GatewayAPIClient, error) { func getConn() (*grpc.ClientConn, error) { if insecure { - return grpc.Dial(conf.Host, grpc.WithInsecure()) + return grpc.Dial(conf.Host, grpc.WithTransportCredentials(ins.NewCredentials())) } // TODO(labkode): if in the future we want client-side certificate validation, diff --git a/internal/grpc/services/gateway/appprovider.go b/internal/grpc/services/gateway/appprovider.go index cbcad414c2..2b2a2da356 100644 --- a/internal/grpc/services/gateway/appprovider.go +++ b/internal/grpc/services/gateway/appprovider.go @@ -40,6 +40,7 @@ import ( "github.com/pkg/errors" "google.golang.org/grpc" "google.golang.org/grpc/credentials" + "google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/metadata" ) @@ -308,9 +309,9 @@ func getGRPCConfig(opaque *typespb.Opaque) (bool, bool) { return insecure, skipVerify } -func getConn(host string, insecure, skipverify bool) (*grpc.ClientConn, error) { - if insecure { - return grpc.Dial(host, grpc.WithInsecure()) +func getConn(host string, ins, skipverify bool) (*grpc.ClientConn, error) { + if ins { + return grpc.Dial(host, grpc.WithTransportCredentials(insecure.NewCredentials())) } // TODO(labkode): if in the future we want client-side certificate validation, diff --git a/pkg/eosclient/eosgrpc/eosgrpc.go b/pkg/eosclient/eosgrpc/eosgrpc.go index c054068bd9..47bd3c4a7f 100644 --- a/pkg/eosclient/eosgrpc/eosgrpc.go +++ b/pkg/eosclient/eosgrpc/eosgrpc.go @@ -44,6 +44,7 @@ import ( "github.com/pkg/errors" "github.com/rs/zerolog/log" "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" ) const ( @@ -134,7 +135,7 @@ func newgrpc(ctx context.Context, opt *Options) (erpc.EosClient, error) { log := appctx.GetLogger(ctx) log.Info().Str("Setting up GRPC towards ", "'"+opt.GrpcURI+"'").Msg("") - conn, err := grpc.Dial(opt.GrpcURI, grpc.WithInsecure()) + conn, err := grpc.Dial(opt.GrpcURI, grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { log.Warn().Str("Error connecting to ", "'"+opt.GrpcURI+"' ").Str("err", err.Error()).Msg("") } diff --git a/pkg/rgrpc/todo/pool/pool.go b/pkg/rgrpc/todo/pool/pool.go index b2c94b1219..80b751c19d 100644 --- a/pkg/rgrpc/todo/pool/pool.go +++ b/pkg/rgrpc/todo/pool/pool.go @@ -43,6 +43,7 @@ import ( rtrace "github.com/cs3org/reva/pkg/trace" "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc" "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" ) type provider struct { @@ -89,7 +90,7 @@ var ( func NewConn(endpoint string) (*grpc.ClientConn, error) { conn, err := grpc.Dial( endpoint, - grpc.WithInsecure(), + grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(maxCallRecvMsgSize), ), diff --git a/pkg/sdk/session.go b/pkg/sdk/session.go index 6e451bd00c..c940114e47 100644 --- a/pkg/sdk/session.go +++ b/pkg/sdk/session.go @@ -28,6 +28,7 @@ import ( gateway "github.com/cs3org/go-cs3apis/cs3/gateway/v1beta1" "google.golang.org/grpc" "google.golang.org/grpc/credentials" + "google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/metadata" "github.com/cs3org/reva/pkg/sdk/common" @@ -60,9 +61,9 @@ func (session *Session) Initiate(host string, insecure bool) error { return nil } -func (session *Session) getConnection(host string, insecure bool) (*grpc.ClientConn, error) { - if insecure { - return grpc.Dial(host, grpc.WithInsecure()) +func (session *Session) getConnection(host string, ins bool) (*grpc.ClientConn, error) { + if ins { + return grpc.Dial(host, grpc.WithTransportCredentials(insecure.NewCredentials())) } tlsconf := &tls.Config{InsecureSkipVerify: false} From 6aa3b64ad5a461dc117222c5e968dca373c0fd55 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Thu, 17 Feb 2022 11:52:35 +0100 Subject: [PATCH 40/55] fix linter --- cmd/reva/getlock.go | 4 +--- pkg/eosclient/eosbinary/eosbinary.go | 5 +---- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/cmd/reva/getlock.go b/cmd/reva/getlock.go index 70a61fc725..b4d501354c 100644 --- a/cmd/reva/getlock.go +++ b/cmd/reva/getlock.go @@ -33,9 +33,7 @@ func getlockCommand() *command { cmd.Description = func() string { return "get a lock on a resource" } cmd.Usage = func() string { return "Usage: getlock " } - cmd.ResetFlags = func() { - return - } + cmd.ResetFlags = func() {} cmd.Action = func(w ...io.Writer) error { if cmd.NArg() < 1 { diff --git a/pkg/eosclient/eosbinary/eosbinary.go b/pkg/eosclient/eosbinary/eosbinary.go index 196936f214..25ba73e89d 100644 --- a/pkg/eosclient/eosbinary/eosbinary.go +++ b/pkg/eosclient/eosbinary/eosbinary.go @@ -351,10 +351,7 @@ func (c *Client) RemoveACL(ctx context.Context, auth, rootAuth eosclient.Authori Key: lwShareAttrKey, Val: sysACL, } - if err = c.SetAttr(ctx, auth, sysACLAttr, false, finfo.IsDir, path); err != nil { - return err - } - return nil + return c.SetAttr(ctx, auth, sysACLAttr, false, finfo.IsDir, path) } sysACL := a.CitrineSerialize() From 1f20035e1e02de1eb18ac3ac019434a1627a8d56 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Thu, 31 Mar 2022 14:31:47 +0200 Subject: [PATCH 41/55] Implemented expiration for GetLock --- pkg/storage/utils/eosfs/eosfs.go | 74 ++++++++++++++++++++++++++++---- 1 file changed, 66 insertions(+), 8 deletions(-) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index 82b689e0c3..9b176926a3 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -71,8 +71,14 @@ const ( UserAttr ) -// LockKeyAttr is the key in the xattr for sp -const LockKeyAttr = "iop.lock" +// LockPayloadKey is the key in the xattr for lock payload +const LockPayloadKey = "reva.lock.payload" + +// LockExpirationKey is the key in the xattr for lock expiration +const LockExpirationKey = "reva.lock.payload" + +// LockTypeKey is the key in the xattr for lock payload +const LockTypeKey = "reva.lock.payload" var hiddenReg = regexp.MustCompile(`\.sys\..#.`) @@ -517,7 +523,8 @@ func (fs *eosfs) SetArbitraryMetadata(ctx context.Context, ref *provider.Referen return errtypes.BadRequest(fmt.Sprintf("eosfs: key or value is empty: key:%s, value:%s", k, v)) } - if k == LockKeyAttr { + // do not allow to set a lock key attr + if k == LockPayloadKey || k == LockExpirationKey || k == LockTypeKey { return errtypes.BadRequest(fmt.Sprintf("eosfs: key %s not allowed", k)) } @@ -567,6 +574,55 @@ func (fs *eosfs) UnsetArbitraryMetadata(ctx context.Context, ref *provider.Refer return nil } +func (fs *eosfs) getLockExpiration(ctx context.Context, auth eosclient.Authorization, path string) (*types.Timestamp, bool, error) { + expiration, err := fs.c.GetAttr(ctx, auth, "sys."+LockExpirationKey, path) + if err != nil { + return nil, false, err + } + // the expiration value should be unix time encoded + unixTime, err := strconv.ParseInt(expiration.Val, 10, 64) + if err != nil { + return nil, false, errors.Wrap(err, "eosfs: error converting unix time") + } + t := time.Unix(unixTime, 0) + timestamp := &types.Timestamp{ + Seconds: uint64(unixTime), + } + return timestamp, t.Before(time.Now()), nil +} + +func (fs *eosfs) getLockContent(ctx context.Context, auth eosclient.Authorization, path string, expiration *types.Timestamp) (*provider.Lock, error) { + t, err := fs.c.GetAttr(ctx, auth, "sys."+LockTypeKey, path) + if err != nil { + return nil, err + } + lockType, err := strconv.ParseUint(t.Val, 10, 64) + if err != nil { + return nil, errors.Wrap(err, "eosfs: error decoding lock type") + } + + d, err := fs.c.GetAttr(ctx, auth, "sys."+LockPayloadKey, path) + if err != nil { + return nil, err + } + + data, err := b64.StdEncoding.DecodeString(d.Val) + if err != nil { + return nil, err + } + l := new(provider.Lock) + err = json.Unmarshal(data, l) + if err != nil { + return nil, err + } + + l.Type = provider.LockType(lockType) + l.Expiration = expiration + + return l, nil + +} + // GetLock returns an existing lock on the given reference func (fs *eosfs) GetLock(ctx context.Context, ref *provider.Reference) (*provider.Lock, error) { path, err := fs.resolve(ctx, ref) @@ -594,17 +650,19 @@ func (fs *eosfs) GetLock(ctx context.Context, ref *provider.Reference) (*provide return nil, errtypes.BadRequest("user has not read access on resource") } - attr, err := fs.c.GetAttr(ctx, auth, "user."+LockKeyAttr, path) + expiration, valid, err := fs.getLockExpiration(ctx, auth, path) if err != nil { return nil, err } - lock, err := decodeLock(attr.Val) - if err != nil { - return nil, errors.Wrap(err, "eosfs: error decoding attr value") + if !valid { + // the previous lock expired + // at this point we could leave the value in the attribute + // as the next SetLock will reset a new value + return nil, errtypes.NotFound("lock not found for ref") } - return lock, nil + return fs.getLockContent(ctx, auth, path, expiration) } // SetLock puts a lock on the given reference From ef9adacd487d43ec50dd15497f034d9b2c1de311 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Thu, 31 Mar 2022 15:07:41 +0200 Subject: [PATCH 42/55] implemented SetLock with expiration time --- pkg/storage/utils/eosfs/eosfs.go | 127 ++++++++++++++++++++++++------- 1 file changed, 98 insertions(+), 29 deletions(-) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index 9b176926a3..066b07a47e 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -623,23 +623,35 @@ func (fs *eosfs) getLockContent(ctx context.Context, auth eosclient.Authorizatio } -// GetLock returns an existing lock on the given reference -func (fs *eosfs) GetLock(ctx context.Context, ref *provider.Reference) (*provider.Lock, error) { - path, err := fs.resolve(ctx, ref) +func (fs *eosfs) removeLockAttrs(ctx context.Context, auth eosclient.Authorization, path string) error { + err := fs.c.UnsetAttr(ctx, auth, &eosclient.Attribute{ + Type: SystemAttr, + Key: LockExpirationKey, + }, false, path) if err != nil { - return nil, errors.Wrap(err, "eosfs: error resolving reference") + return errors.Wrap(err, "eosfs: error unsetting the lock expiration") } - path = fs.wrap(ctx, path) - user, err := getUser(ctx) + err = fs.c.UnsetAttr(ctx, auth, &eosclient.Attribute{ + Type: SystemAttr, + Key: LockTypeKey, + }, false, path) if err != nil { - return nil, errors.Wrap(err, "eosfs: no user in ctx") + return errors.Wrap(err, "eosfs: error unsetting the lock type") } - auth, err := fs.getUserAuth(ctx, user, path) + + err = fs.c.UnsetAttr(ctx, auth, &eosclient.Attribute{ + Type: SystemAttr, + Key: LockPayloadKey, + }, false, path) if err != nil { - return nil, errors.Wrap(err, "eosfs: error getting uid and gid for user") + return errors.Wrap(err, "eosfs: error unsetting the lock payload") } + return nil +} + +func (fs *eosfs) getLock(ctx context.Context, auth eosclient.Authorization, user *userpb.User, path string, ref *provider.Reference) (*provider.Lock, error) { // the cs3apis require to have the read permission on the resource // to get the eventual lock. has, err := fs.userHasReadAccess(ctx, user, ref) @@ -657,14 +669,76 @@ func (fs *eosfs) GetLock(ctx context.Context, ref *provider.Reference) (*provide if !valid { // the previous lock expired - // at this point we could leave the value in the attribute - // as the next SetLock will reset a new value + if err := fs.removeLockAttrs(ctx, auth, path); err != nil { + return nil, err + } return nil, errtypes.NotFound("lock not found for ref") } return fs.getLockContent(ctx, auth, path, expiration) } +// GetLock returns an existing lock on the given reference +func (fs *eosfs) GetLock(ctx context.Context, ref *provider.Reference) (*provider.Lock, error) { + path, err := fs.resolve(ctx, ref) + if err != nil { + return nil, errors.Wrap(err, "eosfs: error resolving reference") + } + path = fs.wrap(ctx, path) + + user, err := getUser(ctx) + if err != nil { + return nil, errors.Wrap(err, "eosfs: no user in ctx") + } + auth, err := fs.getUserAuth(ctx, user, path) + if err != nil { + return nil, errors.Wrap(err, "eosfs: error getting uid and gid for user") + } + + return fs.getLock(ctx, auth, user, path, ref) +} + +func (fs *eosfs) setLock(ctx context.Context, auth eosclient.Authorization, lock *provider.Lock, path string) error { + encodedLock, err := encodeLock(lock) + if err != nil { + return errors.Wrap(err, "eosfs: error encoding lock") + } + + // set expiration + err = fs.c.SetAttr(ctx, auth, &eosclient.Attribute{ + Type: SystemAttr, + Key: LockExpirationKey, + Val: strconv.FormatUint(lock.Expiration.Seconds, 10), + }, true, false, path) + switch { + case errors.Is(err, eosclient.AttrAlreadyExistsError): + return errtypes.BadRequest("lock already set") + default: + return err + } + + // set lock type + err = fs.c.SetAttr(ctx, auth, &eosclient.Attribute{ + Type: SystemAttr, + Key: LockTypeKey, + Val: strconv.FormatUint(uint64(lock.Type), 10), + }, false, false, path) + if err != nil { + return errors.Wrap(err, "eosfs: error setting lock type") + } + + // set payload + err = fs.c.SetAttr(ctx, auth, &eosclient.Attribute{ + Type: SystemAttr, + Key: LockPayloadKey, + Val: encodedLock, + }, false, false, path) + if err != nil { + return errors.Wrap(err, "eosfs: error setting lock payload") + } + return nil +} + // SetLock puts a lock on the given reference func (fs *eosfs) SetLock(ctx context.Context, ref *provider.Reference, l *provider.Lock) error { if l.Type == provider.LockType_LOCK_TYPE_SHARED { @@ -686,6 +760,18 @@ func (fs *eosfs) SetLock(ctx context.Context, ref *provider.Reference, l *provid return errors.Wrap(err, "eosfs: error getting uid and gid for user") } + _, err = fs.getLock(ctx, auth, user, path, ref) + if err != nil { + // if the err is NotFound it is fine, otherwise we have to return + if _, ok := err.(errtypes.NotFound); !ok { + return err + } + } + if err == nil { + // the resource is already locked + return errtypes.BadRequest("resource already locked") + } + // the cs3apis require to have the write permission on the resource // to set a lock. because in eos we can set attrs even if the user does // not have the write permission, we need to check if the user that made @@ -710,24 +796,7 @@ func (fs *eosfs) SetLock(ctx context.Context, ref *provider.Reference, l *provid } } - encodedLock, err := encodeLock(l) - if err != nil { - return errors.Wrap(err, "eosfs: error encoding lock") - } - - attr := &eosclient.Attribute{ - Type: UserAttr, - Key: LockKeyAttr, - Val: encodedLock, - } - - err = fs.c.SetAttr(ctx, auth, attr, true, false, path) - switch { - case errors.Is(err, eosclient.AttrAlreadyExistsError): - return errtypes.BadRequest("lock already set") - default: - return err - } + return fs.setLock(ctx, auth, l, path) } func (fs *eosfs) getUserFromID(ctx context.Context, userID *userpb.UserId) (*userpb.User, error) { From 0b6f1ac4eed2c5ac65aed0f324249ab15e820938 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Thu, 31 Mar 2022 15:09:22 +0200 Subject: [PATCH 43/55] implemented refresh lock and unlock --- pkg/storage/utils/eosfs/eosfs.go | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index 066b07a47e..53a53f1f60 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -915,18 +915,7 @@ func (fs *eosfs) RefreshLock(ctx context.Context, ref *provider.Reference, newLo return errors.Wrap(err, "eosfs: error getting uid and gid for user") } - encodedLock, err := encodeLock(newLock) - if err != nil { - return errors.Wrap(err, "eosfs: error encoding lock") - } - - attr := &eosclient.Attribute{ - Type: UserAttr, - Key: LockKeyAttr, - Val: encodedLock, - } - - return fs.c.SetAttr(ctx, auth, attr, false, false, path) + return fs.setLock(ctx, auth, newLock, path) } func sameHolder(l1, l2 *provider.Lock) bool { @@ -991,7 +980,7 @@ func (fs *eosfs) Unlock(ctx context.Context, ref *provider.Reference, lock *prov if err != nil { return errors.Wrap(err, "eosfs: error getting uid and gid for user") } - return fs.c.UnsetAttr(ctx, auth, &eosclient.Attribute{Type: UserAttr, Key: LockKeyAttr}, false, path) + return fs.removeLockAttrs(ctx, auth, path) } func (fs *eosfs) AddGrant(ctx context.Context, ref *provider.Reference, g *provider.Grant) error { From ac0faa0e5eb4d797f22651529e83564559ae3b71 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Thu, 31 Mar 2022 15:10:32 +0200 Subject: [PATCH 44/55] remove sys lock from stat --- pkg/storage/utils/eosfs/eosfs.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index 53a53f1f60..9085b3dcef 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -2183,7 +2183,7 @@ func (fs *eosfs) convert(ctx context.Context, eosFileInfo *eosclient.FileInfo) ( // filter 'sys' attrs and the reserved lock filteredAttrs := make(map[string]string) for k, v := range eosFileInfo.Attrs { - if !strings.HasPrefix(k, "sys") && k != "user."+LockKeyAttr { + if !strings.HasPrefix(k, "sys") { filteredAttrs[k] = v } } From 81ec6206955d300c98026db429adfd7b7e7d10d6 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Thu, 7 Apr 2022 12:54:27 +0200 Subject: [PATCH 45/55] fix expiration set when not provided --- pkg/storage/utils/eosfs/eosfs.go | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index 9085b3dcef..b82044732d 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -577,6 +577,11 @@ func (fs *eosfs) UnsetArbitraryMetadata(ctx context.Context, ref *provider.Refer func (fs *eosfs) getLockExpiration(ctx context.Context, auth eosclient.Authorization, path string) (*types.Timestamp, bool, error) { expiration, err := fs.c.GetAttr(ctx, auth, "sys."+LockExpirationKey, path) if err != nil { + // since the expiration is optional, if we do not find it in the attr + // just return a nil value, without reporting the error + if _, ok := err.(errtypes.NotFound); ok { + return nil, true, nil + } return nil, false, err } // the expiration value should be unix time encoded @@ -704,17 +709,19 @@ func (fs *eosfs) setLock(ctx context.Context, auth eosclient.Authorization, lock return errors.Wrap(err, "eosfs: error encoding lock") } - // set expiration - err = fs.c.SetAttr(ctx, auth, &eosclient.Attribute{ - Type: SystemAttr, - Key: LockExpirationKey, - Val: strconv.FormatUint(lock.Expiration.Seconds, 10), - }, true, false, path) - switch { - case errors.Is(err, eosclient.AttrAlreadyExistsError): - return errtypes.BadRequest("lock already set") - default: - return err + if lock.Expiration != nil { + // set expiration + err = fs.c.SetAttr(ctx, auth, &eosclient.Attribute{ + Type: SystemAttr, + Key: LockExpirationKey, + Val: strconv.FormatUint(lock.Expiration.Seconds, 10), + }, true, false, path) + switch { + case errors.Is(err, eosclient.AttrAlreadyExistsError): + return errtypes.BadRequest("lock already set") + case err != nil: + return err + } } // set lock type From eefd2710299723468cacc95b3223be636840eeac Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Thu, 7 Apr 2022 14:26:49 +0200 Subject: [PATCH 46/55] fix GetAttr --- pkg/eosclient/eosbinary/eosbinary.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/pkg/eosclient/eosbinary/eosbinary.go b/pkg/eosclient/eosbinary/eosbinary.go index 25ba73e89d..b12a54be81 100644 --- a/pkg/eosclient/eosbinary/eosbinary.go +++ b/pkg/eosclient/eosbinary/eosbinary.go @@ -622,6 +622,17 @@ func (c *Client) UnsetAttr(ctx context.Context, auth eosclient.Authorization, at // GetAttr returns the attribute specified by key func (c *Client) GetAttr(ctx context.Context, auth eosclient.Authorization, key, path string) (*eosclient.Attribute, error) { + + // As SetAttr set the attr on the version folder, we will read the attribute on it + // if the resource is not a folder + info, err := c.getRawFileInfoByPath(ctx, auth, path) + if err != nil { + return nil, err + } + if !info.IsDir { + path = getVersionFolder(path) + } + args := []string{"attr", "get", key, path} attrOut, _, err := c.executeEOS(ctx, args, auth) if err != nil { From d57e321a6aaa04eb6e3985de1c6cd8bd9cdbaaad Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Thu, 7 Apr 2022 14:31:33 +0200 Subject: [PATCH 47/55] fix lock keys --- pkg/storage/utils/eosfs/eosfs.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index b82044732d..709e224db4 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -75,10 +75,10 @@ const ( const LockPayloadKey = "reva.lock.payload" // LockExpirationKey is the key in the xattr for lock expiration -const LockExpirationKey = "reva.lock.payload" +const LockExpirationKey = "reva.lock.expiration" // LockTypeKey is the key in the xattr for lock payload -const LockTypeKey = "reva.lock.payload" +const LockTypeKey = "reva.lock.type" var hiddenReg = regexp.MustCompile(`\.sys\..#.`) From 0a316aa64f24824d88d96744523afa86aac0881c Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Thu, 7 Apr 2022 14:40:39 +0200 Subject: [PATCH 48/55] discard attr not set when unlocking if expiration was not set --- pkg/storage/utils/eosfs/eosfs.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index 709e224db4..a61ec7f573 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -634,7 +634,11 @@ func (fs *eosfs) removeLockAttrs(ctx context.Context, auth eosclient.Authorizati Key: LockExpirationKey, }, false, path) if err != nil { - return errors.Wrap(err, "eosfs: error unsetting the lock expiration") + // as the expiration time in the lock is optional + // we will discard the error if the attr is not set + if !errors.Is(err, eosclient.AttrNotExistsError) { + return errors.Wrap(err, "eosfs: error unsetting the lock expiration") + } } err = fs.c.UnsetAttr(ctx, auth, &eosclient.Attribute{ From b8dbb9852483ea620f6ec6bb7d1af4219442f723 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Thu, 7 Apr 2022 15:10:21 +0200 Subject: [PATCH 49/55] return not found when either type or payload key in the lock is not set in GetLock function --- pkg/storage/utils/eosfs/eosfs.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index a61ec7f573..328d28d3d6 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -684,7 +684,13 @@ func (fs *eosfs) getLock(ctx context.Context, auth eosclient.Authorization, user return nil, errtypes.NotFound("lock not found for ref") } - return fs.getLockContent(ctx, auth, path, expiration) + l, err := fs.getLockContent(ctx, auth, path, expiration) + if err != nil { + if !errors.Is(err, eosclient.AttrNotExistsError) { + return nil, errtypes.NotFound("lock not found for ref") + } + } + return l, nil } // GetLock returns an existing lock on the given reference From 99e467819f27e7ef1c4b9c584ba21445c081cf30 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Thu, 7 Apr 2022 15:36:58 +0200 Subject: [PATCH 50/55] improved setlock code --- cmd/reva/setlock.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmd/reva/setlock.go b/cmd/reva/setlock.go index 84bc266a65..da85f47d4f 100644 --- a/cmd/reva/setlock.go +++ b/cmd/reva/setlock.go @@ -68,8 +68,8 @@ func setlockCommand() *command { ref := &provider.Reference{Path: fn} - if !*refreshFlag { - res, err := client.SetLock(ctx, &provider.SetLockRequest{ + if *refreshFlag { + res, err := client.RefreshLock(ctx, &provider.RefreshLockRequest{ Ref: ref, Lock: lock, }) @@ -81,7 +81,7 @@ func setlockCommand() *command { return formatError(res.Status) } } else { - res, err := client.RefreshLock(ctx, &provider.RefreshLockRequest{ + res, err := client.SetLock(ctx, &provider.SetLockRequest{ Ref: ref, Lock: lock, }) From 654c717fef8f0ec4607ff1d8589f53e12a715272 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Thu, 7 Apr 2022 15:37:08 +0200 Subject: [PATCH 51/55] fix check expiration time for lock --- pkg/storage/utils/eosfs/eosfs.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index 328d28d3d6..ed7d7db18e 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -593,7 +593,7 @@ func (fs *eosfs) getLockExpiration(ctx context.Context, auth eosclient.Authoriza timestamp := &types.Timestamp{ Seconds: uint64(unixTime), } - return timestamp, t.Before(time.Now()), nil + return timestamp, t.After(time.Now()), nil } func (fs *eosfs) getLockContent(ctx context.Context, auth eosclient.Authorization, path string, expiration *types.Timestamp) (*provider.Lock, error) { From 2af96ed46e83ee250bdb3e48e56485c8d00fce75 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Fri, 8 Apr 2022 17:44:17 +0200 Subject: [PATCH 52/55] check if attribute was already set only for SetLock --- pkg/storage/utils/eosfs/eosfs.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index ed7d7db18e..aee9bd407e 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -713,7 +713,7 @@ func (fs *eosfs) GetLock(ctx context.Context, ref *provider.Reference) (*provide return fs.getLock(ctx, auth, user, path, ref) } -func (fs *eosfs) setLock(ctx context.Context, auth eosclient.Authorization, lock *provider.Lock, path string) error { +func (fs *eosfs) setLock(ctx context.Context, auth eosclient.Authorization, lock *provider.Lock, path string, check bool) error { encodedLock, err := encodeLock(lock) if err != nil { return errors.Wrap(err, "eosfs: error encoding lock") @@ -725,7 +725,7 @@ func (fs *eosfs) setLock(ctx context.Context, auth eosclient.Authorization, lock Type: SystemAttr, Key: LockExpirationKey, Val: strconv.FormatUint(lock.Expiration.Seconds, 10), - }, true, false, path) + }, check, false, path) switch { case errors.Is(err, eosclient.AttrAlreadyExistsError): return errtypes.BadRequest("lock already set") @@ -813,7 +813,7 @@ func (fs *eosfs) SetLock(ctx context.Context, ref *provider.Reference, l *provid } } - return fs.setLock(ctx, auth, l, path) + return fs.setLock(ctx, auth, l, path, true) } func (fs *eosfs) getUserFromID(ctx context.Context, userID *userpb.UserId) (*userpb.User, error) { @@ -932,7 +932,7 @@ func (fs *eosfs) RefreshLock(ctx context.Context, ref *provider.Reference, newLo return errors.Wrap(err, "eosfs: error getting uid and gid for user") } - return fs.setLock(ctx, auth, newLock, path) + return fs.setLock(ctx, auth, newLock, path, false) } func sameHolder(l1, l2 *provider.Lock) bool { From f39dbd2ae7966dc62e3d52ebc49a98b8e848db92 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Wed, 13 Apr 2022 09:28:32 +0200 Subject: [PATCH 53/55] remove unused code --- pkg/storage/utils/eosfs/eosfs.go | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index aee9bd407e..96f615d281 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -868,19 +868,6 @@ func encodeLock(l *provider.Lock) (string, error) { return b64.StdEncoding.EncodeToString(data), nil } -func decodeLock(raw string) (*provider.Lock, error) { - data, err := b64.StdEncoding.DecodeString(raw) - if err != nil { - return nil, err - } - l := new(provider.Lock) - err = json.Unmarshal(data, l) - if err != nil { - return nil, err - } - return l, nil -} - // RefreshLock refreshes an existing lock on the given reference func (fs *eosfs) RefreshLock(ctx context.Context, ref *provider.Reference, newLock *provider.Lock) error { // TODO (gdelmont): check if the new lock is already expired? From c1abb88442be41f489afca736d899c920174e490 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Wed, 20 Apr 2022 16:32:56 +0200 Subject: [PATCH 54/55] fix after rebase --- pkg/eosclient/eosbinary/eosbinary.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/eosclient/eosbinary/eosbinary.go b/pkg/eosclient/eosbinary/eosbinary.go index b12a54be81..8e63170c4f 100644 --- a/pkg/eosclient/eosbinary/eosbinary.go +++ b/pkg/eosclient/eosbinary/eosbinary.go @@ -530,7 +530,7 @@ func (c *Client) SetAttr(ctx context.Context, auth eosclient.Authorization, attr } func (c *Client) setEOSAttr(ctx context.Context, auth eosclient.Authorization, attr *eosclient.Attribute, errorIfExists, recursive bool, path string) error { - var args []string + args := []string{"attr"} if recursive { args = append(args, "-r") } From 45bd16adfa40e40be0368200410b7f54f05ea48f Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Wed, 20 Apr 2022 16:44:39 +0200 Subject: [PATCH 55/55] Fix type lock type --- pkg/storage/utils/eosfs/eosfs.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index 96f615d281..2784b39a85 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -601,7 +601,7 @@ func (fs *eosfs) getLockContent(ctx context.Context, auth eosclient.Authorizatio if err != nil { return nil, err } - lockType, err := strconv.ParseUint(t.Val, 10, 64) + lockType, err := strconv.ParseInt(t.Val, 10, 32) if err != nil { return nil, errors.Wrap(err, "eosfs: error decoding lock type") }