diff options
author | Zeger-Jan van de Weg <git@zjvandeweg.nl> | 2018-07-24 15:35:28 +0300 |
---|---|---|
committer | Zeger-Jan van de Weg <git@zjvandeweg.nl> | 2018-07-24 15:46:44 +0300 |
commit | ddcd4136187294a69617f16f0b08dcff8e037923 (patch) | |
tree | e694f87c3f7b2d0f7580c2a47b82669553d45228 | |
parent | 9d7920fb8cc133bea541375a23de789bf70f375f (diff) |
Remove config.lock when stale
During reviewing of
https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/20806, it was
discovered that we don't cleaup stale config.lock files.
After this commit is released it will be part of general cleaup
procedures.
-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) +} |