diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index c516460..9829596 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -41,7 +41,7 @@ jobs: - uses: actions/setup-go@v3 with: - go-version: '1.18.0' + go-version: '1.23' cache: true - name: Build @@ -180,7 +180,7 @@ jobs: - uses: actions/setup-go@v3 with: - go-version: '1.18.0' + go-version: '1.23' cache: true - name: Build @@ -270,7 +270,7 @@ jobs: - uses: actions/setup-go@v3 with: - go-version: '1.18.0' + go-version: '1.23' cache: true - name: Build @@ -402,7 +402,7 @@ jobs: - uses: actions/setup-go@v3 with: - go-version: '1.18.0' + go-version: '1.23' cache: "true" - name: Creating kind cluster @@ -550,7 +550,7 @@ jobs: - uses: actions/setup-go@v3 with: - go-version: '1.18.0' + go-version: '1.23' cache: true - name: Build diff --git a/.github/workflows/nightly.yaml b/.github/workflows/nightly.yaml index e8460c0..2f31c7e 100644 --- a/.github/workflows/nightly.yaml +++ b/.github/workflows/nightly.yaml @@ -26,7 +26,7 @@ jobs: - uses: actions/setup-go@v3 with: - go-version: '1.18.0' + go-version: '1.23' cache: true - name: Creating kind cluster @@ -147,7 +147,7 @@ jobs: - uses: actions/setup-go@v3 with: - go-version: '1.18.0' + go-version: '1.23' cache: true - name: Creating kind cluster diff --git a/.github/workflows/perf.yaml b/.github/workflows/perf.yaml index 5c7b660..4499ccb 100644 --- a/.github/workflows/perf.yaml +++ b/.github/workflows/perf.yaml @@ -29,7 +29,7 @@ jobs: - uses: actions/setup-go@v3 with: - go-version: '1.18.0' + go-version: '1.23' cache: true - name: Creating kind cluster diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index fbc5fcc..bb3a26a 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -18,7 +18,7 @@ jobs: - run: git fetch --force --tags - uses: actions/setup-go@v5 with: - go-version: 1.18 + go-version: 1.23 cache: true - uses: docker/login-action@v3 with: @@ -46,7 +46,7 @@ jobs: - run: git fetch --force --tags - uses: actions/setup-go@v3 with: - go-version: 1.18 + go-version: 1.23 cache: true - name: Set up QEMU diff --git a/Dockerfile b/Dockerfile index a1ca91e..a6098ab 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,4 @@ - -FROM golang:1.18 AS builder +FROM golang:1.23 AS builder ENV CGO_ENABLED=0 diff --git a/Makefile b/Makefile index 7087259..5ed2f1e 100644 --- a/Makefile +++ b/Makefile @@ -1,19 +1,29 @@ # Variables BINARY_NAME=milvus-backup +PKG := github.com/zilliztech/milvus-backup VERSION=$(shell git describe --tags --always) COMMIT=$(shell git rev-parse --short HEAD) DATE=$(shell date -u '+%Y-%m-%dT%H:%M:%SZ') +LDFLAGS += -X "$(PKG)/version.Version=$(VERSION)" +LDFLAGS += -X "$(PKG)/version.Commit=$(COMMIT)" +LDFLAGS += -X "$(PKG)/version.Date=$(DATE)" + # Default target all: gen build # Build the binary build: @echo "Building binary..." - GO111MODULE=on CGO_ENABLED=0 go build -ldflags "-X main.version=$(VERSION) -X main.commit=$(COMMIT) -X main.date=$(DATE)" -o $(BINARY_NAME) + GO111MODULE=on CGO_ENABLED=0 go build -ldflags '$(LDFLAGS)' -o $(BINARY_NAME) gen: ./scripts/gen_swag.sh ./scripts/gen_proto.sh +fmt: + @echo Formatting code... + @goimports -w --local $(PKG) ./ + @echo Format code done + .PHONY: all build gen \ No newline at end of file diff --git a/cmd/backup_yaml.go b/cmd/backup_yaml.go index 20e4492..d1e2ad0 100644 --- a/cmd/backup_yaml.go +++ b/cmd/backup_yaml.go @@ -3,9 +3,11 @@ package cmd import ( "fmt" "strings" + "github.com/spf13/cobra" - "github.com/zilliztech/milvus-backup/core/paramtable" "gopkg.in/yaml.v3" + + "github.com/zilliztech/milvus-backup/core/paramtable" ) var configCmd = &cobra.Command{ diff --git a/cmd/check.go b/cmd/check.go index 6b31a0a..ec8b66a 100644 --- a/cmd/check.go +++ b/cmd/check.go @@ -5,6 +5,7 @@ import ( "fmt" "github.com/spf13/cobra" + "github.com/zilliztech/milvus-backup/core" "github.com/zilliztech/milvus-backup/core/paramtable" ) @@ -20,7 +21,7 @@ var checkCmd = &cobra.Command{ params.Init() context := context.Background() - backupContext := core.CreateBackupContext(context, params) + backupContext := core.CreateBackupContext(context, ¶ms) resp := backupContext.Check(context) fmt.Println(resp) diff --git a/cmd/create.go b/cmd/create.go index 266ed2c..a527023 100644 --- a/cmd/create.go +++ b/cmd/create.go @@ -8,6 +8,7 @@ import ( jsoniter "github.com/json-iterator/go" "github.com/spf13/cobra" + "github.com/zilliztech/milvus-backup/core" "github.com/zilliztech/milvus-backup/core/paramtable" "github.com/zilliztech/milvus-backup/core/proto/backuppb" @@ -35,7 +36,7 @@ var createBackupCmd = &cobra.Command{ params.Init() context := context.Background() - backupContext := core.CreateBackupContext(context, params) + backupContext := core.CreateBackupContext(context, ¶ms) start := time.Now().Unix() var collectionNameArr []string diff --git a/cmd/delete.go b/cmd/delete.go index a073687..7ea97ad 100644 --- a/cmd/delete.go +++ b/cmd/delete.go @@ -5,6 +5,7 @@ import ( "fmt" "github.com/spf13/cobra" + "github.com/zilliztech/milvus-backup/core" "github.com/zilliztech/milvus-backup/core/paramtable" "github.com/zilliztech/milvus-backup/core/proto/backuppb" @@ -24,7 +25,7 @@ var deleteBackupCmd = &cobra.Command{ params.Init() context := context.Background() - backupContext := core.CreateBackupContext(context, params) + backupContext := core.CreateBackupContext(context, ¶ms) resp := backupContext.DeleteBackup(context, &backuppb.DeleteBackupRequest{ BackupName: deleteBackName, diff --git a/cmd/get.go b/cmd/get.go index 2828603..33ca4f9 100644 --- a/cmd/get.go +++ b/cmd/get.go @@ -6,6 +6,7 @@ import ( "fmt" "github.com/spf13/cobra" + "github.com/zilliztech/milvus-backup/core" "github.com/zilliztech/milvus-backup/core/paramtable" "github.com/zilliztech/milvus-backup/core/proto/backuppb" @@ -27,7 +28,7 @@ var getBackupCmd = &cobra.Command{ params.Init() context := context.Background() - backupContext := core.CreateBackupContext(context, params) + backupContext := core.CreateBackupContext(context, ¶ms) resp := backupContext.GetBackup(context, &backuppb.GetBackupRequest{ BackupName: getBackName, diff --git a/cmd/list.go b/cmd/list.go index 4b26242..eab6b4b 100644 --- a/cmd/list.go +++ b/cmd/list.go @@ -5,6 +5,7 @@ import ( "fmt" "github.com/spf13/cobra" + "github.com/zilliztech/milvus-backup/core" "github.com/zilliztech/milvus-backup/core/paramtable" "github.com/zilliztech/milvus-backup/core/proto/backuppb" @@ -25,7 +26,7 @@ var listBackupCmd = &cobra.Command{ params.Init() context := context.Background() - backupContext := core.CreateBackupContext(context, params) + backupContext := core.CreateBackupContext(context, ¶ms) backups := backupContext.ListBackups(context, &backuppb.ListBackupsRequest{ CollectionName: collectionName, diff --git a/cmd/restore.go b/cmd/restore.go index 19d9108..1167a72 100644 --- a/cmd/restore.go +++ b/cmd/restore.go @@ -8,6 +8,7 @@ import ( jsoniter "github.com/json-iterator/go" "github.com/spf13/cobra" + "github.com/zilliztech/milvus-backup/core" "github.com/zilliztech/milvus-backup/core/paramtable" "github.com/zilliztech/milvus-backup/core/proto/backuppb" @@ -43,7 +44,7 @@ var restoreBackupCmd = &cobra.Command{ params.Init() context := context.Background() - backupContext := core.CreateBackupContext(context, params) + backupContext := core.CreateBackupContext(context, ¶ms) log.Info("restore cmd input args", zap.Strings("args", args)) start := time.Now().Unix() var collectionNameArr []string diff --git a/cmd/root.go b/cmd/root.go index 93e4a98..a02e06d 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -23,7 +23,7 @@ var rootCmd = &cobra.Command{ Run: func(cmd *cobra.Command, args []string) { Error(cmd, args, errors.New("unrecognized command")) }, - PersistentPreRun: func(cmd *cobra.Command, args []string){ + PersistentPreRun: func(cmd *cobra.Command, args []string) { setEnvs(yamlOverrides) }, } diff --git a/cmd/server.go b/cmd/server.go index c910ba5..16c4b01 100644 --- a/cmd/server.go +++ b/cmd/server.go @@ -7,6 +7,7 @@ import ( "strconv" "github.com/spf13/cobra" + "github.com/zilliztech/milvus-backup/core" "github.com/zilliztech/milvus-backup/core/paramtable" ) @@ -31,7 +32,7 @@ var serverCmd = &cobra.Command{ params.Init() context := context.Background() - server, err := core.NewServer(context, params, core.Port(port)) + server, err := core.NewServer(context, ¶ms, core.Port(port)) if err != nil { fmt.Errorf("fail to create backup server, %s", err.Error()) } diff --git a/core/backup_context.go b/core/backup_context.go index 7c76e95..e280e08 100644 --- a/core/backup_context.go +++ b/core/backup_context.go @@ -3,16 +3,15 @@ package core import ( "context" "encoding/json" - "errors" "fmt" "path" "sync" "time" - gomilvus "github.com/milvus-io/milvus-sdk-go/v2/client" "go.uber.org/zap" "go.uber.org/zap/zapcore" + "github.com/zilliztech/milvus-backup/core/client" "github.com/zilliztech/milvus-backup/core/paramtable" "github.com/zilliztech/milvus-backup/core/proto/backuppb" "github.com/zilliztech/milvus-backup/core/storage" @@ -40,10 +39,10 @@ type BackupContext struct { // lock to make sure only one backup is creating or restoring mu sync.Mutex started bool - params paramtable.BackupParams + params *paramtable.BackupParams // milvus client - milvusClient *MilvusClient + grpcClient client.Grpc // data storage client milvusStorageClient storage.ChunkManager @@ -60,56 +59,36 @@ type BackupContext struct { backupCollectionWorkerPool *common.WorkerPool backupCopyDataWorkerPool *common.WorkerPool - bulkinsertWorkerPools map[string]*common.WorkerPool + + bulkinsertWorkerPools sync.Map } -func CreateMilvusClient(ctx context.Context, params paramtable.BackupParams) (gomilvus.Client, error) { - milvusEndpoint := params.MilvusCfg.Address + ":" + params.MilvusCfg.Port - log.Debug("Start Milvus client", zap.String("endpoint", milvusEndpoint)) - var c gomilvus.Client - var err error - if params.MilvusCfg.AuthorizationEnabled && params.MilvusCfg.User != "" && params.MilvusCfg.Password != "" { - if params.MilvusCfg.TLSMode == 0 { - c, err = gomilvus.NewDefaultGrpcClientWithAuth(ctx, milvusEndpoint, params.MilvusCfg.User, params.MilvusCfg.Password) - } else if params.MilvusCfg.TLSMode == 1 || params.MilvusCfg.TLSMode == 2 { - c, err = gomilvus.NewDefaultGrpcClientWithTLSAuth(ctx, milvusEndpoint, params.MilvusCfg.User, params.MilvusCfg.Password) - } else { - log.Error("milvus.TLSMode is not illegal, support value 0, 1, 2") - return nil, errors.New("milvus.TLSMode is not illegal, support value 0, 1, 2") - } - } else { - c, err = gomilvus.NewGrpcClient(ctx, milvusEndpoint) +func CreateMilvusClient(ctx context.Context, params *paramtable.BackupParams) (client.Grpc, error) { + ep := params.MilvusCfg.Address + ":" + params.MilvusCfg.Port + log.Debug("Start Milvus client", zap.String("endpoint", ep)) + + var enableTLS bool + switch params.MilvusCfg.TLSMode { + case 0: + enableTLS = false + case 1, 2: + enableTLS = true + default: + log.Error("milvus.TLSMode is illegal, support value 0, 1, 2") + } + + cfg := &client.Cfg{ + GrpcAddress: ep, + EnableTLS: enableTLS, + Username: params.MilvusCfg.User, + Password: params.MilvusCfg.Password, } + cli, err := client.NewGrpc(cfg) if err != nil { - log.Error("failed to connect to milvus", zap.Error(err)) - return nil, err + log.Error("failed to create milvus client", zap.Error(err)) + return nil, fmt.Errorf("failed to create milvus client: %w", err) } - return c, nil -} - -// Deprecated -func createStorageClient(ctx context.Context, params paramtable.BackupParams) (storage.ChunkManager, error) { - minioEndPoint := params.MinioCfg.Address + ":" + params.MinioCfg.Port - log.Debug("Start minio client", - zap.String("address", minioEndPoint), - zap.String("bucket", params.MinioCfg.BucketName), - zap.String("backupBucket", params.MinioCfg.BackupBucketName)) - - storageConfig := &storage.StorageConfig{ - StorageType: params.MinioCfg.StorageType, - Address: minioEndPoint, - BucketName: params.MinioCfg.BucketName, - AccessKeyID: params.MinioCfg.AccessKeyID, - SecretAccessKeyID: params.MinioCfg.SecretAccessKey, - UseSSL: params.MinioCfg.UseSSL, - UseIAM: params.MinioCfg.UseIAM, - IAMEndpoint: params.MinioCfg.IAMEndpoint, - RootPath: params.MinioCfg.RootPath, - CreateBucket: true, - } - - minioClient, err := storage.NewChunkManager(ctx, params, storageConfig) - return minioClient, err + return cli, nil } func (b *BackupContext) Start() error { @@ -121,14 +100,14 @@ func (b *BackupContext) Start() error { func (b *BackupContext) Close() error { b.started = false - if b.milvusClient != nil { + if b.grpcClient != nil { err := b.getMilvusClient().Close() return err } return nil } -func CreateBackupContext(ctx context.Context, params paramtable.BackupParams) *BackupContext { +func CreateBackupContext(ctx context.Context, params *paramtable.BackupParams) *BackupContext { return &BackupContext{ ctx: ctx, params: params, @@ -136,23 +115,21 @@ func CreateBackupContext(ctx context.Context, params paramtable.BackupParams) *B backupBucketName: params.MinioCfg.BackupBucketName, milvusRootPath: params.MinioCfg.RootPath, backupRootPath: params.MinioCfg.BackupRootPath, - bulkinsertWorkerPools: make(map[string]*common.WorkerPool), + bulkinsertWorkerPools: sync.Map{}, meta: newMetaManager(), } } -func (b *BackupContext) getMilvusClient() *MilvusClient { - if b.milvusClient == nil { +func (b *BackupContext) getMilvusClient() client.Grpc { + if b.grpcClient == nil { milvusClient, err := CreateMilvusClient(b.ctx, b.params) if err != nil { log.Error("failed to initial milvus client", zap.Error(err)) panic(err) } - b.milvusClient = &MilvusClient{ - client: milvusClient, - } + b.grpcClient = milvusClient } - return b.milvusClient + return b.grpcClient } func (b *BackupContext) getMilvusStorageClient() storage.ChunkManager { @@ -281,23 +258,26 @@ func (b *BackupContext) getCopyDataWorkerPool() *common.WorkerPool { } func (b *BackupContext) getRestoreWorkerPool(id string) *common.WorkerPool { - if pool, exist := b.bulkinsertWorkerPools[id]; exist { - return pool + // TODO DO NOT use pool of worker pool + if pool, exist := b.bulkinsertWorkerPools.Load(id); exist { + return pool.(*common.WorkerPool) } else { wp, err := common.NewWorkerPool(b.ctx, b.params.BackupCfg.RestoreParallelism, RPS) if err != nil { log.Error("failed to initial copy data worker pool", zap.Error(err)) panic(err) } - b.bulkinsertWorkerPools[id] = wp - b.bulkinsertWorkerPools[id].Start() - return b.bulkinsertWorkerPools[id] + wp.Start() + b.bulkinsertWorkerPools.Store(id, wp) + + return wp } } func (b *BackupContext) cleanRestoreWorkerPool(id string) { - if _, exist := b.bulkinsertWorkerPools[id]; exist { - delete(b.bulkinsertWorkerPools, id) + // TODO DO NOT use pool of worker pool + if _, exist := b.bulkinsertWorkerPools.Load(id); exist { + b.bulkinsertWorkerPools.Delete(id) } } diff --git a/core/backup_context_test.go b/core/backup_context_test.go index 773df83..6a5875b 100644 --- a/core/backup_context_test.go +++ b/core/backup_context_test.go @@ -7,47 +7,48 @@ import ( "testing" "github.com/stretchr/testify/assert" + "go.uber.org/zap" + "github.com/zilliztech/milvus-backup/core/paramtable" "github.com/zilliztech/milvus-backup/core/proto/backuppb" "github.com/zilliztech/milvus-backup/core/utils" "github.com/zilliztech/milvus-backup/internal/log" - "go.uber.org/zap" ) func TestCreateBackup(t *testing.T) { var params paramtable.BackupParams params.Init() - context := context.Background() - backup := CreateBackupContext(context, params) + ctx := context.Background() + backup := CreateBackupContext(ctx, ¶ms) req := &backuppb.CreateBackupRequest{ BackupName: "test_21", //CollectionNames: []string{"hello_milvus", "hello_milvus2"}, DbCollections: utils.WrapDBCollections(""), } - backup.CreateBackup(context, req) + backup.CreateBackup(ctx, req) } func TestCheck(t *testing.T) { var params paramtable.BackupParams params.Init() - context := context.Background() - backup := CreateBackupContext(context, params) + ctx := context.Background() + backup := CreateBackupContext(ctx, ¶ms) - res := backup.Check(context) + res := backup.Check(ctx) println(res) } func TestListBackups(t *testing.T) { var params paramtable.BackupParams params.Init() - context := context.Background() - backupContext := CreateBackupContext(context, params) + ctx := context.Background() + backupContext := CreateBackupContext(ctx, ¶ms) - backupLists := backupContext.ListBackups(context, &backuppb.ListBackupsRequest{}) + backupLists := backupContext.ListBackups(ctx, &backuppb.ListBackupsRequest{}) assert.Equal(t, backupLists.GetCode(), backuppb.ResponseCode_Success) - backupListsWithCollection := backupContext.ListBackups(context, &backuppb.ListBackupsRequest{ + backupListsWithCollection := backupContext.ListBackups(ctx, &backuppb.ListBackupsRequest{ //CollectionName: "hello_milvus", }) @@ -68,10 +69,10 @@ func TestListBackups(t *testing.T) { func TestGetBackup(t *testing.T) { var params paramtable.BackupParams params.Init() - context := context.Background() - backupContext := CreateBackupContext(context, params) + ctx := context.Background() + backupContext := CreateBackupContext(ctx, ¶ms) - backup := backupContext.GetBackup(context, &backuppb.GetBackupRequest{ + backup := backupContext.GetBackup(ctx, &backuppb.GetBackupRequest{ BackupName: "mybackup", }) assert.Equal(t, backup.GetCode(), backuppb.ResponseCode_Success) @@ -80,15 +81,15 @@ func TestGetBackup(t *testing.T) { func TestDeleteBackup(t *testing.T) { var params paramtable.BackupParams params.Init() - context := context.Background() - backupContext := CreateBackupContext(context, params) + ctx := context.Background() + backupContext := CreateBackupContext(ctx, ¶ms) - backup := backupContext.DeleteBackup(context, &backuppb.DeleteBackupRequest{ + backup := backupContext.DeleteBackup(ctx, &backuppb.DeleteBackupRequest{ BackupName: "test_backup6", }) assert.Equal(t, backup.GetCode(), backuppb.ResponseCode_Success) - backupLists := backupContext.ListBackups(context, &backuppb.ListBackupsRequest{}) + backupLists := backupContext.ListBackups(ctx, &backuppb.ListBackupsRequest{}) assert.Equal(t, backupLists.GetCode(), backuppb.ResponseCode_Success) assert.Equal(t, 0, len(backupLists.GetData())) @@ -98,19 +99,19 @@ func TestDeleteBackup(t *testing.T) { func TestCreateBackupWithNoName(t *testing.T) { var params paramtable.BackupParams params.Init() - context := context.Background() - backup := CreateBackupContext(context, params) + ctx := context.Background() + backup := CreateBackupContext(ctx, ¶ms) randBackupName := "" req := &backuppb.CreateBackupRequest{ BackupName: randBackupName, } - resp := backup.CreateBackup(context, req) + resp := backup.CreateBackup(ctx, req) assert.Equal(t, backuppb.ResponseCode_Success, resp.GetCode()) // clean - backup.DeleteBackup(context, &backuppb.DeleteBackupRequest{ + backup.DeleteBackup(ctx, &backuppb.DeleteBackupRequest{ BackupName: randBackupName, }) } @@ -118,8 +119,8 @@ func TestCreateBackupWithNoName(t *testing.T) { func TestCreateBackupWithUnexistCollection(t *testing.T) { var params paramtable.BackupParams params.Init() - context := context.Background() - backup := CreateBackupContext(context, params) + ctx := context.Background() + backup := CreateBackupContext(ctx, ¶ms) randBackupName := fmt.Sprintf("test_%d", rand.Int()) @@ -127,12 +128,12 @@ func TestCreateBackupWithUnexistCollection(t *testing.T) { BackupName: randBackupName, CollectionNames: []string{"not_exist"}, } - resp := backup.CreateBackup(context, req) + resp := backup.CreateBackup(ctx, req) assert.Equal(t, backuppb.ResponseCode_Fail, resp.GetCode()) assert.Equal(t, "request backup collection does not exist: not_exist", resp.GetMsg()) // clean - backup.DeleteBackup(context, &backuppb.DeleteBackupRequest{ + backup.DeleteBackup(ctx, &backuppb.DeleteBackupRequest{ BackupName: randBackupName, }) } @@ -140,26 +141,26 @@ func TestCreateBackupWithUnexistCollection(t *testing.T) { func TestCreateBackupWithDuplicateName(t *testing.T) { var params paramtable.BackupParams params.Init() - context := context.Background() - backup := CreateBackupContext(context, params) + ctx := context.Background() + backup := CreateBackupContext(ctx, ¶ms) randBackupName := fmt.Sprintf("test_%d", rand.Int()) req := &backuppb.CreateBackupRequest{ BackupName: randBackupName, } - resp := backup.CreateBackup(context, req) + resp := backup.CreateBackup(ctx, req) assert.Equal(t, backuppb.ResponseCode_Success, resp.GetCode()) req2 := &backuppb.CreateBackupRequest{ BackupName: randBackupName, } - resp2 := backup.CreateBackup(context, req2) + resp2 := backup.CreateBackup(ctx, req2) assert.Equal(t, backuppb.ResponseCode_Fail, resp2.GetCode()) assert.Equal(t, fmt.Sprintf("backup already exist with the name: %s", req2.GetBackupName()), resp2.GetMsg()) // clean - backup.DeleteBackup(context, &backuppb.DeleteBackupRequest{ + backup.DeleteBackup(ctx, &backuppb.DeleteBackupRequest{ BackupName: randBackupName, }) } @@ -167,19 +168,19 @@ func TestCreateBackupWithDuplicateName(t *testing.T) { func TestCreateBackupWithIllegalName(t *testing.T) { var params paramtable.BackupParams params.Init() - context := context.Background() - backup := CreateBackupContext(context, params) + ctx := context.Background() + backup := CreateBackupContext(ctx, ¶ms) randBackupName := "dahgg$%123" req := &backuppb.CreateBackupRequest{ BackupName: randBackupName, } - resp := backup.CreateBackup(context, req) + resp := backup.CreateBackup(ctx, req) assert.Equal(t, backuppb.ResponseCode_Fail, resp.GetCode()) // clean - backup.DeleteBackup(context, &backuppb.DeleteBackupRequest{ + backup.DeleteBackup(ctx, &backuppb.DeleteBackupRequest{ BackupName: randBackupName, }) } @@ -187,24 +188,24 @@ func TestCreateBackupWithIllegalName(t *testing.T) { func TestGetBackupAfterCreate(t *testing.T) { var params paramtable.BackupParams params.Init() - context := context.Background() - backupContext := CreateBackupContext(context, params) + ctx := context.Background() + backupContext := CreateBackupContext(ctx, ¶ms) randBackupName := fmt.Sprintf("test_%d", rand.Int()) req := &backuppb.CreateBackupRequest{ BackupName: randBackupName, } - resp := backupContext.CreateBackup(context, req) + resp := backupContext.CreateBackup(ctx, req) assert.Equal(t, backuppb.ResponseCode_Success, resp.GetCode()) - backup := backupContext.GetBackup(context, &backuppb.GetBackupRequest{ + backup := backupContext.GetBackup(ctx, &backuppb.GetBackupRequest{ BackupName: randBackupName, }) assert.Equal(t, backuppb.ResponseCode_Success, backup.GetCode()) // clean - backupContext.DeleteBackup(context, &backuppb.DeleteBackupRequest{ + backupContext.DeleteBackup(ctx, &backuppb.DeleteBackupRequest{ BackupName: randBackupName, }) } @@ -212,31 +213,31 @@ func TestGetBackupAfterCreate(t *testing.T) { func TestGetBackupFaultBackup(t *testing.T) { var params paramtable.BackupParams params.Init() - context := context.Background() - backupContext := CreateBackupContext(context, params) + ctx := context.Background() + backupContext := CreateBackupContext(ctx, ¶ms) backupContext.Start() randBackupName := fmt.Sprintf("test_%d", rand.Int()) - backupContext.DeleteBackup(context, &backuppb.DeleteBackupRequest{ + backupContext.DeleteBackup(ctx, &backuppb.DeleteBackupRequest{ BackupName: randBackupName, }) req := &backuppb.CreateBackupRequest{ BackupName: randBackupName, } - resp := backupContext.CreateBackup(context, req) + resp := backupContext.CreateBackup(ctx, req) assert.Equal(t, backuppb.ResponseCode_Success, resp.GetCode()) - backupContext.getMilvusStorageClient().RemoveWithPrefix(context, params.MinioCfg.BackupBucketName, BackupMetaPath(params.MinioCfg.BackupRootPath, resp.GetData().GetName())) + backupContext.getMilvusStorageClient().RemoveWithPrefix(ctx, params.MinioCfg.BackupBucketName, BackupMetaPath(params.MinioCfg.BackupRootPath, resp.GetData().GetName())) - backup := backupContext.GetBackup(context, &backuppb.GetBackupRequest{ + backup := backupContext.GetBackup(ctx, &backuppb.GetBackupRequest{ BackupName: randBackupName, }) assert.Equal(t, backuppb.ResponseCode_Fail, backup.GetCode()) // clean - backupContext.DeleteBackup(context, &backuppb.DeleteBackupRequest{ + backupContext.DeleteBackup(ctx, &backuppb.DeleteBackupRequest{ BackupName: randBackupName, }) } @@ -244,11 +245,11 @@ func TestGetBackupFaultBackup(t *testing.T) { func TestGetBackupUnexistBackupName(t *testing.T) { var params paramtable.BackupParams params.Init() - context := context.Background() - backupContext := CreateBackupContext(context, params) + ctx := context.Background() + backupContext := CreateBackupContext(ctx, ¶ms) backupContext.Start() - backup := backupContext.GetBackup(context, &backuppb.GetBackupRequest{ + backup := backupContext.GetBackup(ctx, &backuppb.GetBackupRequest{ BackupName: "un_exist", }) assert.Equal(t, backuppb.ResponseCode_Fail, backup.GetCode()) @@ -257,13 +258,13 @@ func TestGetBackupUnexistBackupName(t *testing.T) { func TestRestoreBackup(t *testing.T) { var params paramtable.BackupParams params.Init() - context := context.Background() - backup := CreateBackupContext(context, params) + ctx := context.Background() + backup := CreateBackupContext(ctx, ¶ms) backup.Start() backupName := "demo" //fmt.Sprintf("test_%d", rand.Int()) - restoreResp := backup.RestoreBackup(context, &backuppb.RestoreBackupRequest{ + restoreResp := backup.RestoreBackup(ctx, &backuppb.RestoreBackupRequest{ BackupName: backupName, DbCollections: utils.WrapDBCollections("{\"default\":[]}"), }) @@ -273,8 +274,8 @@ func TestRestoreBackup(t *testing.T) { func TestCreateAndRestoreBackup(t *testing.T) { var params paramtable.BackupParams params.Init() - context := context.Background() - backup := CreateBackupContext(context, params) + ctx := context.Background() + backup := CreateBackupContext(ctx, ¶ms) backup.Start() randBackupName := "test" //fmt.Sprintf("test_%d", rand.Int()) @@ -282,23 +283,23 @@ func TestCreateAndRestoreBackup(t *testing.T) { req := &backuppb.CreateBackupRequest{ BackupName: randBackupName, } - resp := backup.CreateBackup(context, req) + resp := backup.CreateBackup(ctx, req) assert.Equal(t, backuppb.ResponseCode_Success, resp.GetCode()) getReq := &backuppb.GetBackupRequest{ BackupName: randBackupName, } - getResp := backup.GetBackup(context, getReq) + getResp := backup.GetBackup(ctx, getReq) assert.Equal(t, backuppb.ResponseCode_Success, getResp.GetCode()) - restoreResp := backup.RestoreBackup(context, &backuppb.RestoreBackupRequest{ + restoreResp := backup.RestoreBackup(ctx, &backuppb.RestoreBackupRequest{ BackupName: randBackupName, CollectionSuffix: "_recover", }) log.Info("restore backup", zap.Any("resp", restoreResp)) //clean - backup.DeleteBackup(context, &backuppb.DeleteBackupRequest{ + backup.DeleteBackup(ctx, &backuppb.DeleteBackupRequest{ BackupName: randBackupName, }) } diff --git a/core/backup_impl_create_backup.go b/core/backup_impl_create_backup.go index 448e2a7..1636d66 100644 --- a/core/backup_impl_create_backup.go +++ b/core/backup_impl_create_backup.go @@ -15,7 +15,8 @@ import ( "github.com/golang/protobuf/proto" jsoniter "github.com/json-iterator/go" - "github.com/milvus-io/milvus-sdk-go/v2/entity" + "github.com/milvus-io/milvus-proto/go-api/v2/commonpb" + "github.com/milvus-io/milvus-proto/go-api/v2/milvuspb" "github.com/samber/lo" "go.uber.org/zap" @@ -25,6 +26,15 @@ import ( "github.com/zilliztech/milvus-backup/internal/util/retry" ) +func conv2BakKV(kv []*commonpb.KeyValuePair) []*backuppb.KeyValuePair { + return lo.Map(kv, func(item *commonpb.KeyValuePair, _ int) *backuppb.KeyValuePair { + return &backuppb.KeyValuePair{ + Key: item.Key, + Value: item.Value, + } + }) +} + func (b *BackupContext) CreateBackup(ctx context.Context, request *backuppb.CreateBackupRequest) *backuppb.BackupInfoResponse { if request.GetRequestId() == "" { request.RequestId = utils.UUID() @@ -151,14 +161,14 @@ func (b *BackupContext) parseBackupCollections(request *backuppb.CreateBackupReq } for db, collections := range dbCollections { if len(collections) == 0 { - collections, err := b.getMilvusClient().ListCollections(b.ctx, db) + resp, err := b.getMilvusClient().ListCollections(b.ctx, db) if err != nil { log.Error("fail in ListCollections", zap.Error(err)) return nil, err } - for _, coll := range collections { - log.Debug("Add collection to toBackupCollections", zap.String("db", db), zap.String("collection", coll.Name)) - toBackupCollections = append(toBackupCollections, collectionStruct{db, coll.Name}) + for _, coll := range resp.CollectionNames { + log.Debug("Add collection to toBackupCollections", zap.String("db", db), zap.String("collection", coll)) + toBackupCollections = append(toBackupCollections, collectionStruct{db, coll}) } } else { for _, coll := range collections { @@ -174,15 +184,15 @@ func (b *BackupContext) parseBackupCollections(request *backuppb.CreateBackupReq dbs, err := b.getMilvusClient().ListDatabases(b.ctx) if err != nil { // compatible to milvus under v2.2.8 without database support - if strings.Contains(err.Error(), "feature not supported") { + if !b.getMilvusClient().SupportMultiDatabase() { // default database only - collections, err := b.getMilvusClient().ListCollections(b.ctx, "default") + resp, err := b.getMilvusClient().ListCollections(b.ctx, "default") if err != nil { log.Error("fail in ListCollections", zap.Error(err)) return nil, err } - for _, coll := range collections { - toBackupCollections = append(toBackupCollections, collectionStruct{"default", coll.Name}) + for _, coll := range resp.CollectionNames { + toBackupCollections = append(toBackupCollections, collectionStruct{"default", coll}) } } else { log.Error("fail in ListDatabases", zap.Error(err)) @@ -190,13 +200,13 @@ func (b *BackupContext) parseBackupCollections(request *backuppb.CreateBackupReq } } else { for _, db := range dbs { - collections, err := b.getMilvusClient().ListCollections(b.ctx, db.Name) + resp, err := b.getMilvusClient().ListCollections(b.ctx, db) if err != nil { log.Error("fail in ListCollections", zap.Error(err)) return nil, err } - for _, coll := range collections { - toBackupCollections = append(toBackupCollections, collectionStruct{db.Name, coll.Name}) + for _, coll := range resp.CollectionNames { + toBackupCollections = append(toBackupCollections, collectionStruct{db, coll}) } } } @@ -230,26 +240,27 @@ func (b *BackupContext) parseBackupCollections(request *backuppb.CreateBackupReq func (b *BackupContext) backupCollectionPrepare(ctx context.Context, backupInfo *backuppb.BackupInfo, collection collectionStruct, force bool) error { log.Info("start backup collection", zap.String("db", collection.db), zap.String("collection", collection.collectionName)) // list collection result is not complete - completeCollection, err := b.getMilvusClient().DescribeCollection(b.ctx, collection.db, collection.collectionName) + descResp, err := b.getMilvusClient().DescribeCollection(b.ctx, collection.db, collection.collectionName) if err != nil { log.Error("fail in DescribeCollection", zap.Error(err)) return err } - fields := make([]*backuppb.FieldSchema, 0) - for _, field := range completeCollection.Schema.Fields { + fields := make([]*backuppb.FieldSchema, 0, len(descResp.Schema.Fields)) + for _, field := range descResp.Schema.Fields { fieldBak := &backuppb.FieldSchema{ - FieldID: field.ID, - Name: field.Name, - IsPrimaryKey: field.PrimaryKey, - Description: field.Description, - AutoID: field.AutoID, - DataType: backuppb.DataType(field.DataType), - TypeParams: utils.MapToKVPair(field.TypeParams), - IndexParams: utils.MapToKVPair(field.IndexParams), - IsDynamic: field.IsDynamic, - IsPartitionKey: field.IsPartitionKey, - Nullable: field.Nullable, - ElementType: backuppb.DataType(field.ElementType), + FieldID: field.FieldID, + Name: field.Name, + IsPrimaryKey: field.IsPrimaryKey, + Description: field.Description, + AutoID: field.AutoID, + DataType: backuppb.DataType(field.DataType), + TypeParams: conv2BakKV(field.TypeParams), + IndexParams: conv2BakKV(field.IndexParams), + IsDynamic: field.IsDynamic, + IsPartitionKey: field.IsPartitionKey, + Nullable: field.Nullable, + ElementType: backuppb.DataType(field.ElementType), + IsFunctionOutput: field.IsFunctionOutput, } defaultValue := field.DefaultValue if defaultValue != nil { @@ -261,53 +272,55 @@ func (b *BackupContext) backupCollectionPrepare(ctx context.Context, backupInfo } fields = append(fields, fieldBak) } + functions := make([]*backuppb.FunctionSchema, 0, len(descResp.Schema.Functions)) + for _, function := range descResp.Schema.Functions { + functionBak := &backuppb.FunctionSchema{ + Name: function.Name, + Id: function.Id, + Description: function.Description, + Type: backuppb.FunctionType(function.Type), + InputFieldNames: function.InputFieldNames, + InputFieldIds: function.InputFieldIds, + OutputFieldNames: function.OutputFieldNames, + OutputFieldIds: function.OutputFieldIds, + Params: conv2BakKV(function.Params), + } + functions = append(functions, functionBak) + } schema := &backuppb.CollectionSchema{ - Name: completeCollection.Schema.CollectionName, - Description: completeCollection.Schema.Description, - AutoID: completeCollection.Schema.AutoID, + Name: descResp.Schema.Name, + Description: descResp.Schema.Description, + AutoID: descResp.Schema.AutoID, Fields: fields, - EnableDynamicField: completeCollection.Schema.EnableDynamicField, + EnableDynamicField: descResp.Schema.EnableDynamicField, + Functions: functions, } indexInfos := make([]*backuppb.IndexInfo, 0) - indexDict := make(map[string]*backuppb.IndexInfo, 0) - log.Info("try to get index", - zap.String("collection_name", completeCollection.Name)) - for _, field := range completeCollection.Schema.Fields { - //if field.DataType != entity.FieldTypeBinaryVector && field.DataType != entity.FieldTypeFloatVector { - // continue - //} - fieldIndex, err := b.getMilvusClient().DescribeIndex(b.ctx, collection.db, completeCollection.Name, field.Name) - if err != nil { - if strings.Contains(err.Error(), "index not found") || - strings.HasPrefix(err.Error(), "index doesn't exist") { - // todo - log.Info("field has no index", - zap.String("collection_name", completeCollection.Name), - zap.String("field_name", field.Name)) - continue - } else { - log.Error("fail in DescribeIndex", zap.Error(err)) - return err - } - } - log.Info("field index", - zap.String("collection_name", completeCollection.Name), - zap.String("field_name", field.Name), - zap.Any("index info", fieldIndex)) - for _, index := range fieldIndex { - if _, ok := indexDict[index.Name()]; ok { - continue - } else { - indexInfo := &backuppb.IndexInfo{ - FieldName: field.Name, - IndexName: index.Name(), - IndexType: string(index.IndexType()), - Params: index.Params(), - } - indexInfos = append(indexInfos, indexInfo) - indexDict[index.Name()] = indexInfo + indexDict := make(map[string]*backuppb.IndexInfo) + log.Info("try to get index", zap.String("collection_name", descResp.CollectionName)) + indexes, err := b.getMilvusClient().ListIndex(b.ctx, collection.db, descResp.CollectionName) + if err != nil && !strings.Contains(err.Error(), "index not found") { + log.Error("fail in DescribeIndex", zap.Error(err)) + return err + } + + log.Info("List index", zap.String("collection_name", descResp.CollectionName), zap.Any("indexes", indexes)) + for _, index := range indexes { + if _, ok := indexDict[index.IndexName]; ok { + continue + } else { + params := lo.SliceToMap(index.Params, func(item *commonpb.KeyValuePair) (string, string) { + return item.Key, item.Value + }) + indexInfo := &backuppb.IndexInfo{ + FieldName: index.FieldName, + IndexName: index.IndexName, + IndexType: params["index_type"], + Params: params, } + indexInfos = append(indexInfos, indexInfo) + indexDict[index.IndexName] = indexInfo } } @@ -315,18 +328,18 @@ func (b *BackupContext) backupCollectionPrepare(ctx context.Context, backupInfo Id: backupInfo.Id, StateCode: backuppb.BackupTaskStateCode_BACKUP_INITIAL, StartTime: time.Now().Unix(), - CollectionId: completeCollection.ID, + CollectionId: descResp.CollectionID, DbName: collection.db, - CollectionName: completeCollection.Name, + CollectionName: descResp.CollectionName, Schema: schema, - ShardsNum: completeCollection.ShardNum, - ConsistencyLevel: backuppb.ConsistencyLevel(completeCollection.ConsistencyLevel), + ShardsNum: descResp.ShardsNum, + ConsistencyLevel: backuppb.ConsistencyLevel(descResp.ConsistencyLevel), HasIndex: len(indexInfos) > 0, IndexInfos: indexInfos, } b.meta.AddCollection(collectionBackup) - partitions, err := b.getMilvusClient().ShowPartitions(b.ctx, collectionBackup.GetDbName(), collectionBackup.GetCollectionName()) + showPartResp, err := b.getMilvusClient().ShowPartitions(b.ctx, collectionBackup.GetDbName(), collectionBackup.GetCollectionName()) if err != nil { log.Error("fail to ShowPartitions", zap.Error(err)) return err @@ -340,37 +353,37 @@ func (b *BackupContext) backupCollectionPrepare(ctx context.Context, backupInfo } var collectionLoadState string - partitionLoadStates := make(map[string]string, 0) + partitionLoadStates := make(map[string]string, len(showPartResp.PartitionNames)) if collectionLoadProgress == 0 { collectionLoadState = LoadState_NotLoad - for _, partition := range partitions { - partitionLoadStates[partition.Name] = LoadState_NotLoad + for _, partitionName := range showPartResp.PartitionNames { + partitionLoadStates[partitionName] = LoadState_NotLoad } } else if collectionLoadProgress == 100 { collectionLoadState = LoadState_Loaded - for _, partition := range partitions { - partitionLoadStates[partition.Name] = LoadState_Loaded + for _, partitionName := range showPartResp.PartitionNames { + partitionLoadStates[partitionName] = LoadState_Loaded } } else { collectionLoadState = LoadState_Loading - for _, partition := range partitions { - loadProgress, err := b.getMilvusClient().GetLoadingProgress(ctx, collectionBackup.GetDbName(), collectionBackup.GetCollectionName(), []string{partition.Name}) + for _, partitionName := range showPartResp.PartitionNames { + loadProgress, err := b.getMilvusClient().GetLoadingProgress(ctx, collectionBackup.GetDbName(), collectionBackup.GetCollectionName(), []string{partitionName}) if err != nil { log.Error("fail to GetLoadingProgress of partition", zap.Error(err)) return err } if loadProgress == 0 { - partitionLoadStates[partition.Name] = LoadState_NotLoad + partitionLoadStates[partitionName] = LoadState_NotLoad } else if loadProgress == 100 { - partitionLoadStates[partition.Name] = LoadState_Loaded + partitionLoadStates[partitionName] = LoadState_Loaded } else { - partitionLoadStates[partition.Name] = LoadState_Loading + partitionLoadStates[partitionName] = LoadState_Loading } } } // fill segments - unfilledSegments := make([]*entity.Segment, 0) + unfilledSegments := make([]*milvuspb.PersistentSegmentInfo, 0) if !force { // Flush segmentEntitiesBeforeFlush, err := b.getMilvusClient().GetPersistentSegmentInfo(ctx, collectionBackup.GetDbName(), collectionBackup.GetCollectionName()) @@ -381,7 +394,7 @@ func (b *BackupContext) backupCollectionPrepare(ctx context.Context, backupInfo zap.String("databaseName", collectionBackup.GetDbName()), zap.String("collectionName", collectionBackup.GetCollectionName()), zap.Int("segmentNumBeforeFlush", len(segmentEntitiesBeforeFlush))) - newSealedSegmentIDs, flushedSegmentIDs, timeOfSeal, channelCPs, err := b.getMilvusClient().FlushV2(ctx, collectionBackup.GetDbName(), collectionBackup.GetCollectionName(), false) + flushResp, err := b.getMilvusClient().Flush(ctx, collectionBackup.GetDbName(), collectionBackup.GetCollectionName()) if err != nil { log.Error("fail to flush the collection", zap.String("databaseName", collectionBackup.GetDbName()), @@ -393,8 +406,8 @@ func (b *BackupContext) backupCollectionPrepare(ctx context.Context, backupInfo //collectionBackup.BackupTimestamp = utils.ComposeTS(timeOfSeal, 0) channelCheckpoints := make(map[string]string, 0) var maxChannelBackupTimeStamp uint64 = 0 - for vch, checkpoint := range channelCPs { - channelCheckpoints[vch] = utils.Base64MsgPosition(&checkpoint) + for vch, checkpoint := range flushResp.GetChannelCps() { + channelCheckpoints[vch] = utils.Base64MsgPosition(checkpoint) if maxChannelBackupTimeStamp == 0 { maxChannelBackupTimeStamp = checkpoint.GetTimestamp() } else if maxChannelBackupTimeStamp < checkpoint.GetTimestamp() { @@ -404,27 +417,27 @@ func (b *BackupContext) backupCollectionPrepare(ctx context.Context, backupInfo b.meta.UpdateCollection(collectionBackup.Id, collectionBackup.CollectionId, setCollectionChannelCheckpoints(channelCheckpoints), setCollectionBackupTimestamp(maxChannelBackupTimeStamp), - setCollectionBackupPhysicalTimestamp(uint64(timeOfSeal))) + setCollectionBackupPhysicalTimestamp(uint64(flushResp.GetCollSealTimes()[collectionBackup.GetCollectionName()]))) log.Info("flush segments", zap.String("databaseName", collectionBackup.GetDbName()), zap.String("collectionName", collectionBackup.GetCollectionName()), - zap.Int64s("newSealedSegmentIDs", newSealedSegmentIDs), - zap.Int64s("flushedSegmentIDs", flushedSegmentIDs), - zap.Int64("timeOfSeal", timeOfSeal), + zap.Int64s("newSealedSegmentIDs", flushResp.GetCollSegIDs()[collectionBackup.GetCollectionName()].GetData()), + zap.Int64s("flushedSegmentIDs", flushResp.GetFlushCollSegIDs()[collectionBackup.GetCollectionName()].GetData()), + zap.Uint64("timeOfSeal", uint64(flushResp.GetCollSealTimes()[collectionBackup.GetCollectionName()])), zap.Uint64("BackupTimestamp", collectionBackup.BackupTimestamp), - zap.Any("channelCPs", channelCPs)) + zap.Any("channelCPs", flushResp.GetChannelCps())) segmentEntitiesAfterFlush, err := b.getMilvusClient().GetPersistentSegmentInfo(ctx, collectionBackup.GetDbName(), collectionBackup.GetCollectionName()) if err != nil { return err } - segmentIDsBeforeFlush := lo.Map(segmentEntitiesBeforeFlush, func(segment *entity.Segment, _ int) int64 { return segment.ID }) - segmentIDsAfterFlush := lo.Map(segmentEntitiesAfterFlush, func(segment *entity.Segment, _ int) int64 { return segment.ID }) - newL0Segments := lo.Filter(segmentEntitiesAfterFlush, func(segment *entity.Segment, _ int) bool { - return !lo.Contains(segmentIDsBeforeFlush, segment.ID) && segment.NumRows == 0 + segmentIDsBeforeFlush := lo.Map(segmentEntitiesBeforeFlush, func(segment *milvuspb.PersistentSegmentInfo, _ int) int64 { return segment.SegmentID }) + segmentIDsAfterFlush := lo.Map(segmentEntitiesAfterFlush, func(segment *milvuspb.PersistentSegmentInfo, _ int) int64 { return segment.SegmentID }) + newL0Segments := lo.Filter(segmentEntitiesAfterFlush, func(segment *milvuspb.PersistentSegmentInfo, _ int) bool { + return !lo.Contains(segmentIDsBeforeFlush, segment.SegmentID) && segment.Level == commonpb.SegmentLevel_L0 }) - newL0SegmentsIDs := lo.Map(newL0Segments, func(segment *entity.Segment, _ int) int64 { return segment.ID }) + newL0SegmentsIDs := lo.Map(newL0Segments, func(segment *milvuspb.PersistentSegmentInfo, _ int) int64 { return segment.SegmentID }) log.Info("GetPersistentSegmentInfo after flush from milvus", zap.String("databaseName", collectionBackup.GetDbName()), @@ -452,7 +465,7 @@ func (b *BackupContext) backupCollectionPrepare(ctx context.Context, backupInfo } } - newSegIDs := lo.Map(unfilledSegments, func(segment *entity.Segment, _ int) int64 { return segment.ID }) + newSegIDs := lo.Map(unfilledSegments, func(segment *milvuspb.PersistentSegmentInfo, _ int) int64 { return segment.SegmentID }) log.Debug("Finished fill segment", zap.String("databaseName", collectionBackup.GetDbName()), zap.String("collectionName", collectionBackup.GetCollectionName()), @@ -462,28 +475,28 @@ func (b *BackupContext) backupCollectionPrepare(ctx context.Context, backupInfo for _, v := range unfilledSegments { segment := v segmentInfo := &backuppb.SegmentBackupInfo{ - SegmentId: segment.ID, + SegmentId: segment.SegmentID, CollectionId: segment.CollectionID, - PartitionId: segment.ParititionID, + PartitionId: segment.PartitionID, NumOfRows: segment.NumRows, } b.meta.AddSegment(segmentInfo) - partSegInfoMap[segment.ParititionID] = append(partSegInfoMap[segment.ParititionID], segmentInfo) + partSegInfoMap[segment.PartitionID] = append(partSegInfoMap[segment.PartitionID], segmentInfo) } - for _, partition := range partitions { - partitionSegments := partSegInfoMap[partition.ID] + for i, partitionID := range showPartResp.PartitionIDs { + partitionSegments := partSegInfoMap[partitionID] var size int64 = 0 for _, seg := range partitionSegments { size += seg.GetSize() } partitionBackupInfo := &backuppb.PartitionBackupInfo{ - PartitionId: partition.ID, - PartitionName: partition.Name, + PartitionId: partitionID, + PartitionName: showPartResp.PartitionNames[i], CollectionId: collectionBackup.GetCollectionId(), - SegmentBackups: partSegInfoMap[partition.ID], + SegmentBackups: partSegInfoMap[partitionID], Size: size, - LoadState: partitionLoadStates[partition.Name], + LoadState: partitionLoadStates[showPartResp.PartitionNames[i]], } b.meta.AddPartition(partitionBackupInfo) } @@ -983,33 +996,9 @@ func (b *BackupContext) fillSegmentBackupInfo(ctx context.Context, segmentBackup }) } if len(deltaLogs) == 0 { - deltaLogs = append(deltaLogs, &backuppb.FieldBinlog{ - FieldID: 0, - }) + deltaLogs = append(deltaLogs, &backuppb.FieldBinlog{FieldID: 0}) } - //statsLogPath := fmt.Sprintf("%s/%s/%v/%v/%v/", b.params.MinioCfg.RootPath, "stats_log", collectionID, partitionID, segmentID) - //statsFieldsLogDir, _, _ := b.milvusStorageClient.ListWithPrefix(ctx, b.milvusBucketName, statsLogPath, false) - //statsLogs := make([]*backuppb.FieldBinlog, 0) - //for _, statsFieldLogDir := range statsFieldsLogDir { - // binlogPaths, sizes, _ := b.milvusStorageClient.ListWithPrefix(ctx, b.milvusBucketName, statsFieldLogDir, false) - // fieldIdStr := strings.Replace(strings.Replace(statsFieldLogDir, statsLogPath, "", 1), SEPERATOR, "", -1) - // fieldId, _ := strconv.ParseInt(fieldIdStr, 10, 64) - // binlogs := make([]*backuppb.Binlog, 0) - // for index, binlogPath := range binlogPaths { - // binlogs = append(binlogs, &backuppb.Binlog{ - // LogPath: binlogPath, - // LogSize: sizes[index], - // }) - // } - // statsLogs = append(statsLogs, &backuppb.FieldBinlog{ - // FieldID: fieldId, - // Binlogs: binlogs, - // }) - //} - - //segmentBackupInfo.Binlogs = insertLogs - //segmentBackupInfo.Deltalogs = deltaLogs segmentBackupInfo.Size = size segmentBackupInfo.IsL0 = isL0 b.meta.UpdateSegment(segmentBackupInfo.GetPartitionId(), segmentBackupInfo.GetSegmentId(), setSegmentBinlogs(insertLogs), setSegmentDeltaBinlogs(deltaLogs), setSegmentSize(size), setSegmentL0(isL0)) @@ -1019,24 +1008,24 @@ func (b *BackupContext) fillSegmentBackupInfo(ctx context.Context, segmentBackup func (b *BackupContext) backupRBAC(ctx context.Context, backupInfo *backuppb.BackupInfo) error { log.Info("backup RBAC") - rbacMeta, err := b.getMilvusClient().BackupRBAC(ctx) + resp, err := b.getMilvusClient().BackupRBAC(ctx) if err != nil { log.Error("fail in BackupMeta", zap.Error(err)) return err } + rbacMeta := resp.RBACMeta - users := make([]*backuppb.UserInfo, 0) - roles := make([]*backuppb.RoleEntity, 0) - grants := make([]*backuppb.GrantEntity, 0) - + users := make([]*backuppb.UserInfo, 0, len(rbacMeta.Users)) + roles := make([]*backuppb.RoleEntity, 0, len(rbacMeta.Roles)) + grants := make([]*backuppb.GrantEntity, 0, len(rbacMeta.Grants)) for _, user := range rbacMeta.Users { - roles := lo.Map(user.Roles, func(role string, index int) *backuppb.RoleEntity { - return &backuppb.RoleEntity{Name: role} + rs := lo.Map(user.Roles, func(role *milvuspb.RoleEntity, index int) *backuppb.RoleEntity { + return &backuppb.RoleEntity{Name: role.Name} }) userP := &backuppb.UserInfo{ - User: user.Name, + User: user.User, Password: user.Password, - Roles: roles, + Roles: rs, } users = append(users, userP) } @@ -1048,21 +1037,21 @@ func (b *BackupContext) backupRBAC(ctx context.Context, backupInfo *backuppb.Bac roles = append(roles, roleP) } - for _, roleGrant := range rbacMeta.RoleGrants { + for _, roleGrant := range rbacMeta.Grants { roleGrantP := &backuppb.GrantEntity{ Role: &backuppb.RoleEntity{ - Name: roleGrant.RoleName, + Name: roleGrant.Role.Name, }, Object: &backuppb.ObjectEntity{ - Name: roleGrant.Object, + Name: roleGrant.Object.Name, }, ObjectName: roleGrant.ObjectName, Grantor: &backuppb.GrantorEntity{ User: &backuppb.UserEntity{ - Name: roleGrant.GrantorName, + Name: roleGrant.Grantor.User.Name, }, Privilege: &backuppb.PrivilegeEntity{ - Name: roleGrant.PrivilegeName, + Name: roleGrant.Grantor.Privilege.Name, }, }, DbName: roleGrant.DbName, diff --git a/core/backup_impl_restore_backup.go b/core/backup_impl_restore_backup.go index 05ffeb5..45b5e74 100644 --- a/core/backup_impl_restore_backup.go +++ b/core/backup_impl_restore_backup.go @@ -4,15 +4,16 @@ import ( "context" "fmt" "path" + "strconv" "strings" "time" "github.com/cockroachdb/errors" "github.com/golang/protobuf/proto" jsoniter "github.com/json-iterator/go" + "github.com/milvus-io/milvus-proto/go-api/v2/commonpb" + "github.com/milvus-io/milvus-proto/go-api/v2/milvuspb" "github.com/milvus-io/milvus-proto/go-api/v2/schemapb" - gomilvus "github.com/milvus-io/milvus-sdk-go/v2/client" - "github.com/milvus-io/milvus-sdk-go/v2/entity" "github.com/samber/lo" "go.uber.org/atomic" "go.uber.org/zap" @@ -24,6 +25,15 @@ import ( "github.com/zilliztech/milvus-backup/internal/util/retry" ) +func conv2MilvusKV(kv []*backuppb.KeyValuePair) []*commonpb.KeyValuePair { + return lo.Map(kv, func(item *backuppb.KeyValuePair, i int) *commonpb.KeyValuePair { + return &commonpb.KeyValuePair{ + Key: item.Key, + Value: item.Value, + } + }) +} + func (b *BackupContext) RestoreBackup(ctx context.Context, request *backuppb.RestoreBackupRequest) *backuppb.RestoreBackupResponse { if request.GetRequestId() == "" { request.RequestId = utils.UUID() @@ -252,7 +262,7 @@ func (b *BackupContext) RestoreBackup(ctx context.Context, request *backuppb.Res } var hasDatabase = false for _, db := range dbs { - if db.Name == targetDBName { + if db == targetDBName { hasDatabase = true break } @@ -269,7 +279,7 @@ func (b *BackupContext) RestoreBackup(ctx context.Context, request *backuppb.Res log.Info("create database", zap.String("database", targetDBName)) } - // check if the collection exist, if exist, will not restore + // check if the collection exist, if existed, will not restore if !request.GetSkipCreateCollection() { exist, err := b.getMilvusClient().HasCollection(ctx, targetDBName, targetCollectionName) if err != nil { @@ -424,23 +434,25 @@ func (b *BackupContext) executeRestoreCollectionTask(ctx context.Context, backup log.Info("start restore", zap.String("backupBucketName", backupBucketName), zap.String("backupPath", backupPath)) + // create collection - fields := make([]*entity.Field, 0) + fields := make([]*schemapb.FieldSchema, 0, len(task.GetCollBackup().GetSchema().GetFields())) hasPartitionKey := false for _, field := range task.GetCollBackup().GetSchema().GetFields() { - fieldRestore := &entity.Field{ - ID: field.GetFieldID(), - Name: field.GetName(), - PrimaryKey: field.GetIsPrimaryKey(), - AutoID: field.GetAutoID(), - Description: field.GetDescription(), - DataType: entity.FieldType(field.GetDataType()), - TypeParams: utils.KvPairsMap(field.GetTypeParams()), - IndexParams: utils.KvPairsMap(field.GetIndexParams()), - IsDynamic: field.GetIsDynamic(), - IsPartitionKey: field.GetIsPartitionKey(), - Nullable: field.GetNullable(), - ElementType: entity.FieldType(field.GetElementType()), + fieldRestore := &schemapb.FieldSchema{ + FieldID: field.GetFieldID(), + Name: field.GetName(), + IsPrimaryKey: field.GetIsPrimaryKey(), + AutoID: field.GetAutoID(), + Description: field.GetDescription(), + DataType: schemapb.DataType(field.GetDataType()), + TypeParams: conv2MilvusKV(field.GetTypeParams()), + IndexParams: conv2MilvusKV(field.GetIndexParams()), + IsDynamic: field.GetIsDynamic(), + IsPartitionKey: field.GetIsPartitionKey(), + Nullable: field.GetNullable(), + ElementType: schemapb.DataType(field.GetElementType()), + IsFunctionOutput: field.IsFunctionOutput, } if field.DefaultValueProto != "" { defaultValue := &schemapb.ValueField{} @@ -456,26 +468,43 @@ func (b *BackupContext) executeRestoreCollectionTask(ctx context.Context, backup hasPartitionKey = true } } + log.Info("collection fields", zap.Any("fields", fields)) + + functions := make([]*schemapb.FunctionSchema, 0, len(task.GetCollBackup().GetSchema().GetFunctions())) + for _, function := range task.GetCollBackup().GetSchema().GetFunctions() { + fun := &schemapb.FunctionSchema{ + Name: function.Name, + Id: function.Id, + Description: function.Description, + Type: schemapb.FunctionType(function.Type), + InputFieldNames: function.InputFieldNames, + InputFieldIds: function.InputFieldIds, + OutputFieldNames: function.OutputFieldNames, + OutputFieldIds: function.OutputFieldIds, + Params: conv2MilvusKV(function.Params), + } + functions = append(functions, fun) + } + log.Info("collection functions", zap.Any("functions", functions)) - log.Info("collection schema", zap.Any("fields", fields)) - - collectionSchema := &entity.Schema{ - CollectionName: targetCollectionName, + collectionSchema := &schemapb.CollectionSchema{ + Name: targetCollectionName, Description: task.GetCollBackup().GetSchema().GetDescription(), AutoID: task.GetCollBackup().GetSchema().GetAutoID(), + Functions: functions, Fields: fields, EnableDynamicField: task.GetCollBackup().GetSchema().GetEnableDynamicField(), } if task.GetDropExistCollection() { //check if the collection exist, if collection exist, will drop it - exist, err := b.milvusClient.HasCollection(ctx, targetDBName, targetCollectionName) + exist, err := b.grpcClient.HasCollection(ctx, targetDBName, targetCollectionName) if err != nil { errorMsg := fmt.Sprintf("fail to check whether the collection is exist, collection_name: %s, err: %s", targetCollectionName, err) log.Error(errorMsg) } if exist { - err := b.milvusClient.DropCollection(ctx, targetDBName, targetCollectionName) + err := b.grpcClient.DropCollection(ctx, targetDBName, targetCollectionName) if err != nil { errorMsg := fmt.Sprintf("fail to drop collection, CollectionName: %s.%s err: %s", targetDBName, targetCollectionName, err) log.Error(errorMsg) @@ -503,16 +532,17 @@ func (b *BackupContext) executeRestoreCollectionTask(ctx context.Context, backup ctx, targetDBName, collectionSchema, + commonpb.ConsistencyLevel(task.GetCollBackup().GetConsistencyLevel()), shardNum, - gomilvus.WithConsistencyLevel(entity.ConsistencyLevel(task.GetCollBackup().GetConsistencyLevel())), - gomilvus.WithPartitionNum(int64(partitionNum))) + int64(partitionNum)) } return b.getMilvusClient().CreateCollection( ctx, targetDBName, collectionSchema, + commonpb.ConsistencyLevel(task.GetCollBackup().GetConsistencyLevel()), shardNum, - gomilvus.WithConsistencyLevel(entity.ConsistencyLevel(task.GetCollBackup().GetConsistencyLevel()))) + 0) }, retry.Attempts(10), retry.Sleep(1*time.Second)) if err != nil { errorMsg := fmt.Sprintf("fail to create collection, targetCollectionName: %s err: %s", targetCollectionName, err) @@ -529,68 +559,54 @@ func (b *BackupContext) executeRestoreCollectionTask(ctx context.Context, backup } if task.GetDropExistIndex() { - for _, field := range task.CollBackup.Schema.Fields { - fieldIndexs, err := b.getMilvusClient().DescribeIndex(b.ctx, targetDBName, targetCollectionName, field.Name) + indexes, err := b.getMilvusClient().ListIndex(b.ctx, targetDBName, targetCollectionName) + if err != nil { + log.Error("fail in DescribeIndex", zap.Error(err)) + return task, err + } + + for _, index := range indexes { + err = b.grpcClient.DropIndex(ctx, targetDBName, targetCollectionName, index.IndexName) if err != nil { - if strings.Contains(err.Error(), "index not found") || - strings.HasPrefix(err.Error(), "index doesn't exist") { - // todo - log.Info("field has no index", - zap.String("field_name", field.Name)) - continue - } else { - log.Error("fail in DescribeIndex", zap.Error(err)) - return task, err - } - } - for _, fieldIndex := range fieldIndexs { - err = b.milvusClient.DropIndex(ctx, targetDBName, targetCollectionName, fieldIndex.Name()) - if err != nil { - log.Warn("Fail to drop index", - zap.Error(err)) - return task, err - } - log.Info("drop index", - zap.String("field_name", field.Name), - zap.String("index_name", fieldIndex.Name())) + log.Warn("Fail to drop index", zap.Error(err)) + return task, err } + log.Info("drop index", + zap.String("field_name", index.FieldName), + zap.String("index_name", index.IndexName)) } } if task.GetRestoreIndex() { - vectorFields := make(map[string]bool, 0) + vectorFields := make(map[string]bool, len(collectionSchema.Fields)) for _, field := range collectionSchema.Fields { - if strings.HasSuffix(strings.ToLower(field.DataType.Name()), "vector") { + if strings.HasSuffix(strings.ToLower(schemapb.DataType_name[int32(field.DataType)]), "vector") { vectorFields[field.Name] = true } } indexes := task.GetCollBackup().GetIndexInfos() for _, index := range indexes { - var idx entity.Index + var err error log.Info("source index", zap.String("indexName", index.GetIndexName()), zap.String("indexType", index.GetIndexType()), zap.Any("params", index.GetParams())) if _, ok := vectorFields[index.GetFieldName()]; ok && task.GetUseAutoIndex() { log.Info("use auto index") - params := make(map[string]string, 0) // auto index only support index_type and metric_type in params - params["index_type"] = "AUTOINDEX" - params["metric_type"] = index.GetParams()["metric_type"] - idx = entity.NewGenericIndex(index.GetIndexName(), entity.AUTOINDEX, params) + params := map[string]string{ + "index_type": "AUTOINDEX", + "metric_type": index.GetParams()["metric_type"], + } + err = b.getMilvusClient().CreateIndex(ctx, targetDBName, targetCollectionName, index.GetFieldName(), index.GetIndexName(), params) } else { log.Info("not auto index") - indexType := index.GetIndexType() - if indexType == "marisa-trie" { - indexType = "Trie" - } params := index.GetParams() if params["index_type"] == "marisa-trie" { params["index_type"] = "Trie" } - idx = entity.NewGenericIndex(index.GetIndexName(), entity.IndexType(indexType), index.GetParams()) + err = b.getMilvusClient().CreateIndex(ctx, targetDBName, targetCollectionName, index.GetFieldName(), index.GetIndexName(), params) } - err := b.getMilvusClient().CreateIndex(ctx, targetDBName, targetCollectionName, index.GetFieldName(), idx, true) if err != nil { log.Warn("Fail to restore index", zap.Error(err)) return task, err @@ -685,7 +701,7 @@ func (b *BackupContext) executeRestoreCollectionTask(ctx context.Context, backup } restoreFileGroups := make([]restoreGroup, 0) - var l0Segments []*backuppb.SegmentBackupInfo = lo.Filter(partitionBackup.GetSegmentBackups(), func(segment *backuppb.SegmentBackupInfo, _ int) bool { + l0Segments := lo.Filter(partitionBackup.GetSegmentBackups(), func(segment *backuppb.SegmentBackupInfo, _ int) bool { return segment.IsL0 }) notl0Segments := lo.Filter(partitionBackup.GetSegmentBackups(), func(segment *backuppb.SegmentBackupInfo, _ int) bool { @@ -800,21 +816,7 @@ func (b *BackupContext) executeBulkInsert(ctx context.Context, db, coll string, zap.String("partition", partition), zap.Strings("files", files), zap.Int64("endTime", endTime)) - var taskId int64 - var err error - if endTime == 0 { - if isL0 { - taskId, err = b.getMilvusClient().BulkInsert(ctx, db, coll, partition, files, gomilvus.IsL0(isL0), gomilvus.SkipDiskQuotaCheck(skipDiskQuotaCheck)) - } else { - taskId, err = b.getMilvusClient().BulkInsert(ctx, db, coll, partition, files, gomilvus.IsBackup(), gomilvus.SkipDiskQuotaCheck(skipDiskQuotaCheck)) - } - } else { - if isL0 { - taskId, err = b.getMilvusClient().BulkInsert(ctx, db, coll, partition, files, gomilvus.IsL0(isL0), gomilvus.SkipDiskQuotaCheck(skipDiskQuotaCheck), gomilvus.WithEndTs(endTime)) - } else { - taskId, err = b.getMilvusClient().BulkInsert(ctx, db, coll, partition, files, gomilvus.IsBackup(), gomilvus.SkipDiskQuotaCheck(skipDiskQuotaCheck), gomilvus.WithEndTs(endTime)) - } - } + taskId, err := b.getMilvusClient().BulkInsert(ctx, db, coll, partition, files, endTime, isL0, skipDiskQuotaCheck) if err != nil { log.Error("fail to bulk insert", zap.String("db", db), @@ -836,6 +838,17 @@ func (b *BackupContext) executeBulkInsert(ctx context.Context, db, coll string, return nil } +func getProcess(infos map[string]string) int { + if val, ok := infos["progress_percent"]; ok { + progress, err := strconv.Atoi(val) + if err != nil { + return 0 + } + return progress + } + return 0 +} + func (b *BackupContext) watchBulkInsertState(ctx context.Context, taskId int64, timeout int64, sleepSeconds int) error { lastProgress := 0 lastUpdateTime := time.Now().Unix() @@ -845,24 +858,27 @@ func (b *BackupContext) watchBulkInsertState(ctx context.Context, taskId int64, if err != nil { return err } + infos := lo.SliceToMap(importTaskState.Infos, func(info *commonpb.KeyValuePair) (string, string) { + return info.Key, info.Value + }) log.Info("bulkinsert task state", zap.Int64("id", taskId), zap.Int32("state", int32(importTaskState.State)), zap.Any("state", importTaskState), - zap.Int("progress", importTaskState.Progress()), + zap.Int("progress", getProcess(infos)), zap.Int64("currentTimestamp", currentTimestamp), zap.Int64("lastUpdateTime", lastUpdateTime)) switch importTaskState.State { - case entity.BulkInsertFailed: - if value, ok := importTaskState.Infos["failed_reason"]; ok { + case commonpb.ImportState_ImportFailed: + if value, ok := infos["failed_reason"]; ok { return errors.New("bulk insert fail, info: " + value) } else { return errors.New("bulk insert fail") } - case entity.BulkInsertCompleted: + case commonpb.ImportState_ImportCompleted: return nil default: - currentProgress := importTaskState.Progress() + currentProgress := getProcess(infos) if currentProgress > lastProgress { lastUpdateTime = time.Now().Unix() } else if (currentTimestamp - lastUpdateTime) >= timeout { @@ -873,7 +889,6 @@ func (b *BackupContext) watchBulkInsertState(ctx context.Context, taskId int64, continue } } - return errors.New("import task timeout") } func (b *BackupContext) getBackupPartitionPaths(ctx context.Context, bucketName string, backupPath string, partition *backuppb.PartitionBackupInfo) ([]string, int64, error) { @@ -932,54 +947,53 @@ func (b *BackupContext) getBackupPartitionPathsWithGroupID(ctx context.Context, func (b *BackupContext) restoreRBAC(ctx context.Context, backupInfo *backuppb.BackupInfo) error { log.Info("restore RBAC") - curRBAC, err := b.getMilvusClient().BackupRBAC(ctx) + resp, err := b.getMilvusClient().BackupRBAC(ctx) if err != nil { return fmt.Errorf("fail to get current RBAC, err: %s", err) } + curRBAC := resp.RBACMeta rbacBackup := backupInfo.GetRbacMeta() - curUsers := lo.SliceToMap(curRBAC.Users, func(user *entity.UserInfo) (string, struct{}) { - return user.Name, struct{}{} + curUsers := lo.SliceToMap(curRBAC.Users, func(user *milvuspb.UserInfo) (string, struct{}) { + return user.User, struct{}{} }) - users := make([]*entity.UserInfo, 0, len(rbacBackup.GetUsers())) + users := make([]*milvuspb.UserInfo, 0, len(rbacBackup.GetUsers())) for _, user := range rbacBackup.GetUsers() { // skip if user already exist if _, ok := curUsers[user.GetUser()]; ok { continue } - ur := lo.Map(user.GetRoles(), func(role *backuppb.RoleEntity, index int) string { - return role.Name + ur := lo.Map(user.GetRoles(), func(role *backuppb.RoleEntity, index int) *milvuspb.RoleEntity { + return &milvuspb.RoleEntity{Name: role.Name} }) - userEntity := &entity.UserInfo{ - UserDescription: entity.UserDescription{ - Name: user.GetUser(), - Roles: ur, - }, + userEntity := &milvuspb.UserInfo{ + User: user.User, Password: user.Password, + Roles: ur, } users = append(users, userEntity) } - curRoles := lo.SliceToMap(curRBAC.Roles, func(role *entity.Role) (string, struct{}) { + curRoles := lo.SliceToMap(curRBAC.Roles, func(role *milvuspb.RoleEntity) (string, struct{}) { return role.Name, struct{}{} }) - roles := make([]*entity.Role, 0, len(rbacBackup.GetRoles())) + roles := make([]*milvuspb.RoleEntity, 0, len(rbacBackup.GetRoles())) for _, role := range rbacBackup.GetRoles() { // skip if role already exist if _, ok := curRoles[role.GetName()]; ok { continue } - roleEntity := &entity.Role{ + roleEntity := &milvuspb.RoleEntity{ Name: role.GetName(), } roles = append(roles, roleEntity) } - grants := make([]*entity.RoleGrants, 0, len(rbacBackup.GetGrants())) - curGrants := lo.SliceToMap(curRBAC.RoleGrants, func(grant *entity.RoleGrants) (string, struct{}) { - return fmt.Sprintf("%s/%s/%s/%s/%s/%s", grant.Object, grant.ObjectName, grant.RoleName, grant.GrantorName, grant.PrivilegeName, grant.DbName), struct{}{} + grants := make([]*milvuspb.GrantEntity, 0, len(rbacBackup.GetGrants())) + curGrants := lo.SliceToMap(curRBAC.Grants, func(grant *milvuspb.GrantEntity) (string, struct{}) { + return fmt.Sprintf("%s/%s/%s/%s/%s/%s", grant.Object, grant.ObjectName, grant.Role.Name, grant.Grantor.User, grant.Grantor.Privilege.Name, grant.DbName), struct{}{} }) for _, roleGrant := range rbacBackup.GetGrants() { key := fmt.Sprintf("%s/%s/%s/%s/%s/%s", roleGrant.Object.GetName(), roleGrant.GetObjectName(), roleGrant.GetRole().GetName(), roleGrant.GetGrantor().GetUser().GetName(), roleGrant.GetGrantor().GetPrivilege().GetName(), roleGrant.GetDbName()) @@ -987,21 +1001,23 @@ func (b *BackupContext) restoreRBAC(ctx context.Context, backupInfo *backuppb.Ba if _, ok := curGrants[key]; ok { continue } - roleGrantEntity := &entity.RoleGrants{ - Object: roleGrant.Object.GetName(), - ObjectName: roleGrant.GetObjectName(), - RoleName: roleGrant.GetRole().GetName(), - GrantorName: roleGrant.GetGrantor().GetUser().GetName(), - PrivilegeName: roleGrant.GetGrantor().GetPrivilege().GetName(), - DbName: roleGrant.GetDbName(), + roleGrantEntity := &milvuspb.GrantEntity{ + Object: &milvuspb.ObjectEntity{Name: roleGrant.Object.Name}, + ObjectName: roleGrant.GetObjectName(), + Role: &milvuspb.RoleEntity{Name: roleGrant.Role.Name}, + Grantor: &milvuspb.GrantorEntity{ + User: &milvuspb.UserEntity{Name: roleGrant.Grantor.User.Name}, + Privilege: &milvuspb.PrivilegeEntity{Name: roleGrant.Grantor.Privilege.Name}, + }, + DbName: roleGrant.GetDbName(), } grants = append(grants, roleGrantEntity) } - rbacMeta := &entity.RBACMeta{ - Users: users, - Roles: roles, - RoleGrants: grants, + rbacMeta := &milvuspb.RBACMeta{ + Users: users, + Roles: roles, + Grants: grants, } log.Info("restore RBAC", zap.Int("users", len(users)), zap.Int("roles", len(roles)), zap.Int("grants", len(grants))) diff --git a/core/backup_meta.go b/core/backup_meta.go index 9d38ca9..221433e 100644 --- a/core/backup_meta.go +++ b/core/backup_meta.go @@ -6,6 +6,7 @@ import ( "strings" "github.com/golang/protobuf/proto" + "github.com/zilliztech/milvus-backup/core/proto/backuppb" ) diff --git a/core/backup_server.go b/core/backup_server.go index ff210e0..bab1163 100644 --- a/core/backup_server.go +++ b/core/backup_server.go @@ -5,12 +5,12 @@ import ( "github.com/gin-gonic/gin" swaggerFiles "github.com/swaggo/files" ginSwagger "github.com/swaggo/gin-swagger" + "go.uber.org/zap" + "net/http" + "github.com/zilliztech/milvus-backup/core/paramtable" "github.com/zilliztech/milvus-backup/core/proto/backuppb" "github.com/zilliztech/milvus-backup/internal/log" - "go.uber.org/zap" - "net/http" - "net/http/pprof" ) const ( @@ -36,7 +36,7 @@ type Server struct { config *BackupConfig } -func NewServer(ctx context.Context, params paramtable.BackupParams, opts ...BackupOption) (*Server, error) { +func NewServer(ctx context.Context, params *paramtable.BackupParams, opts ...BackupOption) (*Server, error) { c := newDefaultBackupConfig() for _, opt := range opts { opt(c) @@ -57,7 +57,6 @@ func (s *Server) Init() { } func (s *Server) Start() { - s.registerProfilePort() err := s.engine.Run(s.config.port) if err != nil { log.Error("Failed to start server", zap.Error(err)) @@ -79,15 +78,7 @@ func (s *Server) registerHTTPServer() { s.engine = ginHandler } -// registerHTTPServer register the http server, panic when failed -func (s *Server) registerProfilePort() { - go func() { - http.HandleFunc("/debug/pprof/heap", pprof.Index) - http.ListenAndServe("localhost:8089", nil) - }() -} - -func handleHello(c *gin.Context) (interface{}, error) { +func handleHello(c *gin.Context) (any, error) { c.String(200, "Hello, This is backup service") return nil, nil } diff --git a/core/backup_server_test.go b/core/backup_server_test.go index c55bebd..d14a71d 100644 --- a/core/backup_server_test.go +++ b/core/backup_server_test.go @@ -8,6 +8,7 @@ import ( "time" "github.com/stretchr/testify/assert" + "github.com/zilliztech/milvus-backup/core/paramtable" ) @@ -18,7 +19,7 @@ func TestBackupService(t *testing.T) { params.Init() context := context.Background() - server, err := NewServer(context, params) + server, err := NewServer(context, ¶ms) assert.NoError(t, err) server.Init() server.Start() diff --git a/core/client/cfg.go b/core/client/cfg.go new file mode 100644 index 0000000..2e1c601 --- /dev/null +++ b/core/client/cfg.go @@ -0,0 +1,59 @@ +package client + +import ( + "crypto/tls" + "encoding/base64" + "errors" + "fmt" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/credentials/insecure" + "net/url" +) + +type Cfg struct { + GrpcAddress string // Remote address, "localhost:19530". + EnableTLS bool // Enable TLS for connection. + DialOpts []grpc.DialOption + + Username string // Username for auth. + Password string // Password for auth. + + RestfulAddress string // Restful address, "localhost:19121". +} + +func (cfg *Cfg) parseAuth() string { + if cfg.Username != "" || cfg.Password != "" { + value := base64.StdEncoding.EncodeToString([]byte(fmt.Sprintf("%s:%s", cfg.Username, cfg.Password))) + return value + } + + return "" +} + +func (cfg *Cfg) parseDialInfo() (*url.URL, []grpc.DialOption, error) { + var opts []grpc.DialOption + address := cfg.GrpcAddress + if !regexValidScheme.MatchString(address) { + address = fmt.Sprintf("tcp://%s", address) + } + remoteURL, err := url.Parse(address) + if err != nil { + return nil, nil, errors.New("milvus address parse fail") + } + // Remote Host should never be empty. + if remoteURL.Host == "" { + return nil, nil, errors.New("empty remote host of milvus address") + } + + if remoteURL.Scheme == "https" || cfg.EnableTLS { + opts = append(opts, grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{}))) + } else { + opts = append(opts, grpc.WithTransportCredentials(insecure.NewCredentials())) + } + if remoteURL.Port() == "" && cfg.EnableTLS { + remoteURL.Host += ":443" + } + + return remoteURL, opts, nil +} diff --git a/core/client/grpc.go b/core/client/grpc.go new file mode 100644 index 0000000..4bb8cb7 --- /dev/null +++ b/core/client/grpc.go @@ -0,0 +1,507 @@ +package client + +import ( + "context" + "errors" + "fmt" + "math" + "os" + "regexp" + "strconv" + "time" + + grpcretry "github.com/grpc-ecosystem/go-grpc-middleware/retry" + "google.golang.org/grpc/backoff" + "google.golang.org/grpc/keepalive" + + "github.com/golang/protobuf/proto" + "github.com/milvus-io/milvus-proto/go-api/v2/commonpb" + "github.com/milvus-io/milvus-proto/go-api/v2/milvuspb" + "github.com/milvus-io/milvus-proto/go-api/v2/schemapb" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + + "github.com/zilliztech/milvus-backup/internal/log" + "github.com/zilliztech/milvus-backup/version" +) + +const ( + disableDatabase uint64 = 1 << iota +) + +func defaultDialOpt() []grpc.DialOption { + opts := []grpc.DialOption{ + grpc.WithKeepaliveParams(keepalive.ClientParameters{ + Time: 5 * time.Second, + Timeout: 10 * time.Second, + PermitWithoutStream: true, + }), + grpc.WithConnectParams(grpc.ConnectParams{ + Backoff: backoff.Config{ + BaseDelay: 100 * time.Millisecond, + Multiplier: 1.6, + Jitter: 0.2, + MaxDelay: 3 * time.Second, + }, + MinConnectTimeout: 3 * time.Second, + }), + grpc.WithDefaultCallOptions( + grpc.MaxCallRecvMsgSize(math.MaxInt32), // math.MaxInt32 = 2147483647, 2GB - 1 + // not setting max send msg size, since default is Unlimited + ), + grpc.WithChainUnaryInterceptor(grpcretry.UnaryClientInterceptor( + grpcretry.WithMax(6), + grpcretry.WithBackoff(func(attempt uint) time.Duration { + return 60 * time.Millisecond * time.Duration(math.Pow(3, float64(attempt))) + }), + grpcretry.WithCodes(codes.Unavailable, codes.ResourceExhausted)), + ), + } + + return opts +} + +type Grpc interface { + Close() error + SupportMultiDatabase() bool + GetVersion(ctx context.Context) (string, error) + CreateDatabase(ctx context.Context, dbName string) error + ListDatabases(ctx context.Context) ([]string, error) + DescribeCollection(ctx context.Context, db, collName string) (*milvuspb.DescribeCollectionResponse, error) + DropCollection(ctx context.Context, db, collectionName string) error + ListIndex(ctx context.Context, db, collName string) ([]*milvuspb.IndexDescription, error) + ShowPartitions(ctx context.Context, db, collName string) (*milvuspb.ShowPartitionsResponse, error) + GetLoadingProgress(ctx context.Context, db, collName string, partitionNames []string) (int64, error) + GetPersistentSegmentInfo(ctx context.Context, db, collName string) ([]*milvuspb.PersistentSegmentInfo, error) + Flush(ctx context.Context, db, collName string) (*milvuspb.FlushResponse, error) + ListCollections(ctx context.Context, db string) (*milvuspb.ShowCollectionsResponse, error) + HasCollection(ctx context.Context, db, collName string) (bool, error) + BulkInsert(ctx context.Context, db, collName, partitionName string, files []string, endTime int64, isL0 bool, skipDiskQuotaCheck bool) (int64, error) + GetBulkInsertState(ctx context.Context, taskID int64) (*milvuspb.GetImportStateResponse, error) + CreateCollection(ctx context.Context, db string, schema *schemapb.CollectionSchema, cl commonpb.ConsistencyLevel, shardNum int32, partitionNum int64) error + CreatePartition(ctx context.Context, db, collName, partitionName string) error + HasPartition(ctx context.Context, db, collName, partitionName string) (bool, error) + CreateIndex(ctx context.Context, db, collName, fieldName, idxName string, extraParams map[string]string) error + DropIndex(ctx context.Context, db, collName, indexName string) error + BackupRBAC(ctx context.Context) (*milvuspb.BackupRBACMetaResponse, error) + RestoreRBAC(ctx context.Context, rbacMeta *milvuspb.RBACMeta) error +} + +var regexValidScheme = regexp.MustCompile(`^https?://`) + +const ( + authorizationHeader = `authorization` + identifierHeader = `identifier` + databaseHeader = `dbname` +) + +func ok(status *commonpb.Status) bool { return status.GetCode() == 0 } + +func checkResponse(resp any, err error) error { + if err != nil { + return err + } + + switch resp.(type) { + case interface{ GetStatus() *commonpb.Status }: + if !ok(resp.(interface{ GetStatus() *commonpb.Status }).GetStatus()) { + return fmt.Errorf("client: operation failed: %v", resp.(interface{ GetStatus() *commonpb.Status }).GetStatus()) + } + case *commonpb.Status: + if !ok(resp.(*commonpb.Status)) { + return fmt.Errorf("client: operation failed: %v", resp.(*commonpb.Status)) + } + } + return nil +} + +type GrpcClient struct { + cfg *Cfg + + conn *grpc.ClientConn + srv milvuspb.MilvusServiceClient + + auth string + serverVersion string + identifier string + + flags uint64 +} + +func NewGrpc(cfg *Cfg) (*GrpcClient, error) { + addr, opts, err := cfg.parseDialInfo() + if err != nil { + return nil, fmt.Errorf("client: parse address failed: %w", err) + } + auth := cfg.parseAuth() + + opts = append(opts, defaultDialOpt()...) + + conn, err := grpc.NewClient(addr.Host, opts...) + if err != nil { + return nil, fmt.Errorf("client: create grpc client failed: %w", err) + } + srv := milvuspb.NewMilvusServiceClient(conn) + + cli := &GrpcClient{ + cfg: cfg, + + conn: conn, + srv: srv, + + auth: auth, + } + + return cli, nil +} + +func (m *GrpcClient) hasFlags(flags uint64) bool { return (m.flags & flags) > 0 } +func (m *GrpcClient) SupportMultiDatabase() bool { return !m.hasFlags(disableDatabase) } + +func (m *GrpcClient) newCtx(ctx context.Context) context.Context { + if m.auth != "" { + return metadata.AppendToOutgoingContext(ctx, authorizationHeader, m.auth) + } + if m.identifier != "" { + return metadata.AppendToOutgoingContext(ctx, identifierHeader, m.identifier) + } + return ctx +} + +func (m *GrpcClient) newCtxWithDB(ctx context.Context, db string) context.Context { + ctx = m.newCtx(ctx) + return metadata.AppendToOutgoingContext(ctx, databaseHeader, db) +} + +func (m *GrpcClient) connect(ctx context.Context) error { + hostName, err := os.Hostname() + if err != nil { + return fmt.Errorf("get hostname failed: %w", err) + } + + connReq := &milvuspb.ConnectRequest{ + ClientInfo: &commonpb.ClientInfo{ + SdkType: "Backup Tool Custom SDK", + SdkVersion: version.Version, + LocalTime: time.Now().String(), + User: m.cfg.Username, + Host: hostName, + }, + } + + resp, err := m.srv.Connect(ctx, connReq) + if err != nil { + s, ok := status.FromError(err) + if ok { + if s.Code() == codes.Unimplemented { + log.Info("The server does not support the Connect API, skipping") + m.flags |= disableDatabase + } + } + return fmt.Errorf("client: connect to server failed: %w", err) + } + + if !ok(resp.GetStatus()) { + return fmt.Errorf("client: connect to server failed: %v", resp.GetStatus()) + } + + m.serverVersion = resp.GetServerInfo().GetBuildTags() + m.identifier = strconv.FormatInt(resp.GetIdentifier(), 10) + return nil +} + +func (m *GrpcClient) Close() error { + return m.conn.Close() +} + +func (m *GrpcClient) GetVersion(ctx context.Context) (string, error) { + ctx = m.newCtx(ctx) + resp, err := m.srv.GetVersion(ctx, &milvuspb.GetVersionRequest{}) + if err := checkResponse(resp, err); err != nil { + return "", fmt.Errorf("client: get version failed: %w", err) + } + + return resp.GetVersion(), nil +} + +func (m *GrpcClient) CreateDatabase(ctx context.Context, dbName string) error { + ctx = m.newCtx(ctx) + if m.hasFlags(disableDatabase) { + return errors.New("client: the server does not support database") + } + + resp, err := m.srv.CreateDatabase(ctx, &milvuspb.CreateDatabaseRequest{DbName: dbName}) + if err := checkResponse(resp, err); err != nil { + return fmt.Errorf("client: create database failed: %w", err) + } + + return nil +} + +func (m *GrpcClient) ListDatabases(ctx context.Context) ([]string, error) { + ctx = m.newCtx(ctx) + if m.hasFlags(disableDatabase) { + return nil, errors.New("client: the server does not support database") + } + + resp, err := m.srv.ListDatabases(ctx, &milvuspb.ListDatabasesRequest{}) + if err := checkResponse(resp, err); err != nil { + return nil, fmt.Errorf("client: list databases failed: %w", err) + } + + return resp.GetDbNames(), nil +} + +func (m *GrpcClient) DescribeCollection(ctx context.Context, db, collName string) (*milvuspb.DescribeCollectionResponse, error) { + ctx = m.newCtxWithDB(ctx, db) + resp, err := m.srv.DescribeCollection(ctx, &milvuspb.DescribeCollectionRequest{CollectionName: collName}) + if err := checkResponse(resp, err); err != nil { + return nil, fmt.Errorf("client: describe collection failed: %w", err) + } + + return resp, nil +} + +func (m *GrpcClient) ListIndex(ctx context.Context, db, collName string) ([]*milvuspb.IndexDescription, error) { + ctx = m.newCtxWithDB(ctx, db) + resp, err := m.srv.DescribeIndex(ctx, &milvuspb.DescribeIndexRequest{CollectionName: collName}) + if err := checkResponse(resp, err); err != nil { + return nil, fmt.Errorf("client: describe index failed: %w", err) + } + + return resp.IndexDescriptions, nil +} + +func (m *GrpcClient) ShowPartitions(ctx context.Context, db, collName string) (*milvuspb.ShowPartitionsResponse, error) { + ctx = m.newCtxWithDB(ctx, db) + resp, err := m.srv.ShowPartitions(ctx, &milvuspb.ShowPartitionsRequest{CollectionName: collName}) + if err := checkResponse(resp, err); err != nil { + return nil, fmt.Errorf("client: show partitions failed: %w", err) + } + return resp, nil +} + +func (m *GrpcClient) GetLoadingProgress(ctx context.Context, db, collName string, partitionNames []string) (int64, error) { + ctx = m.newCtxWithDB(ctx, db) + resp, err := m.srv.GetLoadingProgress(ctx, &milvuspb.GetLoadingProgressRequest{CollectionName: collName, PartitionNames: partitionNames}) + if err != nil { + return 0, fmt.Errorf("client: get loading progress failed: %w", err) + } + + return resp.GetProgress(), nil +} + +func (m *GrpcClient) GetPersistentSegmentInfo(ctx context.Context, db, collName string) ([]*milvuspb.PersistentSegmentInfo, error) { + ctx = m.newCtxWithDB(ctx, db) + resp, err := m.srv.GetPersistentSegmentInfo(ctx, &milvuspb.GetPersistentSegmentInfoRequest{CollectionName: collName}) + if err := checkResponse(resp, err); err != nil { + return nil, fmt.Errorf("client: get persistent segment info failed: %w", err) + } + + return resp.GetInfos(), nil +} + +func (m *GrpcClient) Flush(ctx context.Context, db, collName string) (*milvuspb.FlushResponse, error) { + ctx = m.newCtxWithDB(ctx, db) + resp, err := m.srv.Flush(ctx, &milvuspb.FlushRequest{CollectionNames: []string{collName}}) + if err := checkResponse(resp, err); err != nil { + return nil, fmt.Errorf("client: flush failed: %w", err) + } + + segmentIDs, has := resp.GetCollSegIDs()[collName] + ids := segmentIDs.GetData() + if has && len(ids) > 0 { + flushed := func() bool { + getFlushResp, err := m.srv.GetFlushState(ctx, &milvuspb.GetFlushStateRequest{ + SegmentIDs: ids, + FlushTs: resp.GetCollFlushTs()[collName], + CollectionName: collName, + }) + if err != nil { + // TODO max retry + return false + } + return getFlushResp.GetFlushed() + } + for !flushed() { + // respect context deadline/cancel + select { + case <-ctx.Done(): + return nil, errors.New("deadline exceeded") + default: + } + time.Sleep(200 * time.Millisecond) + } + } + + return resp, nil +} + +func (m *GrpcClient) ListCollections(ctx context.Context, db string) (*milvuspb.ShowCollectionsResponse, error) { + ctx = m.newCtxWithDB(ctx, db) + resp, err := m.srv.ShowCollections(ctx, &milvuspb.ShowCollectionsRequest{}) + if err := checkResponse(resp, err); err != nil { + return nil, fmt.Errorf("client: list collections failed: %w", err) + } + + return resp, nil +} + +func (m *GrpcClient) HasCollection(ctx context.Context, db, collName string) (bool, error) { + ctx = m.newCtxWithDB(ctx, db) + resp, err := m.srv.HasCollection(ctx, &milvuspb.HasCollectionRequest{CollectionName: collName}) + if err := checkResponse(resp, err); err != nil { + return false, fmt.Errorf("client: has collection failed: %w", err) + } + return resp.GetValue(), nil +} + +func (m *GrpcClient) BulkInsert(ctx context.Context, db, collName string, partitionName string, files []string, endTime int64, isL0 bool, skipDiskQuotaCheck bool) (int64, error) { + ctx = m.newCtxWithDB(ctx, db) + var opts []*commonpb.KeyValuePair + if endTime > 0 { + opts = append(opts, &commonpb.KeyValuePair{Key: "end_time", Value: strconv.FormatInt(endTime, 10)}) + } + if isL0 { + opts = append(opts, &commonpb.KeyValuePair{Key: "l0_import", Value: "true"}) + } else { + opts = append(opts, &commonpb.KeyValuePair{Key: "backup", Value: "true"}) + } + opts = append(opts, &commonpb.KeyValuePair{Key: "skip_disk_quota_check", Value: strconv.FormatBool(skipDiskQuotaCheck)}) + + in := &milvuspb.ImportRequest{ + CollectionName: collName, + PartitionName: partitionName, + Files: files, + Options: opts, + } + resp, err := m.srv.Import(ctx, in) + if err := checkResponse(resp, err); err != nil { + return 0, fmt.Errorf("client: bulk insert failed: %w", err) + } + + return resp.GetTasks()[0], nil +} + +func (m *GrpcClient) GetBulkInsertState(ctx context.Context, taskID int64) (*milvuspb.GetImportStateResponse, error) { + ctx = m.newCtx(ctx) + resp, err := m.srv.GetImportState(ctx, &milvuspb.GetImportStateRequest{Task: taskID}) + if err := checkResponse(resp, err); err != nil { + return nil, fmt.Errorf("client: get bulk insert state failed: %w", err) + } + + return resp, nil +} + +func (m *GrpcClient) CreateCollection(ctx context.Context, db string, schema *schemapb.CollectionSchema, cl commonpb.ConsistencyLevel, shardNum int32, partitionNum int64) error { + ctx = m.newCtxWithDB(ctx, db) + bs, err := proto.Marshal(schema) + if err != nil { + return fmt.Errorf("client: create collection failed: %w", err) + } + in := &milvuspb.CreateCollectionRequest{ + CollectionName: schema.Name, + Schema: bs, + ConsistencyLevel: cl, + ShardsNum: shardNum, + NumPartitions: partitionNum, + } + + resp, err := m.srv.CreateCollection(ctx, in) + if err := checkResponse(resp, err); err != nil { + return fmt.Errorf("client: create collection failed: %w", err) + } + + return nil +} + +func (m *GrpcClient) DropCollection(ctx context.Context, db string, collectionName string) error { + ctx = m.newCtxWithDB(ctx, db) + resp, err := m.srv.DropCollection(ctx, &milvuspb.DropCollectionRequest{CollectionName: collectionName}) + if err := checkResponse(resp, err); err != nil { + return fmt.Errorf("client: drop collection failed: %w", err) + } + + return nil +} + +func (m *GrpcClient) CreatePartition(ctx context.Context, db, collName, partitionName string) error { + ctx = m.newCtxWithDB(ctx, db) + in := &milvuspb.CreatePartitionRequest{CollectionName: collName, PartitionName: partitionName} + resp, err := m.srv.CreatePartition(ctx, in) + if err := checkResponse(resp, err); err != nil { + return fmt.Errorf("client: create partition failed: %w", err) + } + + return nil +} + +func (m *GrpcClient) HasPartition(ctx context.Context, db, collName string, partitionName string) (bool, error) { + ctx = m.newCtxWithDB(ctx, db) + in := &milvuspb.HasPartitionRequest{CollectionName: collName, PartitionName: partitionName} + resp, err := m.srv.HasPartition(ctx, in) + if err := checkResponse(resp, err); err != nil { + return false, fmt.Errorf("client: has partition failed: %w", err) + } + return resp.GetValue(), nil +} + +func mapKvPairs(m map[string]string) []*commonpb.KeyValuePair { + pairs := make([]*commonpb.KeyValuePair, 0, len(m)) + for k, v := range m { + pairs = append(pairs, &commonpb.KeyValuePair{ + Key: k, + Value: v, + }) + } + return pairs +} + +func (m *GrpcClient) CreateIndex(ctx context.Context, db, collName, fieldName, idxName string, extraParams map[string]string) error { + ctx = m.newCtxWithDB(ctx, db) + in := &milvuspb.CreateIndexRequest{ + CollectionName: collName, + FieldName: fieldName, + IndexName: idxName, + ExtraParams: mapKvPairs(extraParams), + } + + resp, err := m.srv.CreateIndex(ctx, in) + if err := checkResponse(resp, err); err != nil { + return fmt.Errorf("client: create index failed: %w", err) + } + + return nil +} + +func (m *GrpcClient) DropIndex(ctx context.Context, db, collName, indexName string) error { + ctx = m.newCtxWithDB(ctx, db) + in := &milvuspb.DropIndexRequest{CollectionName: collName, IndexName: indexName} + resp, err := m.srv.DropIndex(ctx, in) + if err := checkResponse(resp, err); err != nil { + return fmt.Errorf("client: drop index failed: %w", err) + } + return nil +} + +func (m *GrpcClient) BackupRBAC(ctx context.Context) (*milvuspb.BackupRBACMetaResponse, error) { + ctx = m.newCtx(ctx) + resp, err := m.srv.BackupRBAC(ctx, &milvuspb.BackupRBACMetaRequest{}) + if err := checkResponse(resp, err); err != nil { + return nil, fmt.Errorf("client: backup rbac failed: %w", err) + } + + return resp, nil +} + +func (m *GrpcClient) RestoreRBAC(ctx context.Context, rbacMeta *milvuspb.RBACMeta) error { + ctx = m.newCtx(ctx) + resp, err := m.srv.RestoreRBAC(ctx, &milvuspb.RestoreRBACMetaRequest{RBACMeta: rbacMeta}) + if err := checkResponse(resp, err); err != nil { + return fmt.Errorf("client: restore rbac failed: %w", err) + } + + return nil +} diff --git a/core/client/restful.go b/core/client/restful.go new file mode 100644 index 0000000..549441e --- /dev/null +++ b/core/client/restful.go @@ -0,0 +1,17 @@ +package client + +import ( + "github.com/imroc/req/v3" +) + +type Restful interface { +} + +type RestfulClient struct { + cli *req.Client +} + +func NewRestful(cfg *Cfg) (*RestfulClient, error) { + cli := req.C().SetBaseURL(cfg.RestfulAddress) + return &RestfulClient{cli: cli}, nil +} diff --git a/core/milvus_sdk_test.go b/core/milvus_sdk_test.go deleted file mode 100644 index 70d2421..0000000 --- a/core/milvus_sdk_test.go +++ /dev/null @@ -1,360 +0,0 @@ -package core - -import ( - "context" - "fmt" - "testing" - "time" - - "github.com/zilliztech/milvus-backup/internal/log" - - gomilvus "github.com/milvus-io/milvus-sdk-go/v2/client" - "github.com/milvus-io/milvus-sdk-go/v2/entity" - "github.com/stretchr/testify/assert" - "go.uber.org/zap" -) - -func TestProxyClient(t *testing.T) { - ctx := context.Background() - milvusAddr := "localhost:19530" - //c, err := proxy.NewClient(context, milvusAddr) - //assert.NoError(t, err) - - c2, err := gomilvus.NewGrpcClient(ctx, milvusAddr) - assert.NoError(t, err) - collections, err := c2.ListCollections(ctx) - for _, coll := range collections { - log.Info("collections", zap.Any("coll", coll.Name), zap.Int64("id", coll.ID)) - } - - //coll, err := c2.DescribeCollection(ctx, "hello_milvus") - //log.Info("collection", zap.Any("hello_milvus", coll)) - - //c2.DropCollection(ctx, "demo_bulkinsert") - //c2.DropCollection(ctx, "hello_milvus") - //c2.DropCollection(ctx, "hello_milvus_recover") - - //idCol, randomCol, embeddingCol = "ID", "random", "embeddings" - pks := entity.NewColumnInt64("ID", []int64{0, 1}) - res, err := c2.QueryByPks(ctx, "hello_milvus_recover", nil, pks, []string{"random"}, gomilvus.WithSearchQueryConsistencyLevel(entity.ClStrong)) - log.Info("query result", zap.Any("query result", res)) - - //assert.Empty(t, collections) -} - -func TestCreateCollection(t *testing.T) { - ctx := context.Background() - milvusAddr := "local:19530" - //c, err := proxy.NewClient(context, milvusAddr) - //assert.NoError(t, err) - - client, err := gomilvus.NewGrpcClient(ctx, milvusAddr) - assert.NoError(t, err) - - //MILVUS_DATA_PATH := "/tmp/milvus/data/" - - _COLLECTION_NAME := "create_demo" - _ID_FIELD_NAME := "id_field" - _VECTOR_FIELD_NAME := "float_vector_field" - _STR_FIELD_NAME := "str_field" - _ARRAY_FIELD_NAME := "arr_field" - - // String field parameter - _MAX_LENGTH := "65535" - _ARRAY_MAX_CAPACITY := "100" - // Vector field parameter - _DIM := "8" - - //field1 = FieldSchema(name=_ID_FIELD_NAME, dtype=DataType.INT64, description="int64", is_primary=True, auto_id=True) - //field2 = FieldSchema(name=_VECTOR_FIELD_NAME, dtype=DataType.FLOAT_VECTOR, description="float vector", dim=_DIM, - // is_primary=False) - //field3 = FieldSchema(name=_STR_FIELD_NAME, dtype=DataType.VARCHAR, description="string", - // max_length=_MAX_LENGTH, is_primary=False) - //schema = CollectionSchema(fields=[field1, field2, field3], description="collection description") - //collection = Collection(name=_COLLECTION_NAME, data=None, schema=schema) - - field1 := &entity.Field{ - Name: _ID_FIELD_NAME, - DataType: entity.FieldTypeInt64, - Description: "int64", - PrimaryKey: true, - AutoID: true, - } - field2 := &entity.Field{ - Name: _VECTOR_FIELD_NAME, - DataType: entity.FieldTypeFloatVector, - Description: "float vector", - TypeParams: map[string]string{ - entity.TypeParamDim: _DIM, - }, - PrimaryKey: false, - } - field3 := &entity.Field{ - Name: _STR_FIELD_NAME, - DataType: entity.FieldTypeVarChar, - Description: "string", - PrimaryKey: false, - TypeParams: map[string]string{ - entity.TypeParamMaxLength: _MAX_LENGTH, - }, - } - field4 := &entity.Field{ - Name: _ARRAY_FIELD_NAME, - DataType: entity.FieldTypeArray, - Description: "arr", - ElementType: entity.FieldTypeInt64, - TypeParams: map[string]string{ - entity.TypeParamMaxCapacity: _ARRAY_MAX_CAPACITY, - }, - } - schema := &entity.Schema{ - CollectionName: _COLLECTION_NAME, - Description: "demo bulkinsert", - AutoID: true, - Fields: []*entity.Field{field1, field2, field3, field4}, - } - //client.DropCollection(ctx, _COLLECTION_NAME) - - err = client.CreateCollection(ctx, schema, 2) - println(err) - _PART_1 := "part_1" - client.CreatePartition(ctx, _COLLECTION_NAME, _PART_1) - - //client.DropCollection(ctx, _COLLECTION_NAME) -} - -func TestBulkInsert(t *testing.T) { - ctx := context.Background() - milvusAddr := "localhost:19530" - //c, err := proxy.NewClient(context, milvusAddr) - //assert.NoError(t, err) - - client, err := gomilvus.NewGrpcClient(ctx, milvusAddr) - assert.NoError(t, err) - - //MILVUS_DATA_PATH := "/tmp/milvus/data/" - - _COLLECTION_NAME := "demo_bulk_insert" - _ID_FIELD_NAME := "id_field" - _VECTOR_FIELD_NAME := "float_vector_field" - _STR_FIELD_NAME := "str_field" - - // String field parameter - _MAX_LENGTH := "65535" - - // Vector field parameter - _DIM := "8" - - //field1 = FieldSchema(name=_ID_FIELD_NAME, dtype=DataType.INT64, description="int64", is_primary=True, auto_id=True) - //field2 = FieldSchema(name=_VECTOR_FIELD_NAME, dtype=DataType.FLOAT_VECTOR, description="float vector", dim=_DIM, - // is_primary=False) - //field3 = FieldSchema(name=_STR_FIELD_NAME, dtype=DataType.VARCHAR, description="string", - // max_length=_MAX_LENGTH, is_primary=False) - //schema = CollectionSchema(fields=[field1, field2, field3], description="collection description") - //collection = Collection(name=_COLLECTION_NAME, data=None, schema=schema) - - field1 := &entity.Field{ - Name: _ID_FIELD_NAME, - DataType: entity.FieldTypeInt64, - Description: "int64", - PrimaryKey: true, - AutoID: true, - } - field2 := &entity.Field{ - Name: _VECTOR_FIELD_NAME, - DataType: entity.FieldTypeFloatVector, - Description: "float vector", - TypeParams: map[string]string{ - entity.TypeParamDim: _DIM, - }, - PrimaryKey: false, - } - field3 := &entity.Field{ - Name: _STR_FIELD_NAME, - DataType: entity.FieldTypeVarChar, - Description: "string", - PrimaryKey: false, - TypeParams: map[string]string{ - entity.TypeParamMaxLength: _MAX_LENGTH, - }, - } - schema := &entity.Schema{ - CollectionName: _COLLECTION_NAME, - Description: "demo bulkinsert", - AutoID: true, - Fields: []*entity.Field{field1, field2, field3}, - } - client.DropCollection(ctx, _COLLECTION_NAME) - - client.CreateCollection(ctx, schema, 2) - _PART_1 := "part_1" - client.CreatePartition(ctx, _COLLECTION_NAME, _PART_1) - file_names := make([]string, 0) - file_names = append(file_names, "rows_0.json") - file_names = append(file_names, "rows_1.json") - file_names = append(file_names, "rows_2.json") - - id, err := client.BulkInsert(ctx, _COLLECTION_NAME, _PART_1, file_names) - - log.Info("bulk insert task ids", zap.Int64("id", id)) - - for { - state, _ := client.GetBulkInsertState(ctx, id) - log.Info("bulk insert task state", zap.Any("state", state)) - time.Sleep(3 * time.Second) - } - //time.Sleep(30 * time.Second) - - client.DropCollection(ctx, _COLLECTION_NAME) -} - -func TestGetBulkInsertState(t *testing.T) { - ctx := context.Background() - milvusAddr := "10.102.9.123:19530" - //c, err := proxy.NewClient(context, milvusAddr) - //assert.NoError(t, err) - - client, err := gomilvus.NewGrpcClient(ctx, milvusAddr) - assert.NoError(t, err) - - state, err := client.GetBulkInsertState(ctx, 446469603780484268) - - println(state.State) - log.Info("bulk insert task state", zap.Any("state", state)) -} - -func TestGetIndex(t *testing.T) { - ctx := context.Background() - milvusAddr := "localhost:19530" - c, err := gomilvus.NewGrpcClient(ctx, milvusAddr) - assert.NoError(t, err) - - coll, err := c.DescribeCollection(ctx, "hello_milvus_recover") - - //log.Info("coll", zap.Any("coll", coll)) - fmt.Println(coll.Schema.Fields[0]) - fmt.Println(coll.Schema.Fields[1]) - fmt.Println(coll.Schema.Fields[2]) - - index, err := c.DescribeIndex(ctx, "hello_milvus_recover", "embeddings") - fmt.Println(index) - - indexState, err := c.GetIndexState(ctx, "hello_milvus", "embeddings") - fmt.Println(indexState) - progress, err := c.GetLoadingProgress(ctx, "hello_milvus_recover", []string{}) - fmt.Println(progress) - - loadState, err := c.GetLoadState(ctx, "hello_milvus_recover", []string{}) - fmt.Println(loadState) - -} - -func TestCreateIndex(t *testing.T) { - ctx := context.Background() - milvusAddr := "localhost:19530" - client, err := gomilvus.NewGrpcClient(ctx, milvusAddr) - assert.NoError(t, err) - - _COLLECTION_NAME := "demo_bulk_insert2" - _ID_FIELD_NAME := "id_field" - _VECTOR_FIELD_NAME := "float_vector_field" - _STR_FIELD_NAME := "str_field" - - // String field parameter - _MAX_LENGTH := "65535" - - // Vector field parameter - _DIM := "8" - - //field1 = FieldSchema(name=_ID_FIELD_NAME, dtype=DataType.INT64, description="int64", is_primary=True, auto_id=True) - //field2 = FieldSchema(name=_VECTOR_FIELD_NAME, dtype=DataType.FLOAT_VECTOR, description="float vector", dim=_DIM, - // is_primary=False) - //field3 = FieldSchema(name=_STR_FIELD_NAME, dtype=DataType.VARCHAR, description="string", - // max_length=_MAX_LENGTH, is_primary=False) - //schema = CollectionSchema(fields=[field1, field2, field3], description="collection description") - //collection = Collection(name=_COLLECTION_NAME, data=None, schema=schema) - - field1 := &entity.Field{ - Name: _ID_FIELD_NAME, - DataType: entity.FieldTypeInt64, - Description: "int64", - PrimaryKey: true, - AutoID: true, - } - field2 := &entity.Field{ - Name: _VECTOR_FIELD_NAME, - DataType: entity.FieldTypeFloatVector, - Description: "float vector", - TypeParams: map[string]string{ - entity.TypeParamDim: _DIM, - }, - PrimaryKey: false, - } - field3 := &entity.Field{ - Name: _STR_FIELD_NAME, - DataType: entity.FieldTypeVarChar, - Description: "string", - PrimaryKey: false, - TypeParams: map[string]string{ - entity.TypeParamMaxLength: _MAX_LENGTH, - }, - } - schema := &entity.Schema{ - CollectionName: _COLLECTION_NAME, - Description: "demo bulkinsert", - AutoID: true, - Fields: []*entity.Field{field1, field2, field3}, - } - //client.DropCollection(ctx, _COLLECTION_NAME) - fmt.Println(schema) - client.CreateCollection(ctx, schema, 2) - - idx := entity.NewScalarIndex() - err = client.CreateIndex(ctx, _COLLECTION_NAME, _STR_FIELD_NAME, idx, false, gomilvus.WithIndexName("_default_idx_102")) - fmt.Println(err) - - idx2, _ := entity.NewIndexHNSW(entity.L2, 8, 96) - //err = client.DropIndex(ctx, _COLLECTION_NAME, _VECTOR_FIELD_NAME, gomilvus.WithIndexName("_default_idx_101")) - //fmt.Println(err) - err = client.CreateIndex(ctx, _COLLECTION_NAME, _VECTOR_FIELD_NAME, idx2, false, gomilvus.WithIndexName("_default_idx_102")) - - fmt.Println(err) -} - -func TestDescribeIndex(t *testing.T) { - ctx := context.Background() - milvusAddr := "localhost:19530" - client, err := gomilvus.NewGrpcClient(ctx, milvusAddr) - assert.NoError(t, err) - - _COLLECTION_NAME := "demo_bulk_insert2" - _STR_FIELD_NAME := "str_field" - _VECTOR_FIELD_NAME := "float_vector_field" - - idxs, err := client.DescribeIndex(ctx, _COLLECTION_NAME, _STR_FIELD_NAME) - fmt.Println(idxs) - fmt.Println(err) - idxs2, err := client.DescribeIndex(ctx, _COLLECTION_NAME, _VECTOR_FIELD_NAME) - fmt.Println(idxs2) - fmt.Println(err) -} - -func TestCleanAll(t *testing.T) { - ctx := context.Background() - milvusAddr := "10.102.9.64:19530" - - c2, err := gomilvus.NewGrpcClient(ctx, milvusAddr) - assert.NoError(t, err) - - dbs, err := c2.ListDatabases(ctx) - - for _, db := range dbs { - c2.UsingDatabase(ctx, db.Name) - collections, _ := c2.ListCollections(ctx) - for _, coll := range collections { - c2.DropCollection(ctx, coll.Name) - log.Info("collections", zap.Any("coll", coll.Name), zap.Int64("id", coll.ID)) - } - c2.DropDatabase(ctx, db.Name) - } -} diff --git a/core/milvus_sdk_wrapper.go b/core/milvus_sdk_wrapper.go deleted file mode 100644 index 5816040..0000000 --- a/core/milvus_sdk_wrapper.go +++ /dev/null @@ -1,209 +0,0 @@ -package core - -import ( - "context" - "sync" - "time" - - "github.com/milvus-io/milvus-proto/go-api/v2/msgpb" - gomilvus "github.com/milvus-io/milvus-sdk-go/v2/client" - "github.com/milvus-io/milvus-sdk-go/v2/entity" - - "github.com/zilliztech/milvus-backup/internal/util/retry" -) - -// MilvusClient wrap db into milvus API to make it thread safe -type MilvusClient struct { - mu sync.Mutex - client gomilvus.Client -} - -func (m *MilvusClient) Close() error { - return m.client.Close() -} - -func (m *MilvusClient) GetVersion(ctx context.Context) (string, error) { - return m.client.GetVersion(ctx) -} - -func (m *MilvusClient) CreateDatabase(ctx context.Context, dbName string) error { - return m.client.CreateDatabase(ctx, dbName) -} - -func (m *MilvusClient) ListDatabases(ctx context.Context) ([]entity.Database, error) { - return m.client.ListDatabases(ctx) -} - -func (m *MilvusClient) DescribeCollection(ctx context.Context, db, collName string) (*entity.Collection, error) { - m.mu.Lock() - defer m.mu.Unlock() - err := m.client.UsingDatabase(ctx, db) - if err != nil { - return nil, err - } - return m.client.DescribeCollection(ctx, collName) -} - -func (m *MilvusClient) DescribeIndex(ctx context.Context, db, collName, fieldName string) ([]entity.Index, error) { - m.mu.Lock() - defer m.mu.Unlock() - err := m.client.UsingDatabase(ctx, db) - if err != nil { - return nil, err - } - return m.client.DescribeIndex(ctx, collName, fieldName) -} - -func (m *MilvusClient) ShowPartitions(ctx context.Context, db, collName string) ([]*entity.Partition, error) { - m.mu.Lock() - defer m.mu.Unlock() - err := m.client.UsingDatabase(ctx, db) - if err != nil { - return nil, err - } - return m.client.ShowPartitions(ctx, collName) -} - -func (m *MilvusClient) GetLoadingProgress(ctx context.Context, db, collName string, partitionNames []string) (int64, error) { - m.mu.Lock() - defer m.mu.Unlock() - err := m.client.UsingDatabase(ctx, db) - if err != nil { - return 0, err - } - return m.client.GetLoadingProgress(ctx, collName, partitionNames) -} - -func (m *MilvusClient) GetPersistentSegmentInfo(ctx context.Context, db, collName string) ([]*entity.Segment, error) { - m.mu.Lock() - defer m.mu.Unlock() - err := m.client.UsingDatabase(ctx, db) - if err != nil { - return nil, err - } - return m.client.GetPersistentSegmentInfo(ctx, collName) -} - -func (m *MilvusClient) FlushV2(ctx context.Context, db, collName string, async bool) ([]int64, []int64, int64, map[string]msgpb.MsgPosition, error) { - m.mu.Lock() - defer m.mu.Unlock() - err := m.client.UsingDatabase(ctx, db) - if err != nil { - return nil, nil, 0, nil, err - } - return m.client.FlushV2(ctx, collName, async) -} - -func (m *MilvusClient) ListCollections(ctx context.Context, db string) ([]*entity.Collection, error) { - m.mu.Lock() - defer m.mu.Unlock() - err := m.client.UsingDatabase(ctx, db) - if err != nil { - return nil, err - } - return m.client.ListCollections(ctx) -} - -func (m *MilvusClient) HasCollection(ctx context.Context, db, collName string) (bool, error) { - m.mu.Lock() - defer m.mu.Unlock() - err := m.client.UsingDatabase(ctx, db) - if err != nil { - return false, err - } - return m.client.HasCollection(ctx, collName) -} - -func (m *MilvusClient) BulkInsert(ctx context.Context, db, collName string, partitionName string, files []string, opts ...gomilvus.BulkInsertOption) (int64, error) { - m.mu.Lock() - defer m.mu.Unlock() - err := m.client.UsingDatabase(ctx, db) - if err != nil { - return 0, err - } - return m.client.BulkInsert(ctx, collName, partitionName, files, opts...) -} - -func (m *MilvusClient) GetBulkInsertState(ctx context.Context, taskID int64) (*entity.BulkInsertTaskState, error) { - return m.client.GetBulkInsertState(ctx, taskID) -} - -func (m *MilvusClient) CreateCollection(ctx context.Context, db string, schema *entity.Schema, shardsNum int32, opts ...gomilvus.CreateCollectionOption) error { - m.mu.Lock() - defer m.mu.Unlock() - err := m.client.UsingDatabase(ctx, db) - if err != nil { - return err - } - // add retry to make sure won't be block by rate control - return retry.Do(ctx, func() error { - return m.client.CreateCollection(ctx, schema, shardsNum, opts...) - }, retry.Sleep(2*time.Second), retry.Attempts(10)) -} - -func (m *MilvusClient) DropCollection(ctx context.Context, db string, collectionName string) error { - m.mu.Lock() - defer m.mu.Unlock() - err := m.client.UsingDatabase(ctx, db) - if err != nil { - return err - } - // add retry to make sure won't be block by rate control - return retry.Do(ctx, func() error { - return m.client.DropCollection(ctx, collectionName) - }, retry.Sleep(2*time.Second), retry.Attempts(10)) -} - -func (m *MilvusClient) CreatePartition(ctx context.Context, db, collName string, partitionName string) error { - m.mu.Lock() - defer m.mu.Unlock() - err := m.client.UsingDatabase(ctx, db) - if err != nil { - return err - } - return retry.Do(ctx, func() error { - return m.client.CreatePartition(ctx, collName, partitionName) - }, retry.Sleep(2*time.Second), retry.Attempts(10)) -} - -func (m *MilvusClient) HasPartition(ctx context.Context, db, collName string, partitionName string) (bool, error) { - m.mu.Lock() - defer m.mu.Unlock() - err := m.client.UsingDatabase(ctx, db) - if err != nil { - return false, err - } - return m.client.HasPartition(ctx, collName, partitionName) -} - -func (m *MilvusClient) CreateIndex(ctx context.Context, db, collName string, fieldName string, idx entity.Index, async bool) error { - m.mu.Lock() - defer m.mu.Unlock() - err := m.client.UsingDatabase(ctx, db) - if err != nil { - return err - } - return m.client.CreateIndex(ctx, collName, fieldName, idx, async, gomilvus.WithIndexName(idx.Name())) -} - -func (m *MilvusClient) DropIndex(ctx context.Context, db, collName string, indexName string) error { - m.mu.Lock() - defer m.mu.Unlock() - err := m.client.UsingDatabase(ctx, db) - if err != nil { - return err - } - return m.client.DropIndex(ctx, collName, "", gomilvus.WithIndexName(indexName)) -} - -func (m *MilvusClient) BackupRBAC(ctx context.Context) (*entity.RBACMeta, error) { - m.mu.Lock() - defer m.mu.Unlock() - return m.client.BackupRBAC(ctx) -} - -func (m *MilvusClient) RestoreRBAC(ctx context.Context, rbacMeta *entity.RBACMeta) error { - m.mu.Lock() - defer m.mu.Unlock() - return m.client.RestoreRBAC(ctx, rbacMeta) -} diff --git a/core/milvus_storage_test.go b/core/milvus_storage_test.go deleted file mode 100644 index 1c109c6..0000000 --- a/core/milvus_storage_test.go +++ /dev/null @@ -1,136 +0,0 @@ -package core - -import ( - "context" - "os" - "strconv" - "strings" - "testing" - - "github.com/minio/minio-go/v7" - "github.com/minio/minio-go/v7/pkg/credentials" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "github.com/zilliztech/milvus-backup/core/storage/tencent" - - "github.com/zilliztech/milvus-backup/core/paramtable" - "github.com/zilliztech/milvus-backup/core/storage" - "github.com/zilliztech/milvus-backup/internal/log" - "go.uber.org/zap" -) - -var Params paramtable.BackupParams - -func newMinioChunkManager(ctx context.Context, bucketName string) (*storage.MinioChunkManager, error) { - endPoint := getMinioAddress() - accessKeyID, _ := Params.Load("minio.accessKeyID") - secretAccessKey, _ := Params.Load("minio.secretAccessKey") - useSSLStr, _ := Params.Load("minio.useSSL") - useSSL, _ := strconv.ParseBool(useSSLStr) - - storageConfig := &storage.StorageConfig{ - StorageType: "minio", - Address: endPoint, - AccessKeyID: accessKeyID, - SecretAccessKeyID: secretAccessKey, - UseSSL: useSSL, - CreateBucket: true, - UseIAM: false, - IAMEndpoint: "", - } - - client, err := storage.NewMinioChunkManagerWithConfig(ctx, storageConfig) - return client, err -} - -func getMinioAddress() string { - minioHost := Params.LoadWithDefault("minio.address", paramtable.DefaultMinioAddress) - if strings.Contains(minioHost, ":") { - return minioHost - } - port := Params.LoadWithDefault("minio.port", paramtable.DefaultMinioPort) - return minioHost + ":" + port -} - -func TestWriteAEmptyBackupFile(t *testing.T) { - - Params.Init() - testBucket, err := Params.Load("minio.bucketName") - require.NoError(t, err) - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - testCM, err := newMinioChunkManager(ctx, testBucket) - err = testCM.Write(ctx, testBucket, "backup/test_backup6", nil) - assert.NoError(t, err) -} - -func TestReadBackupFiles(t *testing.T) { - - Params.Init() - testBucket, err := Params.Load("minio.bucketName") - require.NoError(t, err) - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - testCM, err := newMinioChunkManager(ctx, testBucket) - files, _, err := testCM.ListWithPrefix(ctx, testBucket, "/backup", true) - assert.NoError(t, err) - - for _, file := range files { - log.Info("BackupFiles", zap.String("path", file)) - } - -} - -func TestReadMilvusData(t *testing.T) { - var params paramtable.BackupParams - params.GlobalInitWithYaml("backup.yaml") - params.Init() - - context := context.Background() - //backupContext := CreateBackupContext(context, params) - - client, err := createStorageClient(context, params) - assert.NoError(t, err) - paths, _, err := client.ListWithPrefix(context, params.MinioCfg.BucketName, "file/insert_log/437296492118216229/437296492118216230/", true) - assert.NoError(t, err) - for _, path := range paths { - if strings.Contains(path, "index_files") { - continue - } - if strings.Contains(path, "437296588890839162") || - strings.Contains(path, "437296588890833721") || - strings.Contains(path, "437296584963129351") || - strings.Contains(path, "437296581056135434") || - strings.Contains(path, "437296588890833719") { - log.Info(path) - bytes, err := client.Read(context, params.MinioCfg.BucketName, path) - os.MkdirAll(path, os.ModePerm) - os.Remove(path) - err = os.WriteFile(path, bytes, 0666) - assert.NoError(t, err) - //log.Info("paths", zap.Strings("paths", paths)) - } - - //log.Info(path) - } - -} - -func TestTencentOSS(t *testing.T) { - var creds *credentials.Credentials - bucketLookupType := minio.BucketLookupDNS - minioOpts := &minio.Options{ - BucketLookup: bucketLookupType, - Creds: creds, - Secure: true, - } - client, err := tencent.NewMinioClient("cos.ap-nanjing.myqcloud.com", minioOpts) - assert.NoError(t, err) - exist, err := client.BucketExists(context.Background(), "") - assert.NoError(t, err) - assert.True(t, exist) -} diff --git a/core/paramtable/base_table_test.go b/core/paramtable/base_table_test.go index aac7cc4..ccd5673 100644 --- a/core/paramtable/base_table_test.go +++ b/core/paramtable/base_table_test.go @@ -5,6 +5,7 @@ import ( "testing" "github.com/stretchr/testify/assert" + memkv "github.com/zilliztech/milvus-backup/internal/kv/mem" ) diff --git a/core/proto/backup.proto b/core/proto/backup.proto index 498c273..84aae32 100644 --- a/core/proto/backup.proto +++ b/core/proto/backup.proto @@ -385,6 +385,12 @@ enum ConsistencyLevel { Customized = 4; // Users pass their own `guarantee_timestamp`. } +enum FunctionType{ + Unknown =0; + BM25 =1; + TextEmbedding =2; +} + // copied from milvus schema.proto @@ -434,9 +440,6 @@ message ValueField { } } -/** - * @brief Field schema. The same as https://github.com/milvus-io/milvus-proto schema.proto - */ message FieldSchema { int64 fieldID = 1; string name = 2; @@ -453,6 +456,19 @@ message FieldSchema { bool is_partition_key = 13; // enable logic partitions bool nullable = 14; string default_value_proto = 15; // json not support marshall oneof, so use proto string + bool is_function_output = 16; +} + +message FunctionSchema { + string name = 1; + int64 id =2; + string description = 3; + FunctionType type = 4; + repeated string input_field_names = 5; + repeated int64 input_field_ids = 6; + repeated string output_field_names = 7; + repeated int64 output_field_ids = 8; + repeated KeyValuePair params = 9; } /** @@ -464,6 +480,8 @@ message CollectionSchema { bool autoID = 3; // deprecated later, keep compatible with c++ part now repeated FieldSchema fields = 4; bool enable_dynamic_field = 5; // mark whether this table has the dynamic field function enabled. + repeated KeyValuePair properties = 6; + repeated FunctionSchema functions = 7; } message CheckRequest { diff --git a/core/proto/backuppb/backup.pb.go b/core/proto/backuppb/backup.pb.go index fff0429..0667581 100644 --- a/core/proto/backuppb/backup.pb.go +++ b/core/proto/backuppb/backup.pb.go @@ -1,29 +1,30 @@ // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.33.0 +// protoc v3.9.0 // source: backup.proto package backuppb import ( context "context" - fmt "fmt" - proto "github.com/golang/protobuf/proto" + reflect "reflect" + sync "sync" + _struct "github.com/golang/protobuf/ptypes/struct" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) type ResponseCode int32 @@ -36,30 +37,51 @@ const ( ResponseCode_Request_Object_Not_Found ResponseCode = 404 ) -var ResponseCode_name = map[int32]string{ - 0: "Success", - 1: "Not_Support", - 2: "No_Permission", - 3: "Fail", - 400: "Parameter_Error", - 404: "Request_Object_Not_Found", -} +// Enum value maps for ResponseCode. +var ( + ResponseCode_name = map[int32]string{ + 0: "Success", + 1: "Not_Support", + 2: "No_Permission", + 3: "Fail", + 400: "Parameter_Error", + 404: "Request_Object_Not_Found", + } + ResponseCode_value = map[string]int32{ + "Success": 0, + "Not_Support": 1, + "No_Permission": 2, + "Fail": 3, + "Parameter_Error": 400, + "Request_Object_Not_Found": 404, + } +) -var ResponseCode_value = map[string]int32{ - "Success": 0, - "Not_Support": 1, - "No_Permission": 2, - "Fail": 3, - "Parameter_Error": 400, - "Request_Object_Not_Found": 404, +func (x ResponseCode) Enum() *ResponseCode { + p := new(ResponseCode) + *p = x + return p } func (x ResponseCode) String() string { - return proto.EnumName(ResponseCode_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ResponseCode) Descriptor() protoreflect.EnumDescriptor { + return file_backup_proto_enumTypes[0].Descriptor() +} + +func (ResponseCode) Type() protoreflect.EnumType { + return &file_backup_proto_enumTypes[0] +} + +func (x ResponseCode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use ResponseCode.Descriptor instead. func (ResponseCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{0} + return file_backup_proto_rawDescGZIP(), []int{0} } type BackupTaskStateCode int32 @@ -72,28 +94,49 @@ const ( BackupTaskStateCode_BACKUP_TIMEOUT BackupTaskStateCode = 4 ) -var BackupTaskStateCode_name = map[int32]string{ - 0: "BACKUP_INITIAL", - 1: "BACKUP_EXECUTING", - 2: "BACKUP_SUCCESS", - 3: "BACKUP_FAIL", - 4: "BACKUP_TIMEOUT", -} +// Enum value maps for BackupTaskStateCode. +var ( + BackupTaskStateCode_name = map[int32]string{ + 0: "BACKUP_INITIAL", + 1: "BACKUP_EXECUTING", + 2: "BACKUP_SUCCESS", + 3: "BACKUP_FAIL", + 4: "BACKUP_TIMEOUT", + } + BackupTaskStateCode_value = map[string]int32{ + "BACKUP_INITIAL": 0, + "BACKUP_EXECUTING": 1, + "BACKUP_SUCCESS": 2, + "BACKUP_FAIL": 3, + "BACKUP_TIMEOUT": 4, + } +) -var BackupTaskStateCode_value = map[string]int32{ - "BACKUP_INITIAL": 0, - "BACKUP_EXECUTING": 1, - "BACKUP_SUCCESS": 2, - "BACKUP_FAIL": 3, - "BACKUP_TIMEOUT": 4, +func (x BackupTaskStateCode) Enum() *BackupTaskStateCode { + p := new(BackupTaskStateCode) + *p = x + return p } func (x BackupTaskStateCode) String() string { - return proto.EnumName(BackupTaskStateCode_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BackupTaskStateCode) Descriptor() protoreflect.EnumDescriptor { + return file_backup_proto_enumTypes[1].Descriptor() +} + +func (BackupTaskStateCode) Type() protoreflect.EnumType { + return &file_backup_proto_enumTypes[1] +} + +func (x BackupTaskStateCode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use BackupTaskStateCode.Descriptor instead. func (BackupTaskStateCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{1} + return file_backup_proto_rawDescGZIP(), []int{1} } type RestoreTaskStateCode int32 @@ -106,62 +149,153 @@ const ( RestoreTaskStateCode_TIMEOUT RestoreTaskStateCode = 4 ) -var RestoreTaskStateCode_name = map[int32]string{ - 0: "INITIAL", - 1: "EXECUTING", - 2: "SUCCESS", - 3: "FAIL", - 4: "TIMEOUT", -} +// Enum value maps for RestoreTaskStateCode. +var ( + RestoreTaskStateCode_name = map[int32]string{ + 0: "INITIAL", + 1: "EXECUTING", + 2: "SUCCESS", + 3: "FAIL", + 4: "TIMEOUT", + } + RestoreTaskStateCode_value = map[string]int32{ + "INITIAL": 0, + "EXECUTING": 1, + "SUCCESS": 2, + "FAIL": 3, + "TIMEOUT": 4, + } +) -var RestoreTaskStateCode_value = map[string]int32{ - "INITIAL": 0, - "EXECUTING": 1, - "SUCCESS": 2, - "FAIL": 3, - "TIMEOUT": 4, +func (x RestoreTaskStateCode) Enum() *RestoreTaskStateCode { + p := new(RestoreTaskStateCode) + *p = x + return p } func (x RestoreTaskStateCode) String() string { - return proto.EnumName(RestoreTaskStateCode_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (RestoreTaskStateCode) Descriptor() protoreflect.EnumDescriptor { + return file_backup_proto_enumTypes[2].Descriptor() +} + +func (RestoreTaskStateCode) Type() protoreflect.EnumType { + return &file_backup_proto_enumTypes[2] +} + +func (x RestoreTaskStateCode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use RestoreTaskStateCode.Descriptor instead. func (RestoreTaskStateCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{2} + return file_backup_proto_rawDescGZIP(), []int{2} } type ConsistencyLevel int32 const ( ConsistencyLevel_Strong ConsistencyLevel = 0 - ConsistencyLevel_Session ConsistencyLevel = 1 + ConsistencyLevel_Session ConsistencyLevel = 1 // default in PyMilvus ConsistencyLevel_Bounded ConsistencyLevel = 2 ConsistencyLevel_Eventually ConsistencyLevel = 3 - ConsistencyLevel_Customized ConsistencyLevel = 4 + ConsistencyLevel_Customized ConsistencyLevel = 4 // Users pass their own `guarantee_timestamp`. ) -var ConsistencyLevel_name = map[int32]string{ - 0: "Strong", - 1: "Session", - 2: "Bounded", - 3: "Eventually", - 4: "Customized", -} +// Enum value maps for ConsistencyLevel. +var ( + ConsistencyLevel_name = map[int32]string{ + 0: "Strong", + 1: "Session", + 2: "Bounded", + 3: "Eventually", + 4: "Customized", + } + ConsistencyLevel_value = map[string]int32{ + "Strong": 0, + "Session": 1, + "Bounded": 2, + "Eventually": 3, + "Customized": 4, + } +) -var ConsistencyLevel_value = map[string]int32{ - "Strong": 0, - "Session": 1, - "Bounded": 2, - "Eventually": 3, - "Customized": 4, +func (x ConsistencyLevel) Enum() *ConsistencyLevel { + p := new(ConsistencyLevel) + *p = x + return p } func (x ConsistencyLevel) String() string { - return proto.EnumName(ConsistencyLevel_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ConsistencyLevel) Descriptor() protoreflect.EnumDescriptor { + return file_backup_proto_enumTypes[3].Descriptor() +} + +func (ConsistencyLevel) Type() protoreflect.EnumType { + return &file_backup_proto_enumTypes[3] } +func (x ConsistencyLevel) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ConsistencyLevel.Descriptor instead. func (ConsistencyLevel) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{3} + return file_backup_proto_rawDescGZIP(), []int{3} +} + +type FunctionType int32 + +const ( + FunctionType_Unknown FunctionType = 0 + FunctionType_BM25 FunctionType = 1 + FunctionType_TextEmbedding FunctionType = 2 +) + +// Enum value maps for FunctionType. +var ( + FunctionType_name = map[int32]string{ + 0: "Unknown", + 1: "BM25", + 2: "TextEmbedding", + } + FunctionType_value = map[string]int32{ + "Unknown": 0, + "BM25": 1, + "TextEmbedding": 2, + } +) + +func (x FunctionType) Enum() *FunctionType { + p := new(FunctionType) + *p = x + return p +} + +func (x FunctionType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (FunctionType) Descriptor() protoreflect.EnumDescriptor { + return file_backup_proto_enumTypes[4].Descriptor() +} + +func (FunctionType) Type() protoreflect.EnumType { + return &file_backup_proto_enumTypes[4] +} + +func (x FunctionType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use FunctionType.Descriptor instead. +func (FunctionType) EnumDescriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{4} } // * @@ -178,7 +312,7 @@ const ( DataType_Float DataType = 10 DataType_Double DataType = 11 DataType_String DataType = 20 - DataType_VarChar DataType = 21 + DataType_VarChar DataType = 21 // variable-length strings with a specified maximum length DataType_Array DataType = 22 DataType_Json DataType = 23 DataType_BinaryVector DataType = 100 @@ -188,52 +322,73 @@ const ( DataType_SparseFloatVector DataType = 104 ) -var DataType_name = map[int32]string{ - 0: "None", - 1: "Bool", - 2: "Int8", - 3: "Int16", - 4: "Int32", - 5: "Int64", - 10: "Float", - 11: "Double", - 20: "String", - 21: "VarChar", - 22: "Array", - 23: "Json", - 100: "BinaryVector", - 101: "FloatVector", - 102: "Float16Vector", - 103: "BFloat16Vector", - 104: "SparseFloatVector", -} - -var DataType_value = map[string]int32{ - "None": 0, - "Bool": 1, - "Int8": 2, - "Int16": 3, - "Int32": 4, - "Int64": 5, - "Float": 10, - "Double": 11, - "String": 20, - "VarChar": 21, - "Array": 22, - "Json": 23, - "BinaryVector": 100, - "FloatVector": 101, - "Float16Vector": 102, - "BFloat16Vector": 103, - "SparseFloatVector": 104, +// Enum value maps for DataType. +var ( + DataType_name = map[int32]string{ + 0: "None", + 1: "Bool", + 2: "Int8", + 3: "Int16", + 4: "Int32", + 5: "Int64", + 10: "Float", + 11: "Double", + 20: "String", + 21: "VarChar", + 22: "Array", + 23: "Json", + 100: "BinaryVector", + 101: "FloatVector", + 102: "Float16Vector", + 103: "BFloat16Vector", + 104: "SparseFloatVector", + } + DataType_value = map[string]int32{ + "None": 0, + "Bool": 1, + "Int8": 2, + "Int16": 3, + "Int32": 4, + "Int64": 5, + "Float": 10, + "Double": 11, + "String": 20, + "VarChar": 21, + "Array": 22, + "Json": 23, + "BinaryVector": 100, + "FloatVector": 101, + "Float16Vector": 102, + "BFloat16Vector": 103, + "SparseFloatVector": 104, + } +) + +func (x DataType) Enum() *DataType { + p := new(DataType) + *p = x + return p } func (x DataType) String() string { - return proto.EnumName(DataType_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (DataType) Descriptor() protoreflect.EnumDescriptor { + return file_backup_proto_enumTypes[5].Descriptor() +} + +func (DataType) Type() protoreflect.EnumType { + return &file_backup_proto_enumTypes[5] +} + +func (x DataType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use DataType.Descriptor instead. func (DataType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{4} + return file_backup_proto_rawDescGZIP(), []int{5} } type FieldState int32 @@ -245,87 +400,116 @@ const ( FieldState_FieldDropped FieldState = 3 ) -var FieldState_name = map[int32]string{ - 0: "FieldCreated", - 1: "FieldCreating", - 2: "FieldDropping", - 3: "FieldDropped", -} +// Enum value maps for FieldState. +var ( + FieldState_name = map[int32]string{ + 0: "FieldCreated", + 1: "FieldCreating", + 2: "FieldDropping", + 3: "FieldDropped", + } + FieldState_value = map[string]int32{ + "FieldCreated": 0, + "FieldCreating": 1, + "FieldDropping": 2, + "FieldDropped": 3, + } +) -var FieldState_value = map[string]int32{ - "FieldCreated": 0, - "FieldCreating": 1, - "FieldDropping": 2, - "FieldDropped": 3, +func (x FieldState) Enum() *FieldState { + p := new(FieldState) + *p = x + return p } func (x FieldState) String() string { - return proto.EnumName(FieldState_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (FieldState) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{5} +func (FieldState) Descriptor() protoreflect.EnumDescriptor { + return file_backup_proto_enumTypes[6].Descriptor() } -type IndexInfo struct { - FieldName string `protobuf:"bytes,1,opt,name=field_name,json=fieldName,proto3" json:"field_name,omitempty"` - IndexName string `protobuf:"bytes,2,opt,name=index_name,json=indexName,proto3" json:"index_name,omitempty"` - IndexType string `protobuf:"bytes,3,opt,name=index_type,json=indexType,proto3" json:"index_type,omitempty"` - Params map[string]string `protobuf:"bytes,4,rep,name=params,proto3" json:"params,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *IndexInfo) Reset() { *m = IndexInfo{} } -func (m *IndexInfo) String() string { return proto.CompactTextString(m) } -func (*IndexInfo) ProtoMessage() {} -func (*IndexInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{0} +func (FieldState) Type() protoreflect.EnumType { + return &file_backup_proto_enumTypes[6] +} + +func (x FieldState) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } -func (m *IndexInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_IndexInfo.Unmarshal(m, b) +// Deprecated: Use FieldState.Descriptor instead. +func (FieldState) EnumDescriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{6} } -func (m *IndexInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_IndexInfo.Marshal(b, m, deterministic) + +type IndexInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + FieldName string `protobuf:"bytes,1,opt,name=field_name,json=fieldName,proto3" json:"field_name,omitempty"` + IndexName string `protobuf:"bytes,2,opt,name=index_name,json=indexName,proto3" json:"index_name,omitempty"` + IndexType string `protobuf:"bytes,3,opt,name=index_type,json=indexType,proto3" json:"index_type,omitempty"` + Params map[string]string `protobuf:"bytes,4,rep,name=params,proto3" json:"params,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } -func (m *IndexInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_IndexInfo.Merge(m, src) + +func (x *IndexInfo) Reset() { + *x = IndexInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *IndexInfo) XXX_Size() int { - return xxx_messageInfo_IndexInfo.Size(m) + +func (x *IndexInfo) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *IndexInfo) XXX_DiscardUnknown() { - xxx_messageInfo_IndexInfo.DiscardUnknown(m) + +func (*IndexInfo) ProtoMessage() {} + +func (x *IndexInfo) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_IndexInfo proto.InternalMessageInfo +// Deprecated: Use IndexInfo.ProtoReflect.Descriptor instead. +func (*IndexInfo) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{0} +} -func (m *IndexInfo) GetFieldName() string { - if m != nil { - return m.FieldName +func (x *IndexInfo) GetFieldName() string { + if x != nil { + return x.FieldName } return "" } -func (m *IndexInfo) GetIndexName() string { - if m != nil { - return m.IndexName +func (x *IndexInfo) GetIndexName() string { + if x != nil { + return x.IndexName } return "" } -func (m *IndexInfo) GetIndexType() string { - if m != nil { - return m.IndexType +func (x *IndexInfo) GetIndexType() string { + if x != nil { + return x.IndexType } return "" } -func (m *IndexInfo) GetParams() map[string]string { - if m != nil { - return m.Params +func (x *IndexInfo) GetParams() map[string]string { + if x != nil { + return x.Params } return nil } @@ -333,6 +517,10 @@ func (m *IndexInfo) GetParams() map[string]string { // * // lite version of Collection info type CollectionBackupInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` StateCode BackupTaskStateCode `protobuf:"varint,2,opt,name=state_code,json=stateCode,proto3,enum=milvus.proto.backup.BackupTaskStateCode" json:"state_code"` ErrorMessage string `protobuf:"bytes,3,opt,name=errorMessage,proto3" json:"errorMessage,omitempty"` @@ -356,259 +544,271 @@ type CollectionBackupInfo struct { BackupPhysicalTimestamp uint64 `protobuf:"varint,19,opt,name=backup_physical_timestamp,json=backupPhysicalTimestamp,proto3" json:"backup_physical_timestamp,omitempty"` ChannelCheckpoints map[string]string `protobuf:"bytes,20,rep,name=channel_checkpoints,json=channelCheckpoints,proto3" json:"channel_checkpoints,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` L0Segments []*SegmentBackupInfo `protobuf:"bytes,21,rep,name=l0_segments,json=l0Segments,proto3" json:"l0_segments,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` } -func (m *CollectionBackupInfo) Reset() { *m = CollectionBackupInfo{} } -func (m *CollectionBackupInfo) String() string { return proto.CompactTextString(m) } -func (*CollectionBackupInfo) ProtoMessage() {} -func (*CollectionBackupInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{1} +func (x *CollectionBackupInfo) Reset() { + *x = CollectionBackupInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *CollectionBackupInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CollectionBackupInfo.Unmarshal(m, b) -} -func (m *CollectionBackupInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CollectionBackupInfo.Marshal(b, m, deterministic) +func (x *CollectionBackupInfo) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *CollectionBackupInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_CollectionBackupInfo.Merge(m, src) -} -func (m *CollectionBackupInfo) XXX_Size() int { - return xxx_messageInfo_CollectionBackupInfo.Size(m) -} -func (m *CollectionBackupInfo) XXX_DiscardUnknown() { - xxx_messageInfo_CollectionBackupInfo.DiscardUnknown(m) + +func (*CollectionBackupInfo) ProtoMessage() {} + +func (x *CollectionBackupInfo) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_CollectionBackupInfo proto.InternalMessageInfo +// Deprecated: Use CollectionBackupInfo.ProtoReflect.Descriptor instead. +func (*CollectionBackupInfo) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{1} +} -func (m *CollectionBackupInfo) GetId() string { - if m != nil { - return m.Id +func (x *CollectionBackupInfo) GetId() string { + if x != nil { + return x.Id } return "" } -func (m *CollectionBackupInfo) GetStateCode() BackupTaskStateCode { - if m != nil { - return m.StateCode +func (x *CollectionBackupInfo) GetStateCode() BackupTaskStateCode { + if x != nil { + return x.StateCode } return BackupTaskStateCode_BACKUP_INITIAL } -func (m *CollectionBackupInfo) GetErrorMessage() string { - if m != nil { - return m.ErrorMessage +func (x *CollectionBackupInfo) GetErrorMessage() string { + if x != nil { + return x.ErrorMessage } return "" } -func (m *CollectionBackupInfo) GetStartTime() int64 { - if m != nil { - return m.StartTime +func (x *CollectionBackupInfo) GetStartTime() int64 { + if x != nil { + return x.StartTime } return 0 } -func (m *CollectionBackupInfo) GetEndTime() int64 { - if m != nil { - return m.EndTime +func (x *CollectionBackupInfo) GetEndTime() int64 { + if x != nil { + return x.EndTime } return 0 } -func (m *CollectionBackupInfo) GetProgress() int32 { - if m != nil { - return m.Progress +func (x *CollectionBackupInfo) GetProgress() int32 { + if x != nil { + return x.Progress } return 0 } -func (m *CollectionBackupInfo) GetCollectionId() int64 { - if m != nil { - return m.CollectionId +func (x *CollectionBackupInfo) GetCollectionId() int64 { + if x != nil { + return x.CollectionId } return 0 } -func (m *CollectionBackupInfo) GetDbName() string { - if m != nil { - return m.DbName +func (x *CollectionBackupInfo) GetDbName() string { + if x != nil { + return x.DbName } return "" } -func (m *CollectionBackupInfo) GetCollectionName() string { - if m != nil { - return m.CollectionName +func (x *CollectionBackupInfo) GetCollectionName() string { + if x != nil { + return x.CollectionName } return "" } -func (m *CollectionBackupInfo) GetSchema() *CollectionSchema { - if m != nil { - return m.Schema +func (x *CollectionBackupInfo) GetSchema() *CollectionSchema { + if x != nil { + return x.Schema } return nil } -func (m *CollectionBackupInfo) GetShardsNum() int32 { - if m != nil { - return m.ShardsNum +func (x *CollectionBackupInfo) GetShardsNum() int32 { + if x != nil { + return x.ShardsNum } return 0 } -func (m *CollectionBackupInfo) GetConsistencyLevel() ConsistencyLevel { - if m != nil { - return m.ConsistencyLevel +func (x *CollectionBackupInfo) GetConsistencyLevel() ConsistencyLevel { + if x != nil { + return x.ConsistencyLevel } return ConsistencyLevel_Strong } -func (m *CollectionBackupInfo) GetPartitionBackups() []*PartitionBackupInfo { - if m != nil { - return m.PartitionBackups +func (x *CollectionBackupInfo) GetPartitionBackups() []*PartitionBackupInfo { + if x != nil { + return x.PartitionBackups } return nil } -func (m *CollectionBackupInfo) GetBackupTimestamp() uint64 { - if m != nil { - return m.BackupTimestamp +func (x *CollectionBackupInfo) GetBackupTimestamp() uint64 { + if x != nil { + return x.BackupTimestamp } return 0 } -func (m *CollectionBackupInfo) GetSize() int64 { - if m != nil { - return m.Size +func (x *CollectionBackupInfo) GetSize() int64 { + if x != nil { + return x.Size } return 0 } -func (m *CollectionBackupInfo) GetHasIndex() bool { - if m != nil { - return m.HasIndex +func (x *CollectionBackupInfo) GetHasIndex() bool { + if x != nil { + return x.HasIndex } return false } -func (m *CollectionBackupInfo) GetIndexInfos() []*IndexInfo { - if m != nil { - return m.IndexInfos +func (x *CollectionBackupInfo) GetIndexInfos() []*IndexInfo { + if x != nil { + return x.IndexInfos } return nil } -func (m *CollectionBackupInfo) GetLoadState() string { - if m != nil { - return m.LoadState +func (x *CollectionBackupInfo) GetLoadState() string { + if x != nil { + return x.LoadState } return "" } -func (m *CollectionBackupInfo) GetBackupPhysicalTimestamp() uint64 { - if m != nil { - return m.BackupPhysicalTimestamp +func (x *CollectionBackupInfo) GetBackupPhysicalTimestamp() uint64 { + if x != nil { + return x.BackupPhysicalTimestamp } return 0 } -func (m *CollectionBackupInfo) GetChannelCheckpoints() map[string]string { - if m != nil { - return m.ChannelCheckpoints +func (x *CollectionBackupInfo) GetChannelCheckpoints() map[string]string { + if x != nil { + return x.ChannelCheckpoints } return nil } -func (m *CollectionBackupInfo) GetL0Segments() []*SegmentBackupInfo { - if m != nil { - return m.L0Segments +func (x *CollectionBackupInfo) GetL0Segments() []*SegmentBackupInfo { + if x != nil { + return x.L0Segments } return nil } type PartitionBackupInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + PartitionId int64 `protobuf:"varint,1,opt,name=partition_id,json=partitionId,proto3" json:"partition_id,omitempty"` PartitionName string `protobuf:"bytes,2,opt,name=partition_name,json=partitionName,proto3" json:"partition_name,omitempty"` CollectionId int64 `protobuf:"varint,3,opt,name=collection_id,json=collectionId,proto3" json:"collection_id,omitempty"` // array of segment backup - SegmentBackups []*SegmentBackupInfo `protobuf:"bytes,4,rep,name=segment_backups,json=segmentBackups,proto3" json:"segment_backups,omitempty"` - Size int64 `protobuf:"varint,5,opt,name=size,proto3" json:"size"` - LoadState string `protobuf:"bytes,6,opt,name=load_state,json=loadState,proto3" json:"load_state,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + SegmentBackups []*SegmentBackupInfo `protobuf:"bytes,4,rep,name=segment_backups,json=segmentBackups,proto3" json:"segment_backups,omitempty"` + Size int64 `protobuf:"varint,5,opt,name=size,proto3" json:"size"` + LoadState string `protobuf:"bytes,6,opt,name=load_state,json=loadState,proto3" json:"load_state,omitempty"` } -func (m *PartitionBackupInfo) Reset() { *m = PartitionBackupInfo{} } -func (m *PartitionBackupInfo) String() string { return proto.CompactTextString(m) } -func (*PartitionBackupInfo) ProtoMessage() {} -func (*PartitionBackupInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{2} +func (x *PartitionBackupInfo) Reset() { + *x = PartitionBackupInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *PartitionBackupInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PartitionBackupInfo.Unmarshal(m, b) -} -func (m *PartitionBackupInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PartitionBackupInfo.Marshal(b, m, deterministic) +func (x *PartitionBackupInfo) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *PartitionBackupInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_PartitionBackupInfo.Merge(m, src) -} -func (m *PartitionBackupInfo) XXX_Size() int { - return xxx_messageInfo_PartitionBackupInfo.Size(m) -} -func (m *PartitionBackupInfo) XXX_DiscardUnknown() { - xxx_messageInfo_PartitionBackupInfo.DiscardUnknown(m) + +func (*PartitionBackupInfo) ProtoMessage() {} + +func (x *PartitionBackupInfo) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_PartitionBackupInfo proto.InternalMessageInfo +// Deprecated: Use PartitionBackupInfo.ProtoReflect.Descriptor instead. +func (*PartitionBackupInfo) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{2} +} -func (m *PartitionBackupInfo) GetPartitionId() int64 { - if m != nil { - return m.PartitionId +func (x *PartitionBackupInfo) GetPartitionId() int64 { + if x != nil { + return x.PartitionId } return 0 } -func (m *PartitionBackupInfo) GetPartitionName() string { - if m != nil { - return m.PartitionName +func (x *PartitionBackupInfo) GetPartitionName() string { + if x != nil { + return x.PartitionName } return "" } -func (m *PartitionBackupInfo) GetCollectionId() int64 { - if m != nil { - return m.CollectionId +func (x *PartitionBackupInfo) GetCollectionId() int64 { + if x != nil { + return x.CollectionId } return 0 } -func (m *PartitionBackupInfo) GetSegmentBackups() []*SegmentBackupInfo { - if m != nil { - return m.SegmentBackups +func (x *PartitionBackupInfo) GetSegmentBackups() []*SegmentBackupInfo { + if x != nil { + return x.SegmentBackups } return nil } -func (m *PartitionBackupInfo) GetSize() int64 { - if m != nil { - return m.Size +func (x *PartitionBackupInfo) GetSize() int64 { + if x != nil { + return x.Size } return 0 } -func (m *PartitionBackupInfo) GetLoadState() string { - if m != nil { - return m.LoadState +func (x *PartitionBackupInfo) GetLoadState() string { + if x != nil { + return x.LoadState } return "" } @@ -616,6 +816,10 @@ func (m *PartitionBackupInfo) GetLoadState() string { // * // lite version of datapb.SegmentInfo type SegmentBackupInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + SegmentId int64 `protobuf:"varint,1,opt,name=segment_id,json=segmentId,proto3" json:"segment_id,omitempty"` CollectionId int64 `protobuf:"varint,2,opt,name=collection_id,json=collectionId,proto3" json:"collection_id,omitempty"` PartitionId int64 `protobuf:"varint,3,opt,name=partition_id,json=partitionId,proto3" json:"partition_id,omitempty"` @@ -627,112 +831,116 @@ type SegmentBackupInfo struct { // separate segments into multi groups by size, // segments in one group will be copied into one directory during backup // and will bulkinsert in one call during restore - GroupId int64 `protobuf:"varint,9,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` - Backuped bool `protobuf:"varint,10,opt,name=backuped,proto3" json:"backuped,omitempty"` - IsL0 bool `protobuf:"varint,11,opt,name=is_l0,json=isL0,proto3" json:"is_l0,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + GroupId int64 `protobuf:"varint,9,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + Backuped bool `protobuf:"varint,10,opt,name=backuped,proto3" json:"backuped,omitempty"` + IsL0 bool `protobuf:"varint,11,opt,name=is_l0,json=isL0,proto3" json:"is_l0,omitempty"` } -func (m *SegmentBackupInfo) Reset() { *m = SegmentBackupInfo{} } -func (m *SegmentBackupInfo) String() string { return proto.CompactTextString(m) } -func (*SegmentBackupInfo) ProtoMessage() {} -func (*SegmentBackupInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{3} +func (x *SegmentBackupInfo) Reset() { + *x = SegmentBackupInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *SegmentBackupInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SegmentBackupInfo.Unmarshal(m, b) +func (x *SegmentBackupInfo) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *SegmentBackupInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SegmentBackupInfo.Marshal(b, m, deterministic) -} -func (m *SegmentBackupInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_SegmentBackupInfo.Merge(m, src) -} -func (m *SegmentBackupInfo) XXX_Size() int { - return xxx_messageInfo_SegmentBackupInfo.Size(m) -} -func (m *SegmentBackupInfo) XXX_DiscardUnknown() { - xxx_messageInfo_SegmentBackupInfo.DiscardUnknown(m) + +func (*SegmentBackupInfo) ProtoMessage() {} + +func (x *SegmentBackupInfo) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_SegmentBackupInfo proto.InternalMessageInfo +// Deprecated: Use SegmentBackupInfo.ProtoReflect.Descriptor instead. +func (*SegmentBackupInfo) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{3} +} -func (m *SegmentBackupInfo) GetSegmentId() int64 { - if m != nil { - return m.SegmentId +func (x *SegmentBackupInfo) GetSegmentId() int64 { + if x != nil { + return x.SegmentId } return 0 } -func (m *SegmentBackupInfo) GetCollectionId() int64 { - if m != nil { - return m.CollectionId +func (x *SegmentBackupInfo) GetCollectionId() int64 { + if x != nil { + return x.CollectionId } return 0 } -func (m *SegmentBackupInfo) GetPartitionId() int64 { - if m != nil { - return m.PartitionId +func (x *SegmentBackupInfo) GetPartitionId() int64 { + if x != nil { + return x.PartitionId } return 0 } -func (m *SegmentBackupInfo) GetNumOfRows() int64 { - if m != nil { - return m.NumOfRows +func (x *SegmentBackupInfo) GetNumOfRows() int64 { + if x != nil { + return x.NumOfRows } return 0 } -func (m *SegmentBackupInfo) GetBinlogs() []*FieldBinlog { - if m != nil { - return m.Binlogs +func (x *SegmentBackupInfo) GetBinlogs() []*FieldBinlog { + if x != nil { + return x.Binlogs } return nil } -func (m *SegmentBackupInfo) GetStatslogs() []*FieldBinlog { - if m != nil { - return m.Statslogs +func (x *SegmentBackupInfo) GetStatslogs() []*FieldBinlog { + if x != nil { + return x.Statslogs } return nil } -func (m *SegmentBackupInfo) GetDeltalogs() []*FieldBinlog { - if m != nil { - return m.Deltalogs +func (x *SegmentBackupInfo) GetDeltalogs() []*FieldBinlog { + if x != nil { + return x.Deltalogs } return nil } -func (m *SegmentBackupInfo) GetSize() int64 { - if m != nil { - return m.Size +func (x *SegmentBackupInfo) GetSize() int64 { + if x != nil { + return x.Size } return 0 } -func (m *SegmentBackupInfo) GetGroupId() int64 { - if m != nil { - return m.GroupId +func (x *SegmentBackupInfo) GetGroupId() int64 { + if x != nil { + return x.GroupId } return 0 } -func (m *SegmentBackupInfo) GetBackuped() bool { - if m != nil { - return m.Backuped +func (x *SegmentBackupInfo) GetBackuped() bool { + if x != nil { + return x.Backuped } return false } -func (m *SegmentBackupInfo) GetIsL0() bool { - if m != nil { - return m.IsL0 +func (x *SegmentBackupInfo) GetIsL0() bool { + if x != nil { + return x.IsL0 } return false } @@ -740,6 +948,10 @@ func (m *SegmentBackupInfo) GetIsL0() bool { // * // root of backup type BackupInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` StateCode BackupTaskStateCode `protobuf:"varint,2,opt,name=state_code,json=stateCode,proto3,enum=milvus.proto.backup.BackupTaskStateCode" json:"state_code"` ErrorMessage string `protobuf:"bytes,3,opt,name=errorMessage,proto3" json:"errorMessage,omitempty"` @@ -750,120 +962,124 @@ type BackupInfo struct { // backup timestamp BackupTimestamp uint64 `protobuf:"varint,8,opt,name=backup_timestamp,json=backupTimestamp,proto3" json:"backup_timestamp,omitempty"` // array of collection backup - CollectionBackups []*CollectionBackupInfo `protobuf:"bytes,9,rep,name=collection_backups,json=collectionBackups,proto3" json:"collection_backups,omitempty"` - Size int64 `protobuf:"varint,10,opt,name=size,proto3" json:"size"` - MilvusVersion string `protobuf:"bytes,11,opt,name=milvus_version,json=milvusVersion,proto3" json:"milvus_version,omitempty"` - RbacMeta *RBACMeta `protobuf:"bytes,12,opt,name=rbac_meta,json=rbacMeta,proto3" json:"rbac_meta,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *BackupInfo) Reset() { *m = BackupInfo{} } -func (m *BackupInfo) String() string { return proto.CompactTextString(m) } -func (*BackupInfo) ProtoMessage() {} -func (*BackupInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{4} + CollectionBackups []*CollectionBackupInfo `protobuf:"bytes,9,rep,name=collection_backups,json=collectionBackups,proto3" json:"collection_backups,omitempty"` + Size int64 `protobuf:"varint,10,opt,name=size,proto3" json:"size"` + MilvusVersion string `protobuf:"bytes,11,opt,name=milvus_version,json=milvusVersion,proto3" json:"milvus_version,omitempty"` + RbacMeta *RBACMeta `protobuf:"bytes,12,opt,name=rbac_meta,json=rbacMeta,proto3" json:"rbac_meta,omitempty"` } -func (m *BackupInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_BackupInfo.Unmarshal(m, b) -} -func (m *BackupInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_BackupInfo.Marshal(b, m, deterministic) -} -func (m *BackupInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_BackupInfo.Merge(m, src) +func (x *BackupInfo) Reset() { + *x = BackupInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *BackupInfo) XXX_Size() int { - return xxx_messageInfo_BackupInfo.Size(m) + +func (x *BackupInfo) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *BackupInfo) XXX_DiscardUnknown() { - xxx_messageInfo_BackupInfo.DiscardUnknown(m) + +func (*BackupInfo) ProtoMessage() {} + +func (x *BackupInfo) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_BackupInfo proto.InternalMessageInfo +// Deprecated: Use BackupInfo.ProtoReflect.Descriptor instead. +func (*BackupInfo) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{4} +} -func (m *BackupInfo) GetId() string { - if m != nil { - return m.Id +func (x *BackupInfo) GetId() string { + if x != nil { + return x.Id } return "" } -func (m *BackupInfo) GetStateCode() BackupTaskStateCode { - if m != nil { - return m.StateCode +func (x *BackupInfo) GetStateCode() BackupTaskStateCode { + if x != nil { + return x.StateCode } return BackupTaskStateCode_BACKUP_INITIAL } -func (m *BackupInfo) GetErrorMessage() string { - if m != nil { - return m.ErrorMessage +func (x *BackupInfo) GetErrorMessage() string { + if x != nil { + return x.ErrorMessage } return "" } -func (m *BackupInfo) GetStartTime() int64 { - if m != nil { - return m.StartTime +func (x *BackupInfo) GetStartTime() int64 { + if x != nil { + return x.StartTime } return 0 } -func (m *BackupInfo) GetEndTime() int64 { - if m != nil { - return m.EndTime +func (x *BackupInfo) GetEndTime() int64 { + if x != nil { + return x.EndTime } return 0 } -func (m *BackupInfo) GetProgress() int32 { - if m != nil { - return m.Progress +func (x *BackupInfo) GetProgress() int32 { + if x != nil { + return x.Progress } return 0 } -func (m *BackupInfo) GetName() string { - if m != nil { - return m.Name +func (x *BackupInfo) GetName() string { + if x != nil { + return x.Name } return "" } -func (m *BackupInfo) GetBackupTimestamp() uint64 { - if m != nil { - return m.BackupTimestamp +func (x *BackupInfo) GetBackupTimestamp() uint64 { + if x != nil { + return x.BackupTimestamp } return 0 } -func (m *BackupInfo) GetCollectionBackups() []*CollectionBackupInfo { - if m != nil { - return m.CollectionBackups +func (x *BackupInfo) GetCollectionBackups() []*CollectionBackupInfo { + if x != nil { + return x.CollectionBackups } return nil } -func (m *BackupInfo) GetSize() int64 { - if m != nil { - return m.Size +func (x *BackupInfo) GetSize() int64 { + if x != nil { + return x.Size } return 0 } -func (m *BackupInfo) GetMilvusVersion() string { - if m != nil { - return m.MilvusVersion +func (x *BackupInfo) GetMilvusVersion() string { + if x != nil { + return x.MilvusVersion } return "" } -func (m *BackupInfo) GetRbacMeta() *RBACMeta { - if m != nil { - return m.RbacMeta +func (x *BackupInfo) GetRbacMeta() *RBACMeta { + if x != nil { + return x.RbacMeta } return nil } @@ -871,40 +1087,48 @@ func (m *BackupInfo) GetRbacMeta() *RBACMeta { // * // For level storage type CollectionLevelBackupInfo struct { - Infos []*CollectionBackupInfo `protobuf:"bytes,1,rep,name=infos,proto3" json:"infos,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *CollectionLevelBackupInfo) Reset() { *m = CollectionLevelBackupInfo{} } -func (m *CollectionLevelBackupInfo) String() string { return proto.CompactTextString(m) } -func (*CollectionLevelBackupInfo) ProtoMessage() {} -func (*CollectionLevelBackupInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{5} + Infos []*CollectionBackupInfo `protobuf:"bytes,1,rep,name=infos,proto3" json:"infos,omitempty"` } -func (m *CollectionLevelBackupInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CollectionLevelBackupInfo.Unmarshal(m, b) -} -func (m *CollectionLevelBackupInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CollectionLevelBackupInfo.Marshal(b, m, deterministic) -} -func (m *CollectionLevelBackupInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_CollectionLevelBackupInfo.Merge(m, src) +func (x *CollectionLevelBackupInfo) Reset() { + *x = CollectionLevelBackupInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *CollectionLevelBackupInfo) XXX_Size() int { - return xxx_messageInfo_CollectionLevelBackupInfo.Size(m) + +func (x *CollectionLevelBackupInfo) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *CollectionLevelBackupInfo) XXX_DiscardUnknown() { - xxx_messageInfo_CollectionLevelBackupInfo.DiscardUnknown(m) + +func (*CollectionLevelBackupInfo) ProtoMessage() {} + +func (x *CollectionLevelBackupInfo) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_CollectionLevelBackupInfo proto.InternalMessageInfo +// Deprecated: Use CollectionLevelBackupInfo.ProtoReflect.Descriptor instead. +func (*CollectionLevelBackupInfo) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{5} +} -func (m *CollectionLevelBackupInfo) GetInfos() []*CollectionBackupInfo { - if m != nil { - return m.Infos +func (x *CollectionLevelBackupInfo) GetInfos() []*CollectionBackupInfo { + if x != nil { + return x.Infos } return nil } @@ -912,40 +1136,48 @@ func (m *CollectionLevelBackupInfo) GetInfos() []*CollectionBackupInfo { // * // For level storage type PartitionLevelBackupInfo struct { - Infos []*PartitionBackupInfo `protobuf:"bytes,1,rep,name=infos,proto3" json:"infos,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *PartitionLevelBackupInfo) Reset() { *m = PartitionLevelBackupInfo{} } -func (m *PartitionLevelBackupInfo) String() string { return proto.CompactTextString(m) } -func (*PartitionLevelBackupInfo) ProtoMessage() {} -func (*PartitionLevelBackupInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{6} + Infos []*PartitionBackupInfo `protobuf:"bytes,1,rep,name=infos,proto3" json:"infos,omitempty"` } -func (m *PartitionLevelBackupInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PartitionLevelBackupInfo.Unmarshal(m, b) -} -func (m *PartitionLevelBackupInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PartitionLevelBackupInfo.Marshal(b, m, deterministic) -} -func (m *PartitionLevelBackupInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_PartitionLevelBackupInfo.Merge(m, src) +func (x *PartitionLevelBackupInfo) Reset() { + *x = PartitionLevelBackupInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *PartitionLevelBackupInfo) XXX_Size() int { - return xxx_messageInfo_PartitionLevelBackupInfo.Size(m) + +func (x *PartitionLevelBackupInfo) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *PartitionLevelBackupInfo) XXX_DiscardUnknown() { - xxx_messageInfo_PartitionLevelBackupInfo.DiscardUnknown(m) + +func (*PartitionLevelBackupInfo) ProtoMessage() {} + +func (x *PartitionLevelBackupInfo) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_PartitionLevelBackupInfo proto.InternalMessageInfo +// Deprecated: Use PartitionLevelBackupInfo.ProtoReflect.Descriptor instead. +func (*PartitionLevelBackupInfo) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{6} +} -func (m *PartitionLevelBackupInfo) GetInfos() []*PartitionBackupInfo { - if m != nil { - return m.Infos +func (x *PartitionLevelBackupInfo) GetInfos() []*PartitionBackupInfo { + if x != nil { + return x.Infos } return nil } @@ -953,40 +1185,48 @@ func (m *PartitionLevelBackupInfo) GetInfos() []*PartitionBackupInfo { // * // For level storage type SegmentLevelBackupInfo struct { - Infos []*SegmentBackupInfo `protobuf:"bytes,1,rep,name=infos,proto3" json:"infos,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *SegmentLevelBackupInfo) Reset() { *m = SegmentLevelBackupInfo{} } -func (m *SegmentLevelBackupInfo) String() string { return proto.CompactTextString(m) } -func (*SegmentLevelBackupInfo) ProtoMessage() {} -func (*SegmentLevelBackupInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{7} + Infos []*SegmentBackupInfo `protobuf:"bytes,1,rep,name=infos,proto3" json:"infos,omitempty"` } -func (m *SegmentLevelBackupInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SegmentLevelBackupInfo.Unmarshal(m, b) -} -func (m *SegmentLevelBackupInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SegmentLevelBackupInfo.Marshal(b, m, deterministic) -} -func (m *SegmentLevelBackupInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_SegmentLevelBackupInfo.Merge(m, src) +func (x *SegmentLevelBackupInfo) Reset() { + *x = SegmentLevelBackupInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *SegmentLevelBackupInfo) XXX_Size() int { - return xxx_messageInfo_SegmentLevelBackupInfo.Size(m) + +func (x *SegmentLevelBackupInfo) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *SegmentLevelBackupInfo) XXX_DiscardUnknown() { - xxx_messageInfo_SegmentLevelBackupInfo.DiscardUnknown(m) + +func (*SegmentLevelBackupInfo) ProtoMessage() {} + +func (x *SegmentLevelBackupInfo) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_SegmentLevelBackupInfo proto.InternalMessageInfo +// Deprecated: Use SegmentLevelBackupInfo.ProtoReflect.Descriptor instead. +func (*SegmentLevelBackupInfo) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{7} +} -func (m *SegmentLevelBackupInfo) GetInfos() []*SegmentBackupInfo { - if m != nil { - return m.Infos +func (x *SegmentLevelBackupInfo) GetInfos() []*SegmentBackupInfo { + if x != nil { + return x.Infos } return nil } @@ -994,6 +1234,10 @@ func (m *SegmentLevelBackupInfo) GetInfos() []*SegmentBackupInfo { // * // Create Backup in milvus type CreateBackupRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // uuid of request, will generate one if not set RequestId string `protobuf:"bytes,1,opt,name=requestId,proto3" json:"requestId,omitempty"` // backup name, will generate one if not set @@ -1015,110 +1259,114 @@ type CreateBackupRequest struct { // gc pause API address GcPauseAddress string `protobuf:"bytes,10,opt,name=gc_pause_address,json=gcPauseAddress,proto3" json:"gc_pause_address,omitempty"` // whether backup RBAC - Rbac bool `protobuf:"varint,11,opt,name=rbac,proto3" json:"rbac,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Rbac bool `protobuf:"varint,11,opt,name=rbac,proto3" json:"rbac,omitempty"` } -func (m *CreateBackupRequest) Reset() { *m = CreateBackupRequest{} } -func (m *CreateBackupRequest) String() string { return proto.CompactTextString(m) } -func (*CreateBackupRequest) ProtoMessage() {} -func (*CreateBackupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{8} +func (x *CreateBackupRequest) Reset() { + *x = CreateBackupRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *CreateBackupRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CreateBackupRequest.Unmarshal(m, b) -} -func (m *CreateBackupRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CreateBackupRequest.Marshal(b, m, deterministic) -} -func (m *CreateBackupRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_CreateBackupRequest.Merge(m, src) -} -func (m *CreateBackupRequest) XXX_Size() int { - return xxx_messageInfo_CreateBackupRequest.Size(m) +func (x *CreateBackupRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *CreateBackupRequest) XXX_DiscardUnknown() { - xxx_messageInfo_CreateBackupRequest.DiscardUnknown(m) + +func (*CreateBackupRequest) ProtoMessage() {} + +func (x *CreateBackupRequest) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_CreateBackupRequest proto.InternalMessageInfo +// Deprecated: Use CreateBackupRequest.ProtoReflect.Descriptor instead. +func (*CreateBackupRequest) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{8} +} -func (m *CreateBackupRequest) GetRequestId() string { - if m != nil { - return m.RequestId +func (x *CreateBackupRequest) GetRequestId() string { + if x != nil { + return x.RequestId } return "" } -func (m *CreateBackupRequest) GetBackupName() string { - if m != nil { - return m.BackupName +func (x *CreateBackupRequest) GetBackupName() string { + if x != nil { + return x.BackupName } return "" } -func (m *CreateBackupRequest) GetCollectionNames() []string { - if m != nil { - return m.CollectionNames +func (x *CreateBackupRequest) GetCollectionNames() []string { + if x != nil { + return x.CollectionNames } return nil } -func (m *CreateBackupRequest) GetAsync() bool { - if m != nil { - return m.Async +func (x *CreateBackupRequest) GetAsync() bool { + if x != nil { + return x.Async } return false } -func (m *CreateBackupRequest) GetDbCollections() *_struct.Value { - if m != nil { - return m.DbCollections +func (x *CreateBackupRequest) GetDbCollections() *_struct.Value { + if x != nil { + return x.DbCollections } return nil } -func (m *CreateBackupRequest) GetForce() bool { - if m != nil { - return m.Force +func (x *CreateBackupRequest) GetForce() bool { + if x != nil { + return x.Force } return false } -func (m *CreateBackupRequest) GetMetaOnly() bool { - if m != nil { - return m.MetaOnly +func (x *CreateBackupRequest) GetMetaOnly() bool { + if x != nil { + return x.MetaOnly } return false } -func (m *CreateBackupRequest) GetGcPauseEnable() bool { - if m != nil { - return m.GcPauseEnable +func (x *CreateBackupRequest) GetGcPauseEnable() bool { + if x != nil { + return x.GcPauseEnable } return false } -func (m *CreateBackupRequest) GetGcPauseSeconds() int32 { - if m != nil { - return m.GcPauseSeconds +func (x *CreateBackupRequest) GetGcPauseSeconds() int32 { + if x != nil { + return x.GcPauseSeconds } return 0 } -func (m *CreateBackupRequest) GetGcPauseAddress() string { - if m != nil { - return m.GcPauseAddress +func (x *CreateBackupRequest) GetGcPauseAddress() string { + if x != nil { + return x.GcPauseAddress } return "" } -func (m *CreateBackupRequest) GetRbac() bool { - if m != nil { - return m.Rbac +func (x *CreateBackupRequest) GetRbac() bool { + if x != nil { + return x.Rbac } return false } @@ -1126,6 +1374,10 @@ func (m *CreateBackupRequest) GetRbac() bool { // * // BackupInfoResponse type BackupInfoResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // uuid of the request to response RequestId string `protobuf:"bytes,1,opt,name=requestId,proto3" json:"requestId,omitempty"` // response code. 0 means success. others are fail @@ -1133,66 +1385,74 @@ type BackupInfoResponse struct { // error msg if fail Msg string `protobuf:"bytes,3,opt,name=msg,proto3" json:"msg,omitempty"` // backup info entity - Data *BackupInfo `protobuf:"bytes,4,opt,name=data,proto3" json:"data"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Data *BackupInfo `protobuf:"bytes,4,opt,name=data,proto3" json:"data"` } -func (m *BackupInfoResponse) Reset() { *m = BackupInfoResponse{} } -func (m *BackupInfoResponse) String() string { return proto.CompactTextString(m) } -func (*BackupInfoResponse) ProtoMessage() {} -func (*BackupInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{9} +func (x *BackupInfoResponse) Reset() { + *x = BackupInfoResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *BackupInfoResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_BackupInfoResponse.Unmarshal(m, b) -} -func (m *BackupInfoResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_BackupInfoResponse.Marshal(b, m, deterministic) -} -func (m *BackupInfoResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_BackupInfoResponse.Merge(m, src) -} -func (m *BackupInfoResponse) XXX_Size() int { - return xxx_messageInfo_BackupInfoResponse.Size(m) -} -func (m *BackupInfoResponse) XXX_DiscardUnknown() { - xxx_messageInfo_BackupInfoResponse.DiscardUnknown(m) +func (x *BackupInfoResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_BackupInfoResponse proto.InternalMessageInfo +func (*BackupInfoResponse) ProtoMessage() {} -func (m *BackupInfoResponse) GetRequestId() string { - if m != nil { - return m.RequestId +func (x *BackupInfoResponse) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BackupInfoResponse.ProtoReflect.Descriptor instead. +func (*BackupInfoResponse) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{9} +} + +func (x *BackupInfoResponse) GetRequestId() string { + if x != nil { + return x.RequestId } return "" } -func (m *BackupInfoResponse) GetCode() ResponseCode { - if m != nil { - return m.Code +func (x *BackupInfoResponse) GetCode() ResponseCode { + if x != nil { + return x.Code } return ResponseCode_Success } -func (m *BackupInfoResponse) GetMsg() string { - if m != nil { - return m.Msg +func (x *BackupInfoResponse) GetMsg() string { + if x != nil { + return x.Msg } return "" } -func (m *BackupInfoResponse) GetData() *BackupInfo { - if m != nil { - return m.Data +func (x *BackupInfoResponse) GetData() *BackupInfo { + if x != nil { + return x.Data } return nil } type GetBackupRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // uuid of request, will generate one if not set RequestId string `protobuf:"bytes,1,opt,name=requestId,proto3" json:"requestId,omitempty"` // backup name to query, backup_name or backup_id is needed @@ -1204,129 +1464,145 @@ type GetBackupRequest struct { // if bucket_name and path is set. will override bucket/path in config. Path string `protobuf:"bytes,5,opt,name=path,proto3" json:"path,omitempty"` // if true, return simple response without too much detail to display - WithoutDetail bool `protobuf:"varint,6,opt,name=without_detail,json=withoutDetail,proto3" json:"without_detail,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + WithoutDetail bool `protobuf:"varint,6,opt,name=without_detail,json=withoutDetail,proto3" json:"without_detail,omitempty"` } -func (m *GetBackupRequest) Reset() { *m = GetBackupRequest{} } -func (m *GetBackupRequest) String() string { return proto.CompactTextString(m) } -func (*GetBackupRequest) ProtoMessage() {} -func (*GetBackupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{10} +func (x *GetBackupRequest) Reset() { + *x = GetBackupRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *GetBackupRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GetBackupRequest.Unmarshal(m, b) -} -func (m *GetBackupRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GetBackupRequest.Marshal(b, m, deterministic) -} -func (m *GetBackupRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetBackupRequest.Merge(m, src) -} -func (m *GetBackupRequest) XXX_Size() int { - return xxx_messageInfo_GetBackupRequest.Size(m) +func (x *GetBackupRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetBackupRequest) XXX_DiscardUnknown() { - xxx_messageInfo_GetBackupRequest.DiscardUnknown(m) + +func (*GetBackupRequest) ProtoMessage() {} + +func (x *GetBackupRequest) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_GetBackupRequest proto.InternalMessageInfo +// Deprecated: Use GetBackupRequest.ProtoReflect.Descriptor instead. +func (*GetBackupRequest) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{10} +} -func (m *GetBackupRequest) GetRequestId() string { - if m != nil { - return m.RequestId +func (x *GetBackupRequest) GetRequestId() string { + if x != nil { + return x.RequestId } return "" } -func (m *GetBackupRequest) GetBackupName() string { - if m != nil { - return m.BackupName +func (x *GetBackupRequest) GetBackupName() string { + if x != nil { + return x.BackupName } return "" } -func (m *GetBackupRequest) GetBackupId() string { - if m != nil { - return m.BackupId +func (x *GetBackupRequest) GetBackupId() string { + if x != nil { + return x.BackupId } return "" } -func (m *GetBackupRequest) GetBucketName() string { - if m != nil { - return m.BucketName +func (x *GetBackupRequest) GetBucketName() string { + if x != nil { + return x.BucketName } return "" } -func (m *GetBackupRequest) GetPath() string { - if m != nil { - return m.Path +func (x *GetBackupRequest) GetPath() string { + if x != nil { + return x.Path } return "" } -func (m *GetBackupRequest) GetWithoutDetail() bool { - if m != nil { - return m.WithoutDetail +func (x *GetBackupRequest) GetWithoutDetail() bool { + if x != nil { + return x.WithoutDetail } return false } type ListBackupsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // uuid of request, will generate one if not set RequestId string `protobuf:"bytes,1,opt,name=requestId,proto3" json:"requestId,omitempty"` // if collection_name is set, will only return backups contains this collection - CollectionName string `protobuf:"bytes,2,opt,name=collection_name,json=collectionName,proto3" json:"collection_name,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + CollectionName string `protobuf:"bytes,2,opt,name=collection_name,json=collectionName,proto3" json:"collection_name,omitempty"` } -func (m *ListBackupsRequest) Reset() { *m = ListBackupsRequest{} } -func (m *ListBackupsRequest) String() string { return proto.CompactTextString(m) } -func (*ListBackupsRequest) ProtoMessage() {} -func (*ListBackupsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{11} +func (x *ListBackupsRequest) Reset() { + *x = ListBackupsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ListBackupsRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ListBackupsRequest.Unmarshal(m, b) -} -func (m *ListBackupsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ListBackupsRequest.Marshal(b, m, deterministic) -} -func (m *ListBackupsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListBackupsRequest.Merge(m, src) +func (x *ListBackupsRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListBackupsRequest) XXX_Size() int { - return xxx_messageInfo_ListBackupsRequest.Size(m) -} -func (m *ListBackupsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ListBackupsRequest.DiscardUnknown(m) + +func (*ListBackupsRequest) ProtoMessage() {} + +func (x *ListBackupsRequest) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ListBackupsRequest proto.InternalMessageInfo +// Deprecated: Use ListBackupsRequest.ProtoReflect.Descriptor instead. +func (*ListBackupsRequest) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{11} +} -func (m *ListBackupsRequest) GetRequestId() string { - if m != nil { - return m.RequestId +func (x *ListBackupsRequest) GetRequestId() string { + if x != nil { + return x.RequestId } return "" } -func (m *ListBackupsRequest) GetCollectionName() string { - if m != nil { - return m.CollectionName +func (x *ListBackupsRequest) GetCollectionName() string { + if x != nil { + return x.CollectionName } return "" } type ListBackupsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // uuid of the request to response RequestId string `protobuf:"bytes,1,opt,name=requestId,proto3" json:"requestId,omitempty"` // response code. 0 means success. others are fail @@ -1334,173 +1610,197 @@ type ListBackupsResponse struct { // error msg if fail Msg string `protobuf:"bytes,3,opt,name=msg,proto3" json:"msg,omitempty"` // backup info entities - Data []*BackupInfo `protobuf:"bytes,4,rep,name=data,proto3" json:"data"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Data []*BackupInfo `protobuf:"bytes,4,rep,name=data,proto3" json:"data"` } -func (m *ListBackupsResponse) Reset() { *m = ListBackupsResponse{} } -func (m *ListBackupsResponse) String() string { return proto.CompactTextString(m) } -func (*ListBackupsResponse) ProtoMessage() {} -func (*ListBackupsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{12} +func (x *ListBackupsResponse) Reset() { + *x = ListBackupsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ListBackupsResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ListBackupsResponse.Unmarshal(m, b) -} -func (m *ListBackupsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ListBackupsResponse.Marshal(b, m, deterministic) +func (x *ListBackupsResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListBackupsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListBackupsResponse.Merge(m, src) -} -func (m *ListBackupsResponse) XXX_Size() int { - return xxx_messageInfo_ListBackupsResponse.Size(m) -} -func (m *ListBackupsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ListBackupsResponse.DiscardUnknown(m) + +func (*ListBackupsResponse) ProtoMessage() {} + +func (x *ListBackupsResponse) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ListBackupsResponse proto.InternalMessageInfo +// Deprecated: Use ListBackupsResponse.ProtoReflect.Descriptor instead. +func (*ListBackupsResponse) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{12} +} -func (m *ListBackupsResponse) GetRequestId() string { - if m != nil { - return m.RequestId +func (x *ListBackupsResponse) GetRequestId() string { + if x != nil { + return x.RequestId } return "" } -func (m *ListBackupsResponse) GetCode() ResponseCode { - if m != nil { - return m.Code +func (x *ListBackupsResponse) GetCode() ResponseCode { + if x != nil { + return x.Code } return ResponseCode_Success } -func (m *ListBackupsResponse) GetMsg() string { - if m != nil { - return m.Msg +func (x *ListBackupsResponse) GetMsg() string { + if x != nil { + return x.Msg } return "" } -func (m *ListBackupsResponse) GetData() []*BackupInfo { - if m != nil { - return m.Data +func (x *ListBackupsResponse) GetData() []*BackupInfo { + if x != nil { + return x.Data } return nil } type DeleteBackupRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // uuid of request, will generate one if not set RequestId string `protobuf:"bytes,1,opt,name=requestId,proto3" json:"requestId,omitempty"` // backup name - BackupName string `protobuf:"bytes,2,opt,name=backup_name,json=backupName,proto3" json:"backup_name,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + BackupName string `protobuf:"bytes,2,opt,name=backup_name,json=backupName,proto3" json:"backup_name,omitempty"` } -func (m *DeleteBackupRequest) Reset() { *m = DeleteBackupRequest{} } -func (m *DeleteBackupRequest) String() string { return proto.CompactTextString(m) } -func (*DeleteBackupRequest) ProtoMessage() {} -func (*DeleteBackupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{13} +func (x *DeleteBackupRequest) Reset() { + *x = DeleteBackupRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *DeleteBackupRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DeleteBackupRequest.Unmarshal(m, b) +func (x *DeleteBackupRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *DeleteBackupRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DeleteBackupRequest.Marshal(b, m, deterministic) -} -func (m *DeleteBackupRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_DeleteBackupRequest.Merge(m, src) -} -func (m *DeleteBackupRequest) XXX_Size() int { - return xxx_messageInfo_DeleteBackupRequest.Size(m) -} -func (m *DeleteBackupRequest) XXX_DiscardUnknown() { - xxx_messageInfo_DeleteBackupRequest.DiscardUnknown(m) + +func (*DeleteBackupRequest) ProtoMessage() {} + +func (x *DeleteBackupRequest) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_DeleteBackupRequest proto.InternalMessageInfo +// Deprecated: Use DeleteBackupRequest.ProtoReflect.Descriptor instead. +func (*DeleteBackupRequest) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{13} +} -func (m *DeleteBackupRequest) GetRequestId() string { - if m != nil { - return m.RequestId +func (x *DeleteBackupRequest) GetRequestId() string { + if x != nil { + return x.RequestId } return "" } -func (m *DeleteBackupRequest) GetBackupName() string { - if m != nil { - return m.BackupName +func (x *DeleteBackupRequest) GetBackupName() string { + if x != nil { + return x.BackupName } return "" } type DeleteBackupResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // uuid of the request to response RequestId string `protobuf:"bytes,1,opt,name=requestId,proto3" json:"requestId,omitempty"` // response code. 0 means success. others are fail Code ResponseCode `protobuf:"varint,2,opt,name=code,proto3,enum=milvus.proto.backup.ResponseCode" json:"code,omitempty"` // error msg if fail - Msg string `protobuf:"bytes,3,opt,name=msg,proto3" json:"msg,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Msg string `protobuf:"bytes,3,opt,name=msg,proto3" json:"msg,omitempty"` } -func (m *DeleteBackupResponse) Reset() { *m = DeleteBackupResponse{} } -func (m *DeleteBackupResponse) String() string { return proto.CompactTextString(m) } -func (*DeleteBackupResponse) ProtoMessage() {} -func (*DeleteBackupResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{14} +func (x *DeleteBackupResponse) Reset() { + *x = DeleteBackupResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *DeleteBackupResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DeleteBackupResponse.Unmarshal(m, b) -} -func (m *DeleteBackupResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DeleteBackupResponse.Marshal(b, m, deterministic) -} -func (m *DeleteBackupResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_DeleteBackupResponse.Merge(m, src) +func (x *DeleteBackupResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *DeleteBackupResponse) XXX_Size() int { - return xxx_messageInfo_DeleteBackupResponse.Size(m) -} -func (m *DeleteBackupResponse) XXX_DiscardUnknown() { - xxx_messageInfo_DeleteBackupResponse.DiscardUnknown(m) + +func (*DeleteBackupResponse) ProtoMessage() {} + +func (x *DeleteBackupResponse) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_DeleteBackupResponse proto.InternalMessageInfo +// Deprecated: Use DeleteBackupResponse.ProtoReflect.Descriptor instead. +func (*DeleteBackupResponse) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{14} +} -func (m *DeleteBackupResponse) GetRequestId() string { - if m != nil { - return m.RequestId +func (x *DeleteBackupResponse) GetRequestId() string { + if x != nil { + return x.RequestId } return "" } -func (m *DeleteBackupResponse) GetCode() ResponseCode { - if m != nil { - return m.Code +func (x *DeleteBackupResponse) GetCode() ResponseCode { + if x != nil { + return x.Code } return ResponseCode_Success } -func (m *DeleteBackupResponse) GetMsg() string { - if m != nil { - return m.Msg +func (x *DeleteBackupResponse) GetMsg() string { + if x != nil { + return x.Msg } return "" } type RestoreBackupRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // uuid of request, will generate one if not set RequestId string `protobuf:"bytes,1,opt,name=requestId,proto3" json:"requestId,omitempty"` // backup name to restore @@ -1539,258 +1839,274 @@ type RestoreBackupRequest struct { // whether restore RBAC Rbac bool `protobuf:"varint,18,opt,name=rbac,proto3" json:"rbac,omitempty"` // target max shard number - MaxShardNum int32 `protobuf:"varint,19,opt,name=maxShardNum,proto3" json:"maxShardNum,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + MaxShardNum int32 `protobuf:"varint,19,opt,name=maxShardNum,proto3" json:"maxShardNum,omitempty"` } -func (m *RestoreBackupRequest) Reset() { *m = RestoreBackupRequest{} } -func (m *RestoreBackupRequest) String() string { return proto.CompactTextString(m) } -func (*RestoreBackupRequest) ProtoMessage() {} -func (*RestoreBackupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{15} +func (x *RestoreBackupRequest) Reset() { + *x = RestoreBackupRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *RestoreBackupRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_RestoreBackupRequest.Unmarshal(m, b) +func (x *RestoreBackupRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RestoreBackupRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_RestoreBackupRequest.Marshal(b, m, deterministic) -} -func (m *RestoreBackupRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_RestoreBackupRequest.Merge(m, src) -} -func (m *RestoreBackupRequest) XXX_Size() int { - return xxx_messageInfo_RestoreBackupRequest.Size(m) -} -func (m *RestoreBackupRequest) XXX_DiscardUnknown() { - xxx_messageInfo_RestoreBackupRequest.DiscardUnknown(m) + +func (*RestoreBackupRequest) ProtoMessage() {} + +func (x *RestoreBackupRequest) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_RestoreBackupRequest proto.InternalMessageInfo +// Deprecated: Use RestoreBackupRequest.ProtoReflect.Descriptor instead. +func (*RestoreBackupRequest) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{15} +} -func (m *RestoreBackupRequest) GetRequestId() string { - if m != nil { - return m.RequestId +func (x *RestoreBackupRequest) GetRequestId() string { + if x != nil { + return x.RequestId } return "" } -func (m *RestoreBackupRequest) GetBackupName() string { - if m != nil { - return m.BackupName +func (x *RestoreBackupRequest) GetBackupName() string { + if x != nil { + return x.BackupName } return "" } -func (m *RestoreBackupRequest) GetCollectionNames() []string { - if m != nil { - return m.CollectionNames +func (x *RestoreBackupRequest) GetCollectionNames() []string { + if x != nil { + return x.CollectionNames } return nil } -func (m *RestoreBackupRequest) GetCollectionSuffix() string { - if m != nil { - return m.CollectionSuffix +func (x *RestoreBackupRequest) GetCollectionSuffix() string { + if x != nil { + return x.CollectionSuffix } return "" } -func (m *RestoreBackupRequest) GetCollectionRenames() map[string]string { - if m != nil { - return m.CollectionRenames +func (x *RestoreBackupRequest) GetCollectionRenames() map[string]string { + if x != nil { + return x.CollectionRenames } return nil } -func (m *RestoreBackupRequest) GetAsync() bool { - if m != nil { - return m.Async +func (x *RestoreBackupRequest) GetAsync() bool { + if x != nil { + return x.Async } return false } -func (m *RestoreBackupRequest) GetBucketName() string { - if m != nil { - return m.BucketName +func (x *RestoreBackupRequest) GetBucketName() string { + if x != nil { + return x.BucketName } return "" } -func (m *RestoreBackupRequest) GetPath() string { - if m != nil { - return m.Path +func (x *RestoreBackupRequest) GetPath() string { + if x != nil { + return x.Path } return "" } -func (m *RestoreBackupRequest) GetDbCollections() *_struct.Value { - if m != nil { - return m.DbCollections +func (x *RestoreBackupRequest) GetDbCollections() *_struct.Value { + if x != nil { + return x.DbCollections } return nil } -func (m *RestoreBackupRequest) GetMetaOnly() bool { - if m != nil { - return m.MetaOnly +func (x *RestoreBackupRequest) GetMetaOnly() bool { + if x != nil { + return x.MetaOnly } return false } -func (m *RestoreBackupRequest) GetRestoreIndex() bool { - if m != nil { - return m.RestoreIndex +func (x *RestoreBackupRequest) GetRestoreIndex() bool { + if x != nil { + return x.RestoreIndex } return false } -func (m *RestoreBackupRequest) GetUseAutoIndex() bool { - if m != nil { - return m.UseAutoIndex +func (x *RestoreBackupRequest) GetUseAutoIndex() bool { + if x != nil { + return x.UseAutoIndex } return false } -func (m *RestoreBackupRequest) GetDropExistCollection() bool { - if m != nil { - return m.DropExistCollection +func (x *RestoreBackupRequest) GetDropExistCollection() bool { + if x != nil { + return x.DropExistCollection } return false } -func (m *RestoreBackupRequest) GetDropExistIndex() bool { - if m != nil { - return m.DropExistIndex +func (x *RestoreBackupRequest) GetDropExistIndex() bool { + if x != nil { + return x.DropExistIndex } return false } -func (m *RestoreBackupRequest) GetSkipCreateCollection() bool { - if m != nil { - return m.SkipCreateCollection +func (x *RestoreBackupRequest) GetSkipCreateCollection() bool { + if x != nil { + return x.SkipCreateCollection } return false } -func (m *RestoreBackupRequest) GetId() string { - if m != nil { - return m.Id +func (x *RestoreBackupRequest) GetId() string { + if x != nil { + return x.Id } return "" } -func (m *RestoreBackupRequest) GetSkipImportDiskQuotaCheck() bool { - if m != nil { - return m.SkipImportDiskQuotaCheck +func (x *RestoreBackupRequest) GetSkipImportDiskQuotaCheck() bool { + if x != nil { + return x.SkipImportDiskQuotaCheck } return false } -func (m *RestoreBackupRequest) GetRbac() bool { - if m != nil { - return m.Rbac +func (x *RestoreBackupRequest) GetRbac() bool { + if x != nil { + return x.Rbac } return false } -func (m *RestoreBackupRequest) GetMaxShardNum() int32 { - if m != nil { - return m.MaxShardNum +func (x *RestoreBackupRequest) GetMaxShardNum() int32 { + if x != nil { + return x.MaxShardNum } return 0 } type RestorePartitionTask struct { - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - StateCode RestoreTaskStateCode `protobuf:"varint,2,opt,name=state_code,json=stateCode,proto3,enum=milvus.proto.backup.RestoreTaskStateCode" json:"state_code"` - ErrorMessage string `protobuf:"bytes,3,opt,name=errorMessage,proto3" json:"errorMessage,omitempty"` - StartTime int64 `protobuf:"varint,4,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` - EndTime int64 `protobuf:"varint,5,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"` - Progress int32 `protobuf:"varint,6,opt,name=progress,proto3" json:"progress"` - PartBackup *PartitionBackupInfo `protobuf:"bytes,7,opt,name=part_backup,json=partBackup,proto3" json:"part_backup,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RestorePartitionTask) Reset() { *m = RestorePartitionTask{} } -func (m *RestorePartitionTask) String() string { return proto.CompactTextString(m) } -func (*RestorePartitionTask) ProtoMessage() {} -func (*RestorePartitionTask) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{16} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *RestorePartitionTask) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_RestorePartitionTask.Unmarshal(m, b) -} -func (m *RestorePartitionTask) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_RestorePartitionTask.Marshal(b, m, deterministic) + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + StateCode RestoreTaskStateCode `protobuf:"varint,2,opt,name=state_code,json=stateCode,proto3,enum=milvus.proto.backup.RestoreTaskStateCode" json:"state_code"` + ErrorMessage string `protobuf:"bytes,3,opt,name=errorMessage,proto3" json:"errorMessage,omitempty"` + StartTime int64 `protobuf:"varint,4,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` + EndTime int64 `protobuf:"varint,5,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"` + Progress int32 `protobuf:"varint,6,opt,name=progress,proto3" json:"progress"` + PartBackup *PartitionBackupInfo `protobuf:"bytes,7,opt,name=part_backup,json=partBackup,proto3" json:"part_backup,omitempty"` } -func (m *RestorePartitionTask) XXX_Merge(src proto.Message) { - xxx_messageInfo_RestorePartitionTask.Merge(m, src) + +func (x *RestorePartitionTask) Reset() { + *x = RestorePartitionTask{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *RestorePartitionTask) XXX_Size() int { - return xxx_messageInfo_RestorePartitionTask.Size(m) + +func (x *RestorePartitionTask) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RestorePartitionTask) XXX_DiscardUnknown() { - xxx_messageInfo_RestorePartitionTask.DiscardUnknown(m) + +func (*RestorePartitionTask) ProtoMessage() {} + +func (x *RestorePartitionTask) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_RestorePartitionTask proto.InternalMessageInfo +// Deprecated: Use RestorePartitionTask.ProtoReflect.Descriptor instead. +func (*RestorePartitionTask) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{16} +} -func (m *RestorePartitionTask) GetId() string { - if m != nil { - return m.Id +func (x *RestorePartitionTask) GetId() string { + if x != nil { + return x.Id } return "" } -func (m *RestorePartitionTask) GetStateCode() RestoreTaskStateCode { - if m != nil { - return m.StateCode +func (x *RestorePartitionTask) GetStateCode() RestoreTaskStateCode { + if x != nil { + return x.StateCode } return RestoreTaskStateCode_INITIAL } -func (m *RestorePartitionTask) GetErrorMessage() string { - if m != nil { - return m.ErrorMessage +func (x *RestorePartitionTask) GetErrorMessage() string { + if x != nil { + return x.ErrorMessage } return "" } -func (m *RestorePartitionTask) GetStartTime() int64 { - if m != nil { - return m.StartTime +func (x *RestorePartitionTask) GetStartTime() int64 { + if x != nil { + return x.StartTime } return 0 } -func (m *RestorePartitionTask) GetEndTime() int64 { - if m != nil { - return m.EndTime +func (x *RestorePartitionTask) GetEndTime() int64 { + if x != nil { + return x.EndTime } return 0 } -func (m *RestorePartitionTask) GetProgress() int32 { - if m != nil { - return m.Progress +func (x *RestorePartitionTask) GetProgress() int32 { + if x != nil { + return x.Progress } return 0 } -func (m *RestorePartitionTask) GetPartBackup() *PartitionBackupInfo { - if m != nil { - return m.PartBackup +func (x *RestorePartitionTask) GetPartBackup() *PartitionBackupInfo { + if x != nil { + return x.PartBackup } return nil } type RestoreCollectionTask struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` StateCode RestoreTaskStateCode `protobuf:"varint,2,opt,name=state_code,json=stateCode,proto3,enum=milvus.proto.backup.RestoreTaskStateCode" json:"state_code"` ErrorMessage string `protobuf:"bytes,3,opt,name=errorMessage,proto3" json:"errorMessage,omitempty"` @@ -1817,178 +2133,186 @@ type RestoreCollectionTask struct { SkipCreateCollection bool `protobuf:"varint,18,opt,name=skipCreateCollection,proto3" json:"skipCreateCollection,omitempty"` SkipDiskQuotaCheck bool `protobuf:"varint,19,opt,name=skipDiskQuotaCheck,proto3" json:"skipDiskQuotaCheck,omitempty"` // target max shard number - MaxShardNum int32 `protobuf:"varint,20,opt,name=maxShardNum,proto3" json:"maxShardNum,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + MaxShardNum int32 `protobuf:"varint,20,opt,name=maxShardNum,proto3" json:"maxShardNum,omitempty"` } -func (m *RestoreCollectionTask) Reset() { *m = RestoreCollectionTask{} } -func (m *RestoreCollectionTask) String() string { return proto.CompactTextString(m) } -func (*RestoreCollectionTask) ProtoMessage() {} -func (*RestoreCollectionTask) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{17} +func (x *RestoreCollectionTask) Reset() { + *x = RestoreCollectionTask{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *RestoreCollectionTask) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_RestoreCollectionTask.Unmarshal(m, b) +func (x *RestoreCollectionTask) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RestoreCollectionTask) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_RestoreCollectionTask.Marshal(b, m, deterministic) -} -func (m *RestoreCollectionTask) XXX_Merge(src proto.Message) { - xxx_messageInfo_RestoreCollectionTask.Merge(m, src) -} -func (m *RestoreCollectionTask) XXX_Size() int { - return xxx_messageInfo_RestoreCollectionTask.Size(m) -} -func (m *RestoreCollectionTask) XXX_DiscardUnknown() { - xxx_messageInfo_RestoreCollectionTask.DiscardUnknown(m) + +func (*RestoreCollectionTask) ProtoMessage() {} + +func (x *RestoreCollectionTask) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_RestoreCollectionTask proto.InternalMessageInfo +// Deprecated: Use RestoreCollectionTask.ProtoReflect.Descriptor instead. +func (*RestoreCollectionTask) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{17} +} -func (m *RestoreCollectionTask) GetId() string { - if m != nil { - return m.Id +func (x *RestoreCollectionTask) GetId() string { + if x != nil { + return x.Id } return "" } -func (m *RestoreCollectionTask) GetStateCode() RestoreTaskStateCode { - if m != nil { - return m.StateCode +func (x *RestoreCollectionTask) GetStateCode() RestoreTaskStateCode { + if x != nil { + return x.StateCode } return RestoreTaskStateCode_INITIAL } -func (m *RestoreCollectionTask) GetErrorMessage() string { - if m != nil { - return m.ErrorMessage +func (x *RestoreCollectionTask) GetErrorMessage() string { + if x != nil { + return x.ErrorMessage } return "" } -func (m *RestoreCollectionTask) GetStartTime() int64 { - if m != nil { - return m.StartTime +func (x *RestoreCollectionTask) GetStartTime() int64 { + if x != nil { + return x.StartTime } return 0 } -func (m *RestoreCollectionTask) GetEndTime() int64 { - if m != nil { - return m.EndTime +func (x *RestoreCollectionTask) GetEndTime() int64 { + if x != nil { + return x.EndTime } return 0 } -func (m *RestoreCollectionTask) GetCollBackup() *CollectionBackupInfo { - if m != nil { - return m.CollBackup +func (x *RestoreCollectionTask) GetCollBackup() *CollectionBackupInfo { + if x != nil { + return x.CollBackup } return nil } -func (m *RestoreCollectionTask) GetTargetCollectionName() string { - if m != nil { - return m.TargetCollectionName +func (x *RestoreCollectionTask) GetTargetCollectionName() string { + if x != nil { + return x.TargetCollectionName } return "" } -func (m *RestoreCollectionTask) GetPartitionRestoreTasks() []*RestorePartitionTask { - if m != nil { - return m.PartitionRestoreTasks +func (x *RestoreCollectionTask) GetPartitionRestoreTasks() []*RestorePartitionTask { + if x != nil { + return x.PartitionRestoreTasks } return nil } -func (m *RestoreCollectionTask) GetRestoredSize() int64 { - if m != nil { - return m.RestoredSize +func (x *RestoreCollectionTask) GetRestoredSize() int64 { + if x != nil { + return x.RestoredSize } return 0 } -func (m *RestoreCollectionTask) GetToRestoreSize() int64 { - if m != nil { - return m.ToRestoreSize +func (x *RestoreCollectionTask) GetToRestoreSize() int64 { + if x != nil { + return x.ToRestoreSize } return 0 } -func (m *RestoreCollectionTask) GetProgress() int32 { - if m != nil { - return m.Progress +func (x *RestoreCollectionTask) GetProgress() int32 { + if x != nil { + return x.Progress } return 0 } -func (m *RestoreCollectionTask) GetTargetDbName() string { - if m != nil { - return m.TargetDbName +func (x *RestoreCollectionTask) GetTargetDbName() string { + if x != nil { + return x.TargetDbName } return "" } -func (m *RestoreCollectionTask) GetMetaOnly() bool { - if m != nil { - return m.MetaOnly +func (x *RestoreCollectionTask) GetMetaOnly() bool { + if x != nil { + return x.MetaOnly } return false } -func (m *RestoreCollectionTask) GetRestoreIndex() bool { - if m != nil { - return m.RestoreIndex +func (x *RestoreCollectionTask) GetRestoreIndex() bool { + if x != nil { + return x.RestoreIndex } return false } -func (m *RestoreCollectionTask) GetUseAutoIndex() bool { - if m != nil { - return m.UseAutoIndex +func (x *RestoreCollectionTask) GetUseAutoIndex() bool { + if x != nil { + return x.UseAutoIndex } return false } -func (m *RestoreCollectionTask) GetDropExistCollection() bool { - if m != nil { - return m.DropExistCollection +func (x *RestoreCollectionTask) GetDropExistCollection() bool { + if x != nil { + return x.DropExistCollection } return false } -func (m *RestoreCollectionTask) GetDropExistIndex() bool { - if m != nil { - return m.DropExistIndex +func (x *RestoreCollectionTask) GetDropExistIndex() bool { + if x != nil { + return x.DropExistIndex } return false } -func (m *RestoreCollectionTask) GetSkipCreateCollection() bool { - if m != nil { - return m.SkipCreateCollection +func (x *RestoreCollectionTask) GetSkipCreateCollection() bool { + if x != nil { + return x.SkipCreateCollection } return false } -func (m *RestoreCollectionTask) GetSkipDiskQuotaCheck() bool { - if m != nil { - return m.SkipDiskQuotaCheck +func (x *RestoreCollectionTask) GetSkipDiskQuotaCheck() bool { + if x != nil { + return x.SkipDiskQuotaCheck } return false } -func (m *RestoreCollectionTask) GetMaxShardNum() int32 { - if m != nil { - return m.MaxShardNum +func (x *RestoreCollectionTask) GetMaxShardNum() int32 { + if x != nil { + return x.MaxShardNum } return 0 } type RestoreBackupTask struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` StateCode RestoreTaskStateCode `protobuf:"varint,2,opt,name=state_code,json=stateCode,proto3,enum=milvus.proto.backup.RestoreTaskStateCode" json:"state_code"` ErrorMessage string `protobuf:"bytes,3,opt,name=errorMessage,proto3" json:"errorMessage,omitempty"` @@ -1998,100 +2322,108 @@ type RestoreBackupTask struct { RestoredSize int64 `protobuf:"varint,7,opt,name=restored_size,json=restoredSize,proto3" json:"restored_size"` ToRestoreSize int64 `protobuf:"varint,8,opt,name=to_restore_size,json=toRestoreSize,proto3" json:"to_restore_size"` Progress int32 `protobuf:"varint,9,opt,name=progress,proto3" json:"progress"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` } -func (m *RestoreBackupTask) Reset() { *m = RestoreBackupTask{} } -func (m *RestoreBackupTask) String() string { return proto.CompactTextString(m) } -func (*RestoreBackupTask) ProtoMessage() {} -func (*RestoreBackupTask) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{18} +func (x *RestoreBackupTask) Reset() { + *x = RestoreBackupTask{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *RestoreBackupTask) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_RestoreBackupTask.Unmarshal(m, b) -} -func (m *RestoreBackupTask) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_RestoreBackupTask.Marshal(b, m, deterministic) +func (x *RestoreBackupTask) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RestoreBackupTask) XXX_Merge(src proto.Message) { - xxx_messageInfo_RestoreBackupTask.Merge(m, src) -} -func (m *RestoreBackupTask) XXX_Size() int { - return xxx_messageInfo_RestoreBackupTask.Size(m) -} -func (m *RestoreBackupTask) XXX_DiscardUnknown() { - xxx_messageInfo_RestoreBackupTask.DiscardUnknown(m) + +func (*RestoreBackupTask) ProtoMessage() {} + +func (x *RestoreBackupTask) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_RestoreBackupTask proto.InternalMessageInfo +// Deprecated: Use RestoreBackupTask.ProtoReflect.Descriptor instead. +func (*RestoreBackupTask) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{18} +} -func (m *RestoreBackupTask) GetId() string { - if m != nil { - return m.Id +func (x *RestoreBackupTask) GetId() string { + if x != nil { + return x.Id } return "" } -func (m *RestoreBackupTask) GetStateCode() RestoreTaskStateCode { - if m != nil { - return m.StateCode +func (x *RestoreBackupTask) GetStateCode() RestoreTaskStateCode { + if x != nil { + return x.StateCode } return RestoreTaskStateCode_INITIAL } -func (m *RestoreBackupTask) GetErrorMessage() string { - if m != nil { - return m.ErrorMessage +func (x *RestoreBackupTask) GetErrorMessage() string { + if x != nil { + return x.ErrorMessage } return "" } -func (m *RestoreBackupTask) GetStartTime() int64 { - if m != nil { - return m.StartTime +func (x *RestoreBackupTask) GetStartTime() int64 { + if x != nil { + return x.StartTime } return 0 } -func (m *RestoreBackupTask) GetEndTime() int64 { - if m != nil { - return m.EndTime +func (x *RestoreBackupTask) GetEndTime() int64 { + if x != nil { + return x.EndTime } return 0 } -func (m *RestoreBackupTask) GetCollectionRestoreTasks() []*RestoreCollectionTask { - if m != nil { - return m.CollectionRestoreTasks +func (x *RestoreBackupTask) GetCollectionRestoreTasks() []*RestoreCollectionTask { + if x != nil { + return x.CollectionRestoreTasks } return nil } -func (m *RestoreBackupTask) GetRestoredSize() int64 { - if m != nil { - return m.RestoredSize +func (x *RestoreBackupTask) GetRestoredSize() int64 { + if x != nil { + return x.RestoredSize } return 0 } -func (m *RestoreBackupTask) GetToRestoreSize() int64 { - if m != nil { - return m.ToRestoreSize +func (x *RestoreBackupTask) GetToRestoreSize() int64 { + if x != nil { + return x.ToRestoreSize } return 0 } -func (m *RestoreBackupTask) GetProgress() int32 { - if m != nil { - return m.Progress +func (x *RestoreBackupTask) GetProgress() int32 { + if x != nil { + return x.Progress } return 0 } type RestoreBackupResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // uuid of the request to response RequestId string `protobuf:"bytes,1,opt,name=requestId,proto3" json:"requestId,omitempty"` // response code. 0 means success. others are fail @@ -2099,283 +2431,323 @@ type RestoreBackupResponse struct { // error msg if fail Msg string `protobuf:"bytes,3,opt,name=msg,proto3" json:"msg,omitempty"` // restore task info entity - Data *RestoreBackupTask `protobuf:"bytes,4,opt,name=data,proto3" json:"data"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Data *RestoreBackupTask `protobuf:"bytes,4,opt,name=data,proto3" json:"data"` } -func (m *RestoreBackupResponse) Reset() { *m = RestoreBackupResponse{} } -func (m *RestoreBackupResponse) String() string { return proto.CompactTextString(m) } -func (*RestoreBackupResponse) ProtoMessage() {} -func (*RestoreBackupResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{19} +func (x *RestoreBackupResponse) Reset() { + *x = RestoreBackupResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *RestoreBackupResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_RestoreBackupResponse.Unmarshal(m, b) -} -func (m *RestoreBackupResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_RestoreBackupResponse.Marshal(b, m, deterministic) +func (x *RestoreBackupResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RestoreBackupResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_RestoreBackupResponse.Merge(m, src) -} -func (m *RestoreBackupResponse) XXX_Size() int { - return xxx_messageInfo_RestoreBackupResponse.Size(m) -} -func (m *RestoreBackupResponse) XXX_DiscardUnknown() { - xxx_messageInfo_RestoreBackupResponse.DiscardUnknown(m) + +func (*RestoreBackupResponse) ProtoMessage() {} + +func (x *RestoreBackupResponse) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_RestoreBackupResponse proto.InternalMessageInfo +// Deprecated: Use RestoreBackupResponse.ProtoReflect.Descriptor instead. +func (*RestoreBackupResponse) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{19} +} -func (m *RestoreBackupResponse) GetRequestId() string { - if m != nil { - return m.RequestId +func (x *RestoreBackupResponse) GetRequestId() string { + if x != nil { + return x.RequestId } return "" } -func (m *RestoreBackupResponse) GetCode() ResponseCode { - if m != nil { - return m.Code +func (x *RestoreBackupResponse) GetCode() ResponseCode { + if x != nil { + return x.Code } return ResponseCode_Success } -func (m *RestoreBackupResponse) GetMsg() string { - if m != nil { - return m.Msg +func (x *RestoreBackupResponse) GetMsg() string { + if x != nil { + return x.Msg } return "" } -func (m *RestoreBackupResponse) GetData() *RestoreBackupTask { - if m != nil { - return m.Data +func (x *RestoreBackupResponse) GetData() *RestoreBackupTask { + if x != nil { + return x.Data } return nil } type GetRestoreStateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // uuid of request, will generate one if not set RequestId string `protobuf:"bytes,1,opt,name=requestId,proto3" json:"requestId,omitempty"` // restore task id to query - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` } -func (m *GetRestoreStateRequest) Reset() { *m = GetRestoreStateRequest{} } -func (m *GetRestoreStateRequest) String() string { return proto.CompactTextString(m) } -func (*GetRestoreStateRequest) ProtoMessage() {} -func (*GetRestoreStateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{20} +func (x *GetRestoreStateRequest) Reset() { + *x = GetRestoreStateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *GetRestoreStateRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GetRestoreStateRequest.Unmarshal(m, b) -} -func (m *GetRestoreStateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GetRestoreStateRequest.Marshal(b, m, deterministic) +func (x *GetRestoreStateRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetRestoreStateRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetRestoreStateRequest.Merge(m, src) -} -func (m *GetRestoreStateRequest) XXX_Size() int { - return xxx_messageInfo_GetRestoreStateRequest.Size(m) -} -func (m *GetRestoreStateRequest) XXX_DiscardUnknown() { - xxx_messageInfo_GetRestoreStateRequest.DiscardUnknown(m) + +func (*GetRestoreStateRequest) ProtoMessage() {} + +func (x *GetRestoreStateRequest) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_GetRestoreStateRequest proto.InternalMessageInfo +// Deprecated: Use GetRestoreStateRequest.ProtoReflect.Descriptor instead. +func (*GetRestoreStateRequest) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{20} +} -func (m *GetRestoreStateRequest) GetRequestId() string { - if m != nil { - return m.RequestId +func (x *GetRestoreStateRequest) GetRequestId() string { + if x != nil { + return x.RequestId } return "" } -func (m *GetRestoreStateRequest) GetId() string { - if m != nil { - return m.Id +func (x *GetRestoreStateRequest) GetId() string { + if x != nil { + return x.Id } return "" } // copied from milvus data_coord.proto type FieldBinlog struct { - FieldID int64 `protobuf:"varint,1,opt,name=fieldID,proto3" json:"fieldID,omitempty"` - Binlogs []*Binlog `protobuf:"bytes,2,rep,name=binlogs,proto3" json:"binlogs,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *FieldBinlog) Reset() { *m = FieldBinlog{} } -func (m *FieldBinlog) String() string { return proto.CompactTextString(m) } -func (*FieldBinlog) ProtoMessage() {} -func (*FieldBinlog) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{21} + FieldID int64 `protobuf:"varint,1,opt,name=fieldID,proto3" json:"fieldID,omitempty"` + Binlogs []*Binlog `protobuf:"bytes,2,rep,name=binlogs,proto3" json:"binlogs,omitempty"` } -func (m *FieldBinlog) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FieldBinlog.Unmarshal(m, b) -} -func (m *FieldBinlog) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FieldBinlog.Marshal(b, m, deterministic) -} -func (m *FieldBinlog) XXX_Merge(src proto.Message) { - xxx_messageInfo_FieldBinlog.Merge(m, src) +func (x *FieldBinlog) Reset() { + *x = FieldBinlog{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *FieldBinlog) XXX_Size() int { - return xxx_messageInfo_FieldBinlog.Size(m) + +func (x *FieldBinlog) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *FieldBinlog) XXX_DiscardUnknown() { - xxx_messageInfo_FieldBinlog.DiscardUnknown(m) + +func (*FieldBinlog) ProtoMessage() {} + +func (x *FieldBinlog) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_FieldBinlog proto.InternalMessageInfo +// Deprecated: Use FieldBinlog.ProtoReflect.Descriptor instead. +func (*FieldBinlog) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{21} +} -func (m *FieldBinlog) GetFieldID() int64 { - if m != nil { - return m.FieldID +func (x *FieldBinlog) GetFieldID() int64 { + if x != nil { + return x.FieldID } return 0 } -func (m *FieldBinlog) GetBinlogs() []*Binlog { - if m != nil { - return m.Binlogs +func (x *FieldBinlog) GetBinlogs() []*Binlog { + if x != nil { + return x.Binlogs } return nil } type Binlog struct { - EntriesNum int64 `protobuf:"varint,1,opt,name=entries_num,json=entriesNum,proto3" json:"entries_num,omitempty"` - TimestampFrom uint64 `protobuf:"varint,2,opt,name=timestamp_from,json=timestampFrom,proto3" json:"timestamp_from,omitempty"` - TimestampTo uint64 `protobuf:"varint,3,opt,name=timestamp_to,json=timestampTo,proto3" json:"timestamp_to,omitempty"` - LogPath string `protobuf:"bytes,4,opt,name=log_path,json=logPath,proto3" json:"log_path,omitempty"` - LogSize int64 `protobuf:"varint,5,opt,name=log_size,json=logSize,proto3" json:"log_size"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Binlog) Reset() { *m = Binlog{} } -func (m *Binlog) String() string { return proto.CompactTextString(m) } -func (*Binlog) ProtoMessage() {} -func (*Binlog) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{22} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *Binlog) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Binlog.Unmarshal(m, b) + EntriesNum int64 `protobuf:"varint,1,opt,name=entries_num,json=entriesNum,proto3" json:"entries_num,omitempty"` + TimestampFrom uint64 `protobuf:"varint,2,opt,name=timestamp_from,json=timestampFrom,proto3" json:"timestamp_from,omitempty"` + TimestampTo uint64 `protobuf:"varint,3,opt,name=timestamp_to,json=timestampTo,proto3" json:"timestamp_to,omitempty"` + LogPath string `protobuf:"bytes,4,opt,name=log_path,json=logPath,proto3" json:"log_path,omitempty"` + LogSize int64 `protobuf:"varint,5,opt,name=log_size,json=logSize,proto3" json:"log_size"` } -func (m *Binlog) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Binlog.Marshal(b, m, deterministic) -} -func (m *Binlog) XXX_Merge(src proto.Message) { - xxx_messageInfo_Binlog.Merge(m, src) + +func (x *Binlog) Reset() { + *x = Binlog{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Binlog) XXX_Size() int { - return xxx_messageInfo_Binlog.Size(m) + +func (x *Binlog) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Binlog) XXX_DiscardUnknown() { - xxx_messageInfo_Binlog.DiscardUnknown(m) + +func (*Binlog) ProtoMessage() {} + +func (x *Binlog) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_Binlog proto.InternalMessageInfo +// Deprecated: Use Binlog.ProtoReflect.Descriptor instead. +func (*Binlog) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{22} +} -func (m *Binlog) GetEntriesNum() int64 { - if m != nil { - return m.EntriesNum +func (x *Binlog) GetEntriesNum() int64 { + if x != nil { + return x.EntriesNum } return 0 } -func (m *Binlog) GetTimestampFrom() uint64 { - if m != nil { - return m.TimestampFrom +func (x *Binlog) GetTimestampFrom() uint64 { + if x != nil { + return x.TimestampFrom } return 0 } -func (m *Binlog) GetTimestampTo() uint64 { - if m != nil { - return m.TimestampTo +func (x *Binlog) GetTimestampTo() uint64 { + if x != nil { + return x.TimestampTo } return 0 } -func (m *Binlog) GetLogPath() string { - if m != nil { - return m.LogPath +func (x *Binlog) GetLogPath() string { + if x != nil { + return x.LogPath } return "" } -func (m *Binlog) GetLogSize() int64 { - if m != nil { - return m.LogSize +func (x *Binlog) GetLogSize() int64 { + if x != nil { + return x.LogSize } return 0 } // copied from milvus common.proto type KeyValuePair struct { - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *KeyValuePair) Reset() { *m = KeyValuePair{} } -func (m *KeyValuePair) String() string { return proto.CompactTextString(m) } -func (*KeyValuePair) ProtoMessage() {} -func (*KeyValuePair) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{23} + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` } -func (m *KeyValuePair) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_KeyValuePair.Unmarshal(m, b) -} -func (m *KeyValuePair) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_KeyValuePair.Marshal(b, m, deterministic) -} -func (m *KeyValuePair) XXX_Merge(src proto.Message) { - xxx_messageInfo_KeyValuePair.Merge(m, src) +func (x *KeyValuePair) Reset() { + *x = KeyValuePair{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *KeyValuePair) XXX_Size() int { - return xxx_messageInfo_KeyValuePair.Size(m) + +func (x *KeyValuePair) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *KeyValuePair) XXX_DiscardUnknown() { - xxx_messageInfo_KeyValuePair.DiscardUnknown(m) + +func (*KeyValuePair) ProtoMessage() {} + +func (x *KeyValuePair) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_KeyValuePair proto.InternalMessageInfo +// Deprecated: Use KeyValuePair.ProtoReflect.Descriptor instead. +func (*KeyValuePair) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{23} +} -func (m *KeyValuePair) GetKey() string { - if m != nil { - return m.Key +func (x *KeyValuePair) GetKey() string { + if x != nil { + return x.Key } return "" } -func (m *KeyValuePair) GetValue() string { - if m != nil { - return m.Value +func (x *KeyValuePair) GetValue() string { + if x != nil { + return x.Value } return "" } type ValueField struct { - // Types that are valid to be assigned to Data: + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Data: // // *ValueField_BoolData // *ValueField_IntData @@ -2384,36 +2756,96 @@ type ValueField struct { // *ValueField_DoubleData // *ValueField_StringData // *ValueField_BytesData - Data isValueField_Data `protobuf_oneof:"data"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Data isValueField_Data `protobuf_oneof:"data"` } -func (m *ValueField) Reset() { *m = ValueField{} } -func (m *ValueField) String() string { return proto.CompactTextString(m) } -func (*ValueField) ProtoMessage() {} +func (x *ValueField) Reset() { + *x = ValueField{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValueField) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValueField) ProtoMessage() {} + +func (x *ValueField) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValueField.ProtoReflect.Descriptor instead. func (*ValueField) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{24} + return file_backup_proto_rawDescGZIP(), []int{24} +} + +func (m *ValueField) GetData() isValueField_Data { + if m != nil { + return m.Data + } + return nil } -func (m *ValueField) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ValueField.Unmarshal(m, b) +func (x *ValueField) GetBoolData() bool { + if x, ok := x.GetData().(*ValueField_BoolData); ok { + return x.BoolData + } + return false +} + +func (x *ValueField) GetIntData() int32 { + if x, ok := x.GetData().(*ValueField_IntData); ok { + return x.IntData + } + return 0 } -func (m *ValueField) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ValueField.Marshal(b, m, deterministic) + +func (x *ValueField) GetLongData() int64 { + if x, ok := x.GetData().(*ValueField_LongData); ok { + return x.LongData + } + return 0 } -func (m *ValueField) XXX_Merge(src proto.Message) { - xxx_messageInfo_ValueField.Merge(m, src) + +func (x *ValueField) GetFloatData() float32 { + if x, ok := x.GetData().(*ValueField_FloatData); ok { + return x.FloatData + } + return 0 } -func (m *ValueField) XXX_Size() int { - return xxx_messageInfo_ValueField.Size(m) + +func (x *ValueField) GetDoubleData() float64 { + if x, ok := x.GetData().(*ValueField_DoubleData); ok { + return x.DoubleData + } + return 0 } -func (m *ValueField) XXX_DiscardUnknown() { - xxx_messageInfo_ValueField.DiscardUnknown(m) + +func (x *ValueField) GetStringData() string { + if x, ok := x.GetData().(*ValueField_StringData); ok { + return x.StringData + } + return "" } -var xxx_messageInfo_ValueField proto.InternalMessageInfo +func (x *ValueField) GetBytesData() []byte { + if x, ok := x.GetData().(*ValueField_BytesData); ok { + return x.BytesData + } + return nil +} type isValueField_Data interface { isValueField_Data() @@ -2461,734 +2893,897 @@ func (*ValueField_StringData) isValueField_Data() {} func (*ValueField_BytesData) isValueField_Data() {} -func (m *ValueField) GetData() isValueField_Data { - if m != nil { - return m.Data - } - return nil +type FieldSchema struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + FieldID int64 `protobuf:"varint,1,opt,name=fieldID,proto3" json:"fieldID,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + IsPrimaryKey bool `protobuf:"varint,3,opt,name=is_primary_key,json=isPrimaryKey,proto3" json:"is_primary_key,omitempty"` + Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"` + DataType DataType `protobuf:"varint,5,opt,name=data_type,json=dataType,proto3,enum=milvus.proto.backup.DataType" json:"data_type,omitempty"` + TypeParams []*KeyValuePair `protobuf:"bytes,6,rep,name=type_params,json=typeParams,proto3" json:"type_params,omitempty"` + IndexParams []*KeyValuePair `protobuf:"bytes,7,rep,name=index_params,json=indexParams,proto3" json:"index_params,omitempty"` + AutoID bool `protobuf:"varint,8,opt,name=autoID,proto3" json:"autoID,omitempty"` + State FieldState `protobuf:"varint,9,opt,name=state,proto3,enum=milvus.proto.backup.FieldState" json:"state,omitempty"` // To keep compatible with older version, the default state is `Created`. + ElementType DataType `protobuf:"varint,10,opt,name=element_type,json=elementType,proto3,enum=milvus.proto.backup.DataType" json:"element_type,omitempty"` // For array type, the element type is stored here + DefaultValue *ValueField `protobuf:"bytes,11,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"` // default_value only support scalars except array and json for now + IsDynamic bool `protobuf:"varint,12,opt,name=is_dynamic,json=isDynamic,proto3" json:"is_dynamic,omitempty"` // mark whether this field is the dynamic field + IsPartitionKey bool `protobuf:"varint,13,opt,name=is_partition_key,json=isPartitionKey,proto3" json:"is_partition_key,omitempty"` // enable logic partitions + Nullable bool `protobuf:"varint,14,opt,name=nullable,proto3" json:"nullable,omitempty"` + DefaultValueProto string `protobuf:"bytes,15,opt,name=default_value_proto,json=defaultValueProto,proto3" json:"default_value_proto,omitempty"` // json not support marshall oneof, so use proto string + IsFunctionOutput bool `protobuf:"varint,16,opt,name=is_function_output,json=isFunctionOutput,proto3" json:"is_function_output,omitempty"` } -func (m *ValueField) GetBoolData() bool { - if x, ok := m.GetData().(*ValueField_BoolData); ok { - return x.BoolData +func (x *FieldSchema) Reset() { + *x = FieldSchema{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return false } -func (m *ValueField) GetIntData() int32 { - if x, ok := m.GetData().(*ValueField_IntData); ok { - return x.IntData +func (x *FieldSchema) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FieldSchema) ProtoMessage() {} + +func (x *FieldSchema) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return 0 + return mi.MessageOf(x) } -func (m *ValueField) GetLongData() int64 { - if x, ok := m.GetData().(*ValueField_LongData); ok { - return x.LongData +// Deprecated: Use FieldSchema.ProtoReflect.Descriptor instead. +func (*FieldSchema) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{25} +} + +func (x *FieldSchema) GetFieldID() int64 { + if x != nil { + return x.FieldID } return 0 } -func (m *ValueField) GetFloatData() float32 { - if x, ok := m.GetData().(*ValueField_FloatData); ok { - return x.FloatData +func (x *FieldSchema) GetName() string { + if x != nil { + return x.Name } - return 0 + return "" } -func (m *ValueField) GetDoubleData() float64 { - if x, ok := m.GetData().(*ValueField_DoubleData); ok { - return x.DoubleData +func (x *FieldSchema) GetIsPrimaryKey() bool { + if x != nil { + return x.IsPrimaryKey } - return 0 + return false } -func (m *ValueField) GetStringData() string { - if x, ok := m.GetData().(*ValueField_StringData); ok { - return x.StringData +func (x *FieldSchema) GetDescription() string { + if x != nil { + return x.Description } return "" } -func (m *ValueField) GetBytesData() []byte { - if x, ok := m.GetData().(*ValueField_BytesData); ok { - return x.BytesData +func (x *FieldSchema) GetDataType() DataType { + if x != nil { + return x.DataType } - return nil + return DataType_None } -// XXX_OneofWrappers is for the internal use of the proto package. -func (*ValueField) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*ValueField_BoolData)(nil), - (*ValueField_IntData)(nil), - (*ValueField_LongData)(nil), - (*ValueField_FloatData)(nil), - (*ValueField_DoubleData)(nil), - (*ValueField_StringData)(nil), - (*ValueField_BytesData)(nil), +func (x *FieldSchema) GetTypeParams() []*KeyValuePair { + if x != nil { + return x.TypeParams } + return nil } -// * -// @brief Field schema. The same as https://github.com/milvus-io/milvus-proto schema.proto -type FieldSchema struct { - FieldID int64 `protobuf:"varint,1,opt,name=fieldID,proto3" json:"fieldID,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - IsPrimaryKey bool `protobuf:"varint,3,opt,name=is_primary_key,json=isPrimaryKey,proto3" json:"is_primary_key,omitempty"` - Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"` - DataType DataType `protobuf:"varint,5,opt,name=data_type,json=dataType,proto3,enum=milvus.proto.backup.DataType" json:"data_type,omitempty"` - TypeParams []*KeyValuePair `protobuf:"bytes,6,rep,name=type_params,json=typeParams,proto3" json:"type_params,omitempty"` - IndexParams []*KeyValuePair `protobuf:"bytes,7,rep,name=index_params,json=indexParams,proto3" json:"index_params,omitempty"` - AutoID bool `protobuf:"varint,8,opt,name=autoID,proto3" json:"autoID,omitempty"` - State FieldState `protobuf:"varint,9,opt,name=state,proto3,enum=milvus.proto.backup.FieldState" json:"state,omitempty"` - ElementType DataType `protobuf:"varint,10,opt,name=element_type,json=elementType,proto3,enum=milvus.proto.backup.DataType" json:"element_type,omitempty"` - DefaultValue *ValueField `protobuf:"bytes,11,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"` - IsDynamic bool `protobuf:"varint,12,opt,name=is_dynamic,json=isDynamic,proto3" json:"is_dynamic,omitempty"` - IsPartitionKey bool `protobuf:"varint,13,opt,name=is_partition_key,json=isPartitionKey,proto3" json:"is_partition_key,omitempty"` - Nullable bool `protobuf:"varint,14,opt,name=nullable,proto3" json:"nullable,omitempty"` - DefaultValueProto string `protobuf:"bytes,15,opt,name=default_value_proto,json=defaultValueProto,proto3" json:"default_value_proto,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FieldSchema) Reset() { *m = FieldSchema{} } -func (m *FieldSchema) String() string { return proto.CompactTextString(m) } -func (*FieldSchema) ProtoMessage() {} -func (*FieldSchema) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{25} +func (x *FieldSchema) GetIndexParams() []*KeyValuePair { + if x != nil { + return x.IndexParams + } + return nil } -func (m *FieldSchema) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FieldSchema.Unmarshal(m, b) +func (x *FieldSchema) GetAutoID() bool { + if x != nil { + return x.AutoID + } + return false } -func (m *FieldSchema) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FieldSchema.Marshal(b, m, deterministic) + +func (x *FieldSchema) GetState() FieldState { + if x != nil { + return x.State + } + return FieldState_FieldCreated } -func (m *FieldSchema) XXX_Merge(src proto.Message) { - xxx_messageInfo_FieldSchema.Merge(m, src) + +func (x *FieldSchema) GetElementType() DataType { + if x != nil { + return x.ElementType + } + return DataType_None } -func (m *FieldSchema) XXX_Size() int { - return xxx_messageInfo_FieldSchema.Size(m) + +func (x *FieldSchema) GetDefaultValue() *ValueField { + if x != nil { + return x.DefaultValue + } + return nil } -func (m *FieldSchema) XXX_DiscardUnknown() { - xxx_messageInfo_FieldSchema.DiscardUnknown(m) + +func (x *FieldSchema) GetIsDynamic() bool { + if x != nil { + return x.IsDynamic + } + return false } -var xxx_messageInfo_FieldSchema proto.InternalMessageInfo +func (x *FieldSchema) GetIsPartitionKey() bool { + if x != nil { + return x.IsPartitionKey + } + return false +} -func (m *FieldSchema) GetFieldID() int64 { - if m != nil { - return m.FieldID +func (x *FieldSchema) GetNullable() bool { + if x != nil { + return x.Nullable } - return 0 + return false } -func (m *FieldSchema) GetName() string { - if m != nil { - return m.Name +func (x *FieldSchema) GetDefaultValueProto() string { + if x != nil { + return x.DefaultValueProto } return "" } -func (m *FieldSchema) GetIsPrimaryKey() bool { - if m != nil { - return m.IsPrimaryKey +func (x *FieldSchema) GetIsFunctionOutput() bool { + if x != nil { + return x.IsFunctionOutput } return false } -func (m *FieldSchema) GetDescription() string { - if m != nil { - return m.Description - } - return "" +type FunctionSchema struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Id int64 `protobuf:"varint,2,opt,name=id,proto3" json:"id,omitempty"` + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + Type FunctionType `protobuf:"varint,4,opt,name=type,proto3,enum=milvus.proto.backup.FunctionType" json:"type,omitempty"` + InputFieldNames []string `protobuf:"bytes,5,rep,name=input_field_names,json=inputFieldNames,proto3" json:"input_field_names,omitempty"` + InputFieldIds []int64 `protobuf:"varint,6,rep,packed,name=input_field_ids,json=inputFieldIds,proto3" json:"input_field_ids,omitempty"` + OutputFieldNames []string `protobuf:"bytes,7,rep,name=output_field_names,json=outputFieldNames,proto3" json:"output_field_names,omitempty"` + OutputFieldIds []int64 `protobuf:"varint,8,rep,packed,name=output_field_ids,json=outputFieldIds,proto3" json:"output_field_ids,omitempty"` + Params []*KeyValuePair `protobuf:"bytes,9,rep,name=params,proto3" json:"params,omitempty"` } -func (m *FieldSchema) GetDataType() DataType { - if m != nil { - return m.DataType +func (x *FunctionSchema) Reset() { + *x = FunctionSchema{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return DataType_None } -func (m *FieldSchema) GetTypeParams() []*KeyValuePair { - if m != nil { - return m.TypeParams +func (x *FunctionSchema) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FunctionSchema) ProtoMessage() {} + +func (x *FunctionSchema) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[26] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (m *FieldSchema) GetIndexParams() []*KeyValuePair { - if m != nil { - return m.IndexParams +// Deprecated: Use FunctionSchema.ProtoReflect.Descriptor instead. +func (*FunctionSchema) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{26} +} + +func (x *FunctionSchema) GetName() string { + if x != nil { + return x.Name } - return nil + return "" } -func (m *FieldSchema) GetAutoID() bool { - if m != nil { - return m.AutoID +func (x *FunctionSchema) GetId() int64 { + if x != nil { + return x.Id } - return false + return 0 } -func (m *FieldSchema) GetState() FieldState { - if m != nil { - return m.State +func (x *FunctionSchema) GetDescription() string { + if x != nil { + return x.Description } - return FieldState_FieldCreated + return "" } -func (m *FieldSchema) GetElementType() DataType { - if m != nil { - return m.ElementType +func (x *FunctionSchema) GetType() FunctionType { + if x != nil { + return x.Type } - return DataType_None + return FunctionType_Unknown } -func (m *FieldSchema) GetDefaultValue() *ValueField { - if m != nil { - return m.DefaultValue +func (x *FunctionSchema) GetInputFieldNames() []string { + if x != nil { + return x.InputFieldNames } return nil } -func (m *FieldSchema) GetIsDynamic() bool { - if m != nil { - return m.IsDynamic +func (x *FunctionSchema) GetInputFieldIds() []int64 { + if x != nil { + return x.InputFieldIds } - return false + return nil } -func (m *FieldSchema) GetIsPartitionKey() bool { - if m != nil { - return m.IsPartitionKey +func (x *FunctionSchema) GetOutputFieldNames() []string { + if x != nil { + return x.OutputFieldNames } - return false + return nil } -func (m *FieldSchema) GetNullable() bool { - if m != nil { - return m.Nullable +func (x *FunctionSchema) GetOutputFieldIds() []int64 { + if x != nil { + return x.OutputFieldIds } - return false + return nil } -func (m *FieldSchema) GetDefaultValueProto() string { - if m != nil { - return m.DefaultValueProto +func (x *FunctionSchema) GetParams() []*KeyValuePair { + if x != nil { + return x.Params } - return "" + return nil } // * // @brief Collection schema type CollectionSchema struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - AutoID bool `protobuf:"varint,3,opt,name=autoID,proto3" json:"autoID,omitempty"` - Fields []*FieldSchema `protobuf:"bytes,4,rep,name=fields,proto3" json:"fields,omitempty"` - EnableDynamicField bool `protobuf:"varint,5,opt,name=enable_dynamic_field,json=enableDynamicField,proto3" json:"enable_dynamic_field,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *CollectionSchema) Reset() { *m = CollectionSchema{} } -func (m *CollectionSchema) String() string { return proto.CompactTextString(m) } -func (*CollectionSchema) ProtoMessage() {} -func (*CollectionSchema) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{26} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *CollectionSchema) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CollectionSchema.Unmarshal(m, b) -} -func (m *CollectionSchema) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CollectionSchema.Marshal(b, m, deterministic) + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + AutoID bool `protobuf:"varint,3,opt,name=autoID,proto3" json:"autoID,omitempty"` // deprecated later, keep compatible with c++ part now + Fields []*FieldSchema `protobuf:"bytes,4,rep,name=fields,proto3" json:"fields,omitempty"` + EnableDynamicField bool `protobuf:"varint,5,opt,name=enable_dynamic_field,json=enableDynamicField,proto3" json:"enable_dynamic_field,omitempty"` // mark whether this table has the dynamic field function enabled. + Properties []*KeyValuePair `protobuf:"bytes,6,rep,name=properties,proto3" json:"properties,omitempty"` + Functions []*FunctionSchema `protobuf:"bytes,7,rep,name=functions,proto3" json:"functions,omitempty"` } -func (m *CollectionSchema) XXX_Merge(src proto.Message) { - xxx_messageInfo_CollectionSchema.Merge(m, src) + +func (x *CollectionSchema) Reset() { + *x = CollectionSchema{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *CollectionSchema) XXX_Size() int { - return xxx_messageInfo_CollectionSchema.Size(m) + +func (x *CollectionSchema) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *CollectionSchema) XXX_DiscardUnknown() { - xxx_messageInfo_CollectionSchema.DiscardUnknown(m) + +func (*CollectionSchema) ProtoMessage() {} + +func (x *CollectionSchema) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_CollectionSchema proto.InternalMessageInfo +// Deprecated: Use CollectionSchema.ProtoReflect.Descriptor instead. +func (*CollectionSchema) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{27} +} -func (m *CollectionSchema) GetName() string { - if m != nil { - return m.Name +func (x *CollectionSchema) GetName() string { + if x != nil { + return x.Name } return "" } -func (m *CollectionSchema) GetDescription() string { - if m != nil { - return m.Description +func (x *CollectionSchema) GetDescription() string { + if x != nil { + return x.Description } return "" } -func (m *CollectionSchema) GetAutoID() bool { - if m != nil { - return m.AutoID +func (x *CollectionSchema) GetAutoID() bool { + if x != nil { + return x.AutoID } return false } -func (m *CollectionSchema) GetFields() []*FieldSchema { - if m != nil { - return m.Fields +func (x *CollectionSchema) GetFields() []*FieldSchema { + if x != nil { + return x.Fields } return nil } -func (m *CollectionSchema) GetEnableDynamicField() bool { - if m != nil { - return m.EnableDynamicField +func (x *CollectionSchema) GetEnableDynamicField() bool { + if x != nil { + return x.EnableDynamicField } return false } -type CheckRequest struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (x *CollectionSchema) GetProperties() []*KeyValuePair { + if x != nil { + return x.Properties + } + return nil } -func (m *CheckRequest) Reset() { *m = CheckRequest{} } -func (m *CheckRequest) String() string { return proto.CompactTextString(m) } -func (*CheckRequest) ProtoMessage() {} -func (*CheckRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{27} +func (x *CollectionSchema) GetFunctions() []*FunctionSchema { + if x != nil { + return x.Functions + } + return nil } -func (m *CheckRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CheckRequest.Unmarshal(m, b) -} -func (m *CheckRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CheckRequest.Marshal(b, m, deterministic) +type CheckRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields } -func (m *CheckRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_CheckRequest.Merge(m, src) + +func (x *CheckRequest) Reset() { + *x = CheckRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *CheckRequest) XXX_Size() int { - return xxx_messageInfo_CheckRequest.Size(m) + +func (x *CheckRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *CheckRequest) XXX_DiscardUnknown() { - xxx_messageInfo_CheckRequest.DiscardUnknown(m) + +func (*CheckRequest) ProtoMessage() {} + +func (x *CheckRequest) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[28] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_CheckRequest proto.InternalMessageInfo +// Deprecated: Use CheckRequest.ProtoReflect.Descriptor instead. +func (*CheckRequest) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{28} +} type CheckResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // response code. 0 means success. others are fail Code ResponseCode `protobuf:"varint,1,opt,name=code,proto3,enum=milvus.proto.backup.ResponseCode" json:"code,omitempty"` // error msg if fail - Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` } -func (m *CheckResponse) Reset() { *m = CheckResponse{} } -func (m *CheckResponse) String() string { return proto.CompactTextString(m) } -func (*CheckResponse) ProtoMessage() {} -func (*CheckResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{28} +func (x *CheckResponse) Reset() { + *x = CheckResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *CheckResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CheckResponse.Unmarshal(m, b) +func (x *CheckResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *CheckResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CheckResponse.Marshal(b, m, deterministic) -} -func (m *CheckResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_CheckResponse.Merge(m, src) -} -func (m *CheckResponse) XXX_Size() int { - return xxx_messageInfo_CheckResponse.Size(m) -} -func (m *CheckResponse) XXX_DiscardUnknown() { - xxx_messageInfo_CheckResponse.DiscardUnknown(m) + +func (*CheckResponse) ProtoMessage() {} + +func (x *CheckResponse) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[29] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_CheckResponse proto.InternalMessageInfo +// Deprecated: Use CheckResponse.ProtoReflect.Descriptor instead. +func (*CheckResponse) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{29} +} -func (m *CheckResponse) GetCode() ResponseCode { - if m != nil { - return m.Code +func (x *CheckResponse) GetCode() ResponseCode { + if x != nil { + return x.Code } return ResponseCode_Success } -func (m *CheckResponse) GetMsg() string { - if m != nil { - return m.Msg +func (x *CheckResponse) GetMsg() string { + if x != nil { + return x.Msg } return "" } type MsgPosition struct { - ChannelName string `protobuf:"bytes,1,opt,name=channel_name,json=channelName,proto3" json:"channel_name,omitempty"` - MsgID []byte `protobuf:"bytes,2,opt,name=msgID,proto3" json:"msgID,omitempty"` - MsgGroup string `protobuf:"bytes,3,opt,name=msgGroup,proto3" json:"msgGroup,omitempty"` - Timestamp uint64 `protobuf:"varint,4,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *MsgPosition) Reset() { *m = MsgPosition{} } -func (m *MsgPosition) String() string { return proto.CompactTextString(m) } -func (*MsgPosition) ProtoMessage() {} -func (*MsgPosition) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{29} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *MsgPosition) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MsgPosition.Unmarshal(m, b) -} -func (m *MsgPosition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MsgPosition.Marshal(b, m, deterministic) + ChannelName string `protobuf:"bytes,1,opt,name=channel_name,json=channelName,proto3" json:"channel_name,omitempty"` + MsgID []byte `protobuf:"bytes,2,opt,name=msgID,proto3" json:"msgID,omitempty"` + MsgGroup string `protobuf:"bytes,3,opt,name=msgGroup,proto3" json:"msgGroup,omitempty"` + Timestamp uint64 `protobuf:"varint,4,opt,name=timestamp,proto3" json:"timestamp,omitempty"` } -func (m *MsgPosition) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgPosition.Merge(m, src) + +func (x *MsgPosition) Reset() { + *x = MsgPosition{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *MsgPosition) XXX_Size() int { - return xxx_messageInfo_MsgPosition.Size(m) + +func (x *MsgPosition) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *MsgPosition) XXX_DiscardUnknown() { - xxx_messageInfo_MsgPosition.DiscardUnknown(m) + +func (*MsgPosition) ProtoMessage() {} + +func (x *MsgPosition) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[30] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_MsgPosition proto.InternalMessageInfo +// Deprecated: Use MsgPosition.ProtoReflect.Descriptor instead. +func (*MsgPosition) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{30} +} -func (m *MsgPosition) GetChannelName() string { - if m != nil { - return m.ChannelName +func (x *MsgPosition) GetChannelName() string { + if x != nil { + return x.ChannelName } return "" } -func (m *MsgPosition) GetMsgID() []byte { - if m != nil { - return m.MsgID +func (x *MsgPosition) GetMsgID() []byte { + if x != nil { + return x.MsgID } return nil } -func (m *MsgPosition) GetMsgGroup() string { - if m != nil { - return m.MsgGroup +func (x *MsgPosition) GetMsgGroup() string { + if x != nil { + return x.MsgGroup } return "" } -func (m *MsgPosition) GetTimestamp() uint64 { - if m != nil { - return m.Timestamp +func (x *MsgPosition) GetTimestamp() uint64 { + if x != nil { + return x.Timestamp } return 0 } type ChannelPosition struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Position string `protobuf:"bytes,2,opt,name=position,proto3" json:"position,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *ChannelPosition) Reset() { *m = ChannelPosition{} } -func (m *ChannelPosition) String() string { return proto.CompactTextString(m) } -func (*ChannelPosition) ProtoMessage() {} -func (*ChannelPosition) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{30} + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Position string `protobuf:"bytes,2,opt,name=position,proto3" json:"position,omitempty"` } -func (m *ChannelPosition) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ChannelPosition.Unmarshal(m, b) -} -func (m *ChannelPosition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ChannelPosition.Marshal(b, m, deterministic) -} -func (m *ChannelPosition) XXX_Merge(src proto.Message) { - xxx_messageInfo_ChannelPosition.Merge(m, src) +func (x *ChannelPosition) Reset() { + *x = ChannelPosition{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ChannelPosition) XXX_Size() int { - return xxx_messageInfo_ChannelPosition.Size(m) + +func (x *ChannelPosition) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ChannelPosition) XXX_DiscardUnknown() { - xxx_messageInfo_ChannelPosition.DiscardUnknown(m) + +func (*ChannelPosition) ProtoMessage() {} + +func (x *ChannelPosition) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[31] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ChannelPosition proto.InternalMessageInfo +// Deprecated: Use ChannelPosition.ProtoReflect.Descriptor instead. +func (*ChannelPosition) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{31} +} -func (m *ChannelPosition) GetName() string { - if m != nil { - return m.Name +func (x *ChannelPosition) GetName() string { + if x != nil { + return x.Name } return "" } -func (m *ChannelPosition) GetPosition() string { - if m != nil { - return m.Position +func (x *ChannelPosition) GetPosition() string { + if x != nil { + return x.Position } return "" } type RoleEntity struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *RoleEntity) Reset() { *m = RoleEntity{} } -func (m *RoleEntity) String() string { return proto.CompactTextString(m) } -func (*RoleEntity) ProtoMessage() {} -func (*RoleEntity) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{31} + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` } -func (m *RoleEntity) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_RoleEntity.Unmarshal(m, b) -} -func (m *RoleEntity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_RoleEntity.Marshal(b, m, deterministic) -} -func (m *RoleEntity) XXX_Merge(src proto.Message) { - xxx_messageInfo_RoleEntity.Merge(m, src) +func (x *RoleEntity) Reset() { + *x = RoleEntity{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *RoleEntity) XXX_Size() int { - return xxx_messageInfo_RoleEntity.Size(m) + +func (x *RoleEntity) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RoleEntity) XXX_DiscardUnknown() { - xxx_messageInfo_RoleEntity.DiscardUnknown(m) + +func (*RoleEntity) ProtoMessage() {} + +func (x *RoleEntity) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[32] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_RoleEntity proto.InternalMessageInfo +// Deprecated: Use RoleEntity.ProtoReflect.Descriptor instead. +func (*RoleEntity) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{32} +} -func (m *RoleEntity) GetName() string { - if m != nil { - return m.Name +func (x *RoleEntity) GetName() string { + if x != nil { + return x.Name } return "" } type UserEntity struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *UserEntity) Reset() { *m = UserEntity{} } -func (m *UserEntity) String() string { return proto.CompactTextString(m) } -func (*UserEntity) ProtoMessage() {} -func (*UserEntity) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{32} + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` } -func (m *UserEntity) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UserEntity.Unmarshal(m, b) -} -func (m *UserEntity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UserEntity.Marshal(b, m, deterministic) -} -func (m *UserEntity) XXX_Merge(src proto.Message) { - xxx_messageInfo_UserEntity.Merge(m, src) +func (x *UserEntity) Reset() { + *x = UserEntity{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *UserEntity) XXX_Size() int { - return xxx_messageInfo_UserEntity.Size(m) + +func (x *UserEntity) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *UserEntity) XXX_DiscardUnknown() { - xxx_messageInfo_UserEntity.DiscardUnknown(m) + +func (*UserEntity) ProtoMessage() {} + +func (x *UserEntity) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[33] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_UserEntity proto.InternalMessageInfo +// Deprecated: Use UserEntity.ProtoReflect.Descriptor instead. +func (*UserEntity) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{33} +} -func (m *UserEntity) GetName() string { - if m != nil { - return m.Name +func (x *UserEntity) GetName() string { + if x != nil { + return x.Name } return "" } type ObjectEntity struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *ObjectEntity) Reset() { *m = ObjectEntity{} } -func (m *ObjectEntity) String() string { return proto.CompactTextString(m) } -func (*ObjectEntity) ProtoMessage() {} -func (*ObjectEntity) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{33} + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` } -func (m *ObjectEntity) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ObjectEntity.Unmarshal(m, b) -} -func (m *ObjectEntity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ObjectEntity.Marshal(b, m, deterministic) -} -func (m *ObjectEntity) XXX_Merge(src proto.Message) { - xxx_messageInfo_ObjectEntity.Merge(m, src) +func (x *ObjectEntity) Reset() { + *x = ObjectEntity{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ObjectEntity) XXX_Size() int { - return xxx_messageInfo_ObjectEntity.Size(m) + +func (x *ObjectEntity) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ObjectEntity) XXX_DiscardUnknown() { - xxx_messageInfo_ObjectEntity.DiscardUnknown(m) + +func (*ObjectEntity) ProtoMessage() {} + +func (x *ObjectEntity) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[34] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ObjectEntity proto.InternalMessageInfo +// Deprecated: Use ObjectEntity.ProtoReflect.Descriptor instead. +func (*ObjectEntity) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{34} +} -func (m *ObjectEntity) GetName() string { - if m != nil { - return m.Name +func (x *ObjectEntity) GetName() string { + if x != nil { + return x.Name } return "" } type PrivilegeEntity struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *PrivilegeEntity) Reset() { *m = PrivilegeEntity{} } -func (m *PrivilegeEntity) String() string { return proto.CompactTextString(m) } -func (*PrivilegeEntity) ProtoMessage() {} -func (*PrivilegeEntity) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{34} + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` } -func (m *PrivilegeEntity) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PrivilegeEntity.Unmarshal(m, b) -} -func (m *PrivilegeEntity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PrivilegeEntity.Marshal(b, m, deterministic) -} -func (m *PrivilegeEntity) XXX_Merge(src proto.Message) { - xxx_messageInfo_PrivilegeEntity.Merge(m, src) +func (x *PrivilegeEntity) Reset() { + *x = PrivilegeEntity{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *PrivilegeEntity) XXX_Size() int { - return xxx_messageInfo_PrivilegeEntity.Size(m) + +func (x *PrivilegeEntity) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *PrivilegeEntity) XXX_DiscardUnknown() { - xxx_messageInfo_PrivilegeEntity.DiscardUnknown(m) + +func (*PrivilegeEntity) ProtoMessage() {} + +func (x *PrivilegeEntity) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[35] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_PrivilegeEntity proto.InternalMessageInfo +// Deprecated: Use PrivilegeEntity.ProtoReflect.Descriptor instead. +func (*PrivilegeEntity) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{35} +} -func (m *PrivilegeEntity) GetName() string { - if m != nil { - return m.Name +func (x *PrivilegeEntity) GetName() string { + if x != nil { + return x.Name } return "" } type GrantorEntity struct { - User *UserEntity `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` - Privilege *PrivilegeEntity `protobuf:"bytes,2,opt,name=privilege,proto3" json:"privilege,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *GrantorEntity) Reset() { *m = GrantorEntity{} } -func (m *GrantorEntity) String() string { return proto.CompactTextString(m) } -func (*GrantorEntity) ProtoMessage() {} -func (*GrantorEntity) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{35} + User *UserEntity `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` + Privilege *PrivilegeEntity `protobuf:"bytes,2,opt,name=privilege,proto3" json:"privilege,omitempty"` } -func (m *GrantorEntity) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GrantorEntity.Unmarshal(m, b) -} -func (m *GrantorEntity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GrantorEntity.Marshal(b, m, deterministic) -} -func (m *GrantorEntity) XXX_Merge(src proto.Message) { - xxx_messageInfo_GrantorEntity.Merge(m, src) +func (x *GrantorEntity) Reset() { + *x = GrantorEntity{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *GrantorEntity) XXX_Size() int { - return xxx_messageInfo_GrantorEntity.Size(m) + +func (x *GrantorEntity) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GrantorEntity) XXX_DiscardUnknown() { - xxx_messageInfo_GrantorEntity.DiscardUnknown(m) + +func (*GrantorEntity) ProtoMessage() {} + +func (x *GrantorEntity) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[36] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_GrantorEntity proto.InternalMessageInfo +// Deprecated: Use GrantorEntity.ProtoReflect.Descriptor instead. +func (*GrantorEntity) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{36} +} -func (m *GrantorEntity) GetUser() *UserEntity { - if m != nil { - return m.User +func (x *GrantorEntity) GetUser() *UserEntity { + if x != nil { + return x.User } return nil } -func (m *GrantorEntity) GetPrivilege() *PrivilegeEntity { - if m != nil { - return m.Privilege +func (x *GrantorEntity) GetPrivilege() *PrivilegeEntity { + if x != nil { + return x.Privilege } return nil } type GrantPrivilegeEntity struct { - Entities []*GrantorEntity `protobuf:"bytes,1,rep,name=entities,proto3" json:"entities,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *GrantPrivilegeEntity) Reset() { *m = GrantPrivilegeEntity{} } -func (m *GrantPrivilegeEntity) String() string { return proto.CompactTextString(m) } -func (*GrantPrivilegeEntity) ProtoMessage() {} -func (*GrantPrivilegeEntity) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{36} + Entities []*GrantorEntity `protobuf:"bytes,1,rep,name=entities,proto3" json:"entities,omitempty"` } -func (m *GrantPrivilegeEntity) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GrantPrivilegeEntity.Unmarshal(m, b) -} -func (m *GrantPrivilegeEntity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GrantPrivilegeEntity.Marshal(b, m, deterministic) -} -func (m *GrantPrivilegeEntity) XXX_Merge(src proto.Message) { - xxx_messageInfo_GrantPrivilegeEntity.Merge(m, src) +func (x *GrantPrivilegeEntity) Reset() { + *x = GrantPrivilegeEntity{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *GrantPrivilegeEntity) XXX_Size() int { - return xxx_messageInfo_GrantPrivilegeEntity.Size(m) + +func (x *GrantPrivilegeEntity) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GrantPrivilegeEntity) XXX_DiscardUnknown() { - xxx_messageInfo_GrantPrivilegeEntity.DiscardUnknown(m) + +func (*GrantPrivilegeEntity) ProtoMessage() {} + +func (x *GrantPrivilegeEntity) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[37] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_GrantPrivilegeEntity proto.InternalMessageInfo +// Deprecated: Use GrantPrivilegeEntity.ProtoReflect.Descriptor instead. +func (*GrantPrivilegeEntity) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{37} +} -func (m *GrantPrivilegeEntity) GetEntities() []*GrantorEntity { - if m != nil { - return m.Entities +func (x *GrantPrivilegeEntity) GetEntities() []*GrantorEntity { + if x != nil { + return x.Entities } return nil } type GrantEntity struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // role Role *RoleEntity `protobuf:"bytes,1,opt,name=role,proto3" json:"role,omitempty"` // object @@ -3198,464 +3793,1631 @@ type GrantEntity struct { // privilege Grantor *GrantorEntity `protobuf:"bytes,4,opt,name=grantor,proto3" json:"grantor,omitempty"` // db name - DbName string `protobuf:"bytes,5,opt,name=db_name,json=dbName,proto3" json:"db_name,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + DbName string `protobuf:"bytes,5,opt,name=db_name,json=dbName,proto3" json:"db_name,omitempty"` } -func (m *GrantEntity) Reset() { *m = GrantEntity{} } -func (m *GrantEntity) String() string { return proto.CompactTextString(m) } -func (*GrantEntity) ProtoMessage() {} -func (*GrantEntity) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{37} +func (x *GrantEntity) Reset() { + *x = GrantEntity{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *GrantEntity) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GrantEntity.Unmarshal(m, b) -} -func (m *GrantEntity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GrantEntity.Marshal(b, m, deterministic) -} -func (m *GrantEntity) XXX_Merge(src proto.Message) { - xxx_messageInfo_GrantEntity.Merge(m, src) +func (x *GrantEntity) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GrantEntity) XXX_Size() int { - return xxx_messageInfo_GrantEntity.Size(m) -} -func (m *GrantEntity) XXX_DiscardUnknown() { - xxx_messageInfo_GrantEntity.DiscardUnknown(m) + +func (*GrantEntity) ProtoMessage() {} + +func (x *GrantEntity) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[38] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_GrantEntity proto.InternalMessageInfo +// Deprecated: Use GrantEntity.ProtoReflect.Descriptor instead. +func (*GrantEntity) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{38} +} -func (m *GrantEntity) GetRole() *RoleEntity { - if m != nil { - return m.Role +func (x *GrantEntity) GetRole() *RoleEntity { + if x != nil { + return x.Role } return nil } -func (m *GrantEntity) GetObject() *ObjectEntity { - if m != nil { - return m.Object +func (x *GrantEntity) GetObject() *ObjectEntity { + if x != nil { + return x.Object } return nil } -func (m *GrantEntity) GetObjectName() string { - if m != nil { - return m.ObjectName +func (x *GrantEntity) GetObjectName() string { + if x != nil { + return x.ObjectName } return "" } -func (m *GrantEntity) GetGrantor() *GrantorEntity { - if m != nil { - return m.Grantor +func (x *GrantEntity) GetGrantor() *GrantorEntity { + if x != nil { + return x.Grantor } return nil } -func (m *GrantEntity) GetDbName() string { - if m != nil { - return m.DbName +func (x *GrantEntity) GetDbName() string { + if x != nil { + return x.DbName } return "" } type UserInfo struct { - User string `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` - Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` - Roles []*RoleEntity `protobuf:"bytes,3,rep,name=roles,proto3" json:"roles,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *UserInfo) Reset() { *m = UserInfo{} } -func (m *UserInfo) String() string { return proto.CompactTextString(m) } -func (*UserInfo) ProtoMessage() {} -func (*UserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{38} + User string `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` + Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` + Roles []*RoleEntity `protobuf:"bytes,3,rep,name=roles,proto3" json:"roles,omitempty"` } -func (m *UserInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UserInfo.Unmarshal(m, b) -} -func (m *UserInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UserInfo.Marshal(b, m, deterministic) -} -func (m *UserInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_UserInfo.Merge(m, src) +func (x *UserInfo) Reset() { + *x = UserInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *UserInfo) XXX_Size() int { - return xxx_messageInfo_UserInfo.Size(m) + +func (x *UserInfo) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *UserInfo) XXX_DiscardUnknown() { - xxx_messageInfo_UserInfo.DiscardUnknown(m) + +func (*UserInfo) ProtoMessage() {} + +func (x *UserInfo) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[39] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_UserInfo proto.InternalMessageInfo +// Deprecated: Use UserInfo.ProtoReflect.Descriptor instead. +func (*UserInfo) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{39} +} -func (m *UserInfo) GetUser() string { - if m != nil { - return m.User +func (x *UserInfo) GetUser() string { + if x != nil { + return x.User } return "" } -func (m *UserInfo) GetPassword() string { - if m != nil { - return m.Password +func (x *UserInfo) GetPassword() string { + if x != nil { + return x.Password } return "" } -func (m *UserInfo) GetRoles() []*RoleEntity { - if m != nil { - return m.Roles +func (x *UserInfo) GetRoles() []*RoleEntity { + if x != nil { + return x.Roles } return nil } type RBACMeta struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // user Users []*UserInfo `protobuf:"bytes,1,rep,name=users,proto3" json:"users,omitempty"` // role Roles []*RoleEntity `protobuf:"bytes,2,rep,name=roles,proto3" json:"roles,omitempty"` // (role, object, previledge) - Grants []*GrantEntity `protobuf:"bytes,3,rep,name=grants,proto3" json:"grants,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Grants []*GrantEntity `protobuf:"bytes,3,rep,name=grants,proto3" json:"grants,omitempty"` } -func (m *RBACMeta) Reset() { *m = RBACMeta{} } -func (m *RBACMeta) String() string { return proto.CompactTextString(m) } -func (*RBACMeta) ProtoMessage() {} -func (*RBACMeta) Descriptor() ([]byte, []int) { - return fileDescriptor_65240d19de191688, []int{39} +func (x *RBACMeta) Reset() { + *x = RBACMeta{} + if protoimpl.UnsafeEnabled { + mi := &file_backup_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *RBACMeta) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_RBACMeta.Unmarshal(m, b) -} -func (m *RBACMeta) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_RBACMeta.Marshal(b, m, deterministic) +func (x *RBACMeta) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RBACMeta) XXX_Merge(src proto.Message) { - xxx_messageInfo_RBACMeta.Merge(m, src) -} -func (m *RBACMeta) XXX_Size() int { - return xxx_messageInfo_RBACMeta.Size(m) -} -func (m *RBACMeta) XXX_DiscardUnknown() { - xxx_messageInfo_RBACMeta.DiscardUnknown(m) + +func (*RBACMeta) ProtoMessage() {} + +func (x *RBACMeta) ProtoReflect() protoreflect.Message { + mi := &file_backup_proto_msgTypes[40] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_RBACMeta proto.InternalMessageInfo +// Deprecated: Use RBACMeta.ProtoReflect.Descriptor instead. +func (*RBACMeta) Descriptor() ([]byte, []int) { + return file_backup_proto_rawDescGZIP(), []int{40} +} -func (m *RBACMeta) GetUsers() []*UserInfo { - if m != nil { - return m.Users +func (x *RBACMeta) GetUsers() []*UserInfo { + if x != nil { + return x.Users } return nil } -func (m *RBACMeta) GetRoles() []*RoleEntity { - if m != nil { - return m.Roles +func (x *RBACMeta) GetRoles() []*RoleEntity { + if x != nil { + return x.Roles } return nil } -func (m *RBACMeta) GetGrants() []*GrantEntity { - if m != nil { - return m.Grants +func (x *RBACMeta) GetGrants() []*GrantEntity { + if x != nil { + return x.Grants } return nil } -func init() { - proto.RegisterEnum("milvus.proto.backup.ResponseCode", ResponseCode_name, ResponseCode_value) - proto.RegisterEnum("milvus.proto.backup.BackupTaskStateCode", BackupTaskStateCode_name, BackupTaskStateCode_value) - proto.RegisterEnum("milvus.proto.backup.RestoreTaskStateCode", RestoreTaskStateCode_name, RestoreTaskStateCode_value) - proto.RegisterEnum("milvus.proto.backup.ConsistencyLevel", ConsistencyLevel_name, ConsistencyLevel_value) - proto.RegisterEnum("milvus.proto.backup.DataType", DataType_name, DataType_value) - proto.RegisterEnum("milvus.proto.backup.FieldState", FieldState_name, FieldState_value) - proto.RegisterType((*IndexInfo)(nil), "milvus.proto.backup.IndexInfo") - proto.RegisterMapType((map[string]string)(nil), "milvus.proto.backup.IndexInfo.ParamsEntry") - proto.RegisterType((*CollectionBackupInfo)(nil), "milvus.proto.backup.CollectionBackupInfo") - proto.RegisterMapType((map[string]string)(nil), "milvus.proto.backup.CollectionBackupInfo.ChannelCheckpointsEntry") - proto.RegisterType((*PartitionBackupInfo)(nil), "milvus.proto.backup.PartitionBackupInfo") - proto.RegisterType((*SegmentBackupInfo)(nil), "milvus.proto.backup.SegmentBackupInfo") - proto.RegisterType((*BackupInfo)(nil), "milvus.proto.backup.BackupInfo") - proto.RegisterType((*CollectionLevelBackupInfo)(nil), "milvus.proto.backup.CollectionLevelBackupInfo") - proto.RegisterType((*PartitionLevelBackupInfo)(nil), "milvus.proto.backup.PartitionLevelBackupInfo") - proto.RegisterType((*SegmentLevelBackupInfo)(nil), "milvus.proto.backup.SegmentLevelBackupInfo") - proto.RegisterType((*CreateBackupRequest)(nil), "milvus.proto.backup.CreateBackupRequest") - proto.RegisterType((*BackupInfoResponse)(nil), "milvus.proto.backup.BackupInfoResponse") - proto.RegisterType((*GetBackupRequest)(nil), "milvus.proto.backup.GetBackupRequest") - proto.RegisterType((*ListBackupsRequest)(nil), "milvus.proto.backup.ListBackupsRequest") - proto.RegisterType((*ListBackupsResponse)(nil), "milvus.proto.backup.ListBackupsResponse") - proto.RegisterType((*DeleteBackupRequest)(nil), "milvus.proto.backup.DeleteBackupRequest") - proto.RegisterType((*DeleteBackupResponse)(nil), "milvus.proto.backup.DeleteBackupResponse") - proto.RegisterType((*RestoreBackupRequest)(nil), "milvus.proto.backup.RestoreBackupRequest") - proto.RegisterMapType((map[string]string)(nil), "milvus.proto.backup.RestoreBackupRequest.CollectionRenamesEntry") - proto.RegisterType((*RestorePartitionTask)(nil), "milvus.proto.backup.RestorePartitionTask") - proto.RegisterType((*RestoreCollectionTask)(nil), "milvus.proto.backup.RestoreCollectionTask") - proto.RegisterType((*RestoreBackupTask)(nil), "milvus.proto.backup.RestoreBackupTask") - proto.RegisterType((*RestoreBackupResponse)(nil), "milvus.proto.backup.RestoreBackupResponse") - proto.RegisterType((*GetRestoreStateRequest)(nil), "milvus.proto.backup.GetRestoreStateRequest") - proto.RegisterType((*FieldBinlog)(nil), "milvus.proto.backup.FieldBinlog") - proto.RegisterType((*Binlog)(nil), "milvus.proto.backup.Binlog") - proto.RegisterType((*KeyValuePair)(nil), "milvus.proto.backup.KeyValuePair") - proto.RegisterType((*ValueField)(nil), "milvus.proto.backup.ValueField") - proto.RegisterType((*FieldSchema)(nil), "milvus.proto.backup.FieldSchema") - proto.RegisterType((*CollectionSchema)(nil), "milvus.proto.backup.CollectionSchema") - proto.RegisterType((*CheckRequest)(nil), "milvus.proto.backup.CheckRequest") - proto.RegisterType((*CheckResponse)(nil), "milvus.proto.backup.CheckResponse") - proto.RegisterType((*MsgPosition)(nil), "milvus.proto.backup.MsgPosition") - proto.RegisterType((*ChannelPosition)(nil), "milvus.proto.backup.ChannelPosition") - proto.RegisterType((*RoleEntity)(nil), "milvus.proto.backup.RoleEntity") - proto.RegisterType((*UserEntity)(nil), "milvus.proto.backup.UserEntity") - proto.RegisterType((*ObjectEntity)(nil), "milvus.proto.backup.ObjectEntity") - proto.RegisterType((*PrivilegeEntity)(nil), "milvus.proto.backup.PrivilegeEntity") - proto.RegisterType((*GrantorEntity)(nil), "milvus.proto.backup.GrantorEntity") - proto.RegisterType((*GrantPrivilegeEntity)(nil), "milvus.proto.backup.GrantPrivilegeEntity") - proto.RegisterType((*GrantEntity)(nil), "milvus.proto.backup.GrantEntity") - proto.RegisterType((*UserInfo)(nil), "milvus.proto.backup.UserInfo") - proto.RegisterType((*RBACMeta)(nil), "milvus.proto.backup.RBACMeta") -} - -func init() { proto.RegisterFile("backup.proto", fileDescriptor_65240d19de191688) } - -var fileDescriptor_65240d19de191688 = []byte{ - // 3420 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x3a, 0x4d, 0x73, 0x1b, 0xc7, - 0x72, 0xc4, 0x37, 0xd0, 0x0b, 0x80, 0xcb, 0x21, 0x45, 0x41, 0xd4, 0xd3, 0x13, 0xb5, 0xb1, 0xf4, - 0x28, 0xbd, 0x0a, 0xa5, 0x47, 0x3d, 0x2b, 0xb6, 0xea, 0x3d, 0x3f, 0xf3, 0x4b, 0x12, 0x6c, 0x89, - 0x62, 0x96, 0x14, 0x4b, 0xe5, 0x7c, 0x6c, 0x2d, 0x76, 0x87, 0xe0, 0x86, 0x8b, 0x1d, 0x78, 0x67, - 0x21, 0x09, 0xaa, 0x4a, 0x2a, 0xb7, 0xf8, 0x98, 0x43, 0xaa, 0x52, 0x95, 0x7f, 0x90, 0x9b, 0x73, - 0x70, 0x0e, 0xf9, 0x07, 0x49, 0xe5, 0x9a, 0x3f, 0x90, 0x4b, 0x8e, 0x3e, 0xa5, 0x72, 0x4d, 0x4d, - 0xcf, 0xec, 0x07, 0xc0, 0x25, 0x05, 0xa6, 0x5c, 0x71, 0x9c, 0xdb, 0x4e, 0x4f, 0x77, 0x4f, 0x4f, - 0x7f, 0x4d, 0xcf, 0xf4, 0x42, 0xb3, 0x67, 0x3b, 0xa7, 0xa3, 0xe1, 0xfa, 0x30, 0x64, 0x11, 0x23, - 0x8b, 0x03, 0xcf, 0x7f, 0x33, 0xe2, 0x72, 0xb4, 0x2e, 0xa7, 0x56, 0x7e, 0xd6, 0x67, 0xac, 0xef, - 0xd3, 0xfb, 0x08, 0xec, 0x8d, 0x8e, 0xef, 0xf3, 0x28, 0x1c, 0x39, 0x91, 0x44, 0x32, 0xfe, 0xa3, - 0x00, 0x8d, 0x6e, 0xe0, 0xd2, 0x77, 0xdd, 0xe0, 0x98, 0x91, 0x1b, 0x00, 0xc7, 0x1e, 0xf5, 0x5d, - 0x2b, 0xb0, 0x07, 0xb4, 0x53, 0x58, 0x2d, 0xac, 0x35, 0xcc, 0x06, 0x42, 0xf6, 0xec, 0x01, 0x15, - 0xd3, 0x9e, 0xc0, 0x95, 0xd3, 0x45, 0x39, 0x8d, 0x90, 0xc9, 0xe9, 0x68, 0x3c, 0xa4, 0x9d, 0x52, - 0x66, 0xfa, 0x70, 0x3c, 0xa4, 0x64, 0x0b, 0xaa, 0x43, 0x3b, 0xb4, 0x07, 0xbc, 0x53, 0x5e, 0x2d, - 0xad, 0x69, 0x1b, 0xf7, 0xd6, 0x73, 0xc4, 0x5d, 0x4f, 0x84, 0x59, 0xdf, 0x47, 0xe4, 0xdd, 0x20, - 0x0a, 0xc7, 0xa6, 0xa2, 0x5c, 0xf9, 0x14, 0xb4, 0x0c, 0x98, 0xe8, 0x50, 0x3a, 0xa5, 0x63, 0x25, - 0xa8, 0xf8, 0x24, 0x4b, 0x50, 0x79, 0x63, 0xfb, 0xa3, 0x58, 0x3a, 0x39, 0x78, 0x5c, 0xfc, 0xa4, - 0x60, 0xfc, 0x5b, 0x1d, 0x96, 0xb6, 0x99, 0xef, 0x53, 0x27, 0xf2, 0x58, 0xb0, 0x85, 0xab, 0xe1, - 0xa6, 0xdb, 0x50, 0xf4, 0x5c, 0xc5, 0xa3, 0xe8, 0xb9, 0xe4, 0x29, 0x00, 0x8f, 0xec, 0x88, 0x5a, - 0x0e, 0x73, 0x25, 0x9f, 0xf6, 0xc6, 0x5a, 0xae, 0xac, 0x92, 0xc9, 0xa1, 0xcd, 0x4f, 0x0f, 0x04, - 0xc1, 0x36, 0x73, 0xa9, 0xd9, 0xe0, 0xf1, 0x27, 0x31, 0xa0, 0x49, 0xc3, 0x90, 0x85, 0x2f, 0x28, - 0xe7, 0x76, 0x3f, 0xd6, 0xc8, 0x04, 0x4c, 0xe8, 0x8c, 0x47, 0x76, 0x18, 0x59, 0x91, 0x37, 0xa0, - 0x9d, 0xf2, 0x6a, 0x61, 0xad, 0x84, 0x2c, 0xc2, 0xe8, 0xd0, 0x1b, 0x50, 0x72, 0x0d, 0xea, 0x34, - 0x70, 0xe5, 0x64, 0x05, 0x27, 0x6b, 0x34, 0x70, 0x71, 0x6a, 0x05, 0xea, 0xc3, 0x90, 0xf5, 0x43, - 0xca, 0x79, 0xa7, 0xba, 0x5a, 0x58, 0xab, 0x98, 0xc9, 0x98, 0xfc, 0x1e, 0xb4, 0x9c, 0x64, 0xab, - 0x96, 0xe7, 0x76, 0x6a, 0x48, 0xdb, 0x4c, 0x81, 0x5d, 0x97, 0x5c, 0x85, 0x9a, 0xdb, 0x93, 0xa6, - 0xac, 0xa3, 0x64, 0x55, 0xb7, 0x87, 0x76, 0xfc, 0x05, 0xcc, 0x67, 0xa8, 0x11, 0xa1, 0x81, 0x08, - 0xed, 0x14, 0x8c, 0x88, 0xbf, 0x85, 0x2a, 0x77, 0x4e, 0xe8, 0xc0, 0xee, 0xc0, 0x6a, 0x61, 0x4d, - 0xdb, 0xb8, 0x9d, 0xab, 0xa5, 0x54, 0xe9, 0x07, 0x88, 0x6c, 0x2a, 0x22, 0xdc, 0xfb, 0x89, 0x1d, - 0xba, 0xdc, 0x0a, 0x46, 0x83, 0x8e, 0x86, 0x7b, 0x68, 0x48, 0xc8, 0xde, 0x68, 0x40, 0x4c, 0x58, - 0x70, 0x58, 0xc0, 0x3d, 0x1e, 0xd1, 0xc0, 0x19, 0x5b, 0x3e, 0x7d, 0x43, 0xfd, 0x4e, 0x13, 0xcd, - 0x71, 0xde, 0x42, 0x09, 0xf6, 0x73, 0x81, 0x6c, 0xea, 0xce, 0x14, 0x84, 0xbc, 0x82, 0x85, 0xa1, - 0x1d, 0x46, 0x1e, 0xee, 0x4c, 0x92, 0xf1, 0x4e, 0x0b, 0xdd, 0x31, 0xdf, 0xc4, 0xfb, 0x31, 0x76, - 0xea, 0x30, 0xa6, 0x3e, 0x9c, 0x04, 0x72, 0x72, 0x17, 0x74, 0x89, 0x8f, 0x96, 0xe2, 0x91, 0x3d, - 0x18, 0x76, 0xda, 0xab, 0x85, 0xb5, 0xb2, 0x39, 0x2f, 0xe1, 0x87, 0x31, 0x98, 0x10, 0x28, 0x73, - 0xef, 0x3d, 0xed, 0xcc, 0xa3, 0x45, 0xf0, 0x9b, 0x5c, 0x87, 0xc6, 0x89, 0xcd, 0x2d, 0x0c, 0x95, - 0x8e, 0xbe, 0x5a, 0x58, 0xab, 0x9b, 0xf5, 0x13, 0x9b, 0x63, 0x28, 0x90, 0xdf, 0x81, 0x26, 0xa3, - 0xca, 0x0b, 0x8e, 0x19, 0xef, 0x2c, 0xa0, 0xb0, 0x3f, 0xbf, 0x38, 0x76, 0x4c, 0x19, 0x88, 0xe2, - 0x93, 0x0b, 0x35, 0xfb, 0xcc, 0x76, 0x2d, 0x74, 0xcc, 0x0e, 0x91, 0x61, 0x29, 0x20, 0xe8, 0xb4, - 0xe4, 0x31, 0x5c, 0x53, 0xb2, 0x0f, 0x4f, 0xc6, 0xdc, 0x73, 0x6c, 0x3f, 0xb3, 0x89, 0x45, 0xdc, - 0xc4, 0x55, 0x89, 0xb0, 0xaf, 0xe6, 0xd3, 0xcd, 0x84, 0xb0, 0xe8, 0x9c, 0xd8, 0x41, 0x40, 0x7d, - 0xcb, 0x39, 0xa1, 0xce, 0xe9, 0x90, 0x79, 0x41, 0xc4, 0x3b, 0x4b, 0x28, 0xe3, 0xe6, 0x07, 0xbc, - 0x21, 0xd5, 0xe8, 0xfa, 0xb6, 0x64, 0xb2, 0x9d, 0xf2, 0x90, 0x61, 0x4f, 0x9c, 0x33, 0x13, 0xe4, - 0x29, 0x68, 0xfe, 0x03, 0x8b, 0xd3, 0xfe, 0x80, 0x8a, 0xb5, 0xae, 0xe0, 0x5a, 0x77, 0x72, 0xd7, - 0x3a, 0x90, 0x48, 0x19, 0xd3, 0x81, 0xff, 0x40, 0x01, 0xf9, 0xca, 0x2e, 0x5c, 0x3d, 0x67, 0xdd, - 0x4b, 0xe5, 0x95, 0x6f, 0x8a, 0xb0, 0x98, 0xe3, 0x25, 0xe4, 0x16, 0x34, 0x53, 0x57, 0x53, 0x09, - 0xa6, 0x64, 0x6a, 0x09, 0xac, 0xeb, 0x92, 0xdb, 0xd0, 0x4e, 0x51, 0x32, 0x39, 0xb5, 0x95, 0x40, - 0x31, 0xcc, 0xce, 0x44, 0x73, 0x29, 0x27, 0x9a, 0x5f, 0xc2, 0xbc, 0xd2, 0x49, 0xe2, 0xd7, 0xe5, - 0x4b, 0xa9, 0xa6, 0xcd, 0xb3, 0x20, 0x9e, 0x38, 0x6a, 0x25, 0xe3, 0xa8, 0x93, 0xae, 0x54, 0x9d, - 0x72, 0x25, 0xe3, 0x1f, 0x4b, 0xb0, 0x70, 0x86, 0x31, 0x86, 0xb9, 0x92, 0x2c, 0x51, 0x43, 0x43, - 0x41, 0xba, 0xee, 0xd9, 0xdd, 0x15, 0x73, 0x76, 0x37, 0xad, 0xcc, 0xd2, 0x59, 0x65, 0xfe, 0x1c, - 0xb4, 0x60, 0x34, 0xb0, 0xd8, 0xb1, 0x15, 0xb2, 0xb7, 0x3c, 0x4e, 0xa5, 0xc1, 0x68, 0xf0, 0xf2, - 0xd8, 0x64, 0x6f, 0x39, 0x79, 0x0c, 0xb5, 0x9e, 0x17, 0xf8, 0xac, 0xcf, 0x3b, 0x15, 0x54, 0xcc, - 0x6a, 0xae, 0x62, 0x9e, 0x88, 0xd3, 0x6e, 0x0b, 0x11, 0xcd, 0x98, 0x80, 0x7c, 0x06, 0x98, 0xd6, - 0x39, 0x52, 0x57, 0x67, 0xa4, 0x4e, 0x49, 0x04, 0xbd, 0x4b, 0xfd, 0xc8, 0x46, 0xfa, 0xda, 0xac, - 0xf4, 0x09, 0x49, 0x62, 0x8b, 0x7a, 0xc6, 0x16, 0xd7, 0xa0, 0xde, 0x0f, 0xd9, 0x68, 0x28, 0xd4, - 0xd1, 0x90, 0x47, 0x03, 0x8e, 0xbb, 0xae, 0x38, 0x1a, 0x24, 0x3f, 0xea, 0x62, 0x66, 0xae, 0x9b, - 0xc9, 0x98, 0x2c, 0x42, 0xc5, 0xe3, 0x96, 0xff, 0x00, 0xf3, 0x6d, 0xdd, 0x2c, 0x7b, 0xfc, 0xf9, - 0x03, 0xe3, 0xfb, 0x12, 0xc0, 0xff, 0xef, 0x13, 0x91, 0x40, 0x19, 0x03, 0xac, 0x86, 0x2b, 0xe2, - 0x77, 0x6e, 0xd6, 0xae, 0xe7, 0x67, 0xed, 0xd7, 0x40, 0x32, 0x4e, 0x1a, 0x07, 0x58, 0x03, 0x2d, - 0x79, 0x77, 0xe6, 0x3c, 0x67, 0x2e, 0x38, 0x53, 0xd0, 0xd4, 0xb4, 0x90, 0x31, 0xed, 0x6d, 0x68, - 0x4b, 0x96, 0xd6, 0x1b, 0x1a, 0x72, 0x8f, 0x05, 0x68, 0xac, 0x86, 0xd9, 0x92, 0xd0, 0x23, 0x09, - 0x24, 0x8f, 0xa1, 0x11, 0xf6, 0x6c, 0xc7, 0x1a, 0xd0, 0xc8, 0xc6, 0x83, 0x51, 0xdb, 0xb8, 0x91, - 0x2b, 0x8b, 0xb9, 0xb5, 0xb9, 0xfd, 0x82, 0x46, 0xb6, 0x59, 0x17, 0xf8, 0xe2, 0xcb, 0xf8, 0x63, - 0xb8, 0x96, 0x4a, 0x88, 0x67, 0x63, 0xc6, 0xfe, 0xbf, 0x83, 0x8a, 0x3c, 0x6c, 0x0a, 0x97, 0xdd, - 0xa0, 0xa4, 0x33, 0xbe, 0x82, 0x4e, 0x92, 0x12, 0xa7, 0x99, 0x7f, 0x36, 0xc9, 0x7c, 0xf6, 0x63, - 0x57, 0xf1, 0x3e, 0x82, 0x65, 0x95, 0x63, 0xa6, 0x39, 0xff, 0x66, 0x92, 0xf3, 0xac, 0x89, 0x4f, - 0xf1, 0xfd, 0xdb, 0x12, 0x2c, 0x6e, 0x87, 0xd4, 0x8e, 0xa8, 0x9c, 0x33, 0xe9, 0xd7, 0x23, 0xca, - 0x23, 0xf2, 0x33, 0x68, 0x84, 0xf2, 0xb3, 0x1b, 0xc7, 0x44, 0x0a, 0x20, 0x37, 0x41, 0x53, 0x3e, - 0x94, 0xc9, 0xdf, 0x20, 0x41, 0x7b, 0xca, 0xc9, 0xa6, 0x8a, 0x29, 0xde, 0x29, 0xad, 0x96, 0xd6, - 0x1a, 0xe6, 0xfc, 0x64, 0x35, 0xc5, 0xc5, 0x19, 0x63, 0xf3, 0x71, 0xe0, 0xa0, 0xd3, 0xd7, 0x4d, - 0x39, 0x20, 0xbf, 0x85, 0xb6, 0xdb, 0xb3, 0x52, 0x5c, 0x8e, 0x6e, 0xaf, 0x6d, 0x2c, 0xaf, 0xcb, - 0xc2, 0x7e, 0x3d, 0x2e, 0xec, 0xd7, 0x8f, 0xc4, 0x99, 0x64, 0xb6, 0xdc, 0x5e, 0x6a, 0x1a, 0x64, - 0x7a, 0xcc, 0x42, 0x47, 0x66, 0xeb, 0xba, 0x29, 0x07, 0xa2, 0xe2, 0x10, 0x5e, 0x63, 0xb1, 0xc0, - 0x1f, 0x63, 0x4c, 0xd4, 0xcd, 0xba, 0x00, 0xbc, 0x0c, 0xfc, 0x31, 0xb9, 0x03, 0xf3, 0x7d, 0xc7, - 0x1a, 0xda, 0x23, 0x4e, 0x2d, 0x1a, 0xd8, 0x3d, 0x5f, 0x26, 0x9e, 0xba, 0xd9, 0xea, 0x3b, 0xfb, - 0x02, 0xba, 0x8b, 0x40, 0xb2, 0x06, 0x7a, 0x82, 0xc7, 0xa9, 0xc3, 0x02, 0x97, 0x63, 0x26, 0xaa, - 0x98, 0x6d, 0x85, 0x78, 0x20, 0xa1, 0x13, 0x98, 0xb6, 0xeb, 0x62, 0x84, 0x82, 0x2c, 0x29, 0x15, - 0xe6, 0xa6, 0x84, 0x8a, 0x70, 0x10, 0x3e, 0x1a, 0x67, 0x27, 0xf1, 0x6d, 0x7c, 0x5b, 0x00, 0x92, - 0xb1, 0x17, 0xe5, 0x43, 0x16, 0x70, 0xfa, 0x01, 0xc3, 0x7c, 0x0c, 0xe5, 0x4c, 0xb6, 0xba, 0x95, - 0x1f, 0x17, 0x8a, 0x15, 0xa6, 0x29, 0x44, 0x17, 0x27, 0xff, 0x80, 0xf7, 0x55, 0x62, 0x12, 0x9f, - 0xe4, 0x21, 0x94, 0x5d, 0x3b, 0xb2, 0xd1, 0x28, 0xda, 0xc6, 0xcd, 0x0b, 0xd2, 0x1e, 0x4a, 0x87, - 0xc8, 0xc6, 0xbf, 0x14, 0x40, 0x7f, 0x4a, 0xa3, 0x1f, 0xd4, 0x93, 0xae, 0x43, 0x43, 0x21, 0xa8, - 0x03, 0xb0, 0x11, 0xa7, 0x75, 0x45, 0x3d, 0x72, 0x4e, 0x69, 0x24, 0xa9, 0xcb, 0x8a, 0x1a, 0x41, - 0x48, 0x4d, 0xa0, 0x3c, 0xb4, 0xa3, 0x13, 0x74, 0x9e, 0x86, 0x89, 0xdf, 0x22, 0xcf, 0xbc, 0xf5, - 0xa2, 0x13, 0x36, 0x8a, 0x2c, 0x97, 0x46, 0xb6, 0xe7, 0x2b, 0x27, 0x69, 0x29, 0xe8, 0x0e, 0x02, - 0x8d, 0x3f, 0x02, 0xf2, 0xdc, 0xe3, 0x71, 0x61, 0x30, 0xdb, 0x6e, 0x72, 0xee, 0x10, 0xc5, 0xbc, - 0x3b, 0x84, 0xf1, 0x0f, 0x05, 0x58, 0x9c, 0xe0, 0xfe, 0x63, 0x59, 0xb7, 0x34, 0xbb, 0x75, 0x0f, - 0x61, 0x71, 0x87, 0xfa, 0xf4, 0x87, 0xcd, 0x14, 0xc6, 0x9f, 0xc3, 0xd2, 0x24, 0xd7, 0xff, 0x55, - 0x4d, 0x18, 0xff, 0x5e, 0x85, 0x25, 0x93, 0xf2, 0x88, 0x85, 0x3f, 0x5a, 0x02, 0xfc, 0x25, 0x64, - 0x0e, 0x48, 0x8b, 0x8f, 0x8e, 0x8f, 0xbd, 0x77, 0xca, 0x95, 0x33, 0x3c, 0x0e, 0x10, 0x4e, 0xd8, - 0xc4, 0x91, 0x1c, 0x52, 0xc9, 0x59, 0x96, 0x76, 0x9f, 0x9f, 0xa7, 0x86, 0x33, 0xbb, 0xcb, 0x1c, - 0x63, 0xa6, 0x64, 0x21, 0x6f, 0x1e, 0x19, 0x41, 0x14, 0x3c, 0x4d, 0xcf, 0xd5, 0x6c, 0x7a, 0x9e, - 0x0a, 0xbc, 0xda, 0xb9, 0x81, 0x57, 0xcf, 0x04, 0xde, 0xd9, 0x9c, 0xde, 0xb8, 0x4c, 0x4e, 0x5f, - 0x81, 0x24, 0x59, 0xc7, 0xf5, 0x5d, 0x92, 0xbc, 0x0d, 0x68, 0x86, 0x72, 0x9f, 0x78, 0x1b, 0x54, - 0x89, 0x74, 0x02, 0x26, 0x70, 0x44, 0xca, 0x1d, 0x45, 0x4c, 0xe2, 0x34, 0x25, 0x4e, 0x16, 0x46, - 0x1e, 0xc0, 0xa2, 0x1b, 0xb2, 0xe1, 0xee, 0x3b, 0x8f, 0x47, 0xe9, 0xda, 0x9d, 0x16, 0xa2, 0xe6, - 0x4d, 0x91, 0x3b, 0xd0, 0x4e, 0xc0, 0x92, 0x6f, 0x1b, 0x91, 0xa7, 0xa0, 0x64, 0x03, 0x96, 0xf8, - 0xa9, 0x37, 0x94, 0x67, 0x6d, 0x86, 0xf5, 0x3c, 0x62, 0xe7, 0xce, 0xa9, 0x8a, 0x54, 0x4f, 0x2a, - 0xd2, 0xc7, 0xd0, 0x11, 0x78, 0xdd, 0xc1, 0x90, 0x85, 0xd1, 0x8e, 0xc7, 0x4f, 0xff, 0x70, 0xc4, - 0x22, 0x1b, 0xef, 0x71, 0x9d, 0x05, 0xe4, 0x73, 0xee, 0x7c, 0x72, 0xc4, 0x90, 0xf4, 0x88, 0x21, - 0xab, 0xa0, 0x0d, 0xec, 0x77, 0x07, 0x27, 0x76, 0xe8, 0xee, 0x8d, 0x06, 0x78, 0xed, 0xad, 0x98, - 0x59, 0xd0, 0xca, 0x0e, 0x2c, 0xe7, 0xbb, 0xca, 0xa5, 0x2e, 0x8b, 0xdf, 0x15, 0x93, 0x20, 0x4b, - 0x4a, 0x1c, 0x51, 0x2d, 0x9f, 0x29, 0xb9, 0x9f, 0xe5, 0x94, 0xdc, 0x77, 0x2f, 0xf2, 0xea, 0xff, - 0x83, 0x35, 0x77, 0x17, 0xf0, 0x82, 0xa6, 0xca, 0x65, 0x0c, 0x8d, 0xcb, 0xd4, 0x7b, 0x20, 0x88, - 0xe5, 0xd8, 0xf8, 0xab, 0x1a, 0x5c, 0x51, 0x1b, 0x4d, 0xad, 0xf0, 0x93, 0x56, 0xdc, 0x17, 0xa0, - 0x89, 0xf8, 0x8f, 0x95, 0x53, 0x45, 0xe5, 0x5c, 0xa2, 0xd2, 0x06, 0x41, 0x2d, 0xc7, 0xe4, 0xd7, - 0xb0, 0x1c, 0xd9, 0x61, 0x9f, 0x46, 0xd6, 0xf4, 0x99, 0x2b, 0xd3, 0xd1, 0x92, 0x9c, 0xdd, 0x9e, - 0x7c, 0xbd, 0xb3, 0xe1, 0x6a, 0x7a, 0xa7, 0x56, 0xf9, 0xc1, 0x8a, 0x6c, 0x7e, 0xca, 0x3b, 0xf5, - 0x0b, 0xea, 0xfe, 0x3c, 0xf7, 0x35, 0xaf, 0x24, 0x9c, 0x32, 0x5a, 0xc5, 0x77, 0x48, 0xc5, 0xd8, - 0xb5, 0xf0, 0x96, 0x23, 0x2f, 0xaa, 0x71, 0x36, 0x72, 0x0f, 0xc4, 0x6d, 0xe7, 0x0e, 0xcc, 0x47, - 0x2c, 0x11, 0x20, 0x73, 0x19, 0x6a, 0x45, 0x4c, 0x71, 0x43, 0xbc, 0xac, 0xab, 0x69, 0x53, 0xae, - 0xf6, 0x11, 0xb4, 0x95, 0x06, 0xe2, 0x27, 0xcd, 0xa6, 0xb4, 0x96, 0x84, 0xee, 0xc8, 0x87, 0xcd, - 0x6c, 0xde, 0x6c, 0x7d, 0x20, 0x6f, 0xb6, 0x67, 0xc8, 0x9b, 0xf3, 0xb3, 0xe7, 0x4d, 0xfd, 0x32, - 0x79, 0x73, 0xe1, 0x52, 0x79, 0x93, 0x5c, 0x90, 0x37, 0xd7, 0x81, 0x08, 0xf8, 0x54, 0x86, 0x5c, - 0x44, 0x8a, 0x9c, 0x99, 0xe9, 0x3c, 0xb8, 0x74, 0x26, 0x0f, 0x1a, 0x7f, 0x57, 0x82, 0x85, 0x89, - 0x83, 0xf4, 0x27, 0x1d, 0x85, 0x2e, 0x74, 0x26, 0x8a, 0x88, 0x6c, 0x10, 0x54, 0x2f, 0xe8, 0x52, - 0xe4, 0xe6, 0x22, 0x73, 0x39, 0x5b, 0x34, 0x5c, 0x14, 0x06, 0xb5, 0xd9, 0xc2, 0xa0, 0xfe, 0xa1, - 0x30, 0x68, 0x4c, 0x86, 0x81, 0xf1, 0x4f, 0x85, 0x24, 0x4d, 0xfe, 0x28, 0x45, 0x24, 0x79, 0x3c, - 0x71, 0x59, 0xba, 0xf3, 0xe1, 0x32, 0x0c, 0xf5, 0x26, 0xab, 0xea, 0x27, 0xb0, 0xfc, 0x94, 0x46, - 0xf1, 0x56, 0x85, 0x03, 0xcc, 0x56, 0x81, 0x4a, 0xdf, 0x2b, 0xc6, 0xbe, 0x67, 0xfc, 0x29, 0x68, - 0x99, 0x67, 0x34, 0xd2, 0x81, 0x1a, 0x76, 0xb0, 0xba, 0x3b, 0xea, 0xed, 0x31, 0x1e, 0x92, 0x8f, - 0xd3, 0x17, 0xc1, 0x22, 0xda, 0xfa, 0x7a, 0x7e, 0xf9, 0x3f, 0xf9, 0x18, 0x68, 0xfc, 0x7d, 0x01, - 0xaa, 0x8a, 0xf7, 0x4d, 0xd0, 0x68, 0x10, 0x85, 0x1e, 0x95, 0x2d, 0x0c, 0xc9, 0x1f, 0x14, 0x68, - 0x6f, 0x34, 0x10, 0x37, 0xac, 0xe4, 0x6d, 0xc9, 0x3a, 0x0e, 0xd9, 0x00, 0xe5, 0x2c, 0x9b, 0xad, - 0x04, 0xfa, 0x24, 0x64, 0x03, 0x72, 0x0b, 0x9a, 0x29, 0x5a, 0xc4, 0x50, 0xa3, 0x65, 0x53, 0x4b, - 0x60, 0x87, 0x4c, 0x38, 0xb1, 0xcf, 0xfa, 0x16, 0x96, 0x92, 0xb2, 0x24, 0xae, 0xf9, 0xac, 0xbf, - 0x2f, 0xaa, 0x49, 0x35, 0x95, 0x79, 0xad, 0x15, 0x53, 0xc2, 0x59, 0x8c, 0x47, 0xd0, 0xfc, 0x92, - 0x8e, 0xb1, 0x88, 0xdc, 0xb7, 0xbd, 0x70, 0xd6, 0x5a, 0xc5, 0xf8, 0xaf, 0x02, 0x00, 0x52, 0xa1, - 0x26, 0xc9, 0x0d, 0x68, 0xf4, 0x18, 0xf3, 0x2d, 0xb4, 0xad, 0x20, 0xae, 0x3f, 0x9b, 0x33, 0xeb, - 0x02, 0xb4, 0x63, 0x47, 0x36, 0xb9, 0x0e, 0x75, 0x2f, 0x88, 0xe4, 0xac, 0x60, 0x53, 0x79, 0x36, - 0x67, 0xd6, 0xbc, 0x20, 0xc2, 0xc9, 0x1b, 0xd0, 0xf0, 0x59, 0xd0, 0x97, 0xb3, 0xf8, 0x6e, 0x2b, - 0x68, 0x05, 0x08, 0xa7, 0x6f, 0x02, 0x1c, 0xfb, 0xcc, 0x56, 0xd4, 0x62, 0x67, 0xc5, 0x67, 0x73, - 0x66, 0x03, 0x61, 0x88, 0x70, 0x0b, 0x34, 0x97, 0x8d, 0x7a, 0x3e, 0x95, 0x18, 0x62, 0x83, 0x85, - 0x67, 0x73, 0x26, 0x48, 0x60, 0x8c, 0xc2, 0xa3, 0xd0, 0x8b, 0x17, 0xc1, 0x77, 0x69, 0x81, 0x22, - 0x81, 0xf1, 0x32, 0xbd, 0x71, 0x44, 0xb9, 0xc4, 0x10, 0xf1, 0xd7, 0x14, 0xcb, 0x20, 0x4c, 0x20, - 0x6c, 0x55, 0xa5, 0xe7, 0x1a, 0xdf, 0x55, 0x94, 0xfb, 0xc8, 0x66, 0xd5, 0x05, 0xee, 0x13, 0x3f, - 0x29, 0x16, 0x33, 0x4f, 0x8a, 0x1f, 0x41, 0xdb, 0xe3, 0xd6, 0x30, 0xf4, 0x06, 0x76, 0x38, 0xb6, - 0x84, 0xaa, 0x4b, 0xf2, 0x8c, 0xf0, 0xf8, 0xbe, 0x04, 0x7e, 0x49, 0xc7, 0x22, 0xcb, 0xba, 0x94, - 0x3b, 0xa1, 0x37, 0xc4, 0x04, 0x2e, 0xcd, 0x99, 0x05, 0x91, 0xc7, 0xd0, 0x10, 0xd2, 0xc8, 0x4e, - 0x6a, 0x05, 0xa3, 0x32, 0xff, 0x69, 0x4f, 0xc8, 0x7e, 0x38, 0x1e, 0x52, 0xb3, 0xee, 0xaa, 0x2f, - 0xb2, 0x05, 0x9a, 0x20, 0xb3, 0x54, 0xb3, 0x55, 0xa6, 0xb1, 0xfc, 0x98, 0xce, 0xfa, 0x86, 0x09, - 0x82, 0x4a, 0x76, 0x57, 0xc9, 0x0e, 0x34, 0x65, 0xd3, 0x49, 0x31, 0xa9, 0xcd, 0xca, 0x44, 0xf6, - 0xaa, 0x14, 0x97, 0x65, 0xa8, 0xda, 0xe2, 0x60, 0xdc, 0x51, 0xef, 0x47, 0x6a, 0x44, 0x3e, 0x86, - 0x8a, 0xec, 0x20, 0x34, 0x70, 0x67, 0x37, 0xcf, 0x7f, 0x0a, 0x97, 0x69, 0x40, 0x62, 0x93, 0xcf, - 0xa1, 0x49, 0x7d, 0x8a, 0x8d, 0x04, 0xd4, 0x0b, 0xcc, 0xa2, 0x17, 0x4d, 0x91, 0xa0, 0x6a, 0x76, - 0xa0, 0xe5, 0xd2, 0x63, 0x7b, 0xe4, 0x47, 0x96, 0x74, 0x7a, 0xed, 0x82, 0x47, 0x9d, 0xd4, 0xff, - 0xcd, 0xa6, 0xa2, 0x42, 0x10, 0xf6, 0xb9, 0xb9, 0xe5, 0x8e, 0x03, 0x7b, 0xe0, 0x39, 0xea, 0xf2, - 0xd4, 0xf0, 0xf8, 0x8e, 0x04, 0x90, 0x35, 0xd0, 0x85, 0x0f, 0x24, 0xa5, 0x95, 0xf0, 0x02, 0x59, - 0x6d, 0xb4, 0x3d, 0x9e, 0x94, 0x4d, 0xc2, 0x0f, 0x56, 0xa0, 0x1e, 0x8c, 0x7c, 0x1f, 0x5f, 0xd8, - 0x64, 0xbd, 0x91, 0x8c, 0xc9, 0x3a, 0x2c, 0x4e, 0x88, 0x6a, 0xa1, 0x6c, 0x58, 0x72, 0x34, 0xcc, - 0x85, 0xac, 0x3c, 0xfb, 0xd8, 0xc8, 0xff, 0xd7, 0x02, 0xe8, 0xd3, 0x9d, 0xd6, 0xc4, 0x45, 0x0b, - 0x19, 0x17, 0x9d, 0x72, 0xbe, 0xe2, 0x59, 0xe7, 0x4b, 0xcd, 0x56, 0x9a, 0x30, 0xdb, 0x27, 0x50, - 0x45, 0xdf, 0x8f, 0x3b, 0x4b, 0x17, 0xb4, 0x30, 0xe2, 0x4e, 0xaf, 0xc4, 0x27, 0x0f, 0x60, 0x49, - 0x3e, 0x24, 0xc6, 0x5a, 0xb3, 0x70, 0x02, 0x3d, 0xbb, 0x6e, 0x12, 0x39, 0xa7, 0xf4, 0x87, 0xf4, - 0x46, 0x1b, 0x9a, 0x58, 0x91, 0xa8, 0x23, 0xc0, 0x78, 0x0d, 0x2d, 0x35, 0x56, 0x07, 0x5a, 0x7c, - 0x64, 0x15, 0xfe, 0x47, 0x47, 0x56, 0x31, 0x7d, 0xf7, 0xf8, 0xcb, 0x02, 0x68, 0x2f, 0x78, 0x7f, - 0x9f, 0x71, 0xb4, 0x8b, 0xc8, 0xc5, 0x71, 0x4f, 0x33, 0xa3, 0x3b, 0x4d, 0xc1, 0xb0, 0x8e, 0x5c, - 0x82, 0xca, 0x80, 0xf7, 0xbb, 0x3b, 0xc8, 0xa6, 0x69, 0xca, 0x01, 0x56, 0x97, 0xbc, 0xff, 0x34, - 0x64, 0xa3, 0x61, 0xfc, 0x3c, 0x17, 0x8f, 0xc5, 0x09, 0x96, 0xf6, 0x18, 0xca, 0x98, 0xdd, 0x53, - 0x80, 0xb1, 0x09, 0xf3, 0xaa, 0x13, 0x99, 0x48, 0x91, 0x67, 0x39, 0x71, 0xf2, 0xab, 0x79, 0xb5, - 0x81, 0x64, 0x6c, 0xac, 0x02, 0x98, 0xcc, 0xa7, 0xbb, 0x41, 0xe4, 0x45, 0xe3, 0x3c, 0x6a, 0x81, - 0xf1, 0x8a, 0xd3, 0xf0, 0x02, 0x0c, 0x03, 0x9a, 0x2f, 0x7b, 0x7f, 0x46, 0x9d, 0xe8, 0x02, 0x9c, - 0xdb, 0x30, 0xbf, 0x1f, 0x7a, 0x6f, 0x3c, 0x9f, 0xf6, 0x2f, 0x5a, 0xec, 0x9b, 0x02, 0xb4, 0x9e, - 0x86, 0x76, 0x10, 0xb1, 0x78, 0xc1, 0x87, 0x50, 0x1e, 0x71, 0x1a, 0x22, 0xd6, 0x79, 0x11, 0x97, - 0xca, 0x67, 0x22, 0x32, 0xd9, 0x82, 0xc6, 0x30, 0x5e, 0x0d, 0xb7, 0xac, 0x6d, 0x7c, 0x94, 0x7f, - 0x7f, 0x9c, 0x94, 0xc9, 0x4c, 0xc9, 0x8c, 0x23, 0x58, 0x42, 0x49, 0xa6, 0xc5, 0xfe, 0x4c, 0x54, - 0x85, 0x22, 0x16, 0x69, 0xdc, 0x30, 0x30, 0x72, 0x59, 0x4f, 0x6c, 0xc3, 0x4c, 0x68, 0x8c, 0xff, - 0x2c, 0x80, 0x86, 0x73, 0xe9, 0x06, 0x43, 0xe6, 0xd3, 0x0b, 0x37, 0x98, 0x9a, 0xc8, 0x44, 0x64, - 0xf2, 0x29, 0x54, 0x19, 0xaa, 0x5c, 0xed, 0x2e, 0xdf, 0x8f, 0xb3, 0x56, 0x31, 0x15, 0x81, 0xa8, - 0x3d, 0xe4, 0x97, 0x74, 0x53, 0xe9, 0x71, 0x20, 0x41, 0xe8, 0xa5, 0xbf, 0x81, 0x5a, 0x5f, 0xca, - 0xae, 0xca, 0xb1, 0x59, 0xf6, 0x17, 0x93, 0x64, 0xff, 0x0e, 0xa9, 0x64, 0xff, 0x0e, 0x31, 0xbe, - 0x86, 0xba, 0xb0, 0x13, 0x76, 0x5c, 0x48, 0xc6, 0xa8, 0x0d, 0x65, 0x33, 0xe1, 0xa5, 0x36, 0xe7, - 0x6f, 0x59, 0xe8, 0x26, 0x5e, 0xaa, 0xc6, 0x22, 0xf1, 0x8b, 0x6d, 0xcb, 0x07, 0xc0, 0x19, 0x94, - 0x24, 0xb1, 0x8d, 0x6f, 0x0b, 0x50, 0x8f, 0x7b, 0x58, 0xe4, 0x21, 0x54, 0xc4, 0x3a, 0xb1, 0xd1, - 0x6e, 0x9c, 0xeb, 0x49, 0xb2, 0xb9, 0x83, 0xb8, 0xe9, 0xc2, 0xc5, 0xcb, 0x2c, 0x2c, 0x32, 0x1e, - 0xea, 0x23, 0x16, 0x78, 0xf5, 0x7c, 0x0d, 0xc6, 0xd6, 0x91, 0xf8, 0xf7, 0xfe, 0x02, 0x9a, 0xd9, - 0xec, 0x43, 0x34, 0xa8, 0x1d, 0x8c, 0x1c, 0x87, 0x72, 0xae, 0xcf, 0x91, 0x79, 0xd0, 0xf6, 0x58, - 0x64, 0x1d, 0x8c, 0x86, 0x43, 0x16, 0x46, 0x7a, 0x81, 0x2c, 0x40, 0x6b, 0x8f, 0x59, 0xfb, 0x34, - 0x1c, 0x78, 0x9c, 0x7b, 0x2c, 0xd0, 0x8b, 0xa4, 0x0e, 0xe5, 0x27, 0xb6, 0xe7, 0xeb, 0x25, 0xb2, - 0x04, 0xf3, 0x78, 0x9e, 0xd2, 0x88, 0x86, 0xd6, 0xae, 0xb8, 0xf7, 0xe8, 0x7f, 0x5d, 0x22, 0x37, - 0xa0, 0xa3, 0x72, 0xa3, 0x25, 0xdd, 0xc3, 0x12, 0x2c, 0x9f, 0xb0, 0x51, 0xe0, 0xea, 0x7f, 0x53, - 0xba, 0xf7, 0x0e, 0x16, 0x73, 0x7a, 0xb1, 0x84, 0x40, 0x7b, 0x6b, 0x73, 0xfb, 0xcb, 0x57, 0xfb, - 0x56, 0x77, 0xaf, 0x7b, 0xd8, 0xdd, 0x7c, 0xae, 0xcf, 0x91, 0x25, 0xd0, 0x15, 0x6c, 0xf7, 0xf5, - 0xee, 0xf6, 0xab, 0xc3, 0xee, 0xde, 0x53, 0xbd, 0x90, 0xc1, 0x3c, 0x78, 0xb5, 0xbd, 0xbd, 0x7b, - 0x70, 0xa0, 0x17, 0x85, 0xdc, 0x0a, 0xf6, 0x64, 0xb3, 0xfb, 0x5c, 0x2f, 0x65, 0x90, 0x0e, 0xbb, - 0x2f, 0x76, 0x5f, 0xbe, 0x3a, 0xd4, 0xcb, 0xf7, 0x8e, 0x92, 0x17, 0xae, 0xc9, 0xa5, 0x35, 0xa8, - 0xa5, 0x6b, 0xb6, 0xa0, 0x91, 0x5d, 0x4c, 0x68, 0x27, 0x59, 0x45, 0xec, 0x5c, 0xb2, 0xd7, 0xa0, - 0x96, 0xf2, 0x7d, 0x2d, 0xce, 0xb7, 0xa9, 0xdf, 0x79, 0x00, 0xaa, 0x07, 0x51, 0xc8, 0x82, 0xbe, - 0x3e, 0x87, 0x3c, 0xa8, 0xd4, 0x1e, 0x32, 0xdc, 0x12, 0xaa, 0xa0, 0xae, 0x5e, 0x24, 0x6d, 0x80, - 0xdd, 0x37, 0x34, 0x88, 0x46, 0xb6, 0xef, 0x8f, 0xf5, 0x92, 0x18, 0x6f, 0x8f, 0x78, 0xc4, 0x06, - 0xde, 0x7b, 0xea, 0xea, 0xe5, 0x7b, 0xdf, 0x17, 0xa0, 0x1e, 0xd7, 0x0b, 0x62, 0xf5, 0x3d, 0x16, - 0x50, 0x7d, 0x4e, 0x7c, 0x6d, 0x31, 0xe6, 0xeb, 0x05, 0xf1, 0xd5, 0x0d, 0xa2, 0x4f, 0xf4, 0x22, - 0x69, 0x40, 0xa5, 0x1b, 0x44, 0xbf, 0x7a, 0xa4, 0x97, 0xd4, 0xe7, 0xc3, 0x0d, 0xbd, 0xac, 0x3e, - 0x1f, 0xfd, 0x5a, 0xaf, 0x88, 0xcf, 0x27, 0xa2, 0x74, 0xd5, 0x41, 0x08, 0xb7, 0x83, 0x35, 0xaa, - 0xae, 0x29, 0x41, 0xbd, 0xa0, 0xaf, 0x2f, 0x09, 0xd9, 0x8e, 0xec, 0x70, 0xfb, 0xc4, 0x0e, 0xf5, - 0x2b, 0x02, 0x7f, 0x33, 0x0c, 0xed, 0xb1, 0xbe, 0x2c, 0x56, 0xf9, 0x82, 0xb3, 0x40, 0xbf, 0x4a, - 0x74, 0x68, 0x6e, 0x79, 0x81, 0x1d, 0x8e, 0x8f, 0xa8, 0x13, 0xb1, 0x50, 0x77, 0x85, 0xe6, 0x91, - 0xad, 0x02, 0x50, 0xe1, 0x31, 0x08, 0xf8, 0xd5, 0x23, 0x05, 0x3a, 0x46, 0x63, 0x4c, 0xc2, 0xfa, - 0xe4, 0x0a, 0x2c, 0x1c, 0x0c, 0xed, 0x90, 0xd3, 0x2c, 0xf5, 0xc9, 0xbd, 0x23, 0x80, 0xb4, 0xbc, - 0x12, 0xcb, 0xe1, 0x48, 0xbe, 0x1e, 0xb8, 0xfa, 0x1c, 0x72, 0x4f, 0x20, 0x42, 0xea, 0x42, 0x02, - 0xda, 0x09, 0xd9, 0x70, 0x28, 0x40, 0xc5, 0x84, 0x0e, 0x41, 0xd4, 0xd5, 0x4b, 0x1b, 0xff, 0x5c, - 0x81, 0xc5, 0x17, 0x18, 0x21, 0xd2, 0xf9, 0x0e, 0x68, 0xf8, 0xc6, 0x73, 0x28, 0x71, 0xa0, 0x99, - 0x6d, 0xad, 0x92, 0xfc, 0x47, 0xc0, 0x9c, 0xee, 0xeb, 0xca, 0x2f, 0x3e, 0xd4, 0x91, 0x51, 0x41, - 0x66, 0xcc, 0x91, 0x3f, 0x81, 0x46, 0xd2, 0x72, 0x23, 0xf9, 0x7f, 0x88, 0x4d, 0xb7, 0xe4, 0x2e, - 0xc3, 0xbe, 0x07, 0x5a, 0xa6, 0x4f, 0x45, 0xf2, 0x29, 0xcf, 0xf6, 0xc9, 0x56, 0xd6, 0x3e, 0x8c, - 0x98, 0xac, 0x41, 0xa1, 0x99, 0x6d, 0x01, 0x9d, 0xa3, 0xa7, 0x9c, 0xde, 0xd3, 0xca, 0xdd, 0x19, - 0x30, 0x93, 0x65, 0x4e, 0xa0, 0x35, 0x71, 0x09, 0x27, 0x77, 0x67, 0xee, 0x97, 0xac, 0xdc, 0x9b, - 0x05, 0x35, 0x59, 0xa9, 0x0f, 0x90, 0xde, 0xe9, 0xc9, 0x2f, 0xcf, 0x33, 0x4a, 0xce, 0xa5, 0xff, - 0x92, 0x0b, 0xed, 0x43, 0x45, 0xbe, 0x60, 0xe5, 0x9f, 0xa0, 0xd9, 0x5a, 0x72, 0xc5, 0xb8, 0x08, - 0x25, 0xe6, 0xb8, 0xf5, 0xe9, 0x57, 0x7f, 0xd0, 0xf7, 0xa2, 0x93, 0x51, 0x6f, 0xdd, 0x61, 0x83, - 0xfb, 0xef, 0x3d, 0xdf, 0xf7, 0xde, 0x47, 0xd4, 0x39, 0xb9, 0x2f, 0x89, 0x7f, 0x5f, 0x92, 0xdd, - 0x77, 0x58, 0xa8, 0xfe, 0xad, 0xbd, 0x2f, 0x21, 0xc3, 0x5e, 0xaf, 0x8a, 0xe3, 0x87, 0xff, 0x1d, - 0x00, 0x00, 0xff, 0xff, 0xfb, 0x9e, 0x25, 0x80, 0x9e, 0x2b, 0x00, 0x00, +var File_backup_proto protoreflect.FileDescriptor + +var file_backup_proto_rawDesc = []byte{ + 0x0a, 0x0c, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x13, + 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x22, 0xe7, 0x01, 0x0a, 0x09, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, + 0x0a, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, + 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x79, 0x70, 0x65, 0x12, 0x42, 0x0a, 0x06, + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6d, + 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x1a, 0x39, 0x0a, 0x0b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd5, 0x08, 0x0a, 0x14, + 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x47, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, + 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x42, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, + 0x64, 0x65, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, + 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, + 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, + 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, + 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, + 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, + 0x64, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, + 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, + 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3d, + 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, + 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1d, 0x0a, + 0x0a, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x09, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x4e, 0x75, 0x6d, 0x12, 0x52, 0x0a, 0x11, + 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6c, 0x65, 0x76, 0x65, + 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x43, 0x6f, + 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x10, + 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, + 0x12, 0x55, 0x0a, 0x11, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6d, 0x69, + 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x10, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x62, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x0e, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x61, 0x73, 0x5f, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x68, 0x61, 0x73, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x12, 0x3f, 0x0a, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x69, 0x6e, 0x66, + 0x6f, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x49, + 0x6e, 0x66, 0x6f, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x3a, 0x0a, 0x19, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x70, 0x68, + 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x18, 0x13, 0x20, 0x01, 0x28, 0x04, 0x52, 0x17, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x68, + 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, + 0x72, 0x0a, 0x13, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x6d, + 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x12, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x73, 0x12, 0x47, 0x0a, 0x0b, 0x6c, 0x30, 0x5f, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x18, 0x15, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x53, + 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x0a, 0x6c, 0x30, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x45, 0x0a, 0x17, + 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0x88, 0x02, 0x0a, 0x13, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x21, 0x0a, 0x0c, 0x70, + 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x25, + 0x0a, 0x0e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x6f, + 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x4f, 0x0a, 0x0f, 0x73, 0x65, + 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0e, 0x73, 0x65, 0x67, + 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x73, + 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, + 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0xb6, + 0x03, 0x0a, 0x11, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x72, 0x74, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, + 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x6e, + 0x75, 0x6d, 0x5f, 0x6f, 0x66, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x4f, 0x66, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x3a, 0x0a, 0x07, 0x62, + 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, + 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x52, 0x07, + 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x74, 0x73, + 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, 0x69, 0x6c, + 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x52, 0x09, 0x73, 0x74, + 0x61, 0x74, 0x73, 0x6c, 0x6f, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x74, 0x61, + 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, 0x69, 0x6c, + 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x52, 0x09, 0x64, 0x65, + 0x6c, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x65, 0x64, 0x12, 0x13, 0x0a, 0x05, 0x69, 0x73, 0x5f, 0x6c, 0x30, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x04, 0x69, 0x73, 0x4c, 0x30, 0x22, 0xef, 0x03, 0x0a, 0x0a, 0x42, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x47, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, + 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x6d, 0x69, 0x6c, + 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, + 0x22, 0x0a, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, + 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, + 0x10, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x58, 0x0a, 0x12, 0x63, 0x6f, 0x6c, 0x6c, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x18, 0x09, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x11, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, + 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, + 0x09, 0x72, 0x62, 0x61, 0x63, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x52, 0x42, 0x41, 0x43, 0x4d, 0x65, 0x74, 0x61, 0x52, + 0x08, 0x72, 0x62, 0x61, 0x63, 0x4d, 0x65, 0x74, 0x61, 0x22, 0x5c, 0x0a, 0x19, 0x43, 0x6f, 0x6c, + 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x42, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3f, 0x0a, 0x05, 0x69, 0x6e, 0x66, 0x6f, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x05, 0x69, 0x6e, 0x66, 0x6f, 0x73, 0x22, 0x5a, 0x0a, 0x18, 0x50, 0x61, 0x72, 0x74, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, + 0x6e, 0x66, 0x6f, 0x12, 0x3e, 0x0a, 0x05, 0x69, 0x6e, 0x66, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x69, 0x6e, + 0x66, 0x6f, 0x73, 0x22, 0x56, 0x0a, 0x16, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x65, + 0x76, 0x65, 0x6c, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3c, 0x0a, + 0x05, 0x69, 0x6e, 0x66, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6d, + 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x69, 0x6e, 0x66, 0x6f, 0x73, 0x22, 0x97, 0x03, 0x0a, 0x13, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, + 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, + 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x14, 0x0a, + 0x05, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x61, 0x73, + 0x79, 0x6e, 0x63, 0x12, 0x3d, 0x0a, 0x0e, 0x64, 0x62, 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x64, 0x62, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x74, 0x61, + 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6d, 0x65, 0x74, + 0x61, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x26, 0x0a, 0x0f, 0x67, 0x63, 0x5f, 0x70, 0x61, 0x75, 0x73, + 0x65, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, + 0x67, 0x63, 0x50, 0x61, 0x75, 0x73, 0x65, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x28, 0x0a, + 0x10, 0x67, 0x63, 0x5f, 0x70, 0x61, 0x75, 0x73, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x67, 0x63, 0x50, 0x61, 0x75, 0x73, 0x65, + 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x67, 0x63, 0x5f, 0x70, 0x61, + 0x75, 0x73, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0e, 0x67, 0x63, 0x50, 0x61, 0x75, 0x73, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x62, 0x61, 0x63, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x04, 0x72, 0x62, 0x61, 0x63, 0x22, 0xb0, 0x01, 0x0a, 0x12, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x35, 0x0a, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x63, 0x6f, 0x64, + 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6d, 0x73, 0x67, 0x12, 0x33, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xca, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, + 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, + 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x62, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, + 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, + 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x25, + 0x0a, 0x0e, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x44, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x22, 0x5b, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6c, + 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, + 0x6d, 0x65, 0x22, 0xb1, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x35, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, + 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, + 0x67, 0x12, 0x33, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x54, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, + 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x62, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x7d, 0x0a, 0x14, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x49, 0x64, 0x12, 0x35, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, + 0x6f, 0x64, 0x65, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0xe2, 0x06, 0x0a, 0x14, + 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x63, + 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x2b, + 0x0a, 0x11, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x75, 0x66, + 0x66, 0x69, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, 0x6f, 0x6c, 0x6c, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x75, 0x66, 0x66, 0x69, 0x78, 0x12, 0x6f, 0x0a, 0x12, 0x63, + 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x52, 0x65, + 0x73, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x63, 0x6f, 0x6c, 0x6c, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, + 0x61, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x61, 0x73, 0x79, + 0x6e, 0x63, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x3d, 0x0a, 0x0e, 0x64, 0x62, 0x5f, 0x63, 0x6f, + 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x64, 0x62, 0x43, 0x6f, 0x6c, 0x6c, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x4f, 0x6e, + 0x6c, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x4f, 0x6e, + 0x6c, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x22, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x41, 0x75, 0x74, + 0x6f, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x75, 0x73, + 0x65, 0x41, 0x75, 0x74, 0x6f, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x30, 0x0a, 0x13, 0x64, 0x72, + 0x6f, 0x70, 0x45, 0x78, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x64, 0x72, 0x6f, 0x70, 0x45, 0x78, 0x69, + 0x73, 0x74, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0e, + 0x64, 0x72, 0x6f, 0x70, 0x45, 0x78, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x0e, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x72, 0x6f, 0x70, 0x45, 0x78, 0x69, 0x73, 0x74, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x12, 0x32, 0x0a, 0x14, 0x73, 0x6b, 0x69, 0x70, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0f, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x14, 0x73, 0x6b, 0x69, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, + 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x10, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x18, 0x73, 0x6b, 0x69, 0x70, + 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x44, 0x69, 0x73, 0x6b, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x73, 0x6b, 0x69, 0x70, + 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x44, 0x69, 0x73, 0x6b, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x62, 0x61, 0x63, 0x18, 0x12, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x04, 0x72, 0x62, 0x61, 0x63, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x53, + 0x68, 0x61, 0x72, 0x64, 0x4e, 0x75, 0x6d, 0x18, 0x13, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, + 0x61, 0x78, 0x53, 0x68, 0x61, 0x72, 0x64, 0x4e, 0x75, 0x6d, 0x1a, 0x44, 0x0a, 0x16, 0x43, 0x6f, + 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0xb5, 0x02, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x50, 0x61, 0x72, 0x74, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x48, 0x0a, 0x0a, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, + 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x65, 0x43, + 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x49, 0x0a, + 0x0b, 0x70, 0x61, 0x72, 0x74, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x70, 0x61, + 0x72, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x22, 0x87, 0x07, 0x0a, 0x15, 0x52, 0x65, 0x73, + 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, + 0x73, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x48, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x52, 0x65, 0x73, + 0x74, 0x6f, 0x72, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x64, + 0x65, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x0c, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x4a, 0x0a, 0x0b, 0x63, 0x6f, + 0x6c, 0x6c, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x29, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x6c, + 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6f, + 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x61, 0x0a, 0x17, + 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, + 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x15, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x12, + 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, + 0x53, 0x69, 0x7a, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x6f, 0x5f, 0x72, 0x65, 0x73, 0x74, 0x6f, + 0x72, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, + 0x6f, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x5f, 0x64, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x44, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, + 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x4f, 0x6e, 0x6c, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, + 0x73, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0c, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x22, + 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x0f, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x75, 0x73, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x12, 0x30, 0x0a, 0x13, 0x64, 0x72, 0x6f, 0x70, 0x45, 0x78, 0x69, 0x73, 0x74, 0x43, + 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x13, 0x64, 0x72, 0x6f, 0x70, 0x45, 0x78, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0e, 0x64, 0x72, 0x6f, 0x70, 0x45, 0x78, 0x69, 0x73, + 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x72, + 0x6f, 0x70, 0x45, 0x78, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x32, 0x0a, 0x14, + 0x73, 0x6b, 0x69, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x73, 0x6b, 0x69, 0x70, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x2e, 0x0a, 0x12, 0x73, 0x6b, 0x69, 0x70, 0x44, 0x69, 0x73, 0x6b, 0x51, 0x75, 0x6f, 0x74, + 0x61, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x73, 0x6b, + 0x69, 0x70, 0x44, 0x69, 0x73, 0x6b, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x53, 0x68, 0x61, 0x72, 0x64, 0x4e, 0x75, 0x6d, 0x18, + 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x53, 0x68, 0x61, 0x72, 0x64, 0x4e, + 0x75, 0x6d, 0x22, 0x9a, 0x03, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x48, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x6d, + 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, + 0x64, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, + 0x12, 0x64, 0x0a, 0x18, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, + 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x18, 0x06, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, + 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x16, + 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x72, + 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x74, + 0x6f, 0x5f, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x6f, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x53, + 0x69, 0x7a, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x22, + 0xba, 0x01, 0x0a, 0x15, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x35, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, + 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, + 0x12, 0x3a, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, + 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x46, 0x0a, 0x16, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x22, 0x5e, 0x0a, 0x0b, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x69, 0x6e, + 0x6c, 0x6f, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x49, 0x44, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x49, 0x44, 0x12, 0x35, 0x0a, + 0x07, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, + 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x52, 0x07, 0x62, 0x69, 0x6e, + 0x6c, 0x6f, 0x67, 0x73, 0x22, 0xa9, 0x01, 0x0a, 0x06, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x12, + 0x1f, 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x4e, 0x75, 0x6d, + 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x66, 0x72, + 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x46, 0x72, 0x6f, 0x6d, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x74, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x54, 0x6f, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x6f, + 0x67, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x6f, + 0x67, 0x50, 0x61, 0x74, 0x68, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x6f, 0x67, 0x5f, 0x73, 0x69, 0x7a, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6c, 0x6f, 0x67, 0x53, 0x69, 0x7a, 0x65, + 0x22, 0x36, 0x0a, 0x0c, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xf7, 0x01, 0x0a, 0x0a, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x1d, 0x0a, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x08, 0x62, 0x6f, + 0x6f, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x5f, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x07, 0x69, 0x6e, 0x74, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x5f, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x44, 0x61, + 0x74, 0x61, 0x12, 0x1f, 0x0a, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x48, 0x00, 0x52, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0a, 0x64, 0x6f, 0x75, 0x62, + 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, 0x73, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1f, 0x0a, 0x0a, 0x62, 0x79, 0x74, + 0x65, 0x73, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, + 0x09, 0x62, 0x79, 0x74, 0x65, 0x73, 0x44, 0x61, 0x74, 0x61, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x22, 0xe3, 0x05, 0x0a, 0x0b, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x53, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x49, 0x44, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x6b, + 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x50, 0x72, 0x69, 0x6d, + 0x61, 0x72, 0x79, 0x4b, 0x65, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x6d, 0x69, + 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x42, 0x0a, 0x0b, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, + 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, + 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0a, 0x74, 0x79, + 0x70, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x44, 0x0a, 0x0c, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, + 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, + 0x72, 0x52, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x16, + 0x0a, 0x06, 0x61, 0x75, 0x74, 0x6f, 0x49, 0x44, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, + 0x61, 0x75, 0x74, 0x6f, 0x49, 0x44, 0x12, 0x35, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x46, 0x69, 0x65, 0x6c, + 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x40, 0x0a, + 0x0c, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x0b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x44, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x64, 0x79, 0x6e, 0x61, + 0x6d, 0x69, 0x63, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x44, 0x79, 0x6e, + 0x61, 0x6d, 0x69, 0x63, 0x12, 0x28, 0x0a, 0x10, 0x69, 0x73, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, + 0x69, 0x73, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x12, 0x1a, + 0x0a, 0x08, 0x6e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x08, 0x6e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x64, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2c, 0x0a, 0x12, 0x69, 0x73, + 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x69, 0x73, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0xf4, 0x02, 0x0a, 0x0e, 0x46, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x35, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x69, 0x6e, 0x70, 0x75, + 0x74, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x05, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0d, 0x69, + 0x6e, 0x70, 0x75, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x49, 0x64, 0x73, 0x12, 0x2c, 0x0a, 0x12, + 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x08, + 0x20, 0x03, 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x46, 0x69, 0x65, 0x6c, + 0x64, 0x49, 0x64, 0x73, 0x12, 0x39, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x09, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, + 0xd2, 0x02, 0x0a, 0x10, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x75, + 0x74, 0x6f, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x75, 0x74, 0x6f, + 0x49, 0x44, 0x12, 0x38, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x30, 0x0a, 0x14, + 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x66, + 0x69, 0x65, 0x6c, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x65, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x41, + 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, + 0x73, 0x12, 0x41, 0x0a, 0x09, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x09, 0x66, 0x75, 0x6e, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x0e, 0x0a, 0x0c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x22, 0x58, 0x0a, 0x0d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, + 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0x80, + 0x01, 0x0a, 0x0b, 0x4d, 0x73, 0x67, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, + 0x0a, 0x0c, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x73, 0x67, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x73, 0x67, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x22, 0x41, 0x0a, 0x0f, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x50, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x0a, 0x0a, 0x52, 0x6f, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x20, 0x0a, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x22, 0x0a, 0x0c, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x25, 0x0a, 0x0f, + 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x22, 0x88, 0x01, 0x0a, 0x0d, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x6f, 0x72, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x33, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x42, 0x0a, 0x09, 0x70, 0x72, + 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, + 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x45, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x52, 0x09, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x22, 0x56, + 0x0a, 0x14, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3e, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x47, + 0x72, 0x61, 0x6e, 0x74, 0x6f, 0x72, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xf5, 0x01, 0x0a, 0x0b, 0x47, 0x72, 0x61, 0x6e, 0x74, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x33, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x39, 0x0a, 0x06, 0x6f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x69, + 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x06, + 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, + 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x47, + 0x72, 0x61, 0x6e, 0x74, 0x6f, 0x72, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x07, 0x67, 0x72, + 0x61, 0x6e, 0x74, 0x6f, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x71, + 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1a, + 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x35, 0x0a, 0x05, 0x72, 0x6f, + 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, + 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, + 0x52, 0x6f, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, + 0x73, 0x22, 0xb0, 0x01, 0x0a, 0x08, 0x52, 0x42, 0x41, 0x43, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x33, + 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, + 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x75, 0x73, + 0x65, 0x72, 0x73, 0x12, 0x35, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x45, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x06, 0x67, 0x72, + 0x61, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, 0x69, 0x6c, + 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x2e, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x06, 0x67, 0x72, + 0x61, 0x6e, 0x74, 0x73, 0x2a, 0x7e, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x10, + 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x4e, 0x6f, 0x74, 0x5f, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, + 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x6f, 0x5f, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x61, 0x69, 0x6c, 0x10, 0x03, 0x12, + 0x14, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x10, 0x90, 0x03, 0x12, 0x1d, 0x0a, 0x18, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x5f, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x4e, 0x6f, 0x74, 0x5f, 0x46, 0x6f, 0x75, 0x6e, + 0x64, 0x10, 0x94, 0x03, 0x2a, 0x78, 0x0a, 0x13, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x54, 0x61, + 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x0e, 0x42, + 0x41, 0x43, 0x4b, 0x55, 0x50, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x10, 0x00, 0x12, + 0x14, 0x0a, 0x10, 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, + 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, 0x5f, + 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x42, 0x41, 0x43, + 0x4b, 0x55, 0x50, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e, 0x42, 0x41, + 0x43, 0x4b, 0x55, 0x50, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x10, 0x04, 0x2a, 0x56, + 0x0a, 0x14, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, + 0x4c, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4e, 0x47, + 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x02, 0x12, + 0x08, 0x0a, 0x04, 0x46, 0x41, 0x49, 0x4c, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x49, 0x4d, + 0x45, 0x4f, 0x55, 0x54, 0x10, 0x04, 0x2a, 0x58, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, + 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x74, + 0x72, 0x6f, 0x6e, 0x67, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x64, 0x10, 0x02, + 0x12, 0x0e, 0x0a, 0x0a, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x10, 0x03, + 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x64, 0x10, 0x04, + 0x2a, 0x38, 0x0a, 0x0c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x08, 0x0a, + 0x04, 0x42, 0x4d, 0x32, 0x35, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x54, 0x65, 0x78, 0x74, 0x45, + 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x10, 0x02, 0x2a, 0xef, 0x01, 0x0a, 0x08, 0x44, + 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x6f, 0x6e, 0x65, 0x10, + 0x00, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x6f, 0x6f, 0x6c, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x49, + 0x6e, 0x74, 0x38, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x6e, 0x74, 0x31, 0x36, 0x10, 0x03, + 0x12, 0x09, 0x0a, 0x05, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x49, + 0x6e, 0x74, 0x36, 0x34, 0x10, 0x05, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x10, + 0x0a, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x10, 0x0b, 0x12, 0x0a, 0x0a, + 0x06, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x10, 0x14, 0x12, 0x0b, 0x0a, 0x07, 0x56, 0x61, 0x72, + 0x43, 0x68, 0x61, 0x72, 0x10, 0x15, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x72, 0x72, 0x61, 0x79, 0x10, + 0x16, 0x12, 0x08, 0x0a, 0x04, 0x4a, 0x73, 0x6f, 0x6e, 0x10, 0x17, 0x12, 0x10, 0x0a, 0x0c, 0x42, + 0x69, 0x6e, 0x61, 0x72, 0x79, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x10, 0x64, 0x12, 0x0f, 0x0a, + 0x0b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x10, 0x65, 0x12, 0x11, + 0x0a, 0x0d, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x31, 0x36, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x10, + 0x66, 0x12, 0x12, 0x0a, 0x0e, 0x42, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x31, 0x36, 0x56, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x10, 0x67, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x70, 0x61, 0x72, 0x73, 0x65, 0x46, + 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x10, 0x68, 0x2a, 0x56, 0x0a, 0x0a, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x46, 0x69, + 0x65, 0x6c, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x10, 0x01, 0x12, + 0x11, 0x0a, 0x0d, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x72, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, + 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x72, 0x6f, 0x70, 0x70, + 0x65, 0x64, 0x10, 0x03, 0x32, 0xc9, 0x05, 0x0a, 0x13, 0x4d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x42, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x63, 0x0a, 0x0c, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x28, 0x2e, 0x6d, + 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x42, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x5d, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x25, + 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x42, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x62, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x12, + 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x65, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x12, 0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, + 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0d, 0x52, + 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x29, 0x2e, 0x6d, + 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x52, 0x65, + 0x73, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x67, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x74, + 0x6f, 0x72, 0x65, 0x12, 0x2b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, + 0x74, 0x6f, 0x72, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, + 0x0a, 0x05, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x6d, 0x69, 0x6c, + 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x42, 0x39, 0x5a, 0x37, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x7a, + 0x69, 0x6c, 0x6c, 0x69, 0x7a, 0x74, 0x65, 0x63, 0x68, 0x2f, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, + 0x2d, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, +} + +var ( + file_backup_proto_rawDescOnce sync.Once + file_backup_proto_rawDescData = file_backup_proto_rawDesc +) + +func file_backup_proto_rawDescGZIP() []byte { + file_backup_proto_rawDescOnce.Do(func() { + file_backup_proto_rawDescData = protoimpl.X.CompressGZIP(file_backup_proto_rawDescData) + }) + return file_backup_proto_rawDescData +} + +var file_backup_proto_enumTypes = make([]protoimpl.EnumInfo, 7) +var file_backup_proto_msgTypes = make([]protoimpl.MessageInfo, 44) +var file_backup_proto_goTypes = []interface{}{ + (ResponseCode)(0), // 0: milvus.proto.backup.ResponseCode + (BackupTaskStateCode)(0), // 1: milvus.proto.backup.BackupTaskStateCode + (RestoreTaskStateCode)(0), // 2: milvus.proto.backup.RestoreTaskStateCode + (ConsistencyLevel)(0), // 3: milvus.proto.backup.ConsistencyLevel + (FunctionType)(0), // 4: milvus.proto.backup.FunctionType + (DataType)(0), // 5: milvus.proto.backup.DataType + (FieldState)(0), // 6: milvus.proto.backup.FieldState + (*IndexInfo)(nil), // 7: milvus.proto.backup.IndexInfo + (*CollectionBackupInfo)(nil), // 8: milvus.proto.backup.CollectionBackupInfo + (*PartitionBackupInfo)(nil), // 9: milvus.proto.backup.PartitionBackupInfo + (*SegmentBackupInfo)(nil), // 10: milvus.proto.backup.SegmentBackupInfo + (*BackupInfo)(nil), // 11: milvus.proto.backup.BackupInfo + (*CollectionLevelBackupInfo)(nil), // 12: milvus.proto.backup.CollectionLevelBackupInfo + (*PartitionLevelBackupInfo)(nil), // 13: milvus.proto.backup.PartitionLevelBackupInfo + (*SegmentLevelBackupInfo)(nil), // 14: milvus.proto.backup.SegmentLevelBackupInfo + (*CreateBackupRequest)(nil), // 15: milvus.proto.backup.CreateBackupRequest + (*BackupInfoResponse)(nil), // 16: milvus.proto.backup.BackupInfoResponse + (*GetBackupRequest)(nil), // 17: milvus.proto.backup.GetBackupRequest + (*ListBackupsRequest)(nil), // 18: milvus.proto.backup.ListBackupsRequest + (*ListBackupsResponse)(nil), // 19: milvus.proto.backup.ListBackupsResponse + (*DeleteBackupRequest)(nil), // 20: milvus.proto.backup.DeleteBackupRequest + (*DeleteBackupResponse)(nil), // 21: milvus.proto.backup.DeleteBackupResponse + (*RestoreBackupRequest)(nil), // 22: milvus.proto.backup.RestoreBackupRequest + (*RestorePartitionTask)(nil), // 23: milvus.proto.backup.RestorePartitionTask + (*RestoreCollectionTask)(nil), // 24: milvus.proto.backup.RestoreCollectionTask + (*RestoreBackupTask)(nil), // 25: milvus.proto.backup.RestoreBackupTask + (*RestoreBackupResponse)(nil), // 26: milvus.proto.backup.RestoreBackupResponse + (*GetRestoreStateRequest)(nil), // 27: milvus.proto.backup.GetRestoreStateRequest + (*FieldBinlog)(nil), // 28: milvus.proto.backup.FieldBinlog + (*Binlog)(nil), // 29: milvus.proto.backup.Binlog + (*KeyValuePair)(nil), // 30: milvus.proto.backup.KeyValuePair + (*ValueField)(nil), // 31: milvus.proto.backup.ValueField + (*FieldSchema)(nil), // 32: milvus.proto.backup.FieldSchema + (*FunctionSchema)(nil), // 33: milvus.proto.backup.FunctionSchema + (*CollectionSchema)(nil), // 34: milvus.proto.backup.CollectionSchema + (*CheckRequest)(nil), // 35: milvus.proto.backup.CheckRequest + (*CheckResponse)(nil), // 36: milvus.proto.backup.CheckResponse + (*MsgPosition)(nil), // 37: milvus.proto.backup.MsgPosition + (*ChannelPosition)(nil), // 38: milvus.proto.backup.ChannelPosition + (*RoleEntity)(nil), // 39: milvus.proto.backup.RoleEntity + (*UserEntity)(nil), // 40: milvus.proto.backup.UserEntity + (*ObjectEntity)(nil), // 41: milvus.proto.backup.ObjectEntity + (*PrivilegeEntity)(nil), // 42: milvus.proto.backup.PrivilegeEntity + (*GrantorEntity)(nil), // 43: milvus.proto.backup.GrantorEntity + (*GrantPrivilegeEntity)(nil), // 44: milvus.proto.backup.GrantPrivilegeEntity + (*GrantEntity)(nil), // 45: milvus.proto.backup.GrantEntity + (*UserInfo)(nil), // 46: milvus.proto.backup.UserInfo + (*RBACMeta)(nil), // 47: milvus.proto.backup.RBACMeta + nil, // 48: milvus.proto.backup.IndexInfo.ParamsEntry + nil, // 49: milvus.proto.backup.CollectionBackupInfo.ChannelCheckpointsEntry + nil, // 50: milvus.proto.backup.RestoreBackupRequest.CollectionRenamesEntry + (*_struct.Value)(nil), // 51: google.protobuf.Value +} +var file_backup_proto_depIdxs = []int32{ + 48, // 0: milvus.proto.backup.IndexInfo.params:type_name -> milvus.proto.backup.IndexInfo.ParamsEntry + 1, // 1: milvus.proto.backup.CollectionBackupInfo.state_code:type_name -> milvus.proto.backup.BackupTaskStateCode + 34, // 2: milvus.proto.backup.CollectionBackupInfo.schema:type_name -> milvus.proto.backup.CollectionSchema + 3, // 3: milvus.proto.backup.CollectionBackupInfo.consistency_level:type_name -> milvus.proto.backup.ConsistencyLevel + 9, // 4: milvus.proto.backup.CollectionBackupInfo.partition_backups:type_name -> milvus.proto.backup.PartitionBackupInfo + 7, // 5: milvus.proto.backup.CollectionBackupInfo.index_infos:type_name -> milvus.proto.backup.IndexInfo + 49, // 6: milvus.proto.backup.CollectionBackupInfo.channel_checkpoints:type_name -> milvus.proto.backup.CollectionBackupInfo.ChannelCheckpointsEntry + 10, // 7: milvus.proto.backup.CollectionBackupInfo.l0_segments:type_name -> milvus.proto.backup.SegmentBackupInfo + 10, // 8: milvus.proto.backup.PartitionBackupInfo.segment_backups:type_name -> milvus.proto.backup.SegmentBackupInfo + 28, // 9: milvus.proto.backup.SegmentBackupInfo.binlogs:type_name -> milvus.proto.backup.FieldBinlog + 28, // 10: milvus.proto.backup.SegmentBackupInfo.statslogs:type_name -> milvus.proto.backup.FieldBinlog + 28, // 11: milvus.proto.backup.SegmentBackupInfo.deltalogs:type_name -> milvus.proto.backup.FieldBinlog + 1, // 12: milvus.proto.backup.BackupInfo.state_code:type_name -> milvus.proto.backup.BackupTaskStateCode + 8, // 13: milvus.proto.backup.BackupInfo.collection_backups:type_name -> milvus.proto.backup.CollectionBackupInfo + 47, // 14: milvus.proto.backup.BackupInfo.rbac_meta:type_name -> milvus.proto.backup.RBACMeta + 8, // 15: milvus.proto.backup.CollectionLevelBackupInfo.infos:type_name -> milvus.proto.backup.CollectionBackupInfo + 9, // 16: milvus.proto.backup.PartitionLevelBackupInfo.infos:type_name -> milvus.proto.backup.PartitionBackupInfo + 10, // 17: milvus.proto.backup.SegmentLevelBackupInfo.infos:type_name -> milvus.proto.backup.SegmentBackupInfo + 51, // 18: milvus.proto.backup.CreateBackupRequest.db_collections:type_name -> google.protobuf.Value + 0, // 19: milvus.proto.backup.BackupInfoResponse.code:type_name -> milvus.proto.backup.ResponseCode + 11, // 20: milvus.proto.backup.BackupInfoResponse.data:type_name -> milvus.proto.backup.BackupInfo + 0, // 21: milvus.proto.backup.ListBackupsResponse.code:type_name -> milvus.proto.backup.ResponseCode + 11, // 22: milvus.proto.backup.ListBackupsResponse.data:type_name -> milvus.proto.backup.BackupInfo + 0, // 23: milvus.proto.backup.DeleteBackupResponse.code:type_name -> milvus.proto.backup.ResponseCode + 50, // 24: milvus.proto.backup.RestoreBackupRequest.collection_renames:type_name -> milvus.proto.backup.RestoreBackupRequest.CollectionRenamesEntry + 51, // 25: milvus.proto.backup.RestoreBackupRequest.db_collections:type_name -> google.protobuf.Value + 2, // 26: milvus.proto.backup.RestorePartitionTask.state_code:type_name -> milvus.proto.backup.RestoreTaskStateCode + 9, // 27: milvus.proto.backup.RestorePartitionTask.part_backup:type_name -> milvus.proto.backup.PartitionBackupInfo + 2, // 28: milvus.proto.backup.RestoreCollectionTask.state_code:type_name -> milvus.proto.backup.RestoreTaskStateCode + 8, // 29: milvus.proto.backup.RestoreCollectionTask.coll_backup:type_name -> milvus.proto.backup.CollectionBackupInfo + 23, // 30: milvus.proto.backup.RestoreCollectionTask.partition_restore_tasks:type_name -> milvus.proto.backup.RestorePartitionTask + 2, // 31: milvus.proto.backup.RestoreBackupTask.state_code:type_name -> milvus.proto.backup.RestoreTaskStateCode + 24, // 32: milvus.proto.backup.RestoreBackupTask.collection_restore_tasks:type_name -> milvus.proto.backup.RestoreCollectionTask + 0, // 33: milvus.proto.backup.RestoreBackupResponse.code:type_name -> milvus.proto.backup.ResponseCode + 25, // 34: milvus.proto.backup.RestoreBackupResponse.data:type_name -> milvus.proto.backup.RestoreBackupTask + 29, // 35: milvus.proto.backup.FieldBinlog.binlogs:type_name -> milvus.proto.backup.Binlog + 5, // 36: milvus.proto.backup.FieldSchema.data_type:type_name -> milvus.proto.backup.DataType + 30, // 37: milvus.proto.backup.FieldSchema.type_params:type_name -> milvus.proto.backup.KeyValuePair + 30, // 38: milvus.proto.backup.FieldSchema.index_params:type_name -> milvus.proto.backup.KeyValuePair + 6, // 39: milvus.proto.backup.FieldSchema.state:type_name -> milvus.proto.backup.FieldState + 5, // 40: milvus.proto.backup.FieldSchema.element_type:type_name -> milvus.proto.backup.DataType + 31, // 41: milvus.proto.backup.FieldSchema.default_value:type_name -> milvus.proto.backup.ValueField + 4, // 42: milvus.proto.backup.FunctionSchema.type:type_name -> milvus.proto.backup.FunctionType + 30, // 43: milvus.proto.backup.FunctionSchema.params:type_name -> milvus.proto.backup.KeyValuePair + 32, // 44: milvus.proto.backup.CollectionSchema.fields:type_name -> milvus.proto.backup.FieldSchema + 30, // 45: milvus.proto.backup.CollectionSchema.properties:type_name -> milvus.proto.backup.KeyValuePair + 33, // 46: milvus.proto.backup.CollectionSchema.functions:type_name -> milvus.proto.backup.FunctionSchema + 0, // 47: milvus.proto.backup.CheckResponse.code:type_name -> milvus.proto.backup.ResponseCode + 40, // 48: milvus.proto.backup.GrantorEntity.user:type_name -> milvus.proto.backup.UserEntity + 42, // 49: milvus.proto.backup.GrantorEntity.privilege:type_name -> milvus.proto.backup.PrivilegeEntity + 43, // 50: milvus.proto.backup.GrantPrivilegeEntity.entities:type_name -> milvus.proto.backup.GrantorEntity + 39, // 51: milvus.proto.backup.GrantEntity.role:type_name -> milvus.proto.backup.RoleEntity + 41, // 52: milvus.proto.backup.GrantEntity.object:type_name -> milvus.proto.backup.ObjectEntity + 43, // 53: milvus.proto.backup.GrantEntity.grantor:type_name -> milvus.proto.backup.GrantorEntity + 39, // 54: milvus.proto.backup.UserInfo.roles:type_name -> milvus.proto.backup.RoleEntity + 46, // 55: milvus.proto.backup.RBACMeta.users:type_name -> milvus.proto.backup.UserInfo + 39, // 56: milvus.proto.backup.RBACMeta.roles:type_name -> milvus.proto.backup.RoleEntity + 45, // 57: milvus.proto.backup.RBACMeta.grants:type_name -> milvus.proto.backup.GrantEntity + 15, // 58: milvus.proto.backup.MilvusBackupService.CreateBackup:input_type -> milvus.proto.backup.CreateBackupRequest + 17, // 59: milvus.proto.backup.MilvusBackupService.GetBackup:input_type -> milvus.proto.backup.GetBackupRequest + 18, // 60: milvus.proto.backup.MilvusBackupService.ListBackups:input_type -> milvus.proto.backup.ListBackupsRequest + 20, // 61: milvus.proto.backup.MilvusBackupService.DeleteBackup:input_type -> milvus.proto.backup.DeleteBackupRequest + 22, // 62: milvus.proto.backup.MilvusBackupService.RestoreBackup:input_type -> milvus.proto.backup.RestoreBackupRequest + 27, // 63: milvus.proto.backup.MilvusBackupService.GetRestore:input_type -> milvus.proto.backup.GetRestoreStateRequest + 35, // 64: milvus.proto.backup.MilvusBackupService.Check:input_type -> milvus.proto.backup.CheckRequest + 16, // 65: milvus.proto.backup.MilvusBackupService.CreateBackup:output_type -> milvus.proto.backup.BackupInfoResponse + 16, // 66: milvus.proto.backup.MilvusBackupService.GetBackup:output_type -> milvus.proto.backup.BackupInfoResponse + 19, // 67: milvus.proto.backup.MilvusBackupService.ListBackups:output_type -> milvus.proto.backup.ListBackupsResponse + 21, // 68: milvus.proto.backup.MilvusBackupService.DeleteBackup:output_type -> milvus.proto.backup.DeleteBackupResponse + 26, // 69: milvus.proto.backup.MilvusBackupService.RestoreBackup:output_type -> milvus.proto.backup.RestoreBackupResponse + 26, // 70: milvus.proto.backup.MilvusBackupService.GetRestore:output_type -> milvus.proto.backup.RestoreBackupResponse + 36, // 71: milvus.proto.backup.MilvusBackupService.Check:output_type -> milvus.proto.backup.CheckResponse + 65, // [65:72] is the sub-list for method output_type + 58, // [58:65] is the sub-list for method input_type + 58, // [58:58] is the sub-list for extension type_name + 58, // [58:58] is the sub-list for extension extendee + 0, // [0:58] is the sub-list for field type_name +} + +func init() { file_backup_proto_init() } +func file_backup_proto_init() { + if File_backup_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_backup_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IndexInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CollectionBackupInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PartitionBackupInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SegmentBackupInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BackupInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CollectionLevelBackupInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PartitionLevelBackupInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SegmentLevelBackupInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateBackupRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BackupInfoResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetBackupRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListBackupsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListBackupsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteBackupRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteBackupResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RestoreBackupRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RestorePartitionTask); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RestoreCollectionTask); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RestoreBackupTask); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RestoreBackupResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetRestoreStateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FieldBinlog); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Binlog); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*KeyValuePair); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValueField); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FieldSchema); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FunctionSchema); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CollectionSchema); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CheckRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CheckResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgPosition); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChannelPosition); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RoleEntity); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UserEntity); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ObjectEntity); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PrivilegeEntity); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GrantorEntity); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GrantPrivilegeEntity); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GrantEntity); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UserInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_backup_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RBACMeta); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_backup_proto_msgTypes[24].OneofWrappers = []interface{}{ + (*ValueField_BoolData)(nil), + (*ValueField_IntData)(nil), + (*ValueField_LongData)(nil), + (*ValueField_FloatData)(nil), + (*ValueField_DoubleData)(nil), + (*ValueField_StringData)(nil), + (*ValueField_BytesData)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_backup_proto_rawDesc, + NumEnums: 7, + NumMessages: 44, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_backup_proto_goTypes, + DependencyIndexes: file_backup_proto_depIdxs, + EnumInfos: file_backup_proto_enumTypes, + MessageInfos: file_backup_proto_msgTypes, + }.Build() + File_backup_proto = out.File + file_backup_proto_rawDesc = nil + file_backup_proto_goTypes = nil + file_backup_proto_depIdxs = nil } // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +const _ = grpc.SupportPackageIsVersion6 // MilvusBackupServiceClient is the client API for MilvusBackupService service. // @@ -3678,10 +5440,10 @@ type MilvusBackupServiceClient interface { } type milvusBackupServiceClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewMilvusBackupServiceClient(cc *grpc.ClientConn) MilvusBackupServiceClient { +func NewMilvusBackupServiceClient(cc grpc.ClientConnInterface) MilvusBackupServiceClient { return &milvusBackupServiceClient{cc} } @@ -3770,25 +5532,25 @@ type MilvusBackupServiceServer interface { type UnimplementedMilvusBackupServiceServer struct { } -func (*UnimplementedMilvusBackupServiceServer) CreateBackup(ctx context.Context, req *CreateBackupRequest) (*BackupInfoResponse, error) { +func (*UnimplementedMilvusBackupServiceServer) CreateBackup(context.Context, *CreateBackupRequest) (*BackupInfoResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateBackup not implemented") } -func (*UnimplementedMilvusBackupServiceServer) GetBackup(ctx context.Context, req *GetBackupRequest) (*BackupInfoResponse, error) { +func (*UnimplementedMilvusBackupServiceServer) GetBackup(context.Context, *GetBackupRequest) (*BackupInfoResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetBackup not implemented") } -func (*UnimplementedMilvusBackupServiceServer) ListBackups(ctx context.Context, req *ListBackupsRequest) (*ListBackupsResponse, error) { +func (*UnimplementedMilvusBackupServiceServer) ListBackups(context.Context, *ListBackupsRequest) (*ListBackupsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListBackups not implemented") } -func (*UnimplementedMilvusBackupServiceServer) DeleteBackup(ctx context.Context, req *DeleteBackupRequest) (*DeleteBackupResponse, error) { +func (*UnimplementedMilvusBackupServiceServer) DeleteBackup(context.Context, *DeleteBackupRequest) (*DeleteBackupResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method DeleteBackup not implemented") } -func (*UnimplementedMilvusBackupServiceServer) RestoreBackup(ctx context.Context, req *RestoreBackupRequest) (*RestoreBackupResponse, error) { +func (*UnimplementedMilvusBackupServiceServer) RestoreBackup(context.Context, *RestoreBackupRequest) (*RestoreBackupResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method RestoreBackup not implemented") } -func (*UnimplementedMilvusBackupServiceServer) GetRestore(ctx context.Context, req *GetRestoreStateRequest) (*RestoreBackupResponse, error) { +func (*UnimplementedMilvusBackupServiceServer) GetRestore(context.Context, *GetRestoreStateRequest) (*RestoreBackupResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetRestore not implemented") } -func (*UnimplementedMilvusBackupServiceServer) Check(ctx context.Context, req *CheckRequest) (*CheckResponse, error) { +func (*UnimplementedMilvusBackupServiceServer) Check(context.Context, *CheckRequest) (*CheckResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Check not implemented") } diff --git a/core/storage/chunk_manager.go b/core/storage/chunk_manager.go index 947435b..4408b47 100644 --- a/core/storage/chunk_manager.go +++ b/core/storage/chunk_manager.go @@ -35,7 +35,7 @@ type ChunkManager interface { UploadObject(ctx context.Context, i UploadObjectInput) error } -func NewChunkManager(ctx context.Context, params paramtable.BackupParams, config *StorageConfig) (ChunkManager, error) { +func NewChunkManager(ctx context.Context, params *paramtable.BackupParams, config *StorageConfig) (ChunkManager, error) { switch config.StorageType { case paramtable.Local: return NewLocalChunkManager(ctx, config) @@ -47,7 +47,7 @@ func NewChunkManager(ctx context.Context, params paramtable.BackupParams, config } } -func newAzureChunkManagerWithParams(ctx context.Context, params paramtable.BackupParams, config *StorageConfig) (*AzureChunkManager, error) { +func newAzureChunkManagerWithParams(ctx context.Context, params *paramtable.BackupParams, config *StorageConfig) (*AzureChunkManager, error) { c := newDefaultConfig() c.Address = params.MinioCfg.Address + ":" + params.MinioCfg.Port c.AccessKeyID = params.MinioCfg.AccessKeyID diff --git a/core/storage/local_chunk_manager.go b/core/storage/local_chunk_manager.go index 47de78d..788911d 100644 --- a/core/storage/local_chunk_manager.go +++ b/core/storage/local_chunk_manager.go @@ -27,6 +27,7 @@ import ( "strings" "github.com/cockroachdb/errors" + "github.com/zilliztech/milvus-backup/internal/log" ) diff --git a/core/utils/backup_request_util.go b/core/utils/backup_request_util.go index 160fed8..0f05a3e 100644 --- a/core/utils/backup_request_util.go +++ b/core/utils/backup_request_util.go @@ -3,6 +3,7 @@ package utils import ( "github.com/golang/protobuf/jsonpb" structpb "github.com/golang/protobuf/ptypes/struct" + "github.com/zilliztech/milvus-backup/core/proto/backuppb" ) diff --git a/core/utils/convert_util.go b/core/utils/convert_util.go index 9f0b705..84f2117 100644 --- a/core/utils/convert_util.go +++ b/core/utils/convert_util.go @@ -9,6 +9,7 @@ import ( "github.com/golang/protobuf/proto" "github.com/milvus-io/milvus-proto/go-api/v2/msgpb" + "github.com/zilliztech/milvus-backup/core/proto/backuppb" ) diff --git a/core/utils/version_util.go b/core/utils/version_util.go index ee45635..792e8ab 100644 --- a/core/utils/version_util.go +++ b/core/utils/version_util.go @@ -1,8 +1,9 @@ package utils import ( - "github.com/blang/semver/v4" "strings" + + "github.com/blang/semver/v4" ) const ( diff --git a/go.mod b/go.mod index 4d776c2..140cca6 100644 --- a/go.mod +++ b/go.mod @@ -1,116 +1,130 @@ module github.com/zilliztech/milvus-backup -go 1.18 +go 1.23.0 require ( - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0 - github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 - github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.1.0 - github.com/aliyun/credentials-go v1.3.0 + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.16.0 + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.0 + github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.5.0 + github.com/aliyun/credentials-go v1.4.3 github.com/blang/semver/v4 v4.0.0 - github.com/cockroachdb/errors v1.9.1 - github.com/gin-gonic/gin v1.8.1 - github.com/golang/protobuf v1.5.2 - github.com/google/btree v1.0.1 - github.com/google/uuid v1.3.0 + github.com/cockroachdb/errors v1.11.3 + github.com/gin-gonic/gin v1.10.0 + github.com/golang/protobuf v1.5.4 + github.com/google/btree v1.1.3 + github.com/google/uuid v1.6.0 + github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 + github.com/imroc/req/v3 v3.49.1 github.com/json-iterator/go v1.1.12 github.com/lingdor/stackerror v0.0.0-20191119040541-976d8885ed76 - //github.com/milvus-io/milvus-proto/go-api/v2 v2.4.3 - github.com/milvus-io/milvus-sdk-go/v2 v2.4.2-0.20241009111120-8008f14f2c16 - github.com/minio/minio-go/v7 v7.0.61 + github.com/milvus-io/milvus-proto/go-api/v2 v2.5.1 + github.com/minio/minio-go/v7 v7.0.82 github.com/pkg/errors v0.9.1 - github.com/samber/lo v1.39.0 - github.com/sony/sonyflake v1.1.0 - github.com/spf13/cast v1.3.1 - github.com/spf13/cobra v1.5.0 - github.com/spf13/viper v1.8.1 - github.com/stretchr/testify v1.8.4 - github.com/swaggo/files v1.0.0 - github.com/swaggo/gin-swagger v1.5.3 - github.com/swaggo/swag v1.16.1 - github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.865 - github.com/uber/jaeger-client-go v2.25.0+incompatible - go.uber.org/atomic v1.10.0 - go.uber.org/zap v1.17.0 - golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602 - golang.org/x/sync v0.8.0 - golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 - google.golang.org/grpc v1.48.0 - gopkg.in/natefinch/lumberjack.v2 v2.0.0 + github.com/samber/lo v1.47.0 + github.com/sony/sonyflake v1.2.0 + github.com/spf13/cast v1.7.1 + github.com/spf13/cobra v1.8.1 + github.com/spf13/viper v1.19.0 + github.com/stretchr/testify v1.10.0 + github.com/swaggo/files v1.0.1 + github.com/swaggo/gin-swagger v1.6.0 + github.com/swaggo/swag v1.16.4 + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1071 + github.com/uber/jaeger-client-go v2.30.0+incompatible + go.uber.org/atomic v1.11.0 + go.uber.org/zap v1.27.0 + golang.org/x/oauth2 v0.24.0 + golang.org/x/sync v0.10.0 + golang.org/x/time v0.8.0 + google.golang.org/grpc v1.69.2 + google.golang.org/protobuf v1.36.1 + gopkg.in/natefinch/lumberjack.v2 v2.2.1 gopkg.in/yaml.v3 v3.0.1 ) -replace github.com/milvus-io/milvus-sdk-go/v2 => github.com/wayblink/milvus-sdk-go/v2 v2.3.0-beta4.0.20241030091852-d6eb85c1a8ff - -require github.com/milvus-io/milvus-proto/go-api/v2 v2.3.4-0.20240909041258-8f8ca67816cd - require ( - cloud.google.com/go v0.81.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 // indirect - github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1 // indirect + cloud.google.com/go/compute/metadata v0.6.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v1.3.2 // indirect github.com/KyleBanks/depth v1.2.1 // indirect - github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68 // indirect - github.com/alibabacloud-go/tea v1.1.8 // indirect - github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f // indirect - github.com/cockroachdb/redact v1.1.3 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect + github.com/alibabacloud-go/debug v1.0.1 // indirect + github.com/alibabacloud-go/tea v1.2.2 // indirect + github.com/andybalholm/brotli v1.1.1 // indirect + github.com/bytedance/sonic v1.12.6 // indirect + github.com/bytedance/sonic/loader v0.2.1 // indirect + github.com/cloudflare/circl v1.5.0 // indirect + github.com/cloudwego/base64x v0.1.4 // indirect + github.com/cloudwego/iasm v0.2.0 // indirect + github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506 // indirect + github.com/cockroachdb/redact v1.1.5 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dustin/go-humanize v1.0.1 // indirect - github.com/fsnotify/fsnotify v1.4.9 // indirect - github.com/getsentry/sentry-go v0.12.0 // indirect + github.com/fsnotify/fsnotify v1.8.0 // indirect + github.com/gabriel-vasile/mimetype v1.4.7 // indirect + github.com/getsentry/sentry-go v0.30.0 // indirect github.com/gin-contrib/sse v0.1.0 // indirect - github.com/go-openapi/jsonpointer v0.20.0 // indirect - github.com/go-openapi/jsonreference v0.20.2 // indirect - github.com/go-openapi/spec v0.20.9 // indirect - github.com/go-openapi/swag v0.22.4 // indirect - github.com/go-playground/locales v0.14.0 // indirect - github.com/go-playground/universal-translator v0.18.0 // indirect - github.com/go-playground/validator/v10 v10.10.0 // indirect - github.com/goccy/go-json v0.9.7 // indirect + github.com/go-ini/ini v1.67.0 // indirect + github.com/go-openapi/jsonpointer v0.21.0 // indirect + github.com/go-openapi/jsonreference v0.21.0 // indirect + github.com/go-openapi/spec v0.21.0 // indirect + github.com/go-openapi/swag v0.23.0 // indirect + github.com/go-playground/locales v0.14.1 // indirect + github.com/go-playground/universal-translator v0.18.1 // indirect + github.com/go-playground/validator/v10 v10.23.0 // indirect + github.com/go-task/slim-sprig/v3 v3.0.0 // indirect + github.com/goccy/go-json v0.10.4 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt/v5 v5.0.0 // indirect - github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect + github.com/golang-jwt/jwt/v5 v5.2.1 // indirect + github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/hcl v1.0.0 // indirect - github.com/inconshreveable/mousetrap v1.0.0 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/josharian/intern v1.0.0 // indirect - github.com/klauspost/compress v1.16.7 // indirect - github.com/klauspost/cpuid/v2 v2.2.5 // indirect + github.com/klauspost/compress v1.17.11 // indirect + github.com/klauspost/cpuid/v2 v2.2.9 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/kylelemons/godebug v1.1.0 // indirect - github.com/leodido/go-urn v1.2.1 // indirect - github.com/magiconair/properties v1.8.5 // indirect - github.com/mailru/easyjson v0.7.7 // indirect - github.com/mattn/go-isatty v0.0.14 // indirect + github.com/leodido/go-urn v1.4.0 // indirect + github.com/magiconair/properties v1.8.9 // indirect + github.com/mailru/easyjson v0.9.0 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect github.com/minio/md5-simd v1.1.2 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect - github.com/mitchellh/mapstructure v1.4.1 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/pelletier/go-toml v1.9.3 // indirect - github.com/pelletier/go-toml/v2 v2.0.1 // indirect - github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/rogpeppe/go-internal v1.9.0 // indirect - github.com/rs/xid v1.5.0 // indirect - github.com/sirupsen/logrus v1.9.3 // indirect - github.com/spf13/afero v1.6.0 // indirect - github.com/spf13/jwalterweatherman v1.1.0 // indirect + github.com/onsi/ginkgo/v2 v2.22.0 // indirect + github.com/onsi/gomega v1.35.1 // indirect + github.com/pelletier/go-toml/v2 v2.2.3 // indirect + github.com/pingcap/errors v0.11.5-0.20211224045212-9687c2b0f87c // indirect + github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/quic-go/qpack v0.5.1 // indirect + github.com/quic-go/quic-go v0.48.2 // indirect + github.com/refraction-networking/utls v1.6.7 // indirect + github.com/rogpeppe/go-internal v1.13.1 // indirect + github.com/rs/xid v1.6.0 // indirect + github.com/sagikazarmark/locafero v0.6.0 // indirect + github.com/sagikazarmark/slog-shim v0.1.0 // indirect + github.com/sourcegraph/conc v0.3.0 // indirect + github.com/spf13/afero v1.11.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/subosito/gotenv v1.2.0 // indirect - github.com/tidwall/gjson v1.14.4 // indirect - github.com/tidwall/match v1.1.1 // indirect - github.com/tidwall/pretty v1.2.0 // indirect - github.com/ugorji/go/codec v1.2.7 // indirect - go.uber.org/multierr v1.6.0 // indirect - golang.org/x/crypto v0.14.0 // indirect - golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17 // indirect - golang.org/x/net v0.17.0 // indirect - golang.org/x/sys v0.13.0 // indirect - golang.org/x/text v0.13.0 // indirect - golang.org/x/tools v0.11.0 // indirect - google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20220503193339-ba3ae3f07e29 // indirect - google.golang.org/protobuf v1.33.0 // indirect + github.com/subosito/gotenv v1.6.0 // indirect + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect + github.com/ugorji/go/codec v1.2.12 // indirect + go.opentelemetry.io/otel v1.33.0 // indirect + go.opentelemetry.io/otel/sdk v1.33.0 // indirect + go.uber.org/mock v0.5.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + golang.org/x/arch v0.12.0 // indirect + golang.org/x/crypto v0.31.0 // indirect + golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67 // indirect + golang.org/x/mod v0.22.0 // indirect + golang.org/x/net v0.33.0 // indirect + golang.org/x/sys v0.28.0 // indirect + golang.org/x/text v0.21.0 // indirect + golang.org/x/tools v0.28.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20241223144023-3abc09e42ca8 // indirect gopkg.in/ini.v1 v1.67.0 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/go.sum b/go.sum index 689b2ed..3a57167 100644 --- a/go.sum +++ b/go.sum @@ -1,346 +1,169 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0 h1:at8Tk2zUz63cLPR0JPWm5vp77pEZmzxEQBEfRKn1VV8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0 h1:8q4SaHjFsClSvuVne0ID/5Ka8u3fcIHyqkLjcFpNRHQ= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 h1:vcYCAze6p19qBW7MhZybIsqD8sMV8js0NyQM8JDnVtg= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0/go.mod h1:OQeznEEkTZ9OrhHJoDD8ZDq51FHgXjqtP9z6bEwBq9U= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 h1:sXr+ck84g/ZlZUOZiNELInmMgOsuGwdjjVkEIde0OtY= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0/go.mod h1:okt5dMMTOFjX/aovMlrjvvXoPMBVSPzk9185BT0+eZM= -github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.2.0 h1:Ma67P/GGprNwsslzEH6+Kb8nybI8jpDTm4Wmzu2ReK8= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.1.0 h1:nVocQV40OQne5613EeLayJiRAJuKlBGy+m22qWG+WRg= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.1.0/go.mod h1:7QJP7dr2wznCMeqIrhMgWGf7XpAQnVrJqDm9nvV3Cu4= -github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1 h1:WpB/QDNLpMw72xHJc34BNNykqSOeEJDAWkhf0u12/Jk= -github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= -github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= +cloud.google.com/go/compute/metadata v0.6.0 h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I= +cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.16.0 h1:JZg6HRh6W6U4OLl6lk7BZ7BLisIzM9dG1R50zUk9C/M= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.16.0/go.mod h1:YL1xnZ6QejvQHWJrX/AvhFl4WW4rqHVoKspWNVwFk0M= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.0 h1:B/dfvscEQtew9dVuoxqxrUKKv8Ih2f55PydknDamU+g= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.0/go.mod h1:fiPSssYvltE08HJchL04dOy+RD4hgrjph0cwGGMntdI= +github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.0 h1:+m0M/LFxN43KvULkDNfdXOgrjtg6UYJPFBJyuEcRCAw= +github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.0/go.mod h1:PwOyop78lveYMRs6oCxjiVyBdyCgIYH6XHIVZO9/SFQ= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 h1:ywEEhmNahHBihViHepv3xPBn1663uRv2t2q/ESv9seY= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0/go.mod h1:iZDifYGJTIgIIkYRNWPENUnqx6bJ2xnSDFI2tjwZNuY= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.6.0 h1:PiSrjRPpkQNjrM8H0WwKMnZUdu1RGMtd/LdGKUrOo+c= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.6.0/go.mod h1:oDrbWx4ewMylP7xHivfgixbfGBT6APAwsSoHRKotnIc= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.5.0 h1:mlmW46Q0B79I+Aj4azKC6xDMFN9a9SyZWESlGWYXbFs= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.5.0/go.mod h1:PXe2h+LKcWTX9afWdZoHyODqR4fBa5boUM/8uJfZ0Jo= +github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1 h1:WJTmL004Abzc5wDB5VtZG2PJk5ndYDgVacGqfirKxjM= +github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1/go.mod h1:tCcJZ0uHAmvjsVYzEFivsRTN00oz5BEsRgQHu5JZ9WE= +github.com/AzureAD/microsoft-authentication-library-for-go v1.3.2 h1:kYRSnvJju5gYVyhkij+RTJ/VR6QIUaCfWeaFm2ycsjQ= +github.com/AzureAD/microsoft-authentication-library-for-go v1.3.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= -github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo= -github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= -github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= -github.com/agiledragon/gomonkey/v2 v2.3.1/go.mod h1:ap1AmDzcVOAz1YpeJ3TCzIgstoaWLA6jbbgxfB4w2iY= -github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= -github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68 h1:NqugFkGxx1TXSh/pBcU00Y6bljgDPaFdh5MUSeJ7e50= -github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68/go.mod h1:6pb/Qy8c+lqua8cFpEy7g39NRRqOWc3rOwAy8m5Y2BY= -github.com/alibabacloud-go/tea v1.1.8 h1:vFF0707fqjGiQTxrtMnIXRjOCvQXf49CuDVRtTopmwU= -github.com/alibabacloud-go/tea v1.1.8/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4= -github.com/aliyun/credentials-go v1.3.0 h1:wfBNojfNJJyuHK3YUIIjRPwnlQIdmy/YMkia1XOnPtY= -github.com/aliyun/credentials-go v1.3.0/go.mod h1:8jKYhQuDawt8x2+fusqa1Y6mPxemTsBEN04dgcAcYz0= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= +github.com/alibabacloud-go/debug v1.0.0/go.mod h1:8gfgZCCAC3+SCzjWtY053FrOcd4/qlH6IHTI4QyICOc= +github.com/alibabacloud-go/debug v1.0.1 h1:MsW9SmUtbb1Fnt3ieC6NNZi6aEwrXfDksD4QA6GSbPg= +github.com/alibabacloud-go/debug v1.0.1/go.mod h1:8gfgZCCAC3+SCzjWtY053FrOcd4/qlH6IHTI4QyICOc= +github.com/alibabacloud-go/tea v1.2.2 h1:aTsR6Rl3ANWPfqeQugPglfurloyBJY85eFy7Gc1+8oU= +github.com/alibabacloud-go/tea v1.2.2/go.mod h1:CF3vOzEMAG+bR4WOql8gc2G9H3EkH3ZLAQdpmpXMgwk= +github.com/aliyun/credentials-go v1.4.3 h1:N3iHyvHRMyOwY1+0qBLSf3hb5JFiOujVSVuEpgeGttY= +github.com/aliyun/credentials-go v1.4.3/go.mod h1:Jm6d+xIgwJVLVWT561vy67ZRP4lPTQxMbEYRuT2Ti1U= +github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA= +github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= +github.com/bytedance/sonic v1.12.6 h1:/isNmCUF2x3Sh8RAp/4mh4ZGkcFAX/hLrzrK3AvpRzk= +github.com/bytedance/sonic v1.12.6/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= +github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/bytedance/sonic/loader v0.2.1 h1:1GgorWTqf12TA8mma4DDSbaQigE2wOgQo7iCjjJv3+E= +github.com/bytedance/sonic/loader v0.2.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudflare/circl v1.5.0 h1:hxIWksrX6XN5a1L2TI/h53AGPhNHoUBo+TD1ms9+pys= +github.com/cloudflare/circl v1.5.0/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= +github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y= +github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= +github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= +github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= -github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= -github.com/cockroachdb/errors v1.9.1/go.mod h1:2sxOtL2WIc096WSZqZ5h8fa17rdDq9HZOZLBCor4mBk= -github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f h1:6jduT9Hfc0njg5jJ1DdKCFPdMBrp/mdZfCpa5h+WM74= -github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= -github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= -github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cockroachdb/errors v1.11.3 h1:5bA+k2Y6r+oz/6Z/RFlNeVCesGARKuC6YymtcDrbC/I= +github.com/cockroachdb/errors v1.11.3/go.mod h1:m4UIW4CDjx+R5cybPsNrRbreomiFqt8o1h1wUVazSd8= +github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506 h1:ASDL+UJcILMqgNeV5jiqR4j+sTuvQNHdf2chuKj1M5k= +github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506/go.mod h1:Mw7HqKr2kdtu6aYGn3tPmAftiP3QPX63LdK/zcariIo= +github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= +github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= -github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= -github.com/getsentry/sentry-go v0.12.0 h1:era7g0re5iY13bHSdN/xMkyV+5zZppjRVQhZrXCaEIk= -github.com/getsentry/sentry-go v0.12.0/go.mod h1:NSap0JBYWzHND8oMbyi0+XZhUalc1TBdRL1M71JZW2c= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M= +github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/gabriel-vasile/mimetype v1.4.7 h1:SKFKl7kD0RiPdbht0s7hFtjl489WcQ1VyPW8ZzUMYCA= +github.com/gabriel-vasile/mimetype v1.4.7/go.mod h1:GDlAgAyIRT27BhFl53XNAFtfjzOkLaF35JdEG0P7LtU= +github.com/getsentry/sentry-go v0.30.0 h1:lWUwDnY7sKHaVIoZ9wYqRHJ5iEmoc0pqcRqFkosKzBo= +github.com/getsentry/sentry-go v0.30.0/go.mod h1:WU9B9/1/sHDqeV8T+3VwwbjeR5MSXs/6aqG3mqZrezA= github.com/gin-contrib/gzip v0.0.6 h1:NjcunTcGAj5CO1gn4N8jHOSIeRFHIbn51z6K+xaN4d4= github.com/gin-contrib/gzip v0.0.6/go.mod h1:QOJlmV2xmayAjkNS2Y8NQsMneuRShOU/kjovCXNuzzk= -github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= -github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= -github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= -github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= -github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w= -github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= -github.com/go-faker/faker/v4 v4.1.0 h1:ffuWmpDrducIUOO0QSKSF5Q2dxAht+dhsT9FvVHhPEI= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= -github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= -github.com/go-openapi/jsonpointer v0.20.0 h1:ESKJdU9ASRfaPNOPRx12IUyA1vn3R9GiE3KYD14BXdQ= -github.com/go-openapi/jsonpointer v0.20.0/go.mod h1:6PGzBjjIIumbLYysB73Klnms1mwnU4G3YHOECG3CedA= -github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= -github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= -github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= -github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= -github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I= -github.com/go-openapi/spec v0.20.9 h1:xnlYNQAwKd2VQRRfwTEI0DcK+2cbuvI/0c7jx3gA8/8= -github.com/go-openapi/spec v0.20.9/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= -github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= -github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU= -github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= -github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= -github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= -github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= -github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= -github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= -github.com/go-playground/validator/v10 v10.10.0 h1:I7mrTYv78z8k8VXa/qJlOlEXn/nBh+BF8dHX5nt/dr0= -github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= +github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU= +github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A= +github.com/go-ini/ini v1.67.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= +github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= +github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ= +github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4= +github.com/go-openapi/spec v0.21.0 h1:LTVzPc3p/RzRnkQqLRndbAzjY0d0BCL72A6j3CdL9ZY= +github.com/go-openapi/spec v0.21.0/go.mod h1:78u6VdPw81XU44qEWGhtr982gJ5BWg2c0I5XwVMotYk= +github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= +github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= +github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= +github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.23.0 h1:/PwmTwZhS0dPkav3cdK9kV1FsAmrL8sThn8IHr/sO+o= +github.com/go-playground/validator/v10 v10.23.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= -github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= -github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/goccy/go-json v0.9.7 h1:IcB+Aqpx/iMHu5Yooh7jEzJk1JZ7Pjtmys2ukPr7EeM= -github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= -github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= +github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= +github.com/goccy/go-json v0.10.4 h1:JSwxQzIqKfmFX1swYPpUThQZp/Ka4wzJdK0LWVytLPM= +github.com/goccy/go-json v0.10.4/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= -github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= -github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= -github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= -github.com/golang-jwt/jwt/v5 v5.0.0 h1:1n1XNM9hk7O9mnQoNBGolZvzebBQ7p93ULHRc28XJUE= -github.com/golang-jwt/jwt/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= +github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= +github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= -github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= +github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= -github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= -github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg= +github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= +github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/hydrogen18/memlistener v0.0.0-20200120041712-dcc25e7acd91/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= -github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI= -github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= -github.com/iris-contrib/jade v1.1.3/go.mod h1:H/geBymxJhShH5kecoiOCSssPX7QWYH7UaeZTSWddIk= -github.com/iris-contrib/pongo2 v0.0.1/go.mod h1:Ssh+00+3GAZqSQb30AvBRNxBx7rf0GqwkjqxNd0u65g= -github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= +github.com/imroc/req/v3 v3.49.1 h1:Nvwo02riiPEzh74ozFHeEJrtjakFxnoWNR3YZYuQm9U= +github.com/imroc/req/v3 v3.49.1/go.mod h1:tsOk8K7zI6cU4xu/VWCZVtq9Djw9IWm4MslKzme5woU= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= -github.com/kataras/golog v0.0.10/go.mod h1:yJ8YKCmyL+nWjERB90Qwn+bdyBZsaQwU3bTVFgkFIp8= -github.com/kataras/iris/v12 v12.1.8/go.mod h1:LMYy4VlP67TQ3Zgriz8RE2h2kMZV2SgMYbq3UhfoFmE= -github.com/kataras/neffos v0.0.14/go.mod h1:8lqADm8PnbeFfL7CLXh1WHw53dG27MC3pgi2R1rmoTE= -github.com/kataras/pio v0.0.2/go.mod h1:hAoW0t9UmXi4R5Oyq5Z4irTbaTsOemSrDGUtaTl7Dro= -github.com/kataras/sitemap v0.0.5/go.mod h1:KY2eugMKiPwsJgx7+U103YZehfvNGOXURubcGyk0Bz8= +github.com/keybase/go-keychain v0.0.0-20231219164618-57a3676c3af6 h1:IsMZxCuZqKuao2vNdfD82fjjgPLfyHLpR41Z88viRWs= +github.com/keybase/go-keychain v0.0.0-20231219164618-57a3676c3af6/go.mod h1:3VeWNIJaW+O5xpRQbPp0Ybqu1vJd/pm7s2F473HRrkw= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= +github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= -github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.9 h1:66ze0taIn2H33fBvCkXuv9BmCwDfafmiIVpKV9kKGuY= +github.com/klauspost/cpuid/v2 v2.2.9/go.mod h1:rqkxqrZ1EhYM9G+hXH7YdowN5R5RGN6NK4QwQ3WMXF8= +github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -349,664 +172,279 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/labstack/echo/v4 v4.5.0/go.mod h1:czIriw4a0C1dFun+ObrXp7ok03xON0N1awStJ6ArI7Y= -github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= -github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= -github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= +github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= +github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= github.com/lingdor/stackerror v0.0.0-20191119040541-976d8885ed76 h1:IVlcvV0CjvfBYYod5ePe89l+3LBAl//6n9kJ9Vr2i0k= github.com/lingdor/stackerror v0.0.0-20191119040541-976d8885ed76/go.mod h1:Iu9BHUvTh8/KpbuSoKx/CaJEdJvFxSverxIy7I+nq7s= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= -github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= -github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= -github.com/mediocregopher/radix/v3 v3.4.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= -github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/milvus-io/milvus-proto/go-api/v2 v2.3.4-0.20240909041258-8f8ca67816cd h1:x0b0+foTe23sKcVFseR1DE8+BB08EH6ViiRHaz8PEik= -github.com/milvus-io/milvus-proto/go-api/v2 v2.3.4-0.20240909041258-8f8ca67816cd/go.mod h1:/6UT4zZl6awVeXLeE7UGDWZvXj3IWkRsh3mqsn0DiAs= +github.com/magiconair/properties v1.8.9 h1:nWcCbLq1N2v/cpNsy5WvQ37Fb+YElfq20WJ/a8RkpQM= +github.com/magiconair/properties v1.8.9/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4= +github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/milvus-io/milvus-proto/go-api/v2 v2.5.1 h1:kUXwIa2FRXTx69bB46aMriqfrjbLnHMRAD4/+BhnL6w= +github.com/milvus-io/milvus-proto/go-api/v2 v2.5.1/go.mod h1:/6UT4zZl6awVeXLeE7UGDWZvXj3IWkRsh3mqsn0DiAs= github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM= -github.com/minio/minio-go/v7 v7.0.61 h1:87c+x8J3jxQ5VUGimV9oHdpjsAvy3fhneEBKuoKEVUI= -github.com/minio/minio-go/v7 v7.0.61/go.mod h1:BTu8FcrEw+HidY0zd/0eny43QnVNkXRPXrLXFuQBHXg= -github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/minio/minio-go/v7 v7.0.82 h1:tWfICLhmp2aFPXL8Tli0XDTHj2VB/fNf0PC1f/i1gRo= +github.com/minio/minio-go/v7 v7.0.82/go.mod h1:84gmIilaX4zcvAWWzJ5Z1WI5axN+hAbM5w25xf8xvC0= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= -github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= -github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/ginkgo/v2 v2.22.0 h1:Yed107/8DjTr0lKCNt7Dn8yQ6ybuDRQoMGrNFKzMfHg= +github.com/onsi/ginkgo/v2 v2.22.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo= +github.com/onsi/gomega v1.35.1 h1:Cwbd75ZBPxFSuZ6T+rN/WCb/gOc6YgFBXLlZLhC7Ds4= +github.com/onsi/gomega v1.35.1/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/otiai10/copy v1.7.0/go.mod h1:rmRl6QPdJj6EiUqXQ/4Nn2lLXoNQjFCQbbNrxgc/t3U= -github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= -github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= -github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= -github.com/otiai10/mint v1.3.3/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.9.3 h1:zeC5b1GviRUyKYd6OJPvBU/mcVDVoL1OhT17FCt5dSQ= -github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.0.1 h1:8e3L2cCQzLFi2CR4g7vGFuFxX7Jl1kKX8gW+iV0GUKU= -github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= -github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= -github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= +github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M= +github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc= +github.com/pingcap/errors v0.11.5-0.20211224045212-9687c2b0f87c h1:xpW9bvK+HuuTmyFqUwr+jcCvpVkK7sumiz+ko5H9eq4= +github.com/pingcap/errors v0.11.5-0.20211224045212-9687c2b0f87c/go.mod h1:X2r9ueLEUZgtx2cIogM0v4Zj5uvvzhuuiu7Pn8HzMPg= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= -github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= -github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= +github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= +github.com/quic-go/quic-go v0.48.2 h1:wsKXZPeGWpMpCGSWqOcqpW2wZYic/8T3aqiOID0/KWE= +github.com/quic-go/quic-go v0.48.2/go.mod h1:yBgs3rWBOADpga7F+jJsb6Ybg1LSYiQvwWlLX+/6HMs= +github.com/redis/go-redis/v9 v9.6.1 h1:HHDteefn6ZkTtY5fGUE8tj8uy85AHk6zP7CpzIAM0y4= +github.com/redis/go-redis/v9 v9.6.1/go.mod h1:0C0c6ycQsdpVNQpxb1njEQIqkx5UcsM8FJCQLgE9+RA= +github.com/refraction-networking/utls v1.6.7 h1:zVJ7sP1dJx/WtVuITug3qYUq034cDq9B2MR1K67ULZM= +github.com/refraction-networking/utls v1.6.7/go.mod h1:BC3O4vQzye5hqpmDTWUqi4P5DDhzJfkV1tdqtawQIH0= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rs/xid v1.5.0 h1:mKX4bl4iPYJtEIxp6CYiUuLQ/8DYMoz0PUdtGgMFRVc= -github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= +github.com/rs/xid v1.6.0 h1:fV591PaemRlL6JfRxGDEPl69wICngIQ3shQtzfy2gxU= +github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/samber/lo v1.39.0 h1:4gTz1wUhNYLhFSKl6O+8peW0v2F4BCY034GRpU9WnuA= -github.com/samber/lo v1.39.0/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA= -github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sagikazarmark/locafero v0.6.0 h1:ON7AQg37yzcRPU69mt7gwhFEBwxI6P9T4Qu3N51bwOk= +github.com/sagikazarmark/locafero v0.6.0/go.mod h1:77OmuIc6VTraTXKXIs/uvUxKGUXjE1GbemJYHqdNjX0= +github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= +github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= +github.com/samber/lo v1.47.0 h1:z7RynLwP5nbyRscyvcD043DWYoOcYRv3mV8lBeqOCLc= +github.com/samber/lo v1.47.0/go.mod h1:RmDH9Ct32Qy3gduHQuKJ3gW1fMHAnE/fAzQuf6He5cU= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= -github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/assertions v1.1.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/sony/sonyflake v1.1.0 h1:wnrEcL3aOkWmPlhScLEGAXKkLAIslnBteNUq4Bw6MM4= -github.com/sony/sonyflake v1.1.0/go.mod h1:LORtCywH/cq10ZbyfhKrHYgAUGH7mOBa76enV9txy/Y= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY= -github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= -github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.5.0 h1:X+jTBEBqF0bHN+9cSMgmfuvv2VHJ9ezmFNf9Y/XstYU= -github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/sony/sonyflake v1.2.0 h1:Pfr3A+ejSg+0SPqpoAmQgEtNDAhc2G1SUYk205qVMLQ= +github.com/sony/sonyflake v1.2.0/go.mod h1:LORtCywH/cq10ZbyfhKrHYgAUGH7mOBa76enV9txy/Y= +github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= +github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= +github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= +github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= +github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y= +github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= +github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.8.1 h1:Kq1fyeebqsBfbjZj4EL7gj2IO0mMaiyjYUWcUsl2O44= -github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= +github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= +github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/swaggo/files v0.0.0-20220728132757-551d4a08d97a/go.mod h1:lKJPbtWzJ9JhsTN1k1gZgleJWY/cqq0psdoMmaThG3w= -github.com/swaggo/files v1.0.0 h1:1gGXVIeUFCS/dta17rnP0iOpr6CXFwKD7EO5ID233e4= -github.com/swaggo/files v1.0.0/go.mod h1:N59U6URJLyU1PQgFqPM7wXLMhJx7QAolnvfQkqO13kc= -github.com/swaggo/gin-swagger v1.5.3 h1:8mWmHLolIbrhJJTflsaFoZzRBYVmEE7JZGIq08EiC0Q= -github.com/swaggo/gin-swagger v1.5.3/go.mod h1:3XJKSfHjDMB5dBo/0rrTXidPmgLeqsX89Yp4uA50HpI= -github.com/swaggo/swag v1.8.1/go.mod h1:ugemnJsPZm/kRwFUnzBlbHRd0JY9zE1M4F+uy2pAaPQ= -github.com/swaggo/swag v1.16.1 h1:fTNRhKstPKxcnoKsytm4sahr8FaYzUcT7i1/3nd/fBg= -github.com/swaggo/swag v1.16.1/go.mod h1:9/LMvHycG3NFHfR6LwvikHv5iFvmPADQ359cKikGxto= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.865 h1:LcUqBlKC4j15LhT303yQDX/XxyHG4haEQqbHgZZA4SY= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.865/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0= -github.com/tidwall/gjson v1.14.4 h1:uo0p8EbA09J7RQaflQ1aBRffTR7xedD2bcIVSYxLnkM= -github.com/tidwall/gjson v1.14.4/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= -github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= -github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= -github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= -github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= -github.com/uber/jaeger-client-go v2.25.0+incompatible h1:IxcNZ7WRY1Y3G4poYlx24szfsn/3LvK9QHCq9oQw8+U= -github.com/uber/jaeger-client-go v2.25.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= -github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= -github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= -github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= -github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w= -github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= -github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= -github.com/wayblink/milvus-sdk-go/v2 v2.3.0-beta4.0.20241030091852-d6eb85c1a8ff h1:b73JFTui+bKEy5HuDFUOYNH3XNbYYl62Rv7JKA/thZo= -github.com/wayblink/milvus-sdk-go/v2 v2.3.0-beta4.0.20241030091852-d6eb85c1a8ff/go.mod h1:TdzShm5isV4F6kvrd+9V/CKowNIX+H+jvybF0WWts0Y= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= -github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= -github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= -github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= +github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= +github.com/swaggo/files v1.0.1 h1:J1bVJ4XHZNq0I46UU90611i9/YzdrF7x92oX1ig5IdE= +github.com/swaggo/files v1.0.1/go.mod h1:0qXmMNH6sXNf+73t65aKeB+ApmgxdnkQzVTAj2uaMUg= +github.com/swaggo/gin-swagger v1.6.0 h1:y8sxvQ3E20/RCyrXeFfg60r6H0Z+SwpTjMYsMm+zy8M= +github.com/swaggo/gin-swagger v1.6.0/go.mod h1:BG00cCEy294xtVpyIAHG6+e2Qzj/xKlRdOqDkvq0uzo= +github.com/swaggo/swag v1.16.4 h1:clWJtd9LStiG3VeijiCfOVODP6VpHtKdQy9ELFG3s1A= +github.com/swaggo/swag v1.16.4/go.mod h1:VBsHJRsDvfYvqoiMKnsdwhNV9LEMHgEDZcyVYX0sxPg= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1071 h1:Q/Ue/yRv4HSpaiFAnXIshoDjxzwyhwezEidXU49Boa4= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1071/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= +github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o= +github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE= +github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= +github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/otel v1.33.0 h1:/FerN9bax5LoK51X/sI0SVYrjSE0/yUL7DpxW4K3FWw= +go.opentelemetry.io/otel v1.33.0/go.mod h1:SUUkR6csvUQl+yjReHu5uM3EtVV7MBm5FHKRlNx4I8I= +go.opentelemetry.io/otel/metric v1.33.0 h1:r+JOocAyeRVXD8lZpjdQjzMadVZp2M4WmQ+5WtEnklQ= +go.opentelemetry.io/otel/metric v1.33.0/go.mod h1:L9+Fyctbp6HFTddIxClbQkjtubW6O9QS3Ann/M82u6M= +go.opentelemetry.io/otel/sdk v1.33.0 h1:iax7M131HuAm9QkZotNHEfstof92xM+N8sr3uHXc2IM= +go.opentelemetry.io/otel/sdk v1.33.0/go.mod h1:A1Q5oi7/9XaMlIWzPSxLRWOI8nG3FnzHJNbiENQuihM= +go.opentelemetry.io/otel/sdk/metric v1.31.0 h1:i9hxxLJF/9kkvfHppyLL55aW7iIJz4JjxTeYusH7zMc= +go.opentelemetry.io/otel/sdk/metric v1.31.0/go.mod h1:CRInTMVvNhUKgSAMbKyTMxqOBC0zgyxzW55lZzX43Y8= +go.opentelemetry.io/otel/trace v1.33.0 h1:cCJuF7LRjUFso9LPnEAHJDB2pqzp+hbO8eu1qqW2d/s= +go.opentelemetry.io/otel/trace v1.33.0/go.mod h1:uIcdVUZMpTAmz0tI1z04GoVSezK37CbGV4fr1f2nBck= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= -go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= +go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= +go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/mock v0.5.0 h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU= +go.uber.org/mock v0.5.0/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.17.0 h1:MTjgFu6ZLKvY6Pvaqk97GlxNBuMpV4Hy/3P6tRGlI2U= -go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +golang.org/x/arch v0.12.0 h1:UsYJhbzPYGsT0HbEdmYcqtCv8UNGvnaL561NnIUvaKg= +golang.org/x/arch v0.12.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17 h1:3MTrJm4PyNL9NBqvYDSj3DHl46qQakyfqfWo4jgfaEM= -golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67 h1:1UoZQm6f0P/ZO0w1Ri+f+ifG/gXhegadRdwBIXEFWDo= +golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= +golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= +golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= +golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602 h1:0Ja1LBD+yisY6RWM/BH7TJVXWsSjs2VwBSmvSX4HdBc= -golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE= +golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= -golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 h1:Hir2P/De0WpUhtrKGGjvSb2YxUgyZ7EFOSLIcSSpiwE= -golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg= +golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190327201419-c70d86f8b7cf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.11.0 h1:EMCa6U9S2LtZXLAMoWiR/R8dAQFRqbAitmbJ2UKhoi8= -golang.org/x/tools v0.11.0/go.mod h1:anzJrxPjNtfgiYQYirP2CPGzGLxrH2u2QBhn6Bf3qY8= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= +golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180518175338-11a468237815/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20220503193339-ba3ae3f07e29 h1:DJUvgAPiJWeMBiT+RzBVcJGQN7bAEWS5UEoMshES9xs= -google.golang.org/genproto v0.0.0-20220503193339-ba3ae3f07e29/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241223144023-3abc09e42ca8 h1:TqExAhdPaB60Ux47Cn0oLV07rGnxZzIsaRhQaqS666A= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241223144023-3abc09e42ca8/go.mod h1:lcTa1sDdWEIHMWlITnIczmw5w60CF9ffkb8Z+DVmmjA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.48.0 h1:rQOsyJ/8+ufEDJd/Gdsz7HG220Mh9HAhFHRGnIjda0w= -google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc/examples v0.0.0-20220617181431-3e7b97febc7f h1:rqzndB2lIQGivcXdTuY3Y9NBvr70X+y77woofSRluec= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/grpc v1.69.2 h1:U3S9QEtbXC0bYNvRtcoklF3xGtLViumSYxWykJS+7AU= +google.golang.org/grpc v1.69.2/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4= +google.golang.org/protobuf v1.36.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk= +google.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= -gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= -gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.56.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= -gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= -gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= +gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= diff --git a/internal/common/workerpool.go b/internal/common/workerpool.go index d5e42b7..8fd38dd 100644 --- a/internal/common/workerpool.go +++ b/internal/common/workerpool.go @@ -4,10 +4,11 @@ import ( "context" "errors" "fmt" - "go.uber.org/atomic" "sync" "time" + "go.uber.org/atomic" + "golang.org/x/sync/errgroup" "golang.org/x/time/rate" ) diff --git a/internal/util/errorutil/util_test.go b/internal/util/errorutil/util_test.go index ef688fc..148c01c 100644 --- a/internal/util/errorutil/util_test.go +++ b/internal/util/errorutil/util_test.go @@ -4,8 +4,9 @@ import ( "errors" "testing" - "github.com/zilliztech/milvus-backup/internal/log" "go.uber.org/zap" + + "github.com/zilliztech/milvus-backup/internal/log" ) func TestErrorList_Error(t *testing.T) { diff --git a/internal/util/grpcclient/client.go b/internal/util/grpcclient/client.go index 3effd57..8bf0844 100644 --- a/internal/util/grpcclient/client.go +++ b/internal/util/grpcclient/client.go @@ -24,11 +24,12 @@ import ( "google.golang.org/grpc/backoff" - "github.com/zilliztech/milvus-backup/internal/log" - "github.com/zilliztech/milvus-backup/internal/util/funcutil" "go.uber.org/zap" "google.golang.org/grpc" "google.golang.org/grpc/keepalive" + + "github.com/zilliztech/milvus-backup/internal/log" + "github.com/zilliztech/milvus-backup/internal/util/funcutil" ) // GrpcClient abstracts client of grpc diff --git a/main.go b/main.go index 96f1bd3..7071ed6 100644 --- a/main.go +++ b/main.go @@ -3,12 +3,7 @@ package main import ( "github.com/zilliztech/milvus-backup/cmd" _ "github.com/zilliztech/milvus-backup/docs" -) - -var ( - version = "dev" - commit = "unknown" - date = "unknown" + "github.com/zilliztech/milvus-backup/version" ) // @title Milvus Backup Service @@ -20,6 +15,6 @@ var ( // @license.url http://www.apache.org/licenses/LICENSE-2.0.html // @BasePath /api/v1 func main() { - cmd.SetVersionInfo(version, commit, date) + cmd.SetVersionInfo(version.Version, version.Commit, version.Date) cmd.Execute() } diff --git a/version/version.go b/version/version.go new file mode 100644 index 0000000..7dd0d3a --- /dev/null +++ b/version/version.go @@ -0,0 +1,7 @@ +package version + +var ( + Version = "dev" + Commit = "unknown" + Date = "unknown" +)