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>2022-04-08 20:55:30 +0300
committerJohn Cai <jcai@gitlab.com>2022-04-08 21:47:44 +0300
commitbf4d632197245cba2d9262e2fb3495d8404c03f5 (patch)
tree82837cced0c222552533837f4ec4aeb3bf21c740
parente9aa2ce490e68388607ed87fcea4270e13de4440 (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.go15
-rw-r--r--cmd/praefect/subcmd_list_untracked_repositories_test.go46
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:",