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:
authorZeger-Jan van de Weg <git@zjvandeweg.nl>2018-07-24 15:35:28 +0300
committerZeger-Jan van de Weg <git@zjvandeweg.nl>2018-07-24 15:46:44 +0300
commitddcd4136187294a69617f16f0b08dcff8e037923 (patch)
treee694f87c3f7b2d0f7580c2a47b82669553d45228
parent9d7920fb8cc133bea541375a23de789bf70f375f (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.yml5
-rw-r--r--internal/service/repository/cleanup.go25
-rw-r--r--internal/service/repository/cleanup_test.go33
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)
+}