diff options
author | Jacob Vosmaer (GitLab) <jacob@gitlab.com> | 2018-07-24 16:51:06 +0300 |
---|---|---|
committer | Jacob Vosmaer (GitLab) <jacob@gitlab.com> | 2018-07-24 16:51:06 +0300 |
commit | 1796b4a885189da2cc9d70c582ba4713690f04d0 (patch) | |
tree | 26ace00b4277a974febacc6e4c47ac8acaf472b6 | |
parent | 9d6f61c543069d858bd3469d80f89b9b03eceb0b (diff) | |
parent | ddcd4136187294a69617f16f0b08dcff8e037923 (diff) |
Merge branch 'zj-config-lock-removal' into 'master'
Remove stale config.lock files
See merge request gitlab-org/gitaly!832
-rw-r--r-- | changelogs/unreleased/zj-config-lock-removal.yml | 5 | ||||
-rw-r--r-- | internal/service/repository/cleanup.go | 25 | ||||
-rw-r--r-- | internal/service/repository/cleanup_test.go | 33 |
3 files changed, 63 insertions, 0 deletions
diff --git a/changelogs/unreleased/zj-config-lock-removal.yml b/changelogs/unreleased/zj-config-lock-removal.yml new file mode 100644 index 000000000..41433a9d3 --- /dev/null +++ b/changelogs/unreleased/zj-config-lock-removal.yml @@ -0,0 +1,5 @@ +--- +title: Remove stale config.lock files +merge_request: 832 +author: +type: added diff --git a/internal/service/repository/cleanup.go b/internal/service/repository/cleanup.go index f54a3dfb1..571cf2059 100644 --- a/internal/service/repository/cleanup.go +++ b/internal/service/repository/cleanup.go @@ -42,6 +42,11 @@ func cleanupRepo(repoPath string) error { return status.Errorf(codes.Internal, "Cleanup: cleanStaleWorktrees: %v", err) } + configLockThreshod := time.Now().Add(-15 * time.Minute) + if err := cleanupConfigLock(repoPath, configLockThreshod); err != nil { + return status.Errorf(codes.Internal, "Cleanup: cleanupConfigLock: %v", err) + } + return nil } @@ -121,3 +126,23 @@ func cleanStaleWorktrees(repoPath string, threshold time.Time) error { return nil } + +func cleanupConfigLock(repoPath string, threshold time.Time) error { + configLockPath := filepath.Join(repoPath, "config.lock") + + fi, err := os.Stat(configLockPath) + if err != nil { + if os.IsNotExist(err) { + return nil + } + return err + } + + if fi.ModTime().Before(threshold) { + if err := os.Remove(configLockPath); err != nil && !os.IsNotExist(err) { + return err + } + } + + return nil +} diff --git a/internal/service/repository/cleanup_test.go b/internal/service/repository/cleanup_test.go index 70de2fab8..6db127de5 100644 --- a/internal/service/repository/cleanup_test.go +++ b/internal/service/repository/cleanup_test.go @@ -185,3 +185,36 @@ func TestCleanupDeletesStaleWorktrees(t *testing.T) { }) } } + +func TestCleanupConfigLocks(t *testing.T) { + server, serverSocketPath := runRepoServer(t) + defer server.Stop() + + client, conn := newRepositoryClient(t, serverSocketPath) + defer conn.Close() + + testRepo, testRepoPath, cleanupFn := testhelper.NewTestRepo(t) + defer cleanupFn() + + ctx, cancel := testhelper.Context() + defer cancel() + + req := &pb.CleanupRequest{Repository: testRepo} + lockPath := filepath.Join(testRepoPath, "config.lock") + + // No file on the lock path + _, err := client.Cleanup(ctx, req) + assert.NoError(t, err) + + // Fresh lock should remain + createFileWithTimes(lockPath, freshTime) + _, err = client.Cleanup(ctx, req) + assert.NoError(t, err) + assert.FileExists(t, lockPath) + + // Old lock should be removed + createFileWithTimes(lockPath, oldTime) + _, err = client.Cleanup(ctx, req) + assert.NoError(t, err) + testhelper.AssertFileNotExists(t, lockPath) +} |