Create the backup repository only when it doesn't exist

When preparing a backup repository, Velero tries to connect to it, if fails then create it. The repository status always records the error reported by creation but the real reason maybe caused by the connect operation. This is confuseing and hard to debug

Signed-off-by: Wenkai Yin(尹文开) <yinw@vmware.com>
pull/6884/head
Wenkai Yin(尹文开) 2023-09-28 10:33:09 +08:00
parent 73ea00b477
commit 61a6c1ba2a
2 changed files with 28 additions and 3 deletions

View File

@ -26,6 +26,7 @@ import (
"strings"
"time"
"github.com/kopia/kopia/repo"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
@ -188,11 +189,13 @@ func (urp *unifiedRepoProvider) PrepareRepo(ctx context.Context, param RepoParam
log.Debug("Repo has already been initialized remotely")
return nil
}
log.Infof("failed to connect to the repo: %v, will try to create it", err)
if !errors.Is(err, repo.ErrRepositoryNotInitialized) {
return errors.Wrap(err, "error to connect to backup repo")
}
err = urp.repoService.Init(ctx, *repoOption, true)
if err != nil {
return errors.Wrap(err, "error to init backup repo")
return errors.Wrap(err, "error to create backup repo")
}
log.Debug("Prepare repo complete")

View File

@ -23,6 +23,7 @@ import (
"testing"
awscredentials "github.com/aws/aws-sdk-go/aws/credentials"
"github.com/kopia/kopia/repo"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
@ -648,7 +649,28 @@ func TestPrepareRepo(t *testing.T) {
}
return errors.New("fake-error-2")
},
expectedErr: "error to init backup repo: fake-error-2",
expectedErr: "error to connect to backup repo: fake-error-1",
},
{
name: "not initialize",
getter: new(credmock.SecretStore),
credStoreReturn: "fake-password",
funcTable: localFuncTable{
getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string) (map[string]string, error) {
return map[string]string{}, nil
},
getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) {
return map[string]string{}, nil
},
},
repoService: new(reposervicenmocks.BackupRepoService),
retFuncInit: func(ctx context.Context, repoOption udmrepo.RepoOptions, createNew bool) error {
if !createNew {
return repo.ErrRepositoryNotInitialized
}
return errors.New("fake-error-2")
},
expectedErr: "error to create backup repo: fake-error-2",
},
}