From 29b576961f0c3007002bd9942bf9c21553683754 Mon Sep 17 00:00:00 2001 From: aligeti <34487396+aligeti@users.noreply.github.com> Date: Fri, 19 Jul 2019 11:17:34 -0400 Subject: [PATCH] value attribution merge fix and more test cases (#2588) * value attribution merge fix and more test cases --- go.mod | 2 +- lib/uplink/bucket_attrs_test.go | 84 +++ lib/uplink/project.go | 35 + pkg/pb/metainfo.pb.go | 670 +++++++++--------- pkg/pb/metainfo.proto | 2 + proto.lock | 10 + satellite/metainfo/db.go | 2 + satellite/metainfo/metainfo.go | 86 ++- satellite/metainfo/service.go | 6 + .../{buckets_test.go => attribution_test.go} | 17 + satellite/satellitedb/buckets.go | 49 +- satellite/satellitedb/dbx/satellitedb.dbx | 6 +- satellite/satellitedb/dbx/satellitedb.dbx.go | 201 ++++++ satellite/satellitedb/locked.go | 7 + satellite/satellitedb/projects.go | 11 +- uplink/metainfo/client.go | 41 +- 16 files changed, 867 insertions(+), 362 deletions(-) rename satellite/satellitedb/{buckets_test.go => attribution_test.go} (79%) diff --git a/go.mod b/go.mod index 43c67bbb2..4bbc9661d 100644 --- a/go.mod +++ b/go.mod @@ -115,7 +115,7 @@ require ( go.uber.org/multierr v1.1.0 // indirect go.uber.org/zap v1.10.0 golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8 - golang.org/x/net v0.0.0-20190628185345-da137c7871d7 // indirect + golang.org/x/net v0.0.0-20190628185345-da137c7871d7 golang.org/x/sync v0.0.0-20190423024810-112230192c58 golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb golang.org/x/text v0.3.2 // indirect diff --git a/lib/uplink/bucket_attrs_test.go b/lib/uplink/bucket_attrs_test.go index 21ebe4483..2483df660 100644 --- a/lib/uplink/bucket_attrs_test.go +++ b/lib/uplink/bucket_attrs_test.go @@ -15,6 +15,7 @@ import ( "storj.io/storj/internal/memory" "storj.io/storj/internal/testcontext" "storj.io/storj/internal/testplanet" + "storj.io/storj/internal/testrand" "storj.io/storj/lib/uplink" "storj.io/storj/pkg/storj" ) @@ -53,6 +54,89 @@ func testPlanetWithLibUplink(t *testing.T, cfg testConfig, }) } +// check that partner bucket attributes are stored and retrieved correctly. +func TestPartnerBucketAttrs(t *testing.T) { + var ( + access = uplink.NewEncryptionAccessWithDefaultKey(storj.Key{0, 1, 2, 3, 4}) + bucketName = "mightynein" + ) + + testplanet.Run(t, testplanet.Config{ + SatelliteCount: 1, StorageNodeCount: 5, UplinkCount: 1, + }, func(t *testing.T, ctx *testcontext.Context, planet *testplanet.Planet) { + satellite := planet.Satellites[0] + apikey, err := uplink.ParseAPIKey(planet.Uplinks[0].APIKey[satellite.ID()]) + require.NoError(t, err) + + partnerID := testrand.UUID() + + t.Run("without partner id", func(t *testing.T) { + config := uplink.Config{} + config.Volatile.TLS.SkipPeerCAWhitelist = true + + up, err := uplink.NewUplink(ctx, &config) + require.NoError(t, err) + defer ctx.Check(up.Close) + + project, err := up.OpenProject(ctx, satellite.Addr(), apikey) + require.NoError(t, err) + defer ctx.Check(project.Close) + + bucketInfo, err := project.CreateBucket(ctx, bucketName, nil) + require.NoError(t, err) + + assert.True(t, bucketInfo.PartnerID.IsZero()) + + _, err = project.CreateBucket(ctx, bucketName, nil) + require.Error(t, err) + }) + + t.Run("open with partner id", func(t *testing.T) { + config := uplink.Config{} + config.Volatile.TLS.SkipPeerCAWhitelist = true + config.Volatile.PartnerID = partnerID.String() + + up, err := uplink.NewUplink(ctx, &config) + require.NoError(t, err) + defer ctx.Check(up.Close) + + project, err := up.OpenProject(ctx, satellite.Addr(), apikey) + require.NoError(t, err) + defer ctx.Check(project.Close) + + bucket, err := project.OpenBucket(ctx, bucketName, access) + require.NoError(t, err) + defer ctx.Check(bucket.Close) + + bucketInfo, _, err := project.GetBucketInfo(ctx, bucketName) + require.NoError(t, err) + assert.Equal(t, bucketInfo.PartnerID.String(), config.Volatile.PartnerID) + }) + + t.Run("open with different partner id", func(t *testing.T) { + config := uplink.Config{} + config.Volatile.TLS.SkipPeerCAWhitelist = true + config.Volatile.PartnerID = testrand.UUID().String() + + up, err := uplink.NewUplink(ctx, &config) + require.NoError(t, err) + defer ctx.Check(up.Close) + + project, err := up.OpenProject(ctx, satellite.Addr(), apikey) + require.NoError(t, err) + defer ctx.Check(project.Close) + + bucket, err := project.OpenBucket(ctx, bucketName, access) + require.NoError(t, err) + defer ctx.Check(bucket.Close) + + bucketInfo, _, err := project.GetBucketInfo(ctx, bucketName) + require.NoError(t, err) + assert.NotEqual(t, bucketInfo.PartnerID.String(), config.Volatile.PartnerID) + }) + }) +} + // check that bucket attributes are stored and retrieved correctly. func TestBucketAttrs(t *testing.T) { var ( diff --git a/lib/uplink/project.go b/lib/uplink/project.go index e5a5d1e32..f1295e7f4 100644 --- a/lib/uplink/project.go +++ b/lib/uplink/project.go @@ -157,6 +157,26 @@ func (p *Project) OpenBucket(ctx context.Context, bucketName string, access *Enc return nil, err } + // partnerID set and bucket's attribution is not set + if p.uplinkCfg.Volatile.PartnerID != "" && bucketInfo.PartnerID.IsZero() { + // make an entry into the attribution table + err = p.checkBucketAttribution(ctx, bucketName) + if err != nil { + return nil, err + } + + partnerID, err := uuid.Parse(p.uplinkCfg.Volatile.PartnerID) + if err != nil { + return nil, Error.Wrap(err) + } + + // update the bucket metainfo table with corresponding partner info + bucketInfo.PartnerID = *partnerID + bucketInfo, err = p.updateBucket(ctx, bucketInfo) + if err != nil { + return nil, err + } + } encryptionParameters := cfg.EncryptionParameters ec := ecclient.NewClient(p.uplinkCfg.Volatile.Log.Named("ecclient"), p.tc, p.uplinkCfg.Volatile.MaxMemory.Int()) @@ -233,3 +253,18 @@ func (p *Project) checkBucketAttribution(ctx context.Context, bucketName string) return p.metainfo.SetAttribution(ctx, bucketName, *partnerID) } + +// updateBucket updates an existing bucket's attribution info. +func (p *Project) updateBucket(ctx context.Context, bucketInfo storj.Bucket) (bucket storj.Bucket, err error) { + defer mon.Task()(&ctx)(&err) + + bucket = storj.Bucket{ + Name: bucketInfo.Name, + PartnerID: bucketInfo.PartnerID, + PathCipher: bucketInfo.PathCipher, + DefaultEncryptionParameters: bucketInfo.DefaultEncryptionParameters, + DefaultRedundancyScheme: bucketInfo.DefaultRedundancyScheme, + DefaultSegmentsSize: bucketInfo.DefaultSegmentsSize, + } + return p.project.CreateBucket(ctx, bucketInfo.Name, &bucket) +} diff --git a/pkg/pb/metainfo.pb.go b/pkg/pb/metainfo.pb.go index e01175d8c..0757cb075 100644 --- a/pkg/pb/metainfo.pb.go +++ b/pkg/pb/metainfo.pb.go @@ -3,15 +3,17 @@ package pb +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "github.com/gogo/protobuf/gogoproto" +import _ "github.com/golang/protobuf/ptypes/timestamp" + +import time "time" + import ( - context "context" - fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - _ "github.com/golang/protobuf/ptypes/timestamp" + context "golang.org/x/net/context" grpc "google.golang.org/grpc" - math "math" - time "time" ) // Reference imports to suppress errors if they are not otherwise used. @@ -43,7 +45,6 @@ var Object_Status_name = map[int32]string{ 3: "COMMITTED", 4: "DELETING", } - var Object_Status_value = map[string]int32{ "INVALID": 0, "UPLOADING": 1, @@ -55,18 +56,18 @@ var Object_Status_value = map[string]int32{ func (x Object_Status) String() string { return proto.EnumName(Object_Status_name, int32(x)) } - func (Object_Status) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{29, 0} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{29, 0} } type Bucket struct { Name []byte `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` PathCipher CipherSuite `protobuf:"varint,2,opt,name=path_cipher,json=pathCipher,proto3,enum=encryption.CipherSuite" json:"path_cipher,omitempty"` - CreatedAt time.Time `protobuf:"bytes,3,opt,name=created_at,json=createdAt,proto3,stdtime" json:"created_at"` + CreatedAt time.Time `protobuf:"bytes,3,opt,name=created_at,json=createdAt,stdtime" json:"created_at"` DefaultSegmentSize int64 `protobuf:"varint,4,opt,name=default_segment_size,json=defaultSegmentSize,proto3" json:"default_segment_size,omitempty"` - DefaultRedundancyScheme *RedundancyScheme `protobuf:"bytes,5,opt,name=default_redundancy_scheme,json=defaultRedundancyScheme,proto3" json:"default_redundancy_scheme,omitempty"` - DefaultEncryptionParameters *EncryptionParameters `protobuf:"bytes,6,opt,name=default_encryption_parameters,json=defaultEncryptionParameters,proto3" json:"default_encryption_parameters,omitempty"` + DefaultRedundancyScheme *RedundancyScheme `protobuf:"bytes,5,opt,name=default_redundancy_scheme,json=defaultRedundancyScheme" json:"default_redundancy_scheme,omitempty"` + DefaultEncryptionParameters *EncryptionParameters `protobuf:"bytes,6,opt,name=default_encryption_parameters,json=defaultEncryptionParameters" json:"default_encryption_parameters,omitempty"` + PartnerId []byte `protobuf:"bytes,7,opt,name=partner_id,json=partnerId,proto3" json:"partner_id,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -76,7 +77,7 @@ func (m *Bucket) Reset() { *m = Bucket{} } func (m *Bucket) String() string { return proto.CompactTextString(m) } func (*Bucket) ProtoMessage() {} func (*Bucket) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{0} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{0} } func (m *Bucket) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Bucket.Unmarshal(m, b) @@ -84,8 +85,8 @@ func (m *Bucket) XXX_Unmarshal(b []byte) error { func (m *Bucket) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Bucket.Marshal(b, m, deterministic) } -func (m *Bucket) XXX_Merge(src proto.Message) { - xxx_messageInfo_Bucket.Merge(m, src) +func (dst *Bucket) XXX_Merge(src proto.Message) { + xxx_messageInfo_Bucket.Merge(dst, src) } func (m *Bucket) XXX_Size() int { return xxx_messageInfo_Bucket.Size(m) @@ -138,9 +139,16 @@ func (m *Bucket) GetDefaultEncryptionParameters() *EncryptionParameters { return nil } +func (m *Bucket) GetPartnerId() []byte { + if m != nil { + return m.PartnerId + } + return nil +} + type BucketListItem struct { Name []byte `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - CreatedAt time.Time `protobuf:"bytes,2,opt,name=created_at,json=createdAt,proto3,stdtime" json:"created_at"` + CreatedAt time.Time `protobuf:"bytes,2,opt,name=created_at,json=createdAt,stdtime" json:"created_at"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -150,7 +158,7 @@ func (m *BucketListItem) Reset() { *m = BucketListItem{} } func (m *BucketListItem) String() string { return proto.CompactTextString(m) } func (*BucketListItem) ProtoMessage() {} func (*BucketListItem) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{1} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{1} } func (m *BucketListItem) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BucketListItem.Unmarshal(m, b) @@ -158,8 +166,8 @@ func (m *BucketListItem) XXX_Unmarshal(b []byte) error { func (m *BucketListItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_BucketListItem.Marshal(b, m, deterministic) } -func (m *BucketListItem) XXX_Merge(src proto.Message) { - xxx_messageInfo_BucketListItem.Merge(m, src) +func (dst *BucketListItem) XXX_Merge(src proto.Message) { + xxx_messageInfo_BucketListItem.Merge(dst, src) } func (m *BucketListItem) XXX_Size() int { return xxx_messageInfo_BucketListItem.Size(m) @@ -188,8 +196,9 @@ type BucketCreateRequest struct { Name []byte `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` PathCipher CipherSuite `protobuf:"varint,2,opt,name=path_cipher,json=pathCipher,proto3,enum=encryption.CipherSuite" json:"path_cipher,omitempty"` DefaultSegmentSize int64 `protobuf:"varint,3,opt,name=default_segment_size,json=defaultSegmentSize,proto3" json:"default_segment_size,omitempty"` - DefaultRedundancyScheme *RedundancyScheme `protobuf:"bytes,4,opt,name=default_redundancy_scheme,json=defaultRedundancyScheme,proto3" json:"default_redundancy_scheme,omitempty"` - DefaultEncryptionParameters *EncryptionParameters `protobuf:"bytes,5,opt,name=default_encryption_parameters,json=defaultEncryptionParameters,proto3" json:"default_encryption_parameters,omitempty"` + DefaultRedundancyScheme *RedundancyScheme `protobuf:"bytes,4,opt,name=default_redundancy_scheme,json=defaultRedundancyScheme" json:"default_redundancy_scheme,omitempty"` + DefaultEncryptionParameters *EncryptionParameters `protobuf:"bytes,5,opt,name=default_encryption_parameters,json=defaultEncryptionParameters" json:"default_encryption_parameters,omitempty"` + PartnerId []byte `protobuf:"bytes,6,opt,name=partner_id,json=partnerId,proto3" json:"partner_id,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -199,7 +208,7 @@ func (m *BucketCreateRequest) Reset() { *m = BucketCreateRequest{} } func (m *BucketCreateRequest) String() string { return proto.CompactTextString(m) } func (*BucketCreateRequest) ProtoMessage() {} func (*BucketCreateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{2} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{2} } func (m *BucketCreateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BucketCreateRequest.Unmarshal(m, b) @@ -207,8 +216,8 @@ func (m *BucketCreateRequest) XXX_Unmarshal(b []byte) error { func (m *BucketCreateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_BucketCreateRequest.Marshal(b, m, deterministic) } -func (m *BucketCreateRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_BucketCreateRequest.Merge(m, src) +func (dst *BucketCreateRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_BucketCreateRequest.Merge(dst, src) } func (m *BucketCreateRequest) XXX_Size() int { return xxx_messageInfo_BucketCreateRequest.Size(m) @@ -254,8 +263,15 @@ func (m *BucketCreateRequest) GetDefaultEncryptionParameters() *EncryptionParame return nil } +func (m *BucketCreateRequest) GetPartnerId() []byte { + if m != nil { + return m.PartnerId + } + return nil +} + type BucketCreateResponse struct { - Bucket *Bucket `protobuf:"bytes,1,opt,name=bucket,proto3" json:"bucket,omitempty"` + Bucket *Bucket `protobuf:"bytes,1,opt,name=bucket" json:"bucket,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -265,7 +281,7 @@ func (m *BucketCreateResponse) Reset() { *m = BucketCreateResponse{} } func (m *BucketCreateResponse) String() string { return proto.CompactTextString(m) } func (*BucketCreateResponse) ProtoMessage() {} func (*BucketCreateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{3} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{3} } func (m *BucketCreateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BucketCreateResponse.Unmarshal(m, b) @@ -273,8 +289,8 @@ func (m *BucketCreateResponse) XXX_Unmarshal(b []byte) error { func (m *BucketCreateResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_BucketCreateResponse.Marshal(b, m, deterministic) } -func (m *BucketCreateResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_BucketCreateResponse.Merge(m, src) +func (dst *BucketCreateResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_BucketCreateResponse.Merge(dst, src) } func (m *BucketCreateResponse) XXX_Size() int { return xxx_messageInfo_BucketCreateResponse.Size(m) @@ -303,7 +319,7 @@ func (m *BucketGetRequest) Reset() { *m = BucketGetRequest{} } func (m *BucketGetRequest) String() string { return proto.CompactTextString(m) } func (*BucketGetRequest) ProtoMessage() {} func (*BucketGetRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{4} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{4} } func (m *BucketGetRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BucketGetRequest.Unmarshal(m, b) @@ -311,8 +327,8 @@ func (m *BucketGetRequest) XXX_Unmarshal(b []byte) error { func (m *BucketGetRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_BucketGetRequest.Marshal(b, m, deterministic) } -func (m *BucketGetRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_BucketGetRequest.Merge(m, src) +func (dst *BucketGetRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_BucketGetRequest.Merge(dst, src) } func (m *BucketGetRequest) XXX_Size() int { return xxx_messageInfo_BucketGetRequest.Size(m) @@ -331,7 +347,7 @@ func (m *BucketGetRequest) GetName() []byte { } type BucketGetResponse struct { - Bucket *Bucket `protobuf:"bytes,1,opt,name=bucket,proto3" json:"bucket,omitempty"` + Bucket *Bucket `protobuf:"bytes,1,opt,name=bucket" json:"bucket,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -341,7 +357,7 @@ func (m *BucketGetResponse) Reset() { *m = BucketGetResponse{} } func (m *BucketGetResponse) String() string { return proto.CompactTextString(m) } func (*BucketGetResponse) ProtoMessage() {} func (*BucketGetResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{5} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{5} } func (m *BucketGetResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BucketGetResponse.Unmarshal(m, b) @@ -349,8 +365,8 @@ func (m *BucketGetResponse) XXX_Unmarshal(b []byte) error { func (m *BucketGetResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_BucketGetResponse.Marshal(b, m, deterministic) } -func (m *BucketGetResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_BucketGetResponse.Merge(m, src) +func (dst *BucketGetResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_BucketGetResponse.Merge(dst, src) } func (m *BucketGetResponse) XXX_Size() int { return xxx_messageInfo_BucketGetResponse.Size(m) @@ -379,7 +395,7 @@ func (m *BucketDeleteRequest) Reset() { *m = BucketDeleteRequest{} } func (m *BucketDeleteRequest) String() string { return proto.CompactTextString(m) } func (*BucketDeleteRequest) ProtoMessage() {} func (*BucketDeleteRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{6} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{6} } func (m *BucketDeleteRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BucketDeleteRequest.Unmarshal(m, b) @@ -387,8 +403,8 @@ func (m *BucketDeleteRequest) XXX_Unmarshal(b []byte) error { func (m *BucketDeleteRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_BucketDeleteRequest.Marshal(b, m, deterministic) } -func (m *BucketDeleteRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_BucketDeleteRequest.Merge(m, src) +func (dst *BucketDeleteRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_BucketDeleteRequest.Merge(dst, src) } func (m *BucketDeleteRequest) XXX_Size() int { return xxx_messageInfo_BucketDeleteRequest.Size(m) @@ -416,7 +432,7 @@ func (m *BucketDeleteResponse) Reset() { *m = BucketDeleteResponse{} } func (m *BucketDeleteResponse) String() string { return proto.CompactTextString(m) } func (*BucketDeleteResponse) ProtoMessage() {} func (*BucketDeleteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{7} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{7} } func (m *BucketDeleteResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BucketDeleteResponse.Unmarshal(m, b) @@ -424,8 +440,8 @@ func (m *BucketDeleteResponse) XXX_Unmarshal(b []byte) error { func (m *BucketDeleteResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_BucketDeleteResponse.Marshal(b, m, deterministic) } -func (m *BucketDeleteResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_BucketDeleteResponse.Merge(m, src) +func (dst *BucketDeleteResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_BucketDeleteResponse.Merge(dst, src) } func (m *BucketDeleteResponse) XXX_Size() int { return xxx_messageInfo_BucketDeleteResponse.Size(m) @@ -449,7 +465,7 @@ func (m *BucketListRequest) Reset() { *m = BucketListRequest{} } func (m *BucketListRequest) String() string { return proto.CompactTextString(m) } func (*BucketListRequest) ProtoMessage() {} func (*BucketListRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{8} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{8} } func (m *BucketListRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BucketListRequest.Unmarshal(m, b) @@ -457,8 +473,8 @@ func (m *BucketListRequest) XXX_Unmarshal(b []byte) error { func (m *BucketListRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_BucketListRequest.Marshal(b, m, deterministic) } -func (m *BucketListRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_BucketListRequest.Merge(m, src) +func (dst *BucketListRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_BucketListRequest.Merge(dst, src) } func (m *BucketListRequest) XXX_Size() int { return xxx_messageInfo_BucketListRequest.Size(m) @@ -491,7 +507,7 @@ func (m *BucketListRequest) GetDirection() int32 { } type BucketListResponse struct { - Items []*BucketListItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + Items []*BucketListItem `protobuf:"bytes,1,rep,name=items" json:"items,omitempty"` More bool `protobuf:"varint,2,opt,name=more,proto3" json:"more,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -502,7 +518,7 @@ func (m *BucketListResponse) Reset() { *m = BucketListResponse{} } func (m *BucketListResponse) String() string { return proto.CompactTextString(m) } func (*BucketListResponse) ProtoMessage() {} func (*BucketListResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{9} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{9} } func (m *BucketListResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BucketListResponse.Unmarshal(m, b) @@ -510,8 +526,8 @@ func (m *BucketListResponse) XXX_Unmarshal(b []byte) error { func (m *BucketListResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_BucketListResponse.Marshal(b, m, deterministic) } -func (m *BucketListResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_BucketListResponse.Merge(m, src) +func (dst *BucketListResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_BucketListResponse.Merge(dst, src) } func (m *BucketListResponse) XXX_Size() int { return xxx_messageInfo_BucketListResponse.Size(m) @@ -548,7 +564,7 @@ func (m *BucketSetAttributionRequest) Reset() { *m = BucketSetAttributio func (m *BucketSetAttributionRequest) String() string { return proto.CompactTextString(m) } func (*BucketSetAttributionRequest) ProtoMessage() {} func (*BucketSetAttributionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{10} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{10} } func (m *BucketSetAttributionRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BucketSetAttributionRequest.Unmarshal(m, b) @@ -556,8 +572,8 @@ func (m *BucketSetAttributionRequest) XXX_Unmarshal(b []byte) error { func (m *BucketSetAttributionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_BucketSetAttributionRequest.Marshal(b, m, deterministic) } -func (m *BucketSetAttributionRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_BucketSetAttributionRequest.Merge(m, src) +func (dst *BucketSetAttributionRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_BucketSetAttributionRequest.Merge(dst, src) } func (m *BucketSetAttributionRequest) XXX_Size() int { return xxx_messageInfo_BucketSetAttributionRequest.Size(m) @@ -592,7 +608,7 @@ func (m *BucketSetAttributionResponse) Reset() { *m = BucketSetAttributi func (m *BucketSetAttributionResponse) String() string { return proto.CompactTextString(m) } func (*BucketSetAttributionResponse) ProtoMessage() {} func (*BucketSetAttributionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{11} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{11} } func (m *BucketSetAttributionResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BucketSetAttributionResponse.Unmarshal(m, b) @@ -600,8 +616,8 @@ func (m *BucketSetAttributionResponse) XXX_Unmarshal(b []byte) error { func (m *BucketSetAttributionResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_BucketSetAttributionResponse.Marshal(b, m, deterministic) } -func (m *BucketSetAttributionResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_BucketSetAttributionResponse.Merge(m, src) +func (dst *BucketSetAttributionResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_BucketSetAttributionResponse.Merge(dst, src) } func (m *BucketSetAttributionResponse) XXX_Size() int { return xxx_messageInfo_BucketSetAttributionResponse.Size(m) @@ -613,8 +629,8 @@ func (m *BucketSetAttributionResponse) XXX_DiscardUnknown() { var xxx_messageInfo_BucketSetAttributionResponse proto.InternalMessageInfo type AddressedOrderLimit struct { - Limit *OrderLimit `protobuf:"bytes,1,opt,name=limit,proto3" json:"limit,omitempty"` - StorageNodeAddress *NodeAddress `protobuf:"bytes,2,opt,name=storage_node_address,json=storageNodeAddress,proto3" json:"storage_node_address,omitempty"` + Limit *OrderLimit `protobuf:"bytes,1,opt,name=limit" json:"limit,omitempty"` + StorageNodeAddress *NodeAddress `protobuf:"bytes,2,opt,name=storage_node_address,json=storageNodeAddress" json:"storage_node_address,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -624,7 +640,7 @@ func (m *AddressedOrderLimit) Reset() { *m = AddressedOrderLimit{} } func (m *AddressedOrderLimit) String() string { return proto.CompactTextString(m) } func (*AddressedOrderLimit) ProtoMessage() {} func (*AddressedOrderLimit) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{12} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{12} } func (m *AddressedOrderLimit) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AddressedOrderLimit.Unmarshal(m, b) @@ -632,8 +648,8 @@ func (m *AddressedOrderLimit) XXX_Unmarshal(b []byte) error { func (m *AddressedOrderLimit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_AddressedOrderLimit.Marshal(b, m, deterministic) } -func (m *AddressedOrderLimit) XXX_Merge(src proto.Message) { - xxx_messageInfo_AddressedOrderLimit.Merge(m, src) +func (dst *AddressedOrderLimit) XXX_Merge(src proto.Message) { + xxx_messageInfo_AddressedOrderLimit.Merge(dst, src) } func (m *AddressedOrderLimit) XXX_Size() int { return xxx_messageInfo_AddressedOrderLimit.Size(m) @@ -662,9 +678,9 @@ type SegmentWriteRequestOld struct { Bucket []byte `protobuf:"bytes,1,opt,name=bucket,proto3" json:"bucket,omitempty"` Path []byte `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` Segment int64 `protobuf:"varint,3,opt,name=segment,proto3" json:"segment,omitempty"` - Redundancy *RedundancyScheme `protobuf:"bytes,4,opt,name=redundancy,proto3" json:"redundancy,omitempty"` + Redundancy *RedundancyScheme `protobuf:"bytes,4,opt,name=redundancy" json:"redundancy,omitempty"` MaxEncryptedSegmentSize int64 `protobuf:"varint,5,opt,name=max_encrypted_segment_size,json=maxEncryptedSegmentSize,proto3" json:"max_encrypted_segment_size,omitempty"` - Expiration time.Time `protobuf:"bytes,6,opt,name=expiration,proto3,stdtime" json:"expiration"` + Expiration time.Time `protobuf:"bytes,6,opt,name=expiration,stdtime" json:"expiration"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -674,7 +690,7 @@ func (m *SegmentWriteRequestOld) Reset() { *m = SegmentWriteRequestOld{} func (m *SegmentWriteRequestOld) String() string { return proto.CompactTextString(m) } func (*SegmentWriteRequestOld) ProtoMessage() {} func (*SegmentWriteRequestOld) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{13} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{13} } func (m *SegmentWriteRequestOld) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SegmentWriteRequestOld.Unmarshal(m, b) @@ -682,8 +698,8 @@ func (m *SegmentWriteRequestOld) XXX_Unmarshal(b []byte) error { func (m *SegmentWriteRequestOld) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SegmentWriteRequestOld.Marshal(b, m, deterministic) } -func (m *SegmentWriteRequestOld) XXX_Merge(src proto.Message) { - xxx_messageInfo_SegmentWriteRequestOld.Merge(m, src) +func (dst *SegmentWriteRequestOld) XXX_Merge(src proto.Message) { + xxx_messageInfo_SegmentWriteRequestOld.Merge(dst, src) } func (m *SegmentWriteRequestOld) XXX_Size() int { return xxx_messageInfo_SegmentWriteRequestOld.Size(m) @@ -737,7 +753,7 @@ func (m *SegmentWriteRequestOld) GetExpiration() time.Time { } type SegmentWriteResponseOld struct { - AddressedLimits []*AddressedOrderLimit `protobuf:"bytes,1,rep,name=addressed_limits,json=addressedLimits,proto3" json:"addressed_limits,omitempty"` + AddressedLimits []*AddressedOrderLimit `protobuf:"bytes,1,rep,name=addressed_limits,json=addressedLimits" json:"addressed_limits,omitempty"` RootPieceId PieceID `protobuf:"bytes,2,opt,name=root_piece_id,json=rootPieceId,proto3,customtype=PieceID" json:"root_piece_id"` PrivateKey PiecePrivateKey `protobuf:"bytes,3,opt,name=private_key,json=privateKey,proto3,customtype=PiecePrivateKey" json:"private_key"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -749,7 +765,7 @@ func (m *SegmentWriteResponseOld) Reset() { *m = SegmentWriteResponseOld func (m *SegmentWriteResponseOld) String() string { return proto.CompactTextString(m) } func (*SegmentWriteResponseOld) ProtoMessage() {} func (*SegmentWriteResponseOld) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{14} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{14} } func (m *SegmentWriteResponseOld) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SegmentWriteResponseOld.Unmarshal(m, b) @@ -757,8 +773,8 @@ func (m *SegmentWriteResponseOld) XXX_Unmarshal(b []byte) error { func (m *SegmentWriteResponseOld) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SegmentWriteResponseOld.Marshal(b, m, deterministic) } -func (m *SegmentWriteResponseOld) XXX_Merge(src proto.Message) { - xxx_messageInfo_SegmentWriteResponseOld.Merge(m, src) +func (dst *SegmentWriteResponseOld) XXX_Merge(src proto.Message) { + xxx_messageInfo_SegmentWriteResponseOld.Merge(dst, src) } func (m *SegmentWriteResponseOld) XXX_Size() int { return xxx_messageInfo_SegmentWriteResponseOld.Size(m) @@ -780,8 +796,8 @@ type SegmentCommitRequestOld struct { Bucket []byte `protobuf:"bytes,1,opt,name=bucket,proto3" json:"bucket,omitempty"` Path []byte `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` Segment int64 `protobuf:"varint,3,opt,name=segment,proto3" json:"segment,omitempty"` - Pointer *Pointer `protobuf:"bytes,4,opt,name=pointer,proto3" json:"pointer,omitempty"` - OriginalLimits []*OrderLimit `protobuf:"bytes,5,rep,name=original_limits,json=originalLimits,proto3" json:"original_limits,omitempty"` + Pointer *Pointer `protobuf:"bytes,4,opt,name=pointer" json:"pointer,omitempty"` + OriginalLimits []*OrderLimit `protobuf:"bytes,5,rep,name=original_limits,json=originalLimits" json:"original_limits,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -791,7 +807,7 @@ func (m *SegmentCommitRequestOld) Reset() { *m = SegmentCommitRequestOld func (m *SegmentCommitRequestOld) String() string { return proto.CompactTextString(m) } func (*SegmentCommitRequestOld) ProtoMessage() {} func (*SegmentCommitRequestOld) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{15} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{15} } func (m *SegmentCommitRequestOld) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SegmentCommitRequestOld.Unmarshal(m, b) @@ -799,8 +815,8 @@ func (m *SegmentCommitRequestOld) XXX_Unmarshal(b []byte) error { func (m *SegmentCommitRequestOld) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SegmentCommitRequestOld.Marshal(b, m, deterministic) } -func (m *SegmentCommitRequestOld) XXX_Merge(src proto.Message) { - xxx_messageInfo_SegmentCommitRequestOld.Merge(m, src) +func (dst *SegmentCommitRequestOld) XXX_Merge(src proto.Message) { + xxx_messageInfo_SegmentCommitRequestOld.Merge(dst, src) } func (m *SegmentCommitRequestOld) XXX_Size() int { return xxx_messageInfo_SegmentCommitRequestOld.Size(m) @@ -847,7 +863,7 @@ func (m *SegmentCommitRequestOld) GetOriginalLimits() []*OrderLimit { } type SegmentCommitResponseOld struct { - Pointer *Pointer `protobuf:"bytes,1,opt,name=pointer,proto3" json:"pointer,omitempty"` + Pointer *Pointer `protobuf:"bytes,1,opt,name=pointer" json:"pointer,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -857,7 +873,7 @@ func (m *SegmentCommitResponseOld) Reset() { *m = SegmentCommitResponseO func (m *SegmentCommitResponseOld) String() string { return proto.CompactTextString(m) } func (*SegmentCommitResponseOld) ProtoMessage() {} func (*SegmentCommitResponseOld) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{16} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{16} } func (m *SegmentCommitResponseOld) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SegmentCommitResponseOld.Unmarshal(m, b) @@ -865,8 +881,8 @@ func (m *SegmentCommitResponseOld) XXX_Unmarshal(b []byte) error { func (m *SegmentCommitResponseOld) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SegmentCommitResponseOld.Marshal(b, m, deterministic) } -func (m *SegmentCommitResponseOld) XXX_Merge(src proto.Message) { - xxx_messageInfo_SegmentCommitResponseOld.Merge(m, src) +func (dst *SegmentCommitResponseOld) XXX_Merge(src proto.Message) { + xxx_messageInfo_SegmentCommitResponseOld.Merge(dst, src) } func (m *SegmentCommitResponseOld) XXX_Size() int { return xxx_messageInfo_SegmentCommitResponseOld.Size(m) @@ -897,7 +913,7 @@ func (m *SegmentDownloadRequestOld) Reset() { *m = SegmentDownloadReques func (m *SegmentDownloadRequestOld) String() string { return proto.CompactTextString(m) } func (*SegmentDownloadRequestOld) ProtoMessage() {} func (*SegmentDownloadRequestOld) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{17} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{17} } func (m *SegmentDownloadRequestOld) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SegmentDownloadRequestOld.Unmarshal(m, b) @@ -905,8 +921,8 @@ func (m *SegmentDownloadRequestOld) XXX_Unmarshal(b []byte) error { func (m *SegmentDownloadRequestOld) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SegmentDownloadRequestOld.Marshal(b, m, deterministic) } -func (m *SegmentDownloadRequestOld) XXX_Merge(src proto.Message) { - xxx_messageInfo_SegmentDownloadRequestOld.Merge(m, src) +func (dst *SegmentDownloadRequestOld) XXX_Merge(src proto.Message) { + xxx_messageInfo_SegmentDownloadRequestOld.Merge(dst, src) } func (m *SegmentDownloadRequestOld) XXX_Size() int { return xxx_messageInfo_SegmentDownloadRequestOld.Size(m) @@ -939,8 +955,8 @@ func (m *SegmentDownloadRequestOld) GetSegment() int64 { } type SegmentDownloadResponseOld struct { - AddressedLimits []*AddressedOrderLimit `protobuf:"bytes,1,rep,name=addressed_limits,json=addressedLimits,proto3" json:"addressed_limits,omitempty"` - Pointer *Pointer `protobuf:"bytes,2,opt,name=pointer,proto3" json:"pointer,omitempty"` + AddressedLimits []*AddressedOrderLimit `protobuf:"bytes,1,rep,name=addressed_limits,json=addressedLimits" json:"addressed_limits,omitempty"` + Pointer *Pointer `protobuf:"bytes,2,opt,name=pointer" json:"pointer,omitempty"` PrivateKey PiecePrivateKey `protobuf:"bytes,3,opt,name=private_key,json=privateKey,proto3,customtype=PiecePrivateKey" json:"private_key"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -951,7 +967,7 @@ func (m *SegmentDownloadResponseOld) Reset() { *m = SegmentDownloadRespo func (m *SegmentDownloadResponseOld) String() string { return proto.CompactTextString(m) } func (*SegmentDownloadResponseOld) ProtoMessage() {} func (*SegmentDownloadResponseOld) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{18} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{18} } func (m *SegmentDownloadResponseOld) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SegmentDownloadResponseOld.Unmarshal(m, b) @@ -959,8 +975,8 @@ func (m *SegmentDownloadResponseOld) XXX_Unmarshal(b []byte) error { func (m *SegmentDownloadResponseOld) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SegmentDownloadResponseOld.Marshal(b, m, deterministic) } -func (m *SegmentDownloadResponseOld) XXX_Merge(src proto.Message) { - xxx_messageInfo_SegmentDownloadResponseOld.Merge(m, src) +func (dst *SegmentDownloadResponseOld) XXX_Merge(src proto.Message) { + xxx_messageInfo_SegmentDownloadResponseOld.Merge(dst, src) } func (m *SegmentDownloadResponseOld) XXX_Size() int { return xxx_messageInfo_SegmentDownloadResponseOld.Size(m) @@ -998,7 +1014,7 @@ func (m *SegmentInfoRequestOld) Reset() { *m = SegmentInfoRequestOld{} } func (m *SegmentInfoRequestOld) String() string { return proto.CompactTextString(m) } func (*SegmentInfoRequestOld) ProtoMessage() {} func (*SegmentInfoRequestOld) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{19} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{19} } func (m *SegmentInfoRequestOld) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SegmentInfoRequestOld.Unmarshal(m, b) @@ -1006,8 +1022,8 @@ func (m *SegmentInfoRequestOld) XXX_Unmarshal(b []byte) error { func (m *SegmentInfoRequestOld) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SegmentInfoRequestOld.Marshal(b, m, deterministic) } -func (m *SegmentInfoRequestOld) XXX_Merge(src proto.Message) { - xxx_messageInfo_SegmentInfoRequestOld.Merge(m, src) +func (dst *SegmentInfoRequestOld) XXX_Merge(src proto.Message) { + xxx_messageInfo_SegmentInfoRequestOld.Merge(dst, src) } func (m *SegmentInfoRequestOld) XXX_Size() int { return xxx_messageInfo_SegmentInfoRequestOld.Size(m) @@ -1040,7 +1056,7 @@ func (m *SegmentInfoRequestOld) GetSegment() int64 { } type SegmentInfoResponseOld struct { - Pointer *Pointer `protobuf:"bytes,2,opt,name=pointer,proto3" json:"pointer,omitempty"` + Pointer *Pointer `protobuf:"bytes,2,opt,name=pointer" json:"pointer,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1050,7 +1066,7 @@ func (m *SegmentInfoResponseOld) Reset() { *m = SegmentInfoResponseOld{} func (m *SegmentInfoResponseOld) String() string { return proto.CompactTextString(m) } func (*SegmentInfoResponseOld) ProtoMessage() {} func (*SegmentInfoResponseOld) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{20} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{20} } func (m *SegmentInfoResponseOld) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SegmentInfoResponseOld.Unmarshal(m, b) @@ -1058,8 +1074,8 @@ func (m *SegmentInfoResponseOld) XXX_Unmarshal(b []byte) error { func (m *SegmentInfoResponseOld) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SegmentInfoResponseOld.Marshal(b, m, deterministic) } -func (m *SegmentInfoResponseOld) XXX_Merge(src proto.Message) { - xxx_messageInfo_SegmentInfoResponseOld.Merge(m, src) +func (dst *SegmentInfoResponseOld) XXX_Merge(src proto.Message) { + xxx_messageInfo_SegmentInfoResponseOld.Merge(dst, src) } func (m *SegmentInfoResponseOld) XXX_Size() int { return xxx_messageInfo_SegmentInfoResponseOld.Size(m) @@ -1090,7 +1106,7 @@ func (m *SegmentDeleteRequestOld) Reset() { *m = SegmentDeleteRequestOld func (m *SegmentDeleteRequestOld) String() string { return proto.CompactTextString(m) } func (*SegmentDeleteRequestOld) ProtoMessage() {} func (*SegmentDeleteRequestOld) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{21} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{21} } func (m *SegmentDeleteRequestOld) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SegmentDeleteRequestOld.Unmarshal(m, b) @@ -1098,8 +1114,8 @@ func (m *SegmentDeleteRequestOld) XXX_Unmarshal(b []byte) error { func (m *SegmentDeleteRequestOld) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SegmentDeleteRequestOld.Marshal(b, m, deterministic) } -func (m *SegmentDeleteRequestOld) XXX_Merge(src proto.Message) { - xxx_messageInfo_SegmentDeleteRequestOld.Merge(m, src) +func (dst *SegmentDeleteRequestOld) XXX_Merge(src proto.Message) { + xxx_messageInfo_SegmentDeleteRequestOld.Merge(dst, src) } func (m *SegmentDeleteRequestOld) XXX_Size() int { return xxx_messageInfo_SegmentDeleteRequestOld.Size(m) @@ -1132,7 +1148,7 @@ func (m *SegmentDeleteRequestOld) GetSegment() int64 { } type SegmentDeleteResponseOld struct { - AddressedLimits []*AddressedOrderLimit `protobuf:"bytes,1,rep,name=addressed_limits,json=addressedLimits,proto3" json:"addressed_limits,omitempty"` + AddressedLimits []*AddressedOrderLimit `protobuf:"bytes,1,rep,name=addressed_limits,json=addressedLimits" json:"addressed_limits,omitempty"` PrivateKey PiecePrivateKey `protobuf:"bytes,2,opt,name=private_key,json=privateKey,proto3,customtype=PiecePrivateKey" json:"private_key"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -1143,7 +1159,7 @@ func (m *SegmentDeleteResponseOld) Reset() { *m = SegmentDeleteResponseO func (m *SegmentDeleteResponseOld) String() string { return proto.CompactTextString(m) } func (*SegmentDeleteResponseOld) ProtoMessage() {} func (*SegmentDeleteResponseOld) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{22} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{22} } func (m *SegmentDeleteResponseOld) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SegmentDeleteResponseOld.Unmarshal(m, b) @@ -1151,8 +1167,8 @@ func (m *SegmentDeleteResponseOld) XXX_Unmarshal(b []byte) error { func (m *SegmentDeleteResponseOld) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SegmentDeleteResponseOld.Marshal(b, m, deterministic) } -func (m *SegmentDeleteResponseOld) XXX_Merge(src proto.Message) { - xxx_messageInfo_SegmentDeleteResponseOld.Merge(m, src) +func (dst *SegmentDeleteResponseOld) XXX_Merge(src proto.Message) { + xxx_messageInfo_SegmentDeleteResponseOld.Merge(dst, src) } func (m *SegmentDeleteResponseOld) XXX_Size() int { return xxx_messageInfo_SegmentDeleteResponseOld.Size(m) @@ -1187,7 +1203,7 @@ func (m *ListSegmentsRequestOld) Reset() { *m = ListSegmentsRequestOld{} func (m *ListSegmentsRequestOld) String() string { return proto.CompactTextString(m) } func (*ListSegmentsRequestOld) ProtoMessage() {} func (*ListSegmentsRequestOld) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{23} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{23} } func (m *ListSegmentsRequestOld) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ListSegmentsRequestOld.Unmarshal(m, b) @@ -1195,8 +1211,8 @@ func (m *ListSegmentsRequestOld) XXX_Unmarshal(b []byte) error { func (m *ListSegmentsRequestOld) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ListSegmentsRequestOld.Marshal(b, m, deterministic) } -func (m *ListSegmentsRequestOld) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListSegmentsRequestOld.Merge(m, src) +func (dst *ListSegmentsRequestOld) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListSegmentsRequestOld.Merge(dst, src) } func (m *ListSegmentsRequestOld) XXX_Size() int { return xxx_messageInfo_ListSegmentsRequestOld.Size(m) @@ -1257,7 +1273,7 @@ func (m *ListSegmentsRequestOld) GetMetaFlags() uint32 { } type ListSegmentsResponseOld struct { - Items []*ListSegmentsResponseOld_Item `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + Items []*ListSegmentsResponseOld_Item `protobuf:"bytes,1,rep,name=items" json:"items,omitempty"` More bool `protobuf:"varint,2,opt,name=more,proto3" json:"more,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -1268,7 +1284,7 @@ func (m *ListSegmentsResponseOld) Reset() { *m = ListSegmentsResponseOld func (m *ListSegmentsResponseOld) String() string { return proto.CompactTextString(m) } func (*ListSegmentsResponseOld) ProtoMessage() {} func (*ListSegmentsResponseOld) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{24} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{24} } func (m *ListSegmentsResponseOld) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ListSegmentsResponseOld.Unmarshal(m, b) @@ -1276,8 +1292,8 @@ func (m *ListSegmentsResponseOld) XXX_Unmarshal(b []byte) error { func (m *ListSegmentsResponseOld) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ListSegmentsResponseOld.Marshal(b, m, deterministic) } -func (m *ListSegmentsResponseOld) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListSegmentsResponseOld.Merge(m, src) +func (dst *ListSegmentsResponseOld) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListSegmentsResponseOld.Merge(dst, src) } func (m *ListSegmentsResponseOld) XXX_Size() int { return xxx_messageInfo_ListSegmentsResponseOld.Size(m) @@ -1304,7 +1320,7 @@ func (m *ListSegmentsResponseOld) GetMore() bool { type ListSegmentsResponseOld_Item struct { Path []byte `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` - Pointer *Pointer `protobuf:"bytes,2,opt,name=pointer,proto3" json:"pointer,omitempty"` + Pointer *Pointer `protobuf:"bytes,2,opt,name=pointer" json:"pointer,omitempty"` IsPrefix bool `protobuf:"varint,3,opt,name=is_prefix,json=isPrefix,proto3" json:"is_prefix,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -1315,7 +1331,7 @@ func (m *ListSegmentsResponseOld_Item) Reset() { *m = ListSegmentsRespon func (m *ListSegmentsResponseOld_Item) String() string { return proto.CompactTextString(m) } func (*ListSegmentsResponseOld_Item) ProtoMessage() {} func (*ListSegmentsResponseOld_Item) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{24, 0} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{24, 0} } func (m *ListSegmentsResponseOld_Item) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ListSegmentsResponseOld_Item.Unmarshal(m, b) @@ -1323,8 +1339,8 @@ func (m *ListSegmentsResponseOld_Item) XXX_Unmarshal(b []byte) error { func (m *ListSegmentsResponseOld_Item) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ListSegmentsResponseOld_Item.Marshal(b, m, deterministic) } -func (m *ListSegmentsResponseOld_Item) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListSegmentsResponseOld_Item.Merge(m, src) +func (dst *ListSegmentsResponseOld_Item) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListSegmentsResponseOld_Item.Merge(dst, src) } func (m *ListSegmentsResponseOld_Item) XXX_Size() int { return xxx_messageInfo_ListSegmentsResponseOld_Item.Size(m) @@ -1368,7 +1384,7 @@ func (m *SetAttributionRequestOld) Reset() { *m = SetAttributionRequestO func (m *SetAttributionRequestOld) String() string { return proto.CompactTextString(m) } func (*SetAttributionRequestOld) ProtoMessage() {} func (*SetAttributionRequestOld) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{25} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{25} } func (m *SetAttributionRequestOld) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetAttributionRequestOld.Unmarshal(m, b) @@ -1376,8 +1392,8 @@ func (m *SetAttributionRequestOld) XXX_Unmarshal(b []byte) error { func (m *SetAttributionRequestOld) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SetAttributionRequestOld.Marshal(b, m, deterministic) } -func (m *SetAttributionRequestOld) XXX_Merge(src proto.Message) { - xxx_messageInfo_SetAttributionRequestOld.Merge(m, src) +func (dst *SetAttributionRequestOld) XXX_Merge(src proto.Message) { + xxx_messageInfo_SetAttributionRequestOld.Merge(dst, src) } func (m *SetAttributionRequestOld) XXX_Size() int { return xxx_messageInfo_SetAttributionRequestOld.Size(m) @@ -1412,7 +1428,7 @@ func (m *SetAttributionResponseOld) Reset() { *m = SetAttributionRespons func (m *SetAttributionResponseOld) String() string { return proto.CompactTextString(m) } func (*SetAttributionResponseOld) ProtoMessage() {} func (*SetAttributionResponseOld) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{26} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{26} } func (m *SetAttributionResponseOld) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetAttributionResponseOld.Unmarshal(m, b) @@ -1420,8 +1436,8 @@ func (m *SetAttributionResponseOld) XXX_Unmarshal(b []byte) error { func (m *SetAttributionResponseOld) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SetAttributionResponseOld.Marshal(b, m, deterministic) } -func (m *SetAttributionResponseOld) XXX_Merge(src proto.Message) { - xxx_messageInfo_SetAttributionResponseOld.Merge(m, src) +func (dst *SetAttributionResponseOld) XXX_Merge(src proto.Message) { + xxx_messageInfo_SetAttributionResponseOld.Merge(dst, src) } func (m *SetAttributionResponseOld) XXX_Size() int { return xxx_messageInfo_SetAttributionResponseOld.Size(m) @@ -1442,7 +1458,7 @@ func (m *ProjectInfoRequest) Reset() { *m = ProjectInfoRequest{} } func (m *ProjectInfoRequest) String() string { return proto.CompactTextString(m) } func (*ProjectInfoRequest) ProtoMessage() {} func (*ProjectInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{27} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{27} } func (m *ProjectInfoRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ProjectInfoRequest.Unmarshal(m, b) @@ -1450,8 +1466,8 @@ func (m *ProjectInfoRequest) XXX_Unmarshal(b []byte) error { func (m *ProjectInfoRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ProjectInfoRequest.Marshal(b, m, deterministic) } -func (m *ProjectInfoRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ProjectInfoRequest.Merge(m, src) +func (dst *ProjectInfoRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ProjectInfoRequest.Merge(dst, src) } func (m *ProjectInfoRequest) XXX_Size() int { return xxx_messageInfo_ProjectInfoRequest.Size(m) @@ -1473,7 +1489,7 @@ func (m *ProjectInfoResponse) Reset() { *m = ProjectInfoResponse{} } func (m *ProjectInfoResponse) String() string { return proto.CompactTextString(m) } func (*ProjectInfoResponse) ProtoMessage() {} func (*ProjectInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{28} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{28} } func (m *ProjectInfoResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ProjectInfoResponse.Unmarshal(m, b) @@ -1481,8 +1497,8 @@ func (m *ProjectInfoResponse) XXX_Unmarshal(b []byte) error { func (m *ProjectInfoResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ProjectInfoResponse.Marshal(b, m, deterministic) } -func (m *ProjectInfoResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ProjectInfoResponse.Merge(m, src) +func (dst *ProjectInfoResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ProjectInfoResponse.Merge(dst, src) } func (m *ProjectInfoResponse) XXX_Size() int { return xxx_messageInfo_ProjectInfoResponse.Size(m) @@ -1506,14 +1522,14 @@ type Object struct { Version int32 `protobuf:"varint,3,opt,name=version,proto3" json:"version,omitempty"` Status Object_Status `protobuf:"varint,4,opt,name=status,proto3,enum=metainfo.Object_Status" json:"status,omitempty"` StreamId StreamID `protobuf:"bytes,5,opt,name=stream_id,json=streamId,proto3,customtype=StreamID" json:"stream_id"` - CreatedAt time.Time `protobuf:"bytes,6,opt,name=created_at,json=createdAt,proto3,stdtime" json:"created_at"` - StatusAt time.Time `protobuf:"bytes,7,opt,name=status_at,json=statusAt,proto3,stdtime" json:"status_at"` - ExpiresAt time.Time `protobuf:"bytes,8,opt,name=expires_at,json=expiresAt,proto3,stdtime" json:"expires_at"` + CreatedAt time.Time `protobuf:"bytes,6,opt,name=created_at,json=createdAt,stdtime" json:"created_at"` + StatusAt time.Time `protobuf:"bytes,7,opt,name=status_at,json=statusAt,stdtime" json:"status_at"` + ExpiresAt time.Time `protobuf:"bytes,8,opt,name=expires_at,json=expiresAt,stdtime" json:"expires_at"` EncryptedMetadataNonce Nonce `protobuf:"bytes,9,opt,name=encrypted_metadata_nonce,json=encryptedMetadataNonce,proto3,customtype=Nonce" json:"encrypted_metadata_nonce"` EncryptedMetadata []byte `protobuf:"bytes,10,opt,name=encrypted_metadata,json=encryptedMetadata,proto3" json:"encrypted_metadata,omitempty"` FixedSegmentSize int64 `protobuf:"varint,11,opt,name=fixed_segment_size,json=fixedSegmentSize,proto3" json:"fixed_segment_size,omitempty"` - RedundancyScheme *RedundancyScheme `protobuf:"bytes,12,opt,name=redundancy_scheme,json=redundancyScheme,proto3" json:"redundancy_scheme,omitempty"` - EncryptionParameters *EncryptionParameters `protobuf:"bytes,13,opt,name=encryption_parameters,json=encryptionParameters,proto3" json:"encryption_parameters,omitempty"` + RedundancyScheme *RedundancyScheme `protobuf:"bytes,12,opt,name=redundancy_scheme,json=redundancyScheme" json:"redundancy_scheme,omitempty"` + EncryptionParameters *EncryptionParameters `protobuf:"bytes,13,opt,name=encryption_parameters,json=encryptionParameters" json:"encryption_parameters,omitempty"` TotalSize int64 `protobuf:"varint,14,opt,name=total_size,json=totalSize,proto3" json:"total_size,omitempty"` InlineSize int64 `protobuf:"varint,15,opt,name=inline_size,json=inlineSize,proto3" json:"inline_size,omitempty"` RemoteSize int64 `protobuf:"varint,16,opt,name=remote_size,json=remoteSize,proto3" json:"remote_size,omitempty"` @@ -1526,7 +1542,7 @@ func (m *Object) Reset() { *m = Object{} } func (m *Object) String() string { return proto.CompactTextString(m) } func (*Object) ProtoMessage() {} func (*Object) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{29} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{29} } func (m *Object) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Object.Unmarshal(m, b) @@ -1534,8 +1550,8 @@ func (m *Object) XXX_Unmarshal(b []byte) error { func (m *Object) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Object.Marshal(b, m, deterministic) } -func (m *Object) XXX_Merge(src proto.Message) { - xxx_messageInfo_Object.Merge(m, src) +func (dst *Object) XXX_Merge(src proto.Message) { + xxx_messageInfo_Object.Merge(dst, src) } func (m *Object) XXX_Size() int { return xxx_messageInfo_Object.Size(m) @@ -1648,11 +1664,11 @@ type ObjectBeginRequest struct { Bucket []byte `protobuf:"bytes,1,opt,name=bucket,proto3" json:"bucket,omitempty"` EncryptedPath []byte `protobuf:"bytes,2,opt,name=encrypted_path,json=encryptedPath,proto3" json:"encrypted_path,omitempty"` Version int32 `protobuf:"varint,3,opt,name=version,proto3" json:"version,omitempty"` - ExpiresAt time.Time `protobuf:"bytes,4,opt,name=expires_at,json=expiresAt,proto3,stdtime" json:"expires_at"` + ExpiresAt time.Time `protobuf:"bytes,4,opt,name=expires_at,json=expiresAt,stdtime" json:"expires_at"` EncryptedMetadataNonce Nonce `protobuf:"bytes,5,opt,name=encrypted_metadata_nonce,json=encryptedMetadataNonce,proto3,customtype=Nonce" json:"encrypted_metadata_nonce"` EncryptedMetadata []byte `protobuf:"bytes,6,opt,name=encrypted_metadata,json=encryptedMetadata,proto3" json:"encrypted_metadata,omitempty"` - RedundancyScheme *RedundancyScheme `protobuf:"bytes,7,opt,name=redundancy_scheme,json=redundancyScheme,proto3" json:"redundancy_scheme,omitempty"` - EncryptionParameters *EncryptionParameters `protobuf:"bytes,8,opt,name=encryption_parameters,json=encryptionParameters,proto3" json:"encryption_parameters,omitempty"` + RedundancyScheme *RedundancyScheme `protobuf:"bytes,7,opt,name=redundancy_scheme,json=redundancyScheme" json:"redundancy_scheme,omitempty"` + EncryptionParameters *EncryptionParameters `protobuf:"bytes,8,opt,name=encryption_parameters,json=encryptionParameters" json:"encryption_parameters,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1662,7 +1678,7 @@ func (m *ObjectBeginRequest) Reset() { *m = ObjectBeginRequest{} } func (m *ObjectBeginRequest) String() string { return proto.CompactTextString(m) } func (*ObjectBeginRequest) ProtoMessage() {} func (*ObjectBeginRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{30} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{30} } func (m *ObjectBeginRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ObjectBeginRequest.Unmarshal(m, b) @@ -1670,8 +1686,8 @@ func (m *ObjectBeginRequest) XXX_Unmarshal(b []byte) error { func (m *ObjectBeginRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ObjectBeginRequest.Marshal(b, m, deterministic) } -func (m *ObjectBeginRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ObjectBeginRequest.Merge(m, src) +func (dst *ObjectBeginRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ObjectBeginRequest.Merge(dst, src) } func (m *ObjectBeginRequest) XXX_Size() int { return xxx_messageInfo_ObjectBeginRequest.Size(m) @@ -1736,8 +1752,8 @@ type ObjectBeginResponse struct { EncryptedPath []byte `protobuf:"bytes,2,opt,name=encrypted_path,json=encryptedPath,proto3" json:"encrypted_path,omitempty"` Version int32 `protobuf:"varint,3,opt,name=version,proto3" json:"version,omitempty"` StreamId StreamID `protobuf:"bytes,4,opt,name=stream_id,json=streamId,proto3,customtype=StreamID" json:"stream_id"` - RedundancyScheme *RedundancyScheme `protobuf:"bytes,5,opt,name=redundancy_scheme,json=redundancyScheme,proto3" json:"redundancy_scheme,omitempty"` - EncryptionParameters *EncryptionParameters `protobuf:"bytes,6,opt,name=encryption_parameters,json=encryptionParameters,proto3" json:"encryption_parameters,omitempty"` + RedundancyScheme *RedundancyScheme `protobuf:"bytes,5,opt,name=redundancy_scheme,json=redundancyScheme" json:"redundancy_scheme,omitempty"` + EncryptionParameters *EncryptionParameters `protobuf:"bytes,6,opt,name=encryption_parameters,json=encryptionParameters" json:"encryption_parameters,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1747,7 +1763,7 @@ func (m *ObjectBeginResponse) Reset() { *m = ObjectBeginResponse{} } func (m *ObjectBeginResponse) String() string { return proto.CompactTextString(m) } func (*ObjectBeginResponse) ProtoMessage() {} func (*ObjectBeginResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{31} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{31} } func (m *ObjectBeginResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ObjectBeginResponse.Unmarshal(m, b) @@ -1755,8 +1771,8 @@ func (m *ObjectBeginResponse) XXX_Unmarshal(b []byte) error { func (m *ObjectBeginResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ObjectBeginResponse.Marshal(b, m, deterministic) } -func (m *ObjectBeginResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ObjectBeginResponse.Merge(m, src) +func (dst *ObjectBeginResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ObjectBeginResponse.Merge(dst, src) } func (m *ObjectBeginResponse) XXX_Size() int { return xxx_messageInfo_ObjectBeginResponse.Size(m) @@ -1813,7 +1829,7 @@ func (m *ObjectCommitRequest) Reset() { *m = ObjectCommitRequest{} } func (m *ObjectCommitRequest) String() string { return proto.CompactTextString(m) } func (*ObjectCommitRequest) ProtoMessage() {} func (*ObjectCommitRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{32} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{32} } func (m *ObjectCommitRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ObjectCommitRequest.Unmarshal(m, b) @@ -1821,8 +1837,8 @@ func (m *ObjectCommitRequest) XXX_Unmarshal(b []byte) error { func (m *ObjectCommitRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ObjectCommitRequest.Marshal(b, m, deterministic) } -func (m *ObjectCommitRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ObjectCommitRequest.Merge(m, src) +func (dst *ObjectCommitRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ObjectCommitRequest.Merge(dst, src) } func (m *ObjectCommitRequest) XXX_Size() int { return xxx_messageInfo_ObjectCommitRequest.Size(m) @@ -1843,7 +1859,7 @@ func (m *ObjectCommitResponse) Reset() { *m = ObjectCommitResponse{} } func (m *ObjectCommitResponse) String() string { return proto.CompactTextString(m) } func (*ObjectCommitResponse) ProtoMessage() {} func (*ObjectCommitResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{33} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{33} } func (m *ObjectCommitResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ObjectCommitResponse.Unmarshal(m, b) @@ -1851,8 +1867,8 @@ func (m *ObjectCommitResponse) XXX_Unmarshal(b []byte) error { func (m *ObjectCommitResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ObjectCommitResponse.Marshal(b, m, deterministic) } -func (m *ObjectCommitResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ObjectCommitResponse.Merge(m, src) +func (dst *ObjectCommitResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ObjectCommitResponse.Merge(dst, src) } func (m *ObjectCommitResponse) XXX_Size() int { return xxx_messageInfo_ObjectCommitResponse.Size(m) @@ -1868,7 +1884,7 @@ type ObjectListRequest struct { EncryptedPrefix []byte `protobuf:"bytes,2,opt,name=encrypted_prefix,json=encryptedPrefix,proto3" json:"encrypted_prefix,omitempty"` EncryptedCursor []byte `protobuf:"bytes,3,opt,name=encrypted_cursor,json=encryptedCursor,proto3" json:"encrypted_cursor,omitempty"` Limit int32 `protobuf:"varint,4,opt,name=limit,proto3" json:"limit,omitempty"` - ObjectIncludes *ObjectListItemIncludes `protobuf:"bytes,5,opt,name=object_includes,json=objectIncludes,proto3" json:"object_includes,omitempty"` + ObjectIncludes *ObjectListItemIncludes `protobuf:"bytes,5,opt,name=object_includes,json=objectIncludes" json:"object_includes,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1878,7 +1894,7 @@ func (m *ObjectListRequest) Reset() { *m = ObjectListRequest{} } func (m *ObjectListRequest) String() string { return proto.CompactTextString(m) } func (*ObjectListRequest) ProtoMessage() {} func (*ObjectListRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{34} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{34} } func (m *ObjectListRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ObjectListRequest.Unmarshal(m, b) @@ -1886,8 +1902,8 @@ func (m *ObjectListRequest) XXX_Unmarshal(b []byte) error { func (m *ObjectListRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ObjectListRequest.Marshal(b, m, deterministic) } -func (m *ObjectListRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ObjectListRequest.Merge(m, src) +func (dst *ObjectListRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ObjectListRequest.Merge(dst, src) } func (m *ObjectListRequest) XXX_Size() int { return xxx_messageInfo_ObjectListRequest.Size(m) @@ -1934,7 +1950,7 @@ func (m *ObjectListRequest) GetObjectIncludes() *ObjectListItemIncludes { } type ObjectListResponse struct { - Items []*ObjectListItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + Items []*ObjectListItem `protobuf:"bytes,1,rep,name=items" json:"items,omitempty"` More bool `protobuf:"varint,2,opt,name=more,proto3" json:"more,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -1945,7 +1961,7 @@ func (m *ObjectListResponse) Reset() { *m = ObjectListResponse{} } func (m *ObjectListResponse) String() string { return proto.CompactTextString(m) } func (*ObjectListResponse) ProtoMessage() {} func (*ObjectListResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{35} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{35} } func (m *ObjectListResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ObjectListResponse.Unmarshal(m, b) @@ -1953,8 +1969,8 @@ func (m *ObjectListResponse) XXX_Unmarshal(b []byte) error { func (m *ObjectListResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ObjectListResponse.Marshal(b, m, deterministic) } -func (m *ObjectListResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ObjectListResponse.Merge(m, src) +func (dst *ObjectListResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ObjectListResponse.Merge(dst, src) } func (m *ObjectListResponse) XXX_Size() int { return xxx_messageInfo_ObjectListResponse.Size(m) @@ -1983,9 +1999,9 @@ type ObjectListItem struct { EncryptedPath []byte `protobuf:"bytes,1,opt,name=encrypted_path,json=encryptedPath,proto3" json:"encrypted_path,omitempty"` Version int32 `protobuf:"varint,2,opt,name=version,proto3" json:"version,omitempty"` Status Object_Status `protobuf:"varint,3,opt,name=status,proto3,enum=metainfo.Object_Status" json:"status,omitempty"` - CreatedAt time.Time `protobuf:"bytes,4,opt,name=created_at,json=createdAt,proto3,stdtime" json:"created_at"` - StatusAt time.Time `protobuf:"bytes,5,opt,name=status_at,json=statusAt,proto3,stdtime" json:"status_at"` - ExpiresAt time.Time `protobuf:"bytes,6,opt,name=expires_at,json=expiresAt,proto3,stdtime" json:"expires_at"` + CreatedAt time.Time `protobuf:"bytes,4,opt,name=created_at,json=createdAt,stdtime" json:"created_at"` + StatusAt time.Time `protobuf:"bytes,5,opt,name=status_at,json=statusAt,stdtime" json:"status_at"` + ExpiresAt time.Time `protobuf:"bytes,6,opt,name=expires_at,json=expiresAt,stdtime" json:"expires_at"` EncryptedMetadataNonce Nonce `protobuf:"bytes,7,opt,name=encrypted_metadata_nonce,json=encryptedMetadataNonce,proto3,customtype=Nonce" json:"encrypted_metadata_nonce"` EncryptedMetadata []byte `protobuf:"bytes,8,opt,name=encrypted_metadata,json=encryptedMetadata,proto3" json:"encrypted_metadata,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -1997,7 +2013,7 @@ func (m *ObjectListItem) Reset() { *m = ObjectListItem{} } func (m *ObjectListItem) String() string { return proto.CompactTextString(m) } func (*ObjectListItem) ProtoMessage() {} func (*ObjectListItem) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{36} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{36} } func (m *ObjectListItem) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ObjectListItem.Unmarshal(m, b) @@ -2005,8 +2021,8 @@ func (m *ObjectListItem) XXX_Unmarshal(b []byte) error { func (m *ObjectListItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ObjectListItem.Marshal(b, m, deterministic) } -func (m *ObjectListItem) XXX_Merge(src proto.Message) { - xxx_messageInfo_ObjectListItem.Merge(m, src) +func (dst *ObjectListItem) XXX_Merge(src proto.Message) { + xxx_messageInfo_ObjectListItem.Merge(dst, src) } func (m *ObjectListItem) XXX_Size() int { return xxx_messageInfo_ObjectListItem.Size(m) @@ -2077,7 +2093,7 @@ func (m *ObjectListItemIncludes) Reset() { *m = ObjectListItemIncludes{} func (m *ObjectListItemIncludes) String() string { return proto.CompactTextString(m) } func (*ObjectListItemIncludes) ProtoMessage() {} func (*ObjectListItemIncludes) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{37} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{37} } func (m *ObjectListItemIncludes) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ObjectListItemIncludes.Unmarshal(m, b) @@ -2085,8 +2101,8 @@ func (m *ObjectListItemIncludes) XXX_Unmarshal(b []byte) error { func (m *ObjectListItemIncludes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ObjectListItemIncludes.Marshal(b, m, deterministic) } -func (m *ObjectListItemIncludes) XXX_Merge(src proto.Message) { - xxx_messageInfo_ObjectListItemIncludes.Merge(m, src) +func (dst *ObjectListItemIncludes) XXX_Merge(src proto.Message) { + xxx_messageInfo_ObjectListItemIncludes.Merge(dst, src) } func (m *ObjectListItemIncludes) XXX_Size() int { return xxx_messageInfo_ObjectListItemIncludes.Size(m) @@ -2117,7 +2133,7 @@ func (m *ObjectBeginDeleteRequest) Reset() { *m = ObjectBeginDeleteReque func (m *ObjectBeginDeleteRequest) String() string { return proto.CompactTextString(m) } func (*ObjectBeginDeleteRequest) ProtoMessage() {} func (*ObjectBeginDeleteRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{38} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{38} } func (m *ObjectBeginDeleteRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ObjectBeginDeleteRequest.Unmarshal(m, b) @@ -2125,8 +2141,8 @@ func (m *ObjectBeginDeleteRequest) XXX_Unmarshal(b []byte) error { func (m *ObjectBeginDeleteRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ObjectBeginDeleteRequest.Marshal(b, m, deterministic) } -func (m *ObjectBeginDeleteRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ObjectBeginDeleteRequest.Merge(m, src) +func (dst *ObjectBeginDeleteRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ObjectBeginDeleteRequest.Merge(dst, src) } func (m *ObjectBeginDeleteRequest) XXX_Size() int { return xxx_messageInfo_ObjectBeginDeleteRequest.Size(m) @@ -2169,7 +2185,7 @@ func (m *ObjectBeginDeleteResponse) Reset() { *m = ObjectBeginDeleteResp func (m *ObjectBeginDeleteResponse) String() string { return proto.CompactTextString(m) } func (*ObjectBeginDeleteResponse) ProtoMessage() {} func (*ObjectBeginDeleteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{39} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{39} } func (m *ObjectBeginDeleteResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ObjectBeginDeleteResponse.Unmarshal(m, b) @@ -2177,8 +2193,8 @@ func (m *ObjectBeginDeleteResponse) XXX_Unmarshal(b []byte) error { func (m *ObjectBeginDeleteResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ObjectBeginDeleteResponse.Marshal(b, m, deterministic) } -func (m *ObjectBeginDeleteResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ObjectBeginDeleteResponse.Merge(m, src) +func (dst *ObjectBeginDeleteResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ObjectBeginDeleteResponse.Merge(dst, src) } func (m *ObjectBeginDeleteResponse) XXX_Size() int { return xxx_messageInfo_ObjectBeginDeleteResponse.Size(m) @@ -2200,7 +2216,7 @@ func (m *ObjectFinishDeleteRequest) Reset() { *m = ObjectFinishDeleteReq func (m *ObjectFinishDeleteRequest) String() string { return proto.CompactTextString(m) } func (*ObjectFinishDeleteRequest) ProtoMessage() {} func (*ObjectFinishDeleteRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{40} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{40} } func (m *ObjectFinishDeleteRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ObjectFinishDeleteRequest.Unmarshal(m, b) @@ -2208,8 +2224,8 @@ func (m *ObjectFinishDeleteRequest) XXX_Unmarshal(b []byte) error { func (m *ObjectFinishDeleteRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ObjectFinishDeleteRequest.Marshal(b, m, deterministic) } -func (m *ObjectFinishDeleteRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ObjectFinishDeleteRequest.Merge(m, src) +func (dst *ObjectFinishDeleteRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ObjectFinishDeleteRequest.Merge(dst, src) } func (m *ObjectFinishDeleteRequest) XXX_Size() int { return xxx_messageInfo_ObjectFinishDeleteRequest.Size(m) @@ -2230,7 +2246,7 @@ func (m *ObjectFinishDeleteResponse) Reset() { *m = ObjectFinishDeleteRe func (m *ObjectFinishDeleteResponse) String() string { return proto.CompactTextString(m) } func (*ObjectFinishDeleteResponse) ProtoMessage() {} func (*ObjectFinishDeleteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{41} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{41} } func (m *ObjectFinishDeleteResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ObjectFinishDeleteResponse.Unmarshal(m, b) @@ -2238,8 +2254,8 @@ func (m *ObjectFinishDeleteResponse) XXX_Unmarshal(b []byte) error { func (m *ObjectFinishDeleteResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ObjectFinishDeleteResponse.Marshal(b, m, deterministic) } -func (m *ObjectFinishDeleteResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ObjectFinishDeleteResponse.Merge(m, src) +func (dst *ObjectFinishDeleteResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ObjectFinishDeleteResponse.Merge(dst, src) } func (m *ObjectFinishDeleteResponse) XXX_Size() int { return xxx_messageInfo_ObjectFinishDeleteResponse.Size(m) @@ -2255,9 +2271,9 @@ type SatStreamID struct { Bucket []byte `protobuf:"bytes,1,opt,name=bucket,proto3" json:"bucket,omitempty"` EncryptedPath []byte `protobuf:"bytes,2,opt,name=encrypted_path,json=encryptedPath,proto3" json:"encrypted_path,omitempty"` Version int32 `protobuf:"varint,3,opt,name=version,proto3" json:"version,omitempty"` - Redundancy *RedundancyScheme `protobuf:"bytes,4,opt,name=redundancy,proto3" json:"redundancy,omitempty"` - CreationDate time.Time `protobuf:"bytes,5,opt,name=creation_date,json=creationDate,proto3,stdtime" json:"creation_date"` - ExpirationDate time.Time `protobuf:"bytes,6,opt,name=expiration_date,json=expirationDate,proto3,stdtime" json:"expiration_date"` + Redundancy *RedundancyScheme `protobuf:"bytes,4,opt,name=redundancy" json:"redundancy,omitempty"` + CreationDate time.Time `protobuf:"bytes,5,opt,name=creation_date,json=creationDate,stdtime" json:"creation_date"` + ExpirationDate time.Time `protobuf:"bytes,6,opt,name=expiration_date,json=expirationDate,stdtime" json:"expiration_date"` SatelliteSignature []byte `protobuf:"bytes,7,opt,name=satellite_signature,json=satelliteSignature,proto3" json:"satellite_signature,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -2268,7 +2284,7 @@ func (m *SatStreamID) Reset() { *m = SatStreamID{} } func (m *SatStreamID) String() string { return proto.CompactTextString(m) } func (*SatStreamID) ProtoMessage() {} func (*SatStreamID) Descriptor() ([]byte, []int) { - return fileDescriptor_631e2f30a93cd64e, []int{42} + return fileDescriptor_metainfo_ce3ad3dfabad782c, []int{42} } func (m *SatStreamID) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SatStreamID.Unmarshal(m, b) @@ -2276,8 +2292,8 @@ func (m *SatStreamID) XXX_Unmarshal(b []byte) error { func (m *SatStreamID) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SatStreamID.Marshal(b, m, deterministic) } -func (m *SatStreamID) XXX_Merge(src proto.Message) { - xxx_messageInfo_SatStreamID.Merge(m, src) +func (dst *SatStreamID) XXX_Merge(src proto.Message) { + xxx_messageInfo_SatStreamID.Merge(dst, src) } func (m *SatStreamID) XXX_Size() int { return xxx_messageInfo_SatStreamID.Size(m) @@ -2338,7 +2354,6 @@ func (m *SatStreamID) GetSatelliteSignature() []byte { } func init() { - proto.RegisterEnum("metainfo.Object_Status", Object_Status_name, Object_Status_value) proto.RegisterType((*Bucket)(nil), "metainfo.Bucket") proto.RegisterType((*BucketListItem)(nil), "metainfo.BucketListItem") proto.RegisterType((*BucketCreateRequest)(nil), "metainfo.BucketCreateRequest") @@ -2383,149 +2398,7 @@ func init() { proto.RegisterType((*ObjectFinishDeleteRequest)(nil), "metainfo.ObjectFinishDeleteRequest") proto.RegisterType((*ObjectFinishDeleteResponse)(nil), "metainfo.ObjectFinishDeleteResponse") proto.RegisterType((*SatStreamID)(nil), "metainfo.SatStreamID") -} - -func init() { proto.RegisterFile("metainfo.proto", fileDescriptor_631e2f30a93cd64e) } - -var fileDescriptor_631e2f30a93cd64e = []byte{ - // 2181 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x59, 0x5b, 0x6f, 0xe3, 0xc6, - 0x15, 0x0e, 0x75, 0xd7, 0x91, 0x2c, 0xc9, 0x63, 0xc7, 0xd6, 0xd2, 0x76, 0xec, 0x70, 0xbb, 0x0b, - 0x07, 0x48, 0xb4, 0x85, 0xd3, 0x87, 0x00, 0xdb, 0x02, 0xb5, 0x2d, 0xef, 0xae, 0xb6, 0xbe, 0x95, - 0xda, 0x64, 0x37, 0x41, 0x0a, 0x82, 0x16, 0xc7, 0x5a, 0x36, 0x12, 0xa9, 0x92, 0xa3, 0xad, 0x37, - 0xcf, 0x7d, 0x69, 0xd1, 0x87, 0xfe, 0x82, 0xfc, 0x94, 0xbe, 0xb6, 0x68, 0x81, 0x3e, 0x14, 0x7d, - 0x6a, 0x81, 0x14, 0xe8, 0x0f, 0xe8, 0x6f, 0x08, 0xe6, 0x26, 0x0e, 0x29, 0xca, 0x97, 0xb5, 0xfc, - 0xc6, 0x39, 0xe7, 0xcc, 0x99, 0x99, 0xef, 0x5c, 0xe6, 0xcc, 0x21, 0xd4, 0x86, 0x98, 0xd8, 0xae, - 0x77, 0xee, 0xb7, 0x46, 0x81, 0x4f, 0x7c, 0x54, 0x92, 0x63, 0xbd, 0x81, 0xbd, 0x5e, 0xf0, 0x76, - 0x44, 0x5c, 0xdf, 0xe3, 0x3c, 0x1d, 0xfa, 0x7e, 0x5f, 0xc8, 0xe9, 0x9b, 0x7d, 0xdf, 0xef, 0x0f, - 0xf0, 0x23, 0x36, 0x3a, 0x1b, 0x9f, 0x3f, 0x22, 0xee, 0x10, 0x87, 0xc4, 0x1e, 0x8e, 0xa4, 0xb0, - 0xe7, 0x3b, 0x58, 0x7c, 0xd7, 0x47, 0xbe, 0xeb, 0x11, 0x1c, 0x38, 0x67, 0x82, 0x50, 0xf5, 0x03, - 0x07, 0x07, 0x21, 0x1f, 0x19, 0x7f, 0xcc, 0x42, 0x61, 0x6f, 0xdc, 0xfb, 0x06, 0x13, 0x84, 0x20, - 0xe7, 0xd9, 0x43, 0xdc, 0xd4, 0xb6, 0xb4, 0xed, 0xaa, 0xc9, 0xbe, 0xd1, 0x67, 0x50, 0x19, 0xd9, - 0xe4, 0xb5, 0xd5, 0x73, 0x47, 0xaf, 0x71, 0xd0, 0xcc, 0x6c, 0x69, 0xdb, 0xb5, 0x9d, 0xd5, 0x96, - 0xb2, 0xbd, 0x7d, 0xc6, 0xe9, 0x8e, 0x5d, 0x82, 0x4d, 0xa0, 0xb2, 0x9c, 0x80, 0xf6, 0x01, 0x7a, - 0x01, 0xb6, 0x09, 0x76, 0x2c, 0x9b, 0x34, 0xb3, 0x5b, 0xda, 0x76, 0x65, 0x47, 0x6f, 0xf1, 0x9d, - 0xb7, 0xe4, 0xce, 0x5b, 0x2f, 0xe4, 0xce, 0xf7, 0x4a, 0x7f, 0xfd, 0x7e, 0xf3, 0xbd, 0x3f, 0xfd, - 0x77, 0x53, 0x33, 0xcb, 0x62, 0xde, 0x2e, 0x41, 0x3f, 0x86, 0x65, 0x07, 0x9f, 0xdb, 0xe3, 0x01, - 0xb1, 0x42, 0xdc, 0x1f, 0x62, 0x8f, 0x58, 0xa1, 0xfb, 0x2d, 0x6e, 0xe6, 0xb6, 0xb4, 0xed, 0xac, - 0x89, 0x04, 0xaf, 0xcb, 0x59, 0x5d, 0xf7, 0x5b, 0x8c, 0x5e, 0xc2, 0x3d, 0x39, 0x23, 0xc0, 0xce, - 0xd8, 0x73, 0x6c, 0xaf, 0xf7, 0xd6, 0x0a, 0x7b, 0xaf, 0xf1, 0x10, 0x37, 0xf3, 0x6c, 0x17, 0x6b, - 0xad, 0x08, 0x12, 0x73, 0x22, 0xd3, 0x65, 0x22, 0xe6, 0xaa, 0x98, 0x9d, 0x64, 0x20, 0x07, 0x36, - 0xa4, 0xe2, 0xe8, 0xf4, 0xd6, 0xc8, 0x0e, 0xec, 0x21, 0x26, 0x38, 0x08, 0x9b, 0x05, 0xa6, 0x7c, - 0x4b, 0xc5, 0xe6, 0x60, 0xf2, 0x79, 0x3a, 0x91, 0x33, 0xd7, 0x84, 0x9a, 0x34, 0xa6, 0xe1, 0x42, - 0x8d, 0x5b, 0xe3, 0xd0, 0x0d, 0x49, 0x87, 0xe0, 0x61, 0xaa, 0x55, 0xe2, 0xd8, 0x66, 0xde, 0x09, - 0x5b, 0xe3, 0x5f, 0x19, 0x58, 0xe2, 0x6b, 0xed, 0x33, 0x9a, 0x89, 0x7f, 0x33, 0xc6, 0xe1, 0xbc, - 0xdd, 0x60, 0x96, 0x05, 0xb3, 0xef, 0x66, 0xc1, 0xdc, 0x5d, 0x5a, 0x30, 0x3f, 0x0f, 0x0b, 0xfe, - 0x1c, 0x96, 0xe3, 0xa8, 0x86, 0x23, 0xdf, 0x0b, 0x31, 0xda, 0x86, 0xc2, 0x19, 0xa3, 0x33, 0x60, - 0x2b, 0x3b, 0x8d, 0xd6, 0x24, 0xfa, 0xb9, 0xbc, 0x29, 0xf8, 0xc6, 0x43, 0x68, 0x70, 0xca, 0x53, - 0x4c, 0x2e, 0x31, 0x8a, 0xf1, 0x33, 0x58, 0x54, 0xe4, 0x6e, 0xbc, 0xcc, 0x47, 0xd2, 0xfc, 0x6d, - 0x3c, 0xc0, 0x97, 0x9a, 0xdf, 0x58, 0x91, 0x67, 0x92, 0xa2, 0x7c, 0x31, 0xc3, 0x92, 0x3b, 0xa0, - 0xde, 0x2a, 0x15, 0xac, 0x40, 0xa1, 0x37, 0x0e, 0x42, 0x3f, 0x10, 0x2a, 0xc4, 0x08, 0x2d, 0x43, - 0x7e, 0xe0, 0x0e, 0x5d, 0xee, 0xaf, 0x79, 0x93, 0x0f, 0xd0, 0x3a, 0x94, 0x1d, 0x37, 0xc0, 0x3d, - 0x8a, 0x22, 0x73, 0x8a, 0xbc, 0x19, 0x11, 0x8c, 0x57, 0x80, 0xd4, 0x05, 0xc4, 0x19, 0x5b, 0x90, - 0x77, 0x09, 0x1e, 0x86, 0x4d, 0x6d, 0x2b, 0xbb, 0x5d, 0xd9, 0x69, 0x26, 0x8f, 0x28, 0x63, 0xc7, - 0xe4, 0x62, 0xf4, 0x48, 0x43, 0x3f, 0xc0, 0x6c, 0xe1, 0x92, 0xc9, 0xbe, 0x8d, 0x57, 0xb0, 0xc6, - 0x85, 0xbb, 0x98, 0xec, 0x12, 0x12, 0xb8, 0x67, 0x63, 0xba, 0xe2, 0x65, 0x41, 0xf0, 0x00, 0x6a, - 0x76, 0x24, 0x69, 0xb9, 0x0e, 0x53, 0x58, 0x35, 0x17, 0x14, 0x6a, 0xc7, 0x31, 0x3e, 0x80, 0xf5, - 0x74, 0xcd, 0x02, 0xb4, 0xdf, 0x69, 0xb0, 0xb4, 0xeb, 0x38, 0x01, 0x0e, 0x43, 0xec, 0x9c, 0xd0, - 0x5c, 0x7c, 0xc8, 0x90, 0xd8, 0x96, 0xf8, 0x70, 0xc3, 0xa1, 0x96, 0xc8, 0xd3, 0x91, 0x88, 0xc4, - 0x6c, 0x1f, 0x96, 0x43, 0xe2, 0x07, 0x76, 0x1f, 0x5b, 0x34, 0xd1, 0x5b, 0x36, 0xd7, 0x26, 0x12, - 0xc1, 0x62, 0x8b, 0x65, 0xff, 0x63, 0xdf, 0xc1, 0x62, 0x19, 0x13, 0x09, 0x71, 0x85, 0x66, 0x7c, - 0x97, 0x81, 0x15, 0x11, 0x76, 0x2f, 0x03, 0x77, 0x62, 0xff, 0x93, 0x81, 0x43, 0x2d, 0xa8, 0xf8, - 0x50, 0x55, 0x7a, 0x0c, 0x05, 0x85, 0x46, 0xb6, 0x38, 0x36, 0xfb, 0x46, 0x4d, 0x28, 0x8a, 0xb8, - 0x16, 0x21, 0x2d, 0x87, 0xe8, 0x31, 0x40, 0x14, 0xbf, 0xd7, 0x09, 0x5c, 0x45, 0x1c, 0x3d, 0x06, - 0x7d, 0x68, 0x5f, 0xc8, 0x38, 0xc5, 0x4e, 0x3c, 0x79, 0xe4, 0xd9, 0x4a, 0xab, 0x43, 0xfb, 0xe2, - 0x40, 0x0a, 0xa8, 0x19, 0xa4, 0x0d, 0x80, 0x2f, 0x46, 0x6e, 0x60, 0x33, 0xa7, 0x2a, 0xdc, 0x20, - 0x3d, 0x2a, 0xf3, 0x8c, 0x7f, 0x6a, 0xb0, 0x1a, 0x07, 0x88, 0x1b, 0x90, 0x22, 0xf4, 0x0c, 0x1a, - 0xb6, 0x34, 0xa1, 0xc5, 0x8c, 0x22, 0x9d, 0x71, 0x23, 0x72, 0xc6, 0x14, 0x23, 0x9b, 0xf5, 0xc9, - 0x34, 0x36, 0x0e, 0xd1, 0xa7, 0xb0, 0x10, 0xf8, 0x3e, 0xb1, 0x46, 0x2e, 0xee, 0xe1, 0x89, 0x4f, - 0xed, 0xd5, 0xe9, 0x96, 0xfe, 0xfd, 0xfd, 0x66, 0xf1, 0x94, 0xd2, 0x3b, 0x6d, 0xb3, 0x42, 0xa5, - 0xf8, 0xc0, 0x61, 0xe9, 0x38, 0x70, 0xdf, 0xd8, 0x04, 0x5b, 0xdf, 0xe0, 0xb7, 0x0c, 0xf8, 0xea, - 0xde, 0xaa, 0x98, 0x52, 0x67, 0x52, 0xa7, 0x9c, 0xff, 0x0b, 0xfc, 0xd6, 0x84, 0xd1, 0xe4, 0xdb, - 0xf8, 0x5b, 0x74, 0xa8, 0x7d, 0x7f, 0x48, 0x77, 0x34, 0x6f, 0xb3, 0x7f, 0x0c, 0x45, 0x61, 0x63, - 0x61, 0x73, 0xa4, 0xd8, 0xfc, 0x94, 0x7f, 0x99, 0x52, 0x04, 0x3d, 0x86, 0xba, 0x1f, 0xb8, 0x7d, - 0xd7, 0xb3, 0x07, 0x12, 0xc7, 0x3c, 0xc3, 0x31, 0xcd, 0xfd, 0x6b, 0x52, 0x94, 0x63, 0x67, 0x3c, - 0x83, 0x66, 0xe2, 0x2c, 0x91, 0x85, 0x94, 0x6d, 0x68, 0x57, 0x6e, 0xc3, 0xb0, 0xe1, 0x9e, 0xd0, - 0xd4, 0xf6, 0x7f, 0xeb, 0x0d, 0x7c, 0xdb, 0x99, 0x37, 0x2e, 0xc6, 0x3f, 0x34, 0xd0, 0xa7, 0xd6, - 0xb8, 0x0b, 0x8f, 0x52, 0x4e, 0x9e, 0xb9, 0xda, 0x00, 0xef, 0xee, 0x4a, 0xbf, 0x82, 0xf7, 0xc5, - 0x79, 0x3a, 0xde, 0xb9, 0x3f, 0x77, 0xbc, 0x9e, 0x4c, 0xd2, 0x13, 0x57, 0x9f, 0x6a, 0xda, 0xab, - 0x0f, 0x68, 0x58, 0x13, 0x87, 0x8f, 0xdd, 0x73, 0xf3, 0xdb, 0xe8, 0x77, 0xda, 0xc4, 0x0d, 0xe3, - 0xd7, 0xe3, 0x7c, 0xcd, 0x9a, 0x30, 0x54, 0xe6, 0xfa, 0x86, 0xfa, 0x8f, 0x06, 0x2b, 0xf4, 0x4a, - 0x14, 0x9b, 0x0c, 0xaf, 0x81, 0xc0, 0x0a, 0x14, 0x46, 0x01, 0x3e, 0x77, 0x2f, 0x04, 0x06, 0x62, - 0x84, 0x36, 0xa1, 0x12, 0x12, 0x3b, 0x20, 0x96, 0x7d, 0x4e, 0xe1, 0x67, 0xde, 0x62, 0x02, 0x23, - 0xed, 0x52, 0x0a, 0xda, 0x00, 0xc0, 0x9e, 0x63, 0x9d, 0xe1, 0x73, 0x7a, 0xe1, 0xe6, 0x18, 0xbf, - 0x8c, 0x3d, 0x67, 0x8f, 0x11, 0xe8, 0x6d, 0x1f, 0x60, 0x5a, 0x0f, 0xb8, 0x6f, 0x78, 0x16, 0x2f, - 0x99, 0x11, 0x21, 0xaa, 0x10, 0x0a, 0x6a, 0x85, 0xb0, 0x01, 0x40, 0x91, 0xb2, 0xce, 0x07, 0x76, - 0x3f, 0x6c, 0x16, 0xb7, 0xb4, 0xed, 0xa2, 0x59, 0xa6, 0x94, 0x27, 0x94, 0xc0, 0xd2, 0x74, 0xfc, - 0x74, 0x11, 0xfa, 0x3f, 0x8d, 0x17, 0x0a, 0x0f, 0x23, 0xc8, 0x67, 0xcc, 0x68, 0x5d, 0x51, 0x36, - 0xe8, 0x18, 0x72, 0xb2, 0x2a, 0x67, 0x2e, 0xa2, 0x29, 0x2e, 0x72, 0xb3, 0xc0, 0x5b, 0x83, 0xb2, - 0x1b, 0x5a, 0x02, 0xe5, 0x2c, 0x5b, 0xa2, 0xe4, 0x86, 0xa7, 0x6c, 0x6c, 0x7c, 0x45, 0x5d, 0x2a, - 0xa5, 0x2e, 0xa1, 0x87, 0xda, 0x84, 0x0a, 0xb7, 0x92, 0xa5, 0x54, 0x28, 0xc0, 0x49, 0xc7, 0xb4, - 0x4e, 0xd9, 0x00, 0x18, 0xd9, 0x01, 0xf1, 0x70, 0x10, 0xd5, 0x28, 0x65, 0x41, 0xe9, 0x38, 0xc6, - 0x1a, 0xcd, 0x75, 0x69, 0x95, 0xc9, 0xc9, 0xc0, 0x31, 0x96, 0x01, 0x9d, 0x06, 0xfe, 0xaf, 0x71, - 0x4f, 0x0d, 0x6a, 0xe3, 0x33, 0x58, 0x8a, 0x51, 0x45, 0x1d, 0xf6, 0x21, 0x54, 0x47, 0x9c, 0x6c, - 0x85, 0xf6, 0x40, 0xfa, 0x50, 0x45, 0xd0, 0xba, 0xf6, 0x80, 0x18, 0xbf, 0x2f, 0x42, 0xe1, 0xe4, - 0x8c, 0x0e, 0x67, 0xfa, 0xda, 0x03, 0xa8, 0x45, 0xd7, 0xbc, 0x12, 0x77, 0x0b, 0x13, 0xea, 0xa9, - 0x08, 0xc0, 0x37, 0x38, 0x08, 0xa3, 0x32, 0x51, 0x0e, 0xd1, 0x23, 0x28, 0x84, 0xc4, 0x26, 0xe3, - 0x90, 0xf9, 0x1b, 0x7d, 0x97, 0x4c, 0xcc, 0xcc, 0x97, 0x6e, 0x75, 0x19, 0xdb, 0x14, 0x62, 0xe8, - 0x13, 0x28, 0x87, 0x24, 0xc0, 0xf6, 0x90, 0xe2, 0x93, 0x67, 0x81, 0xd4, 0x10, 0x81, 0x54, 0xea, - 0x32, 0x46, 0xa7, 0x6d, 0x96, 0xb8, 0x48, 0xc7, 0x49, 0xbc, 0xb6, 0x0a, 0xef, 0xf6, 0x92, 0xdd, - 0xa5, 0x6b, 0xd2, 0xd5, 0xa9, 0x8e, 0xe2, 0x0d, 0x74, 0x94, 0xf8, 0xb4, 0x5d, 0x5a, 0xf6, 0xf1, - 0xf2, 0x04, 0x33, 0x1d, 0xa5, 0x9b, 0xec, 0x43, 0xcc, 0xdb, 0x25, 0xe8, 0x29, 0x34, 0x23, 0xb4, - 0x29, 0x4e, 0x8e, 0x4d, 0x6c, 0xcb, 0xf3, 0xbd, 0x1e, 0x6e, 0x96, 0x19, 0x14, 0x0b, 0x02, 0x8a, - 0xfc, 0x31, 0x25, 0x9a, 0x2b, 0x13, 0xf1, 0x23, 0x21, 0xcd, 0xe8, 0xe8, 0x13, 0x40, 0xd3, 0x8a, - 0x9a, 0xc0, 0x4c, 0xb7, 0x38, 0x35, 0x07, 0x7d, 0x0c, 0xe8, 0xdc, 0xbd, 0x48, 0x16, 0x72, 0x15, - 0x96, 0x4a, 0x1b, 0x8c, 0xa3, 0x56, 0x70, 0xcf, 0x60, 0x71, 0xfa, 0xed, 0x57, 0xbd, 0xba, 0x84, - 0x6c, 0x04, 0xc9, 0x47, 0xdf, 0xe7, 0xf0, 0x7e, 0xfa, 0x63, 0x6f, 0xe1, 0x9a, 0x8f, 0xbd, 0x65, - 0x9c, 0x42, 0xa5, 0x31, 0x46, 0x7c, 0x62, 0x0f, 0xf8, 0x31, 0x6a, 0xec, 0x18, 0x65, 0x46, 0x61, - 0xfb, 0xdf, 0x84, 0x8a, 0xeb, 0x0d, 0x5c, 0x0f, 0x73, 0x7e, 0x9d, 0xf1, 0x81, 0x93, 0xa4, 0x40, - 0x80, 0x87, 0x3e, 0x11, 0x02, 0x0d, 0x2e, 0xc0, 0x49, 0x54, 0xc0, 0xf8, 0x25, 0x14, 0xb8, 0xd7, - 0xa2, 0x0a, 0x14, 0x3b, 0xc7, 0x5f, 0xec, 0x1e, 0x76, 0xda, 0x8d, 0xf7, 0xd0, 0x02, 0x94, 0x3f, - 0x3f, 0x3d, 0x3c, 0xd9, 0x6d, 0x77, 0x8e, 0x9f, 0x36, 0x34, 0x54, 0x03, 0xd8, 0x3f, 0x39, 0x3a, - 0xea, 0xbc, 0x78, 0x41, 0xc7, 0x19, 0xca, 0x16, 0xe3, 0x83, 0x76, 0x23, 0x8b, 0xaa, 0x50, 0x6a, - 0x1f, 0x1c, 0x1e, 0x30, 0x66, 0xce, 0xf8, 0x7b, 0x16, 0x10, 0x0f, 0x88, 0x3d, 0xdc, 0x77, 0x3d, - 0xe5, 0xbd, 0x76, 0x37, 0x71, 0x19, 0xf7, 0xd7, 0xdc, 0xfc, 0xfd, 0x35, 0x7f, 0x7b, 0x7f, 0x2d, - 0xcc, 0xf2, 0xd7, 0x54, 0x0f, 0x2c, 0xce, 0xd5, 0x03, 0x4b, 0xb7, 0xf1, 0x40, 0xe3, 0xcf, 0x19, - 0x58, 0x8a, 0x59, 0x53, 0x24, 0xe5, 0x3b, 0x33, 0x67, 0x2c, 0x6b, 0xe6, 0xae, 0xcc, 0x9a, 0xa9, - 0x00, 0xe6, 0xe7, 0x0a, 0x60, 0xe1, 0x56, 0x00, 0xb6, 0x25, 0x7e, 0xb1, 0x87, 0x50, 0xfc, 0x98, - 0xda, 0x55, 0xc7, 0x34, 0x56, 0x60, 0x39, 0xae, 0x45, 0xbc, 0xf2, 0xff, 0xa7, 0xc1, 0x22, 0x67, - 0x24, 0x7a, 0x23, 0xa9, 0xc6, 0xf9, 0x08, 0x1a, 0x8a, 0x71, 0xd4, 0xca, 0xab, 0x1e, 0x99, 0x87, - 0x97, 0x60, 0x31, 0x51, 0xd1, 0x68, 0xc9, 0x26, 0x44, 0xf7, 0x13, 0x1d, 0x97, 0x9c, 0x5a, 0x4f, - 0x75, 0xa0, 0xee, 0xb3, 0x8d, 0x59, 0xae, 0xd7, 0x1b, 0x8c, 0x1d, 0x1c, 0x35, 0xbe, 0x12, 0xf7, - 0xa6, 0xec, 0xa3, 0x74, 0x84, 0x9c, 0x59, 0xe3, 0x13, 0xe5, 0xd8, 0x78, 0x25, 0x13, 0xca, 0x35, - 0xdb, 0x33, 0x71, 0xb5, 0x97, 0xb5, 0x67, 0xfe, 0x92, 0x85, 0x5a, 0x5c, 0x3a, 0xc5, 0x81, 0xb5, - 0x2b, 0x1c, 0x38, 0x33, 0xab, 0x4e, 0xc8, 0x5e, 0xaf, 0x4e, 0x88, 0x5f, 0xfc, 0xb9, 0x39, 0x5c, - 0xfc, 0xf9, 0x39, 0x5c, 0xfc, 0x85, 0xf9, 0x27, 0xd2, 0xe2, 0xed, 0x13, 0x69, 0x69, 0x46, 0x22, - 0x35, 0x7e, 0x02, 0x2b, 0xe9, 0xde, 0x84, 0x74, 0x28, 0x4d, 0xa6, 0x6b, 0xbc, 0x00, 0x96, 0x63, - 0x23, 0x84, 0xa6, 0x92, 0xdc, 0xe2, 0x1d, 0xca, 0xbb, 0xca, 0x70, 0xc6, 0x73, 0xb8, 0x97, 0xb2, - 0xa8, 0xf0, 0xea, 0x1b, 0xe6, 0x85, 0x89, 0xae, 0x27, 0xae, 0xe7, 0x86, 0xaf, 0xe3, 0x27, 0xb8, - 0xa1, 0xae, 0x75, 0xd0, 0xd3, 0x74, 0x89, 0x4c, 0xf3, 0xff, 0x0c, 0x54, 0xba, 0x36, 0x91, 0xf3, - 0xee, 0xee, 0x02, 0xb8, 0x55, 0x43, 0xaf, 0x03, 0x0b, 0x2c, 0x26, 0x68, 0x0a, 0x77, 0x6c, 0x82, - 0x6f, 0x14, 0x0a, 0x55, 0x39, 0xb5, 0x6d, 0x13, 0x8c, 0x8e, 0xa0, 0x1e, 0xb5, 0xe9, 0xb8, 0xb2, - 0x9b, 0xc4, 0x44, 0x2d, 0x9a, 0xcc, 0xd4, 0x3d, 0x82, 0xa5, 0xd0, 0x26, 0x78, 0x30, 0x70, 0x59, - 0x35, 0xd6, 0xf7, 0x6c, 0x32, 0x0e, 0x44, 0x4c, 0x98, 0x68, 0xc2, 0xea, 0x4a, 0xce, 0xce, 0x1f, - 0xaa, 0x50, 0x3a, 0x12, 0x99, 0x03, 0x1d, 0x41, 0x95, 0x37, 0xfa, 0xc5, 0x4f, 0xb4, 0x8d, 0x64, - 0x33, 0x3a, 0xf6, 0x73, 0x45, 0xff, 0x60, 0x16, 0x5b, 0x78, 0x59, 0x1b, 0xca, 0x4f, 0x31, 0x11, - 0xba, 0xf4, 0xa4, 0x70, 0xf4, 0x43, 0x40, 0x5f, 0x4b, 0xe5, 0x09, 0x2d, 0x47, 0x50, 0xe5, 0x4e, - 0x32, 0x6b, 0x53, 0x31, 0x77, 0x9c, 0xde, 0x54, 0xc2, 0xf5, 0x9f, 0x41, 0x85, 0x06, 0x2f, 0xe7, - 0x85, 0x68, 0x2d, 0xad, 0xdf, 0x2e, 0x75, 0xad, 0xa7, 0x33, 0x85, 0x26, 0x0c, 0xcb, 0x5d, 0x79, - 0x3c, 0xe5, 0x05, 0x8a, 0x1e, 0x24, 0x67, 0xa5, 0xbe, 0x7e, 0xf5, 0x87, 0x57, 0x89, 0x89, 0x65, - 0x9e, 0x43, 0x85, 0x85, 0xb0, 0x78, 0x79, 0xae, 0x27, 0x13, 0xbd, 0x5a, 0xff, 0xea, 0x1b, 0x33, - 0xb8, 0x11, 0x96, 0xfc, 0x6a, 0x17, 0xca, 0xa6, 0xc4, 0x63, 0xe5, 0x83, 0x8a, 0x65, 0x5a, 0x5d, - 0x20, 0xb1, 0xe4, 0xbc, 0x18, 0x96, 0x53, 0xd5, 0x82, 0xbe, 0x9e, 0xce, 0x14, 0x9a, 0xbe, 0x86, - 0x45, 0x25, 0x4f, 0x89, 0xdd, 0x19, 0xa9, 0x87, 0x89, 0x9b, 0xfb, 0xfe, 0xa5, 0x32, 0x42, 0xbb, - 0x05, 0x48, 0xcd, 0x36, 0x42, 0xfd, 0xd4, 0xd4, 0x94, 0xec, 0xa6, 0xff, 0xe8, 0x72, 0x21, 0xb1, - 0xc0, 0x4b, 0x68, 0x70, 0xdf, 0x17, 0xef, 0xbe, 0x93, 0x81, 0x83, 0x94, 0x0a, 0x24, 0xfd, 0xd7, - 0x84, 0xfe, 0xe1, 0x2c, 0x89, 0xa8, 0xe9, 0xf3, 0x25, 0x34, 0x38, 0xe6, 0x8a, 0xe2, 0xe9, 0x69, - 0xc9, 0xee, 0xb7, 0x6e, 0xcc, 0x14, 0x89, 0x54, 0x77, 0xa1, 0xa6, 0xf4, 0x24, 0x59, 0x33, 0x66, - 0x6a, 0x56, 0xbc, 0x19, 0xaa, 0x6f, 0xcd, 0x10, 0x88, 0x94, 0x5a, 0x80, 0x64, 0x43, 0x58, 0xd9, - 0xf1, 0xfd, 0xa9, 0x79, 0xd3, 0x9d, 0x69, 0x15, 0xe9, 0x4b, 0x5a, 0xcb, 0x5f, 0x42, 0x83, 0x63, - 0x7f, 0x29, 0x20, 0xc9, 0xee, 0x68, 0x0a, 0x20, 0xd3, 0xed, 0xcd, 0x2f, 0xa0, 0xae, 0x76, 0xd2, - 0x12, 0x36, 0x4c, 0x6f, 0x3a, 0xaa, 0x36, 0x9c, 0xd5, 0xb8, 0xfb, 0x1a, 0x16, 0xe3, 0xa1, 0x4d, - 0x89, 0xb1, 0x0d, 0xa5, 0x37, 0xc7, 0xf4, 0xfb, 0xb3, 0x65, 0x22, 0xed, 0xcf, 0xa1, 0xa2, 0xb4, - 0xb3, 0xd4, 0xf4, 0x30, 0xdd, 0xfb, 0x52, 0xd3, 0x43, 0x4a, 0x0f, 0x6c, 0x2f, 0xf7, 0x55, 0x66, - 0x74, 0x76, 0x56, 0x60, 0x37, 0xce, 0xa7, 0x3f, 0x04, 0x00, 0x00, 0xff, 0xff, 0xc9, 0x19, 0x04, - 0xf0, 0xd2, 0x21, 0x00, 0x00, + proto.RegisterEnum("metainfo.Object_Status", Object_Status_name, Object_Status_value) } // Reference imports to suppress errors if they are not otherwise used. @@ -3164,3 +3037,146 @@ var _Metainfo_serviceDesc = grpc.ServiceDesc{ Streams: []grpc.StreamDesc{}, Metadata: "metainfo.proto", } + +func init() { proto.RegisterFile("metainfo.proto", fileDescriptor_metainfo_ce3ad3dfabad782c) } + +var fileDescriptor_metainfo_ce3ad3dfabad782c = []byte{ + // 2192 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x59, 0xdd, 0x6e, 0xe3, 0xc6, + 0x15, 0x0e, 0xf5, 0xaf, 0x23, 0x59, 0x92, 0xc7, 0x8e, 0xad, 0xa5, 0xed, 0xd8, 0xe1, 0x76, 0x17, + 0x0e, 0x90, 0x68, 0x0b, 0xa7, 0x17, 0x01, 0xb6, 0x05, 0x6a, 0x5b, 0xde, 0x5d, 0x6d, 0xfd, 0x57, + 0x6a, 0x93, 0xdd, 0x04, 0x29, 0x08, 0x5a, 0x1c, 0x6b, 0xd9, 0x48, 0xa4, 0x4a, 0x8e, 0xb6, 0xde, + 0x5c, 0xf7, 0xa6, 0xbd, 0xea, 0x13, 0xe4, 0x05, 0xfa, 0x0e, 0xbd, 0x6d, 0xd1, 0x02, 0xbd, 0xe8, + 0x65, 0x0b, 0xa4, 0x40, 0x1f, 0xa0, 0x37, 0x7d, 0x81, 0x60, 0xfe, 0xc4, 0x21, 0x45, 0xf9, 0x67, + 0x2d, 0xdf, 0x71, 0xce, 0x39, 0x73, 0x66, 0xe6, 0x3b, 0x3f, 0x73, 0xe6, 0x10, 0x6a, 0x43, 0x4c, + 0x6c, 0xd7, 0x3b, 0xf7, 0x5b, 0xa3, 0xc0, 0x27, 0x3e, 0x2a, 0xc9, 0xb1, 0xde, 0xc0, 0x5e, 0x2f, + 0x78, 0x3b, 0x22, 0xae, 0xef, 0x71, 0x9e, 0x0e, 0x7d, 0xbf, 0x2f, 0xe4, 0xf4, 0xcd, 0xbe, 0xef, + 0xf7, 0x07, 0xf8, 0x11, 0x1b, 0x9d, 0x8d, 0xcf, 0x1f, 0x11, 0x77, 0x88, 0x43, 0x62, 0x0f, 0x47, + 0x52, 0xd8, 0xf3, 0x1d, 0x2c, 0xbe, 0xeb, 0x23, 0xdf, 0xf5, 0x08, 0x0e, 0x9c, 0x33, 0x41, 0xa8, + 0xfa, 0x81, 0x83, 0x83, 0x90, 0x8f, 0x8c, 0x3f, 0x65, 0xa1, 0xb0, 0x37, 0xee, 0x7d, 0x83, 0x09, + 0x42, 0x90, 0xf3, 0xec, 0x21, 0x6e, 0x6a, 0x5b, 0xda, 0x76, 0xd5, 0x64, 0xdf, 0xe8, 0x33, 0xa8, + 0x8c, 0x6c, 0xf2, 0xda, 0xea, 0xb9, 0xa3, 0xd7, 0x38, 0x68, 0x66, 0xb6, 0xb4, 0xed, 0xda, 0xce, + 0x6a, 0x4b, 0xd9, 0xde, 0x3e, 0xe3, 0x74, 0xc7, 0x2e, 0xc1, 0x26, 0x50, 0x59, 0x4e, 0x40, 0xfb, + 0x00, 0xbd, 0x00, 0xdb, 0x04, 0x3b, 0x96, 0x4d, 0x9a, 0xd9, 0x2d, 0x6d, 0xbb, 0xb2, 0xa3, 0xb7, + 0xf8, 0xce, 0x5b, 0x72, 0xe7, 0xad, 0x17, 0x72, 0xe7, 0x7b, 0xa5, 0xbf, 0x7e, 0xbf, 0xf9, 0xde, + 0x1f, 0xff, 0xb3, 0xa9, 0x99, 0x65, 0x31, 0x6f, 0x97, 0xa0, 0x1f, 0xc3, 0xb2, 0x83, 0xcf, 0xed, + 0xf1, 0x80, 0x58, 0x21, 0xee, 0x0f, 0xb1, 0x47, 0xac, 0xd0, 0xfd, 0x16, 0x37, 0x73, 0x5b, 0xda, + 0x76, 0xd6, 0x44, 0x82, 0xd7, 0xe5, 0xac, 0xae, 0xfb, 0x2d, 0x46, 0x2f, 0xe1, 0x9e, 0x9c, 0x11, + 0x60, 0x67, 0xec, 0x39, 0xb6, 0xd7, 0x7b, 0x6b, 0x85, 0xbd, 0xd7, 0x78, 0x88, 0x9b, 0x79, 0xb6, + 0x8b, 0xb5, 0x56, 0x04, 0x89, 0x39, 0x91, 0xe9, 0x32, 0x11, 0x73, 0x55, 0xcc, 0x4e, 0x32, 0x90, + 0x03, 0x1b, 0x52, 0x71, 0x74, 0x7a, 0x6b, 0x64, 0x07, 0xf6, 0x10, 0x13, 0x1c, 0x84, 0xcd, 0x02, + 0x53, 0xbe, 0xa5, 0x62, 0x73, 0x30, 0xf9, 0x3c, 0x9d, 0xc8, 0x99, 0x6b, 0x42, 0x4d, 0x1a, 0x13, + 0x6d, 0x00, 0x8c, 0xec, 0x80, 0x78, 0x38, 0xb0, 0x5c, 0xa7, 0x59, 0x64, 0x96, 0x28, 0x0b, 0x4a, + 0xc7, 0x31, 0x5c, 0xa8, 0x71, 0x63, 0x1d, 0xba, 0x21, 0xe9, 0x10, 0x3c, 0x4c, 0x35, 0x5a, 0x1c, + 0xfa, 0xcc, 0x3b, 0x41, 0x6f, 0xfc, 0x3f, 0x03, 0x4b, 0x7c, 0xad, 0x7d, 0x46, 0x33, 0xf1, 0x6f, + 0xc6, 0x38, 0x9c, 0xb7, 0x97, 0xcc, 0x32, 0x70, 0xf6, 0xdd, 0x0c, 0x9c, 0xbb, 0x4b, 0x03, 0xe7, + 0xe7, 0x6f, 0xe0, 0x42, 0xd2, 0xc0, 0x3f, 0x87, 0xe5, 0x38, 0xe8, 0xe1, 0xc8, 0xf7, 0x42, 0x8c, + 0xb6, 0xa1, 0x70, 0xc6, 0xe8, 0x0c, 0xf7, 0xca, 0x4e, 0xa3, 0x35, 0xc9, 0x1d, 0x5c, 0xde, 0x14, + 0x7c, 0xe3, 0x21, 0x34, 0x38, 0xe5, 0x29, 0x26, 0x97, 0xd8, 0xcc, 0xf8, 0x19, 0x2c, 0x2a, 0x72, + 0x37, 0x5e, 0xe6, 0x23, 0xe9, 0x1d, 0x6d, 0x3c, 0xc0, 0x97, 0x7a, 0x87, 0xb1, 0x22, 0xcf, 0x24, + 0x45, 0xf9, 0x62, 0x86, 0x25, 0x77, 0x40, 0x9d, 0x59, 0x2a, 0x58, 0x81, 0x42, 0x6f, 0x1c, 0x84, + 0x7e, 0x20, 0x54, 0x88, 0x11, 0x5a, 0x86, 0xfc, 0xc0, 0x1d, 0xba, 0xdc, 0x9d, 0xf3, 0x26, 0x1f, + 0xa0, 0x75, 0x28, 0x3b, 0x6e, 0x80, 0x7b, 0x14, 0x64, 0xe6, 0x33, 0x79, 0x33, 0x22, 0x18, 0xaf, + 0x00, 0xa9, 0x0b, 0x88, 0x33, 0xb6, 0x20, 0xef, 0x12, 0x3c, 0x0c, 0x9b, 0xda, 0x56, 0x76, 0xbb, + 0xb2, 0xd3, 0x4c, 0x1e, 0x51, 0x86, 0x96, 0xc9, 0xc5, 0xe8, 0x91, 0x86, 0x7e, 0x80, 0xd9, 0xc2, + 0x25, 0x93, 0x7d, 0x1b, 0xaf, 0x60, 0x8d, 0x0b, 0x77, 0x31, 0xd9, 0x25, 0x24, 0x70, 0xcf, 0xc6, + 0x74, 0xc5, 0xcb, 0x62, 0xe4, 0x01, 0xd4, 0xec, 0x48, 0x92, 0x1a, 0x3f, 0xc3, 0xb8, 0x0b, 0x0a, + 0xb5, 0xe3, 0x18, 0x1f, 0xc0, 0x7a, 0xba, 0x66, 0x01, 0xda, 0xef, 0x34, 0x58, 0xda, 0x75, 0x9c, + 0x00, 0x87, 0x21, 0x76, 0x4e, 0x68, 0x26, 0x3f, 0x64, 0x48, 0x6c, 0x4b, 0x7c, 0xb8, 0xe1, 0x50, + 0x4b, 0x64, 0xf9, 0x48, 0x44, 0x62, 0xb6, 0x0f, 0xcb, 0x21, 0xf1, 0x03, 0xbb, 0x8f, 0x2d, 0x7a, + 0x4d, 0x58, 0x36, 0xd7, 0x26, 0xf2, 0xc4, 0x62, 0x8b, 0xdd, 0x1d, 0xc7, 0xbe, 0x83, 0xc5, 0x32, + 0x26, 0x12, 0xe2, 0x0a, 0xcd, 0xf8, 0x2e, 0x03, 0x2b, 0x22, 0x2a, 0x5f, 0x06, 0xee, 0xc4, 0xfe, + 0x27, 0x03, 0x87, 0x5a, 0x50, 0xf1, 0xa1, 0xaa, 0xf4, 0x18, 0x0a, 0x0a, 0x0d, 0x7c, 0x71, 0x6c, + 0xf6, 0x8d, 0x9a, 0x50, 0x14, 0x61, 0x2f, 0x22, 0x5e, 0x0e, 0xd1, 0x63, 0x80, 0x28, 0xbc, 0xaf, + 0x13, 0xd7, 0x8a, 0x38, 0x7a, 0x0c, 0xfa, 0xd0, 0xbe, 0x90, 0x61, 0x8c, 0x9d, 0x78, 0x6e, 0xc9, + 0xb3, 0x95, 0x56, 0x87, 0xf6, 0xc5, 0x81, 0x14, 0x50, 0x13, 0x4c, 0x1b, 0x00, 0x5f, 0x8c, 0xdc, + 0xc0, 0x66, 0x4e, 0x55, 0xb8, 0x41, 0xf6, 0x54, 0xe6, 0x19, 0xff, 0xd4, 0x60, 0x35, 0x0e, 0x10, + 0x37, 0x20, 0x45, 0xe8, 0x19, 0x34, 0x6c, 0x69, 0x42, 0x8b, 0x19, 0x45, 0x3a, 0xe3, 0x46, 0xe4, + 0x8c, 0x29, 0x46, 0x36, 0xeb, 0x93, 0x69, 0x6c, 0x1c, 0xa2, 0x4f, 0x61, 0x21, 0xf0, 0x7d, 0x62, + 0x8d, 0x5c, 0xdc, 0xc3, 0x13, 0x9f, 0xda, 0xab, 0xd3, 0x2d, 0xfd, 0xeb, 0xfb, 0xcd, 0xe2, 0x29, + 0xa5, 0x77, 0xda, 0x66, 0x85, 0x4a, 0xf1, 0x81, 0xc3, 0xb2, 0x75, 0xe0, 0xbe, 0xb1, 0x09, 0xb6, + 0xbe, 0xc1, 0x6f, 0x19, 0xf0, 0xd5, 0xbd, 0x55, 0x31, 0xa5, 0xce, 0xa4, 0x4e, 0x39, 0xff, 0x17, + 0xf8, 0xad, 0x09, 0xa3, 0xc9, 0xb7, 0xf1, 0xb7, 0xe8, 0x50, 0xfb, 0xfe, 0x90, 0xee, 0x68, 0xde, + 0x66, 0xff, 0x18, 0x8a, 0xc2, 0xc6, 0xc2, 0xe6, 0x48, 0xb1, 0xf9, 0x29, 0xff, 0x32, 0xa5, 0x08, + 0x7a, 0x0c, 0x75, 0x3f, 0x70, 0xfb, 0xae, 0x67, 0x0f, 0x24, 0x8e, 0x79, 0x86, 0x63, 0x9a, 0xfb, + 0xd7, 0xa4, 0x28, 0xc7, 0xce, 0x78, 0x06, 0xcd, 0xc4, 0x59, 0x22, 0x0b, 0x29, 0xdb, 0xd0, 0xae, + 0xdc, 0x86, 0x61, 0xc3, 0x3d, 0xa1, 0xa9, 0xed, 0xff, 0xd6, 0x1b, 0xf8, 0xb6, 0x33, 0x6f, 0x5c, + 0x8c, 0x7f, 0x68, 0xa0, 0x4f, 0xad, 0x71, 0x17, 0x1e, 0xa5, 0x9c, 0x3c, 0x73, 0xb5, 0x01, 0xde, + 0xdd, 0x95, 0x7e, 0x05, 0xef, 0x8b, 0xf3, 0x74, 0xbc, 0x73, 0x7f, 0xee, 0x78, 0x3d, 0x99, 0xa4, + 0x27, 0xae, 0x3e, 0xd5, 0xb4, 0x57, 0x1f, 0xd0, 0xb0, 0x26, 0x0e, 0x1f, 0xbb, 0xe7, 0xe6, 0xb7, + 0xd1, 0xef, 0xb4, 0x89, 0x1b, 0xc6, 0xaf, 0xc7, 0xf9, 0x9a, 0x35, 0x61, 0xa8, 0xcc, 0xf5, 0x0d, + 0xf5, 0x6f, 0x0d, 0x56, 0xe8, 0x95, 0x28, 0x36, 0x19, 0x5e, 0x03, 0x81, 0x15, 0x28, 0x8c, 0x02, + 0x7c, 0xee, 0x5e, 0x08, 0x0c, 0xc4, 0x08, 0x6d, 0x42, 0x25, 0x24, 0x76, 0x40, 0x2c, 0xfb, 0x9c, + 0xc2, 0xcf, 0xbc, 0xc5, 0x04, 0x46, 0xda, 0xa5, 0x14, 0x5a, 0x1c, 0x61, 0xcf, 0xb1, 0xce, 0xf0, + 0x39, 0xbd, 0x70, 0x73, 0xbc, 0x38, 0xc2, 0x9e, 0xb3, 0xc7, 0x08, 0xf4, 0xb6, 0x0f, 0x30, 0xad, + 0x07, 0xdc, 0x37, 0x3c, 0x8b, 0x97, 0xcc, 0x88, 0x10, 0x55, 0x08, 0x05, 0xb5, 0x42, 0xd8, 0x00, + 0xa0, 0x48, 0x59, 0xe7, 0x03, 0xbb, 0x1f, 0xb2, 0x82, 0xba, 0x68, 0x96, 0x29, 0xe5, 0x09, 0x25, + 0xb0, 0x34, 0x1d, 0x3f, 0x5d, 0x84, 0xfe, 0x4f, 0xe3, 0x85, 0xc2, 0xc3, 0x08, 0xf2, 0x19, 0x33, + 0x5a, 0x57, 0x94, 0x0d, 0x3a, 0x86, 0x9c, 0x2c, 0xda, 0x99, 0x8b, 0x68, 0x8a, 0x8b, 0xdc, 0x2c, + 0xf0, 0xd6, 0xa0, 0xec, 0x86, 0x96, 0x40, 0x39, 0xcb, 0x96, 0x28, 0xb9, 0xe1, 0x29, 0x1b, 0x1b, + 0x5f, 0x51, 0x97, 0x4a, 0xa9, 0x4b, 0xe8, 0xa1, 0x36, 0xa1, 0xc2, 0xad, 0x64, 0x29, 0x15, 0x0a, + 0x70, 0xd2, 0x31, 0xad, 0x53, 0xe2, 0x05, 0x6a, 0x26, 0x59, 0xa0, 0xae, 0xd1, 0x5c, 0x97, 0x56, + 0x99, 0x9c, 0x0c, 0x1c, 0x63, 0x19, 0xd0, 0x69, 0xe0, 0xff, 0x1a, 0xf7, 0xd4, 0xa0, 0x36, 0x3e, + 0x83, 0xa5, 0x18, 0x55, 0xd4, 0x61, 0x1f, 0x42, 0x75, 0xc4, 0xc9, 0x56, 0x68, 0x0f, 0xa4, 0x0f, + 0x55, 0x04, 0xad, 0x6b, 0x0f, 0x88, 0xf1, 0xfb, 0x22, 0x14, 0x4e, 0xce, 0xe8, 0x70, 0xa6, 0xaf, + 0x3d, 0x80, 0x5a, 0x74, 0xcd, 0x2b, 0x71, 0xb7, 0x30, 0xa1, 0x9e, 0x8a, 0x00, 0x7c, 0x83, 0x83, + 0x30, 0x2a, 0x13, 0xe5, 0x10, 0x3d, 0x82, 0x42, 0x48, 0x6c, 0x32, 0x0e, 0x99, 0xbf, 0xd1, 0x67, + 0xcb, 0xc4, 0xcc, 0x7c, 0xe9, 0x56, 0x97, 0xb1, 0x4d, 0x21, 0x86, 0x3e, 0x81, 0x72, 0x48, 0x02, + 0x6c, 0x0f, 0x29, 0x3e, 0x79, 0x16, 0x48, 0x0d, 0x11, 0x48, 0xa5, 0x2e, 0x63, 0x74, 0xda, 0x66, + 0x89, 0x8b, 0x74, 0x9c, 0xc4, 0x63, 0xac, 0xf0, 0x6e, 0xef, 0xe0, 0x5d, 0xba, 0x26, 0x5d, 0x9d, + 0xea, 0x28, 0xde, 0x40, 0x47, 0x89, 0x4f, 0xdb, 0xa5, 0x65, 0x1f, 0x2f, 0x4f, 0x30, 0xd3, 0x51, + 0xba, 0xc9, 0x3e, 0xc4, 0xbc, 0x5d, 0x82, 0x9e, 0x42, 0x33, 0x42, 0x9b, 0xe2, 0xe4, 0xd8, 0xc4, + 0xb6, 0x3c, 0xdf, 0xeb, 0xe1, 0x66, 0x99, 0x41, 0xb1, 0x20, 0xa0, 0xc8, 0x1f, 0x53, 0xa2, 0xb9, + 0x32, 0x11, 0x3f, 0x12, 0xd2, 0x8c, 0x8e, 0x3e, 0x01, 0x34, 0xad, 0xa8, 0x09, 0xcc, 0x74, 0x8b, + 0x53, 0x73, 0xd0, 0xc7, 0x80, 0xce, 0xdd, 0x8b, 0x64, 0x21, 0x57, 0x61, 0xa9, 0xb4, 0xc1, 0x38, + 0x6a, 0x05, 0xf7, 0x0c, 0x16, 0xa7, 0x9f, 0x86, 0xd5, 0xab, 0x4b, 0xc8, 0x46, 0x90, 0x7c, 0x13, + 0x7e, 0x0e, 0xef, 0xa7, 0xbf, 0x05, 0x17, 0xae, 0xf9, 0x16, 0x5c, 0xc6, 0x33, 0x1e, 0x81, 0xc4, + 0x27, 0xf6, 0x80, 0x1f, 0xa3, 0xc6, 0x8e, 0x51, 0x66, 0x14, 0xb6, 0xff, 0x4d, 0xa8, 0xb8, 0xde, + 0xc0, 0xf5, 0x30, 0xe7, 0xd7, 0x19, 0x1f, 0x38, 0x49, 0x0a, 0x04, 0x78, 0xe8, 0x13, 0x21, 0xd0, + 0xe0, 0x02, 0x9c, 0x44, 0x05, 0x8c, 0x5f, 0x42, 0x81, 0x7b, 0x2d, 0xaa, 0x40, 0xb1, 0x73, 0xfc, + 0xc5, 0xee, 0x61, 0xa7, 0xdd, 0x78, 0x0f, 0x2d, 0x40, 0xf9, 0xf3, 0xd3, 0xc3, 0x93, 0xdd, 0x76, + 0xe7, 0xf8, 0x69, 0x43, 0x43, 0x35, 0x80, 0xfd, 0x93, 0xa3, 0xa3, 0xce, 0x8b, 0x17, 0x74, 0x9c, + 0xa1, 0x6c, 0x31, 0x3e, 0x68, 0x37, 0xb2, 0xa8, 0x0a, 0xa5, 0xf6, 0xc1, 0xe1, 0x01, 0x63, 0xe6, + 0x8c, 0xbf, 0x67, 0x01, 0xf1, 0x80, 0xd8, 0xc3, 0x7d, 0xd7, 0x53, 0xde, 0x6b, 0x77, 0x13, 0x97, + 0x71, 0x7f, 0xcd, 0xcd, 0xdf, 0x5f, 0xf3, 0xb7, 0xf7, 0xd7, 0xc2, 0x2c, 0x7f, 0x4d, 0xf5, 0xc0, + 0xe2, 0x5c, 0x3d, 0xb0, 0x74, 0x1b, 0x0f, 0x34, 0xfe, 0x9c, 0x81, 0xa5, 0x98, 0x35, 0x45, 0x52, + 0xbe, 0x33, 0x73, 0xc6, 0xb2, 0x66, 0xee, 0xca, 0xac, 0x99, 0x0a, 0x60, 0x7e, 0xae, 0x00, 0x16, + 0x6e, 0x05, 0x60, 0x5b, 0xe2, 0x17, 0x7b, 0x08, 0xc5, 0x8f, 0xa9, 0x5d, 0x75, 0x4c, 0x63, 0x05, + 0x96, 0xe3, 0x5a, 0xc4, 0x2b, 0xff, 0xbf, 0x1a, 0x2c, 0x72, 0x46, 0xa2, 0x37, 0x92, 0x6a, 0x9c, + 0x8f, 0xa0, 0xa1, 0x18, 0x47, 0xad, 0xbc, 0xea, 0x91, 0x79, 0x78, 0x09, 0x16, 0x13, 0x15, 0x8d, + 0x96, 0x6c, 0x42, 0x74, 0x3f, 0xd1, 0x71, 0xc9, 0xa9, 0xf5, 0x54, 0x07, 0xea, 0x3e, 0xdb, 0x98, + 0xe5, 0x7a, 0xbd, 0xc1, 0xd8, 0xc1, 0x51, 0x5f, 0x2c, 0x71, 0x6f, 0xca, 0x3e, 0x4a, 0x47, 0xc8, + 0x99, 0x35, 0x3e, 0x51, 0x8e, 0x8d, 0x57, 0x32, 0xa1, 0x5c, 0xb3, 0x3d, 0x13, 0x57, 0x7b, 0x59, + 0x7b, 0xe6, 0x2f, 0x59, 0xa8, 0xc5, 0xa5, 0x53, 0x1c, 0x58, 0xbb, 0xc2, 0x81, 0x33, 0xb3, 0xea, + 0x84, 0xec, 0xf5, 0xea, 0x84, 0xf8, 0xc5, 0x9f, 0x9b, 0xc3, 0xc5, 0x9f, 0x9f, 0xc3, 0xc5, 0x5f, + 0x98, 0x7f, 0x22, 0x2d, 0xde, 0x3e, 0x91, 0x96, 0x66, 0x24, 0x52, 0xe3, 0x27, 0xb0, 0x92, 0xee, + 0x4d, 0x48, 0x87, 0xd2, 0x64, 0xba, 0xc6, 0x0b, 0x60, 0x39, 0x36, 0x42, 0x68, 0x2a, 0xc9, 0x2d, + 0xde, 0xa1, 0xbc, 0xab, 0x0c, 0x67, 0x3c, 0x87, 0x7b, 0x29, 0x8b, 0x0a, 0xaf, 0xbe, 0x61, 0x5e, + 0x98, 0xe8, 0x7a, 0xe2, 0x7a, 0x6e, 0xf8, 0x3a, 0x7e, 0x82, 0x1b, 0xea, 0x5a, 0x07, 0x3d, 0x4d, + 0x97, 0xc8, 0x34, 0xff, 0xcb, 0x40, 0xa5, 0x6b, 0x13, 0x39, 0xef, 0xee, 0x2e, 0x80, 0x5b, 0x35, + 0xf4, 0x3a, 0xb0, 0xc0, 0x62, 0x82, 0xa6, 0x70, 0xc7, 0x26, 0xf8, 0x46, 0xa1, 0x50, 0x95, 0x53, + 0xdb, 0x36, 0xc1, 0xe8, 0x08, 0xea, 0x51, 0x9b, 0x8e, 0x2b, 0xbb, 0x49, 0x4c, 0xd4, 0xa2, 0xc9, + 0x4c, 0xdd, 0x23, 0x58, 0x0a, 0x6d, 0x82, 0x07, 0x03, 0x97, 0x55, 0x63, 0x7d, 0xcf, 0x26, 0xe3, + 0x40, 0xc4, 0x84, 0x89, 0x26, 0xac, 0xae, 0xe4, 0xec, 0xfc, 0xa1, 0x0a, 0xa5, 0x23, 0x91, 0x39, + 0xd0, 0x11, 0x54, 0x79, 0xa3, 0x5f, 0xfc, 0x82, 0xdb, 0x48, 0x36, 0xa3, 0x63, 0xff, 0x5e, 0xf4, + 0x0f, 0x66, 0xb1, 0x85, 0x97, 0xb5, 0xa1, 0xfc, 0x14, 0x13, 0xa1, 0x4b, 0x4f, 0x0a, 0x47, 0x3f, + 0x04, 0xf4, 0xb5, 0x54, 0x9e, 0xd0, 0x72, 0x04, 0x55, 0xee, 0x24, 0xb3, 0x36, 0x15, 0x73, 0xc7, + 0xe9, 0x4d, 0x25, 0x5c, 0xff, 0x19, 0x54, 0x68, 0xf0, 0x72, 0x5e, 0x88, 0xd6, 0xd2, 0xfa, 0xed, + 0x52, 0xd7, 0x7a, 0x3a, 0x53, 0x68, 0xc2, 0xb0, 0xdc, 0x95, 0xc7, 0x53, 0x5e, 0xa0, 0xe8, 0x41, + 0x72, 0x56, 0xea, 0xeb, 0x57, 0x7f, 0x78, 0x95, 0x98, 0x58, 0xe6, 0x39, 0x54, 0x58, 0x08, 0x8b, + 0x97, 0xe7, 0x7a, 0x32, 0xd1, 0xab, 0xf5, 0xaf, 0xbe, 0x31, 0x83, 0x1b, 0x61, 0xc9, 0xaf, 0x76, + 0xa1, 0x6c, 0x4a, 0x3c, 0x56, 0x3e, 0xa8, 0x58, 0xa6, 0xd5, 0x05, 0x12, 0x4b, 0xce, 0x8b, 0x61, + 0x39, 0x55, 0x2d, 0xe8, 0xeb, 0xe9, 0x4c, 0xa1, 0xe9, 0x6b, 0x58, 0x54, 0xf2, 0x94, 0xd8, 0x9d, + 0x91, 0x7a, 0x98, 0xb8, 0xb9, 0xef, 0x5f, 0x2a, 0x23, 0xb4, 0x5b, 0x80, 0xd4, 0x6c, 0x23, 0xd4, + 0x4f, 0x4d, 0x4d, 0xc9, 0x6e, 0xfa, 0x8f, 0x2e, 0x17, 0x12, 0x0b, 0xbc, 0x84, 0x06, 0xf7, 0x7d, + 0xf1, 0xee, 0x3b, 0x19, 0x38, 0x48, 0xa9, 0x40, 0xd2, 0x7f, 0x4d, 0xe8, 0x1f, 0xce, 0x92, 0x88, + 0x9a, 0x3e, 0x5f, 0x42, 0x83, 0x63, 0xae, 0x28, 0x9e, 0x9e, 0x96, 0xec, 0x7e, 0xeb, 0xc6, 0x4c, + 0x91, 0x48, 0x75, 0x17, 0x6a, 0x4a, 0x4f, 0x92, 0x35, 0x63, 0xa6, 0x66, 0xc5, 0x9b, 0xa1, 0xfa, + 0xd6, 0x0c, 0x81, 0x48, 0xa9, 0x05, 0x48, 0x36, 0x84, 0x95, 0x1d, 0xdf, 0x9f, 0x9a, 0x37, 0xdd, + 0x99, 0x56, 0x91, 0xbe, 0xa4, 0xb5, 0xfc, 0x25, 0x34, 0x38, 0xf6, 0x97, 0x02, 0x92, 0xec, 0x8e, + 0xa6, 0x00, 0x32, 0xdd, 0xde, 0xfc, 0x02, 0xea, 0x6a, 0x27, 0x2d, 0x61, 0xc3, 0xf4, 0xa6, 0xa3, + 0x6a, 0xc3, 0x59, 0x8d, 0xbb, 0xaf, 0x61, 0x31, 0x1e, 0xda, 0x94, 0x18, 0xdb, 0x50, 0x7a, 0x73, + 0x4c, 0xbf, 0x3f, 0x5b, 0x26, 0xd2, 0xfe, 0x1c, 0x2a, 0x4a, 0x3b, 0x4b, 0x4d, 0x0f, 0xd3, 0xbd, + 0x2f, 0x35, 0x3d, 0xa4, 0xf4, 0xc0, 0xf6, 0x72, 0x5f, 0x65, 0x46, 0x67, 0x67, 0x05, 0x76, 0xe3, + 0x7c, 0xfa, 0x43, 0x00, 0x00, 0x00, 0xff, 0xff, 0x38, 0xa1, 0xbf, 0xb5, 0x10, 0x22, 0x00, 0x00, +} diff --git a/pkg/pb/metainfo.proto b/pkg/pb/metainfo.proto index 1f1fc1d1e..16b260c2d 100644 --- a/pkg/pb/metainfo.proto +++ b/pkg/pb/metainfo.proto @@ -48,6 +48,7 @@ message Bucket { int64 default_segment_size = 4; pointerdb.RedundancyScheme default_redundancy_scheme = 5; encryption.EncryptionParameters default_encryption_parameters = 6; + bytes partner_id = 7; } message BucketListItem { @@ -63,6 +64,7 @@ message BucketCreateRequest { int64 default_segment_size = 3; pointerdb.RedundancyScheme default_redundancy_scheme = 4; encryption.EncryptionParameters default_encryption_parameters = 5; + bytes partner_id = 6; } message BucketCreateResponse { diff --git a/proto.lock b/proto.lock index 78dff31c7..032ed15a3 100644 --- a/proto.lock +++ b/proto.lock @@ -1638,6 +1638,11 @@ "id": 6, "name": "default_encryption_parameters", "type": "encryption.EncryptionParameters" + }, + { + "id": 7, + "name": "partner_id", + "type": "bytes" } ] }, @@ -1693,6 +1698,11 @@ "id": 5, "name": "default_encryption_parameters", "type": "encryption.EncryptionParameters" + }, + { + "id": 6, + "name": "partner_id", + "type": "bytes" } ] }, diff --git a/satellite/metainfo/db.go b/satellite/metainfo/db.go index 9ee92e497..778b94ef5 100644 --- a/satellite/metainfo/db.go +++ b/satellite/metainfo/db.go @@ -18,6 +18,8 @@ type BucketsDB interface { CreateBucket(ctx context.Context, bucket storj.Bucket) (_ storj.Bucket, err error) // Get returns an existing bucket GetBucket(ctx context.Context, bucketName []byte, projectID uuid.UUID) (bucket storj.Bucket, err error) + // UpdateBucket updates an existing bucket + UpdateBucket(ctx context.Context, bucket storj.Bucket) (_ storj.Bucket, err error) // Delete deletes a bucket DeleteBucket(ctx context.Context, bucketName []byte, projectID uuid.UUID) (err error) // List returns all buckets for a project diff --git a/satellite/metainfo/metainfo.go b/satellite/metainfo/metainfo.go index 6ebc6e699..4ae73a612 100644 --- a/satellite/metainfo/metainfo.go +++ b/satellite/metainfo/metainfo.go @@ -674,8 +674,13 @@ func (endpoint *Endpoint) GetBucket(ctx context.Context, req *pb.BucketGetReques return nil, status.Errorf(codes.Internal, err.Error()) } + convBucket, err := convertBucketToProto(ctx, bucket) + if err != nil { + return resp, err + } + return &pb.BucketGetResponse{ - Bucket: convertBucketToProto(ctx, bucket), + Bucket: convBucket, }, nil } @@ -702,19 +707,56 @@ func (endpoint *Endpoint) CreateBucket(ctx context.Context, req *pb.BucketCreate return nil, status.Errorf(codes.InvalidArgument, err.Error()) } - bucket, err := convertProtoToBucket(req, keyInfo.ProjectID) - if err != nil { - return nil, status.Errorf(codes.InvalidArgument, err.Error()) + // checks if bucket exists before updates it or makes a new entry + bucket, err := endpoint.metainfo.GetBucket(ctx, req.GetName(), keyInfo.ProjectID) + if err == nil { + var partnerID uuid.UUID + err = partnerID.UnmarshalJSON(req.GetPartnerId()) + if err != nil { + return nil, status.Errorf(codes.InvalidArgument, err.Error()) + } + + // partnerID not set + if partnerID.IsZero() { + return resp, status.Errorf(codes.AlreadyExists, "Bucket already exists") + } + + //update the bucket + bucket.PartnerID = partnerID + bucket, err = endpoint.metainfo.UpdateBucket(ctx, bucket) + + pbBucket, err := convertBucketToProto(ctx, bucket) + if err != nil { + return resp, status.Errorf(codes.Internal, err.Error()) + } + + return &pb.BucketCreateResponse{ + Bucket: pbBucket, + }, nil } - bucket, err = endpoint.metainfo.CreateBucket(ctx, bucket) - if err != nil { - return nil, Error.Wrap(err) - } + // create the bucket + if storj.ErrBucketNotFound.Has(err) { + bucket, err := convertProtoToBucket(req, keyInfo.ProjectID) + if err != nil { + return nil, status.Errorf(codes.InvalidArgument, err.Error()) + } - return &pb.BucketCreateResponse{ - Bucket: convertBucketToProto(ctx, bucket), - }, nil + bucket, err = endpoint.metainfo.CreateBucket(ctx, bucket) + if err != nil { + return nil, Error.Wrap(err) + } + + convBucket, err := convertBucketToProto(ctx, bucket) + if err != nil { + return resp, err + } + + return &pb.BucketCreateResponse{ + Bucket: convBucket, + }, nil + } + return nil, Error.Wrap(err) } // DeleteBucket deletes a bucket @@ -805,7 +847,7 @@ func (endpoint *Endpoint) SetBucketAttribution(context.Context, *pb.BucketSetAtt return resp, status.Error(codes.Unimplemented, "not implemented") } -func convertProtoToBucket(req *pb.BucketCreateRequest, projectID uuid.UUID) (storj.Bucket, error) { +func convertProtoToBucket(req *pb.BucketCreateRequest, projectID uuid.UUID) (bucket storj.Bucket, err error) { bucketID, err := uuid.New() if err != nil { return storj.Bucket{}, err @@ -813,10 +855,21 @@ func convertProtoToBucket(req *pb.BucketCreateRequest, projectID uuid.UUID) (sto defaultRS := req.GetDefaultRedundancyScheme() defaultEP := req.GetDefaultEncryptionParameters() + + var partnerID uuid.UUID + err = partnerID.UnmarshalJSON(req.GetPartnerId()) + + // bucket's partnerID should never be set + // it is always read back from buckets DB + if err != nil && !partnerID.IsZero() { + return bucket, errs.New("Invalid uuid") + } + return storj.Bucket{ ID: *bucketID, Name: string(req.GetName()), ProjectID: projectID, + PartnerID: partnerID, PathCipher: storj.CipherSuite(req.GetPathCipher()), DefaultSegmentsSize: req.GetDefaultSegmentSize(), DefaultRedundancyScheme: storj.RedundancyScheme{ @@ -834,11 +887,16 @@ func convertProtoToBucket(req *pb.BucketCreateRequest, projectID uuid.UUID) (sto }, nil } -func convertBucketToProto(ctx context.Context, bucket storj.Bucket) (pbBucket *pb.Bucket) { +func convertBucketToProto(ctx context.Context, bucket storj.Bucket) (pbBucket *pb.Bucket, err error) { rs := bucket.DefaultRedundancyScheme + partnerID, err := bucket.PartnerID.MarshalJSON() + if err != nil { + return pbBucket, status.Errorf(codes.Internal, "UUID marshal error") + } return &pb.Bucket{ Name: []byte(bucket.Name), PathCipher: pb.CipherSuite(int(bucket.PathCipher)), + PartnerId: partnerID, CreatedAt: bucket.Created, DefaultSegmentSize: bucket.DefaultSegmentsSize, DefaultRedundancyScheme: &pb.RedundancyScheme{ @@ -853,7 +911,7 @@ func convertBucketToProto(ctx context.Context, bucket storj.Bucket) (pbBucket *p CipherSuite: pb.CipherSuite(int(bucket.DefaultEncryptionParameters.CipherSuite)), BlockSize: int64(bucket.DefaultEncryptionParameters.BlockSize), }, - } + }, nil } // BeginObject begins object diff --git a/satellite/metainfo/service.go b/satellite/metainfo/service.go index acd5df12c..d83e34ec5 100644 --- a/satellite/metainfo/service.go +++ b/satellite/metainfo/service.go @@ -182,6 +182,12 @@ func (s *Service) GetBucket(ctx context.Context, bucketName []byte, projectID uu return s.bucketsDB.GetBucket(ctx, bucketName, projectID) } +// UpdateBucket returns an updated bucket in the buckets db +func (s *Service) UpdateBucket(ctx context.Context, bucket storj.Bucket) (_ storj.Bucket, err error) { + defer mon.Task()(&ctx)(&err) + return s.bucketsDB.UpdateBucket(ctx, bucket) +} + // DeleteBucket deletes a bucket from the bucekts db func (s *Service) DeleteBucket(ctx context.Context, bucketName []byte, projectID uuid.UUID) (err error) { defer mon.Task()(&ctx)(&err) diff --git a/satellite/satellitedb/buckets_test.go b/satellite/satellitedb/attribution_test.go similarity index 79% rename from satellite/satellitedb/buckets_test.go rename to satellite/satellitedb/attribution_test.go index 43bc071ff..e28878f6a 100644 --- a/satellite/satellitedb/buckets_test.go +++ b/satellite/satellitedb/attribution_test.go @@ -7,6 +7,7 @@ import ( "testing" "time" + "github.com/skyrings/skyring-common/tools/uuid" "github.com/stretchr/testify/require" "storj.io/storj/internal/testcontext" @@ -87,5 +88,21 @@ func TestUsers(t *testing.T) { DefaultSegmentsSize: int64(100), }) require.NoError(t, err) + + // update a bucket with partnerID + bucket, err := db.Buckets().UpdateBucket(ctx, storj.Bucket{ + ID: testrand.UUID(), + Name: "testbucket", + ProjectID: proj.ID, + PartnerID: proj.ID, + Created: time.Now(), + PathCipher: storj.EncAESGCM, + DefaultSegmentsSize: int64(100), + }) + require.NoError(t, err) + bucket, err = db.Buckets().GetBucket(ctx, []byte("testbucket"), proj.ID) + require.NoError(t, err) + flag := uuid.Equal(bucket.PartnerID, proj.ID) + require.True(t, flag) }) } diff --git a/satellite/satellitedb/buckets.go b/satellite/satellitedb/buckets.go index 6a4c844e6..5636e0b74 100644 --- a/satellite/satellitedb/buckets.go +++ b/satellite/satellitedb/buckets.go @@ -28,6 +28,14 @@ func (db *DB) Buckets() metainfo.BucketsDB { // CreateBucket creates a new bucket func (db *bucketsDB) CreateBucket(ctx context.Context, bucket storj.Bucket) (_ storj.Bucket, err error) { defer mon.Task()(&ctx)(&err) + + partnerID := dbx.BucketMetainfo_Create_Fields{} + if !bucket.PartnerID.IsZero() { + partnerID = dbx.BucketMetainfo_Create_Fields{ + PartnerId: dbx.BucketMetainfo_PartnerId(bucket.PartnerID[:]), + } + } + row, err := db.db.Create_BucketMetainfo(ctx, dbx.BucketMetainfo_Id(bucket.ID[:]), dbx.BucketMetainfo_ProjectId(bucket.ProjectID[:]), @@ -42,9 +50,7 @@ func (db *bucketsDB) CreateBucket(ctx context.Context, bucket storj.Bucket) (_ s dbx.BucketMetainfo_DefaultRedundancyRepairShares(int(bucket.DefaultRedundancyScheme.RepairShares)), dbx.BucketMetainfo_DefaultRedundancyOptimalShares(int(bucket.DefaultRedundancyScheme.OptimalShares)), dbx.BucketMetainfo_DefaultRedundancyTotalShares(int(bucket.DefaultRedundancyScheme.TotalShares)), - dbx.BucketMetainfo_Create_Fields{ - PartnerId: dbx.BucketMetainfo_PartnerId(bucket.PartnerID[:]), - }, + partnerID, ) if err != nil { return storj.Bucket{}, storj.ErrBucket.Wrap(err) @@ -73,6 +79,24 @@ func (db *bucketsDB) GetBucket(ctx context.Context, bucketName []byte, projectID return convertDBXtoBucket(dbxBucket) } +// UpdateBucket upates a bucket +func (db *bucketsDB) UpdateBucket(ctx context.Context, bucket storj.Bucket) (_ storj.Bucket, err error) { + defer mon.Task()(&ctx)(&err) + + if bucket.PartnerID.IsZero() { + return storj.Bucket{}, Error.New("partnerId is zero") + } + + var updateFields dbx.BucketMetainfo_Update_Fields + updateFields.PartnerId = dbx.BucketMetainfo_PartnerId(bucket.PartnerID[:]) + + dbxBucket, err := db.db.Update_BucketMetainfo_By_ProjectId_And_Name(ctx, dbx.BucketMetainfo_ProjectId(bucket.ProjectID[:]), dbx.BucketMetainfo_Name([]byte(bucket.Name)), updateFields) + if err != nil { + return storj.Bucket{}, storj.ErrBucket.Wrap(err) + } + return convertDBXtoBucket(dbxBucket) +} + // DeleteBucket deletes a bucket func (db *bucketsDB) DeleteBucket(ctx context.Context, bucketName []byte, projectID uuid.UUID) (err error) { defer mon.Task()(&ctx)(&err) @@ -166,13 +190,14 @@ func (db *bucketsDB) ListBuckets(ctx context.Context, projectID uuid.UUID, listO func convertDBXtoBucket(dbxBucket *dbx.BucketMetainfo) (bucket storj.Bucket, err error) { id, err := bytesToUUID(dbxBucket.Id) if err != nil { - return bucket, err + return bucket, storj.ErrBucket.Wrap(err) } project, err := bytesToUUID(dbxBucket.ProjectId) if err != nil { - return bucket, err + return bucket, storj.ErrBucket.Wrap(err) } - return storj.Bucket{ + + bucket = storj.Bucket{ ID: id, Name: string(dbxBucket.Name), ProjectID: project, @@ -191,5 +216,15 @@ func convertDBXtoBucket(dbxBucket *dbx.BucketMetainfo) (bucket storj.Bucket, err CipherSuite: storj.CipherSuite(dbxBucket.DefaultEncryptionCipherSuite), BlockSize: int32(dbxBucket.DefaultEncryptionBlockSize), }, - }, nil + } + + if dbxBucket.PartnerId != nil { + partnerID, err := bytesToUUID(dbxBucket.PartnerId) + if err != nil { + return bucket, storj.ErrBucket.Wrap(err) + } + bucket.PartnerID = partnerID + } + + return bucket, nil } diff --git a/satellite/satellitedb/dbx/satellitedb.dbx b/satellite/satellitedb/dbx/satellitedb.dbx index 688c4525f..548509531 100644 --- a/satellite/satellitedb/dbx/satellitedb.dbx +++ b/satellite/satellitedb/dbx/satellitedb.dbx @@ -767,7 +767,7 @@ model bucket_metainfo ( field id blob field project_id project.id restrict field name blob - field partner_id blob (nullable) + field partner_id blob (nullable, updatable) field path_cipher int @@ -787,6 +787,10 @@ model bucket_metainfo ( ) create bucket_metainfo () +update bucket_metainfo ( + where bucket_metainfo.project_id = ? + where bucket_metainfo.name = ? +) read one ( select bucket_metainfo diff --git a/satellite/satellitedb/dbx/satellitedb.dbx.go b/satellite/satellitedb/dbx/satellitedb.dbx.go index 0bad126be..c27b350f5 100644 --- a/satellite/satellitedb/dbx/satellitedb.dbx.go +++ b/satellite/satellitedb/dbx/satellitedb.dbx.go @@ -4298,6 +4298,7 @@ type BucketMetainfo_Create_Fields struct { } type BucketMetainfo_Update_Fields struct { + PartnerId BucketMetainfo_PartnerId_Field DefaultSegmentSize BucketMetainfo_DefaultSegmentSize_Field DefaultEncryptionCipherSuite BucketMetainfo_DefaultEncryptionCipherSuite_Field DefaultEncryptionBlockSize BucketMetainfo_DefaultEncryptionBlockSize_Field @@ -8424,6 +8425,92 @@ func (obj *postgresImpl) Update_Offer_By_Id(ctx context.Context, return offer, nil } +func (obj *postgresImpl) Update_BucketMetainfo_By_ProjectId_And_Name(ctx context.Context, + bucket_metainfo_project_id BucketMetainfo_ProjectId_Field, + bucket_metainfo_name BucketMetainfo_Name_Field, + update BucketMetainfo_Update_Fields) ( + bucket_metainfo *BucketMetainfo, err error) { + var __sets = &__sqlbundle_Hole{} + + var __embed_stmt = __sqlbundle_Literals{Join: "", SQLs: []__sqlbundle_SQL{__sqlbundle_Literal("UPDATE bucket_metainfos SET "), __sets, __sqlbundle_Literal(" WHERE bucket_metainfos.project_id = ? AND bucket_metainfos.name = ? RETURNING bucket_metainfos.id, bucket_metainfos.project_id, bucket_metainfos.name, bucket_metainfos.partner_id, bucket_metainfos.path_cipher, bucket_metainfos.created_at, bucket_metainfos.default_segment_size, bucket_metainfos.default_encryption_cipher_suite, bucket_metainfos.default_encryption_block_size, bucket_metainfos.default_redundancy_algorithm, bucket_metainfos.default_redundancy_share_size, bucket_metainfos.default_redundancy_required_shares, bucket_metainfos.default_redundancy_repair_shares, bucket_metainfos.default_redundancy_optimal_shares, bucket_metainfos.default_redundancy_total_shares")}} + + __sets_sql := __sqlbundle_Literals{Join: ", "} + var __values []interface{} + var __args []interface{} + + if update.PartnerId._set { + __values = append(__values, update.PartnerId.value()) + __sets_sql.SQLs = append(__sets_sql.SQLs, __sqlbundle_Literal("partner_id = ?")) + } + + if update.DefaultSegmentSize._set { + __values = append(__values, update.DefaultSegmentSize.value()) + __sets_sql.SQLs = append(__sets_sql.SQLs, __sqlbundle_Literal("default_segment_size = ?")) + } + + if update.DefaultEncryptionCipherSuite._set { + __values = append(__values, update.DefaultEncryptionCipherSuite.value()) + __sets_sql.SQLs = append(__sets_sql.SQLs, __sqlbundle_Literal("default_encryption_cipher_suite = ?")) + } + + if update.DefaultEncryptionBlockSize._set { + __values = append(__values, update.DefaultEncryptionBlockSize.value()) + __sets_sql.SQLs = append(__sets_sql.SQLs, __sqlbundle_Literal("default_encryption_block_size = ?")) + } + + if update.DefaultRedundancyAlgorithm._set { + __values = append(__values, update.DefaultRedundancyAlgorithm.value()) + __sets_sql.SQLs = append(__sets_sql.SQLs, __sqlbundle_Literal("default_redundancy_algorithm = ?")) + } + + if update.DefaultRedundancyShareSize._set { + __values = append(__values, update.DefaultRedundancyShareSize.value()) + __sets_sql.SQLs = append(__sets_sql.SQLs, __sqlbundle_Literal("default_redundancy_share_size = ?")) + } + + if update.DefaultRedundancyRequiredShares._set { + __values = append(__values, update.DefaultRedundancyRequiredShares.value()) + __sets_sql.SQLs = append(__sets_sql.SQLs, __sqlbundle_Literal("default_redundancy_required_shares = ?")) + } + + if update.DefaultRedundancyRepairShares._set { + __values = append(__values, update.DefaultRedundancyRepairShares.value()) + __sets_sql.SQLs = append(__sets_sql.SQLs, __sqlbundle_Literal("default_redundancy_repair_shares = ?")) + } + + if update.DefaultRedundancyOptimalShares._set { + __values = append(__values, update.DefaultRedundancyOptimalShares.value()) + __sets_sql.SQLs = append(__sets_sql.SQLs, __sqlbundle_Literal("default_redundancy_optimal_shares = ?")) + } + + if update.DefaultRedundancyTotalShares._set { + __values = append(__values, update.DefaultRedundancyTotalShares.value()) + __sets_sql.SQLs = append(__sets_sql.SQLs, __sqlbundle_Literal("default_redundancy_total_shares = ?")) + } + + if len(__sets_sql.SQLs) == 0 { + return nil, emptyUpdate() + } + + __args = append(__args, bucket_metainfo_project_id.value(), bucket_metainfo_name.value()) + + __values = append(__values, __args...) + __sets.SQL = __sets_sql + + var __stmt = __sqlbundle_Render(obj.dialect, __embed_stmt) + obj.logStmt(__stmt, __values...) + + bucket_metainfo = &BucketMetainfo{} + err = obj.driver.QueryRow(__stmt, __values...).Scan(&bucket_metainfo.Id, &bucket_metainfo.ProjectId, &bucket_metainfo.Name, &bucket_metainfo.PartnerId, &bucket_metainfo.PathCipher, &bucket_metainfo.CreatedAt, &bucket_metainfo.DefaultSegmentSize, &bucket_metainfo.DefaultEncryptionCipherSuite, &bucket_metainfo.DefaultEncryptionBlockSize, &bucket_metainfo.DefaultRedundancyAlgorithm, &bucket_metainfo.DefaultRedundancyShareSize, &bucket_metainfo.DefaultRedundancyRequiredShares, &bucket_metainfo.DefaultRedundancyRepairShares, &bucket_metainfo.DefaultRedundancyOptimalShares, &bucket_metainfo.DefaultRedundancyTotalShares) + if err == sql.ErrNoRows { + return nil, nil + } + if err != nil { + return nil, obj.makeErr(err) + } + return bucket_metainfo, nil +} + func (obj *postgresImpl) Delete_ValueAttribution_By_ProjectId_And_BucketName(ctx context.Context, value_attribution_project_id ValueAttribution_ProjectId_Field, value_attribution_bucket_name ValueAttribution_BucketName_Field) ( @@ -12277,6 +12364,102 @@ func (obj *sqlite3Impl) Update_Offer_By_Id(ctx context.Context, return offer, nil } +func (obj *sqlite3Impl) Update_BucketMetainfo_By_ProjectId_And_Name(ctx context.Context, + bucket_metainfo_project_id BucketMetainfo_ProjectId_Field, + bucket_metainfo_name BucketMetainfo_Name_Field, + update BucketMetainfo_Update_Fields) ( + bucket_metainfo *BucketMetainfo, err error) { + var __sets = &__sqlbundle_Hole{} + + var __embed_stmt = __sqlbundle_Literals{Join: "", SQLs: []__sqlbundle_SQL{__sqlbundle_Literal("UPDATE bucket_metainfos SET "), __sets, __sqlbundle_Literal(" WHERE bucket_metainfos.project_id = ? AND bucket_metainfos.name = ?")}} + + __sets_sql := __sqlbundle_Literals{Join: ", "} + var __values []interface{} + var __args []interface{} + + if update.PartnerId._set { + __values = append(__values, update.PartnerId.value()) + __sets_sql.SQLs = append(__sets_sql.SQLs, __sqlbundle_Literal("partner_id = ?")) + } + + if update.DefaultSegmentSize._set { + __values = append(__values, update.DefaultSegmentSize.value()) + __sets_sql.SQLs = append(__sets_sql.SQLs, __sqlbundle_Literal("default_segment_size = ?")) + } + + if update.DefaultEncryptionCipherSuite._set { + __values = append(__values, update.DefaultEncryptionCipherSuite.value()) + __sets_sql.SQLs = append(__sets_sql.SQLs, __sqlbundle_Literal("default_encryption_cipher_suite = ?")) + } + + if update.DefaultEncryptionBlockSize._set { + __values = append(__values, update.DefaultEncryptionBlockSize.value()) + __sets_sql.SQLs = append(__sets_sql.SQLs, __sqlbundle_Literal("default_encryption_block_size = ?")) + } + + if update.DefaultRedundancyAlgorithm._set { + __values = append(__values, update.DefaultRedundancyAlgorithm.value()) + __sets_sql.SQLs = append(__sets_sql.SQLs, __sqlbundle_Literal("default_redundancy_algorithm = ?")) + } + + if update.DefaultRedundancyShareSize._set { + __values = append(__values, update.DefaultRedundancyShareSize.value()) + __sets_sql.SQLs = append(__sets_sql.SQLs, __sqlbundle_Literal("default_redundancy_share_size = ?")) + } + + if update.DefaultRedundancyRequiredShares._set { + __values = append(__values, update.DefaultRedundancyRequiredShares.value()) + __sets_sql.SQLs = append(__sets_sql.SQLs, __sqlbundle_Literal("default_redundancy_required_shares = ?")) + } + + if update.DefaultRedundancyRepairShares._set { + __values = append(__values, update.DefaultRedundancyRepairShares.value()) + __sets_sql.SQLs = append(__sets_sql.SQLs, __sqlbundle_Literal("default_redundancy_repair_shares = ?")) + } + + if update.DefaultRedundancyOptimalShares._set { + __values = append(__values, update.DefaultRedundancyOptimalShares.value()) + __sets_sql.SQLs = append(__sets_sql.SQLs, __sqlbundle_Literal("default_redundancy_optimal_shares = ?")) + } + + if update.DefaultRedundancyTotalShares._set { + __values = append(__values, update.DefaultRedundancyTotalShares.value()) + __sets_sql.SQLs = append(__sets_sql.SQLs, __sqlbundle_Literal("default_redundancy_total_shares = ?")) + } + + if len(__sets_sql.SQLs) == 0 { + return nil, emptyUpdate() + } + + __args = append(__args, bucket_metainfo_project_id.value(), bucket_metainfo_name.value()) + + __values = append(__values, __args...) + __sets.SQL = __sets_sql + + var __stmt = __sqlbundle_Render(obj.dialect, __embed_stmt) + obj.logStmt(__stmt, __values...) + + bucket_metainfo = &BucketMetainfo{} + _, err = obj.driver.Exec(__stmt, __values...) + if err != nil { + return nil, obj.makeErr(err) + } + + var __embed_stmt_get = __sqlbundle_Literal("SELECT bucket_metainfos.id, bucket_metainfos.project_id, bucket_metainfos.name, bucket_metainfos.partner_id, bucket_metainfos.path_cipher, bucket_metainfos.created_at, bucket_metainfos.default_segment_size, bucket_metainfos.default_encryption_cipher_suite, bucket_metainfos.default_encryption_block_size, bucket_metainfos.default_redundancy_algorithm, bucket_metainfos.default_redundancy_share_size, bucket_metainfos.default_redundancy_required_shares, bucket_metainfos.default_redundancy_repair_shares, bucket_metainfos.default_redundancy_optimal_shares, bucket_metainfos.default_redundancy_total_shares FROM bucket_metainfos WHERE bucket_metainfos.project_id = ? AND bucket_metainfos.name = ?") + + var __stmt_get = __sqlbundle_Render(obj.dialect, __embed_stmt_get) + obj.logStmt("(IMPLIED) "+__stmt_get, __args...) + + err = obj.driver.QueryRow(__stmt_get, __args...).Scan(&bucket_metainfo.Id, &bucket_metainfo.ProjectId, &bucket_metainfo.Name, &bucket_metainfo.PartnerId, &bucket_metainfo.PathCipher, &bucket_metainfo.CreatedAt, &bucket_metainfo.DefaultSegmentSize, &bucket_metainfo.DefaultEncryptionCipherSuite, &bucket_metainfo.DefaultEncryptionBlockSize, &bucket_metainfo.DefaultRedundancyAlgorithm, &bucket_metainfo.DefaultRedundancyShareSize, &bucket_metainfo.DefaultRedundancyRequiredShares, &bucket_metainfo.DefaultRedundancyRepairShares, &bucket_metainfo.DefaultRedundancyOptimalShares, &bucket_metainfo.DefaultRedundancyTotalShares) + if err == sql.ErrNoRows { + return nil, nil + } + if err != nil { + return nil, obj.makeErr(err) + } + return bucket_metainfo, nil +} + func (obj *sqlite3Impl) Delete_ValueAttribution_By_ProjectId_And_BucketName(ctx context.Context, value_attribution_project_id ValueAttribution_ProjectId_Field, value_attribution_bucket_name ValueAttribution_BucketName_Field) ( @@ -14587,6 +14770,18 @@ func (rx *Rx) Update_ApiKey_By_Id(ctx context.Context, return tx.Update_ApiKey_By_Id(ctx, api_key_id, update) } +func (rx *Rx) Update_BucketMetainfo_By_ProjectId_And_Name(ctx context.Context, + bucket_metainfo_project_id BucketMetainfo_ProjectId_Field, + bucket_metainfo_name BucketMetainfo_Name_Field, + update BucketMetainfo_Update_Fields) ( + bucket_metainfo *BucketMetainfo, err error) { + var tx *Tx + if tx, err = rx.getTx(ctx); err != nil { + return + } + return tx.Update_BucketMetainfo_By_ProjectId_And_Name(ctx, bucket_metainfo_project_id, bucket_metainfo_name, update) +} + func (rx *Rx) Update_CertRecord_By_Id(ctx context.Context, certRecord_id CertRecord_Id_Field, update CertRecord_Update_Fields) ( @@ -15216,6 +15411,12 @@ type Methods interface { update ApiKey_Update_Fields) ( api_key *ApiKey, err error) + Update_BucketMetainfo_By_ProjectId_And_Name(ctx context.Context, + bucket_metainfo_project_id BucketMetainfo_ProjectId_Field, + bucket_metainfo_name BucketMetainfo_Name_Field, + update BucketMetainfo_Update_Fields) ( + bucket_metainfo *BucketMetainfo, err error) + Update_CertRecord_By_Id(ctx context.Context, certRecord_id CertRecord_Id_Field, update CertRecord_Update_Fields) ( diff --git a/satellite/satellitedb/locked.go b/satellite/satellitedb/locked.go index ae291ab26..ad97bd15e 100644 --- a/satellite/satellitedb/locked.go +++ b/satellite/satellitedb/locked.go @@ -117,6 +117,13 @@ func (m *lockedBuckets) ListBuckets(ctx context.Context, projectID uuid.UUID, li return m.db.ListBuckets(ctx, projectID, listOpts, allowedBuckets) } +// UpdateBucket updates an existing bucket +func (m *lockedBuckets) UpdateBucket(ctx context.Context, bucket storj.Bucket) (_ storj.Bucket, err error) { + m.Lock() + defer m.Unlock() + return m.db.UpdateBucket(ctx, bucket) +} + // CertDB returns database for storing uplink's public key & ID func (m *locked) CertDB() certdb.DB { m.Lock() diff --git a/satellite/satellitedb/projects.go b/satellite/satellitedb/projects.go index 09d0ffba7..720d3a493 100644 --- a/satellite/satellitedb/projects.go +++ b/satellite/satellitedb/projects.go @@ -75,14 +75,19 @@ func (projects *projects) Insert(ctx context.Context, project *console.Project) return nil, err } + partnerID := dbx.Project_Create_Fields{} + if !project.PartnerID.IsZero() { + partnerID = dbx.Project_Create_Fields{ + PartnerId: dbx.Project_PartnerId(project.PartnerID[:]), + } + } + createdProject, err := projects.db.Create_Project(ctx, dbx.Project_Id(projectID[:]), dbx.Project_Name(project.Name), dbx.Project_Description(project.Description), dbx.Project_UsageLimit(0), - dbx.Project_Create_Fields{ - PartnerId: dbx.Project_PartnerId(project.PartnerID[:]), - }, + partnerID, ) if err != nil { diff --git a/uplink/metainfo/client.go b/uplink/metainfo/client.go index 019560a27..272afe509 100644 --- a/uplink/metainfo/client.go +++ b/uplink/metainfo/client.go @@ -236,19 +236,26 @@ func (client *Client) GetProjectInfo(ctx context.Context) (resp *pb.ProjectInfoR } // CreateBucket creates a new bucket -func (client *Client) CreateBucket(ctx context.Context, bucket storj.Bucket) (_ storj.Bucket, err error) { +func (client *Client) CreateBucket(ctx context.Context, bucket storj.Bucket) (respBucket storj.Bucket, err error) { defer mon.Task()(&ctx)(&err) - req := convertBucketToProtoRequest(bucket) + req, err := convertBucketToProtoRequest(bucket) + if err != nil { + return respBucket, Error.Wrap(err) + } resp, err := client.client.CreateBucket(ctx, &req) if err != nil { return storj.Bucket{}, Error.Wrap(err) } - return convertProtoToBucket(resp.Bucket), nil + respBucket, err = convertProtoToBucket(resp.Bucket) + if err != nil { + return respBucket, Error.Wrap(err) + } + return respBucket, nil } // GetBucket returns a bucket -func (client *Client) GetBucket(ctx context.Context, bucketName string) (_ storj.Bucket, err error) { +func (client *Client) GetBucket(ctx context.Context, bucketName string) (respBucket storj.Bucket, err error) { defer mon.Task()(&ctx)(&err) resp, err := client.client.GetBucket(ctx, &pb.BucketGetRequest{Name: []byte(bucketName)}) if err != nil { @@ -257,7 +264,12 @@ func (client *Client) GetBucket(ctx context.Context, bucketName string) (_ storj } return storj.Bucket{}, Error.Wrap(err) } - return convertProtoToBucket(resp.Bucket), nil + + respBucket, err = convertProtoToBucket(resp.Bucket) + if err != nil { + return respBucket, Error.Wrap(err) + } + return respBucket, nil } // DeleteBucket deletes a bucket @@ -298,11 +310,16 @@ func (client *Client) ListBuckets(ctx context.Context, listOpts storj.BucketList return resultBucketList, nil } -func convertBucketToProtoRequest(bucket storj.Bucket) pb.BucketCreateRequest { +func convertBucketToProtoRequest(bucket storj.Bucket) (bucketReq pb.BucketCreateRequest, err error) { rs := bucket.DefaultRedundancyScheme + partnerID, err := bucket.PartnerID.MarshalJSON() + if err != nil { + return bucketReq, Error.Wrap(err) + } return pb.BucketCreateRequest{ Name: []byte(bucket.Name), PathCipher: pb.CipherSuite(bucket.PathCipher), + PartnerId: partnerID, DefaultSegmentSize: bucket.DefaultSegmentsSize, DefaultRedundancyScheme: &pb.RedundancyScheme{ Type: pb.RedundancyScheme_SchemeType(rs.Algorithm), @@ -316,14 +333,20 @@ func convertBucketToProtoRequest(bucket storj.Bucket) pb.BucketCreateRequest { CipherSuite: pb.CipherSuite(bucket.DefaultEncryptionParameters.CipherSuite), BlockSize: int64(bucket.DefaultEncryptionParameters.BlockSize), }, - } + }, nil } -func convertProtoToBucket(pbBucket *pb.Bucket) storj.Bucket { +func convertProtoToBucket(pbBucket *pb.Bucket) (bucket storj.Bucket, err error) { defaultRS := pbBucket.GetDefaultRedundancyScheme() defaultEP := pbBucket.GetDefaultEncryptionParameters() + var partnerID uuid.UUID + err = partnerID.UnmarshalJSON(pbBucket.GetPartnerId()) + if err != nil && !partnerID.IsZero() { + return bucket, errs.New("Invalid uuid") + } return storj.Bucket{ Name: string(pbBucket.GetName()), + PartnerID: partnerID, PathCipher: storj.CipherSuite(pbBucket.GetPathCipher()), Created: pbBucket.GetCreatedAt(), DefaultSegmentsSize: pbBucket.GetDefaultSegmentSize(), @@ -339,7 +362,7 @@ func convertProtoToBucket(pbBucket *pb.Bucket) storj.Bucket { CipherSuite: storj.CipherSuite(defaultEP.CipherSuite), BlockSize: int32(defaultEP.BlockSize), }, - } + }, nil } // BeginObject begins object creation