diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 41ace8a383e38b89f9c4959a9b02c68d9087f5bd..e18cdcd1059a775bac050b4d827a0e661c027ecf 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -317,7 +317,9 @@ test:reftable: <<: *test_definition variables: <<: *test_variables - TEST_TARGET: test-with-reftable + parallel: + matrix: + - TEST_TARGET: [test-with-reftable, test-with-reftable-wal] test:nightly: <<: *test_definition diff --git a/Makefile b/Makefile index 3c0494548bb3b7cd34fcbbf914e30f2dbab188f6..eacc403276345c60d45405eb7f7df218f1bd5c50 100644 --- a/Makefile +++ b/Makefile @@ -447,6 +447,11 @@ bench: ${BENCHMARK_REPO} prepare-tests test-with-reftable: export GITALY_TEST_REF_FORMAT = reftable test-with-reftable: test-go +.PHONY: test-with-reftable-wal +## Run Go tests with git's reftable backend and write-ahead logging enabled. +test-with-reftable-wal: export GITALY_TEST_WAL = YesPlease +test-with-reftable-wal: test-with-reftable + .PHONY: test-with-sha256 ## Run Go tests with SHA256 repositories. test-with-sha256: export GITALY_TEST_WITH_SHA256 = YesPlease diff --git a/internal/gitaly/service/repository/calculate_checksum_test.go b/internal/gitaly/service/repository/calculate_checksum_test.go index 9505687f3b94e4a2e770a7c54955e99f7895a2fa..596c3f415d7a9d7a5aa87ea3642513e73f540930 100644 --- a/internal/gitaly/service/repository/calculate_checksum_test.go +++ b/internal/gitaly/service/repository/calculate_checksum_test.go @@ -186,10 +186,13 @@ func TestCalculateChecksum(t *testing.T) { headRefIdx := bytes.Index(reftableFileContent, []byte("HEAD")) nope := []byte("NOPE") - for i := 0; i < len(nope); i++ { + for i := range len(nope) { reftableFileContent[i+headRefIdx] = nope[i] } + // When the WAL is enabled, files in the canonical repository will have read-only permissions. + // We need to first remove the file and re-create it. + require.NoError(t, os.Remove(reftableFilePath)) require.NoError(t, os.WriteFile(reftableFilePath, reftableFileContent, os.ModePerm)) } else { commitID := gittest.WriteCommit(t, cfg, repoPath, gittest.WithBranch(git.DefaultBranch)) @@ -200,7 +203,7 @@ func TestCalculateChecksum(t *testing.T) { // repository from a corrupt repository given that both cases return the zero checksum. require.NoError(t, os.WriteFile( filepath.Join(repoPath, "packed-refs"), - []byte(fmt.Sprintf("# pack-refs with: peeled fully-peeled sorted\n%s refs/heads/broken:reference\n", commitID)), + fmt.Appendf(nil, "# pack-refs with: peeled fully-peeled sorted\n%s refs/heads/broken:reference\n", commitID), mode.File, )) } diff --git a/internal/gitaly/storage/storagemgr/partition/migration/reftable/middleware_test.go b/internal/gitaly/storage/storagemgr/partition/migration/reftable/middleware_test.go index 33cd2e53f363e0f166907a941941b300d49bab2d..c1500dc6396729a59985861030d27db65645b807 100644 --- a/internal/gitaly/storage/storagemgr/partition/migration/reftable/middleware_test.go +++ b/internal/gitaly/storage/storagemgr/partition/migration/reftable/middleware_test.go @@ -40,6 +40,11 @@ func testUnaryInterceptor(t *testing.T, ctx context.Context) { } var reftableMigrator *migrator + defer func() { + if reftableMigrator != nil { + reftableMigrator.Close() + } + }() callback := func(logger log.Logger, node storage.Node, factory localrepo.Factory) ([]grpc.UnaryServerInterceptor, []grpc.StreamServerInterceptor) { reftableMigrator = NewMigrator(logger, NewMetrics(), node, factory) reftableMigrator.Run() @@ -119,6 +124,11 @@ func testStreamInterceptor(t *testing.T, ctx context.Context) { } var reftableMigrator *migrator + defer func() { + if reftableMigrator != nil { + reftableMigrator.Close() + } + }() callback := func(logger log.Logger, node storage.Node, factory localrepo.Factory) ([]grpc.UnaryServerInterceptor, []grpc.StreamServerInterceptor) { reftableMigrator = NewMigrator(logger, NewMetrics(), node, factory) reftableMigrator.Run()