diff options
author | John Cai <jcai@gitlab.com> | 2021-12-11 00:29:52 +0300 |
---|---|---|
committer | John Cai <jcai@gitlab.com> | 2021-12-13 18:01:12 +0300 |
commit | dffc3458ce32ede5ccfea0ade0282962b3370d38 (patch) | |
tree | e97930b9a96151df53c20edf79556d98df6dfa53 | |
parent | 84eaa31e0940f439068cd3960713c9c800b851d8 (diff) |
cmd/praefect: add helper text to explain replication
Adds some text that explains what is happening with replication. The
command either creates replication jobs in the queue, or it replicates
immediately. In both of these cases, print out helpful messages.
This also adds a writer in the command so we don't rely on the logger so
the output is more reader friendly.
Changelog: added
-rw-r--r-- | cmd/praefect/subcmd.go | 2 | ||||
-rw-r--r-- | cmd/praefect/subcmd_track_repository.go | 12 | ||||
-rw-r--r-- | cmd/praefect/subcmd_track_repository_test.go | 9 |
3 files changed, 19 insertions, 4 deletions
diff --git a/cmd/praefect/subcmd.go b/cmd/praefect/subcmd.go index f6b63ee2c..b11d155bd 100644 --- a/cmd/praefect/subcmd.go +++ b/cmd/praefect/subcmd.go @@ -40,7 +40,7 @@ var subcommands = map[string]subcmd{ acceptDatalossCmdName: &acceptDatalossSubcommand{}, setReplicationFactorCmdName: newSetReplicatioFactorSubcommand(os.Stdout), removeRepositoryCmdName: newRemoveRepository(logger, os.Stdout), - trackRepositoryCmdName: newTrackRepository(logger), + trackRepositoryCmdName: newTrackRepository(logger, os.Stdout), listUntrackedRepositoriesName: newListUntrackedRepositories(logger, os.Stdout), checkCmdName: newCheckSubcommand( os.Stdout, diff --git a/cmd/praefect/subcmd_track_repository.go b/cmd/praefect/subcmd_track_repository.go index e593d6ef9..ec4e3489a 100644 --- a/cmd/praefect/subcmd_track_repository.go +++ b/cmd/praefect/subcmd_track_repository.go @@ -6,6 +6,7 @@ import ( "errors" "flag" "fmt" + "io" "math/rand" "time" @@ -27,6 +28,7 @@ const ( ) type trackRepository struct { + w io.Writer logger logrus.FieldLogger virtualStorage string relativePath string @@ -36,8 +38,8 @@ type trackRepository struct { var errAuthoritativeRepositoryNotExist = errors.New("authoritative repository does not exist") -func newTrackRepository(logger logrus.FieldLogger) *trackRepository { - return &trackRepository{logger: logger} +func newTrackRepository(logger logrus.FieldLogger, w io.Writer) *trackRepository { + return &trackRepository{w: w, logger: logger} } func (cmd *trackRepository) FlagSet() *flag.FlagSet { @@ -180,7 +182,8 @@ func (cmd *trackRepository) exec(ctx context.Context, logger logrus.FieldLogger, if err != nil { return fmt.Errorf("%s: %w", trackRepoErrorPrefix, err) } - logger.Debug("finished adding new repository to be tracked in praefect database.") + + fmt.Fprintln(cmd.w, "Finished adding new repository to be tracked in praefect database.") correlationID := correlation.SafeRandomID() connections := nodeSet.Connections()[cmd.virtualStorage] @@ -206,12 +209,15 @@ func (cmd *trackRepository) exec(ctx context.Context, logger logrus.FieldLogger, if err := replMgr.ProcessReplicationEvent(ctx, event, conn); err != nil { return fmt.Errorf("%s: processing replication event %w", trackRepoErrorPrefix, err) } + + fmt.Fprintf(cmd.w, "Finished replicating repository to %q.\n", secondary) continue } if _, err := queue.Enqueue(ctx, event); err != nil { return fmt.Errorf("%s: %w", trackRepoErrorPrefix, err) } + fmt.Fprintf(cmd.w, "Added replication job to replicate repository to %q.\n", secondary) } return nil diff --git a/cmd/praefect/subcmd_track_repository_test.go b/cmd/praefect/subcmd_track_repository_test.go index e4d0a6036..ed55c1ce7 100644 --- a/cmd/praefect/subcmd_track_repository_test.go +++ b/cmd/praefect/subcmd_track_repository_test.go @@ -1,6 +1,7 @@ package main import ( + "bytes" "flag" "io" "path/filepath" @@ -139,16 +140,19 @@ func TestAddRepository_Exec(t *testing.T) { relativePath string desc string replicateImmediately bool + expectedOutput string }{ { relativePath: "path/to/test/repo1", desc: "force replication", replicateImmediately: true, + expectedOutput: "Finished replicating repository to \"gitaly-2\".\n", }, { relativePath: "path/to/test/repo2", desc: "do not force replication", replicateImmediately: false, + expectedOutput: "Added replication job to replicate repository to \"gitaly-2\".\n", }, } @@ -184,6 +188,7 @@ func TestAddRepository_Exec(t *testing.T) { require.NoError(t, createRepoThroughGitaly1(tc.relativePath)) require.DirExists(t, filepath.Join(g1Cfg.Storages[0].Path, tc.relativePath)) require.NoDirExists(t, filepath.Join(g2Cfg.Storages[0].Path, tc.relativePath)) + var stdout bytes.Buffer addRepoCmd := &trackRepository{ logger: logger, @@ -191,6 +196,7 @@ func TestAddRepository_Exec(t *testing.T) { relativePath: tc.relativePath, authoritativeStorage: authoritativeStorage, replicateImmediately: tc.replicateImmediately, + w: &stdout, } require.NoError(t, addRepoCmd.Exec(flag.NewFlagSet("", flag.PanicOnError), conf)) @@ -208,6 +214,7 @@ func TestAddRepository_Exec(t *testing.T) { exists, err := repoDS.RepositoryExists(ctx, virtualStorageName, tc.relativePath) require.NoError(t, err) assert.True(t, exists) + assert.Contains(t, stdout.String(), tc.expectedOutput) if !tc.replicateImmediately { queue := datastore.NewPostgresReplicationEventQueue(db) @@ -224,6 +231,7 @@ func TestAddRepository_Exec(t *testing.T) { relativePath := "path/to/test/repo_1" cmd := &trackRepository{ + w: &bytes.Buffer{}, logger: testhelper.NewDiscardingLogger(t), virtualStorage: "praefect", relativePath: relativePath, @@ -257,6 +265,7 @@ func TestAddRepository_Exec(t *testing.T) { )) cmd := &trackRepository{ + w: &bytes.Buffer{}, logger: testhelper.NewDiscardingLogger(t), virtualStorage: virtualStorageName, relativePath: relativePath, |