diff options
author | Sami Hiltunen <shiltunen@gitlab.com> | 2022-05-31 15:34:52 +0300 |
---|---|---|
committer | Sami Hiltunen <shiltunen@gitlab.com> | 2022-05-31 15:34:52 +0300 |
commit | 0e1626567a026c1b6cbd34e9ece8b102b99f85a4 (patch) | |
tree | 397d3b26ef1a434dfc7024753fb5e4698364ce59 | |
parent | 398923d81d707c84e1873690cb99daa140642051 (diff) | |
parent | 59864b3bc908d82789fbd289f1de04672cfe5a82 (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.go | 6 | ||||
-rw-r--r-- | internal/streamcache/cache_test.go | 2 |
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) |