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:
authorSami Hiltunen <shiltunen@gitlab.com>2022-05-31 15:34:52 +0300
committerSami Hiltunen <shiltunen@gitlab.com>2022-05-31 15:34:52 +0300
commit0e1626567a026c1b6cbd34e9ece8b102b99f85a4 (patch)
tree397d3b26ef1a434dfc7024753fb5e4698364ce59
parent398923d81d707c84e1873690cb99daa140642051 (diff)
parent59864b3bc908d82789fbd289f1de04672cfe5a82 (diff)
Merge branch 'pks-streamcache-fix-flaky-test' into 'master'
streamcache: Unlock waiters after cache keys have been pruned See merge request gitlab-org/gitaly!4589
-rw-r--r--internal/streamcache/cache.go6
-rw-r--r--internal/streamcache/cache_test.go2
2 files changed, 5 insertions, 3 deletions
diff --git a/internal/streamcache/cache.go b/internal/streamcache/cache.go
index a6e39233b..333be63c7 100644
--- a/internal/streamcache/cache.go
+++ b/internal/streamcache/cache.go
@@ -320,7 +320,11 @@ func (c *cache) newEntry(key string, create func(io.Writer) error) (_ *Stream, _
go func() {
err := runCreate(e.pipe, create)
- e.waiter.SetError(err)
+
+ // We defer this until after we have removed the cache entry so that the waiter is
+ // only unblocked when the cache key has already been pruned from the cache.
+ defer e.waiter.SetError(err)
+
if err != nil {
c.logger.WithError(err).Error("create cache entry")
c.m.Lock()
diff --git a/internal/streamcache/cache_test.go b/internal/streamcache/cache_test.go
index a90c4be3b..fa7f1da46 100644
--- a/internal/streamcache/cache_test.go
+++ b/internal/streamcache/cache_test.go
@@ -339,8 +339,6 @@ func TestCache_failedWrite(t *testing.T) {
require.NoError(t, r1.Close(), "errors on the write end are not propagated via Close()")
require.Error(t, r1.Wait(ctx), "error propagation happens via Wait()")
- time.Sleep(10 * time.Millisecond)
-
const happy = "all is good"
r2, created, err := c.FindOrCreate(tc.desc, writeString(happy))
require.NoError(t, err)