Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Cai <jcai@gitlab.com>2021-12-11 00:29:52 +0300
committerJohn Cai <jcai@gitlab.com>2021-12-13 18:01:12 +0300
commitdffc3458ce32ede5ccfea0ade0282962b3370d38 (patch)
treee97930b9a96151df53c20edf79556d98df6dfa53
parent84eaa31e0940f439068cd3960713c9c800b851d8 (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.go2
-rw-r--r--cmd/praefect/subcmd_track_repository.go12
-rw-r--r--cmd/praefect/subcmd_track_repository_test.go9
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,