diff options
author | John Cai <jcai@gitlab.com> | 2022-04-08 20:55:30 +0300 |
---|---|---|
committer | John Cai <jcai@gitlab.com> | 2022-04-08 21:47:44 +0300 |
commit | bf4d632197245cba2d9262e2fb3495d8404c03f5 (patch) | |
tree | 82837cced0c222552533837f4ec4aeb3bf21c740 | |
parent | e9aa2ce490e68388607ed87fcea4270e13de4440 (diff) |
praefect: Set 5 second grace period in list_untracked_repositoriesjc-list-repo-to-use-shorter-grace-period
A default grace period of 5 seconds is sufficient for the subcommand.
-rw-r--r-- | cmd/praefect/subcmd_list_untracked_repositories.go | 15 | ||||
-rw-r--r-- | cmd/praefect/subcmd_list_untracked_repositories_test.go | 46 |
2 files changed, 35 insertions, 26 deletions
diff --git a/cmd/praefect/subcmd_list_untracked_repositories.go b/cmd/praefect/subcmd_list_untracked_repositories.go index 39d6cd41c..b0b981fbf 100644 --- a/cmd/praefect/subcmd_list_untracked_repositories.go +++ b/cmd/praefect/subcmd_list_untracked_repositories.go @@ -26,9 +26,10 @@ const ( var errNoConnectionToGitalies = errors.New("no connection established to gitaly nodes") type listUntrackedRepositories struct { - logger logrus.FieldLogger - delimiter string - out io.Writer + logger logrus.FieldLogger + onlyIncludeOlderThan time.Duration + delimiter string + out io.Writer } func newListUntrackedRepositories(logger logrus.FieldLogger, out io.Writer) *listUntrackedRepositories { @@ -38,6 +39,12 @@ func newListUntrackedRepositories(logger logrus.FieldLogger, out io.Writer) *lis func (cmd *listUntrackedRepositories) FlagSet() *flag.FlagSet { fs := flag.NewFlagSet(listUntrackedRepositoriesName, flag.ExitOnError) fs.StringVar(&cmd.delimiter, "delimiter", "\n", "string used as a delimiter in output") + fs.DurationVar( + &cmd.onlyIncludeOlderThan, + "older-than", + 5*time.Second, + "only include repositories created before this duration", + ) fs.Usage = func() { printfErr("Description:\n" + " This command checks if all repositories on all gitaly nodes tracked by praefect.\n" + @@ -81,7 +88,7 @@ func (cmd listUntrackedRepositories) Exec(flags *flag.FlagSet, cfg config.Config defer func() { _ = db.Close() }() logger.Debug("connected to praefect database") - walker := repocleaner.NewWalker(nodeSet.Connections(), 16) + walker := repocleaner.NewWalker(nodeSet.Connections(), 16, cmd.onlyIncludeOlderThan) reporter := reportUntrackedRepositories{ ctx: ctx, checker: datastore.NewStorageCleanup(db), diff --git a/cmd/praefect/subcmd_list_untracked_repositories_test.go b/cmd/praefect/subcmd_list_untracked_repositories_test.go index a2c251a81..57b4e1a6d 100644 --- a/cmd/praefect/subcmd_list_untracked_repositories_test.go +++ b/cmd/praefect/subcmd_list_untracked_repositories_test.go @@ -3,7 +3,6 @@ package main import ( "bytes" "context" - "flag" "fmt" "os" "strings" @@ -31,20 +30,20 @@ func TestListUntrackedRepositories_FlagSet(t *testing.T) { exp []interface{} }{ { - desc: "custom value", - args: []string{"--delimiter", ","}, - exp: []interface{}{","}, + desc: "custom values", + args: []string{"--delimiter", ",", "--older-than", "1s"}, + exp: []interface{}{",", time.Second}, }, { - desc: "default value", + desc: "default values", args: nil, - exp: []interface{}{"\n"}, + exp: []interface{}{"\n", 5 * time.Second}, }, } { t.Run(tc.desc, func(t *testing.T) { fs := cmd.FlagSet() require.NoError(t, fs.Parse(tc.args)) - require.ElementsMatch(t, tc.exp, []interface{}{cmd.delimiter}) + require.ElementsMatch(t, tc.exp, []interface{}{cmd.delimiter, cmd.onlyIncludeOlderThan}) }) } } @@ -54,20 +53,6 @@ func TestListUntrackedRepositories_Exec(t *testing.T) { g1Cfg := testcfg.Build(t, testcfg.WithStorages("gitaly-1")) g2Cfg := testcfg.Build(t, testcfg.WithStorages("gitaly-2")) - // Repositories not managed by praefect. - repo1, repo1Path := gittest.InitRepo(t, g1Cfg, g1Cfg.Storages[0]) - repo2, repo2Path := gittest.InitRepo(t, g1Cfg, g1Cfg.Storages[0]) - _, _ = gittest.InitRepo(t, g2Cfg, g2Cfg.Storages[0]) - - require.NoError(t, os.Chtimes( - repo1Path, - time.Now().Add(-(24*time.Hour+1*time.Second)), - time.Now().Add(-(24*time.Hour+1*time.Second)))) - require.NoError(t, os.Chtimes( - repo2Path, - time.Now().Add(-(24*time.Hour+1*time.Second)), - time.Now().Add(-(24*time.Hour+1*time.Second)))) - g1Addr := testserver.RunGitalyServer(t, g1Cfg, nil, setup.RegisterAll, testserver.WithDisablePraefect()) g2Addr := testserver.RunGitalyServer(t, g2Cfg, nil, setup.RegisterAll, testserver.WithDisablePraefect()) @@ -104,7 +89,24 @@ func TestListUntrackedRepositories_Exec(t *testing.T) { createRepo(t, ctx, repoClient, praefectStorage, "path/to/test/repo") out := &bytes.Buffer{} cmd := newListUntrackedRepositories(testhelper.NewDiscardingLogger(t), out) - require.NoError(t, cmd.Exec(flag.NewFlagSet("", flag.PanicOnError), conf)) + fs := cmd.FlagSet() + require.NoError(t, fs.Parse([]string{})) + + // Repositories not managed by praefect. + repo1, repo1Path := gittest.InitRepo(t, g1Cfg, g1Cfg.Storages[0]) + repo2, repo2Path := gittest.InitRepo(t, g1Cfg, g1Cfg.Storages[0]) + _, _ = gittest.InitRepo(t, g2Cfg, g2Cfg.Storages[0]) + + require.NoError(t, os.Chtimes( + repo1Path, + time.Now().Add(-(6*time.Second)), + time.Now().Add(-(6*time.Second)))) + require.NoError(t, os.Chtimes( + repo2Path, + time.Now().Add(-(6*time.Second)), + time.Now().Add(-(6*time.Second)))) + + require.NoError(t, cmd.Exec(fs, conf)) exp := []string{ "The following repositories were found on disk, but missing from the tracking database:", |