diff options
author | Patrick Steinhardt <psteinhardt@gitlab.com> | 2021-09-23 12:40:08 +0300 |
---|---|---|
committer | Patrick Steinhardt <psteinhardt@gitlab.com> | 2021-10-07 10:17:47 +0300 |
commit | 5981dc5272068e19cf88cfae8eef5211ec79b99e (patch) | |
tree | 6828ca78080e90385be41682c6fefec37676f9f0 | |
parent | 401a62b5e69d8ce10993c54cd705df287b42b5c6 (diff) |
global: Close gRPC connections
When creating gRPC connections, then we spawn a set of Goroutines which
listen on these connections. As a result, if they are never closed,
those Goroutines are leaked.
Fix this by closing connections.
-rw-r--r-- | internal/gitaly/server/auth_test.go | 1 | ||||
-rw-r--r-- | internal/gitaly/server/server_factory_test.go | 4 | ||||
-rw-r--r-- | internal/gitaly/service/repository/clone_from_pool_test.go | 3 | ||||
-rw-r--r-- | internal/gitaly/service/smarthttp/inforefs_test.go | 3 | ||||
-rw-r--r-- | internal/praefect/middleware/errorhandler_test.go | 2 | ||||
-rw-r--r-- | internal/praefect/nodes/local_elector_test.go | 1 | ||||
-rw-r--r-- | internal/praefect/nodes/manager_test.go | 1 | ||||
-rw-r--r-- | internal/praefect/nodes/sql_elector_test.go | 4 | ||||
-rw-r--r-- | internal/praefect/replicator_pg_test.go | 1 | ||||
-rw-r--r-- | internal/praefect/repository_exists_test.go | 1 | ||||
-rw-r--r-- | internal/praefect/server_test.go | 2 |
11 files changed, 20 insertions, 3 deletions
diff --git a/internal/gitaly/server/auth_test.go b/internal/gitaly/server/auth_test.go index 803c2680d..adf2d6300 100644 --- a/internal/gitaly/server/auth_test.go +++ b/internal/gitaly/server/auth_test.go @@ -248,6 +248,7 @@ func TestUnaryNoAuth(t *testing.T) { path := runServer(t, cfg) conn, err := grpc.Dial(path, grpc.WithInsecure()) require.NoError(t, err) + defer testhelper.MustClose(t, conn) ctx, cancel := testhelper.Context() defer cancel() diff --git a/internal/gitaly/server/server_factory_test.go b/internal/gitaly/server/server_factory_test.go index c851c32d7..369cf3775 100644 --- a/internal/gitaly/server/server_factory_test.go +++ b/internal/gitaly/server/server_factory_test.go @@ -239,8 +239,10 @@ func TestGitalyServerFactory_closeOrder(t *testing.T) { go server.Serve(ln) - *builder.conn, err = grpc.DialContext(ctx, ln.Addr().String(), grpc.WithInsecure()) + conn, err := grpc.DialContext(ctx, ln.Addr().String(), grpc.WithInsecure()) require.NoError(t, err) + t.Cleanup(func() { testhelper.MustClose(t, conn) }) + *builder.conn = conn } // both servers should be up and accepting RPCs diff --git a/internal/gitaly/service/repository/clone_from_pool_test.go b/internal/gitaly/service/repository/clone_from_pool_test.go index 7a6623554..41de34186 100644 --- a/internal/gitaly/service/repository/clone_from_pool_test.go +++ b/internal/gitaly/service/repository/clone_from_pool_test.go @@ -37,7 +37,8 @@ func TestCloneFromPoolHTTP(t *testing.T) { defer forkRepoCleanup() authorizationHeader := "ABCefg0999182" - _, remoteURL := gittest.RemoteUploadPackServer(ctx, t, cfg.Git.BinPath, "my-repo", authorizationHeader, repoPath) + server, remoteURL := gittest.RemoteUploadPackServer(ctx, t, cfg.Git.BinPath, "my-repo", authorizationHeader, repoPath) + defer server.Close() req := &gitalypb.CloneFromPoolRequest{ Repository: forkedRepo, diff --git a/internal/gitaly/service/smarthttp/inforefs_test.go b/internal/gitaly/service/smarthttp/inforefs_test.go index 1746aca5d..d2ccaeb37 100644 --- a/internal/gitaly/service/smarthttp/inforefs_test.go +++ b/internal/gitaly/service/smarthttp/inforefs_test.go @@ -121,7 +121,8 @@ func TestSuccessfulInfoRefsUploadPackWithGitProtocol(t *testing.T) { GitProtocol: git.ProtocolV2, } - client, _ := newSmartHTTPClient(t, serverSocketPath, cfg.Auth.Token) + client, conn := newSmartHTTPClient(t, serverSocketPath, cfg.Auth.Token) + defer testhelper.MustClose(t, conn) ctx, cancel := testhelper.Context() defer cancel() diff --git a/internal/praefect/middleware/errorhandler_test.go b/internal/praefect/middleware/errorhandler_test.go index fada40963..f85deea77 100644 --- a/internal/praefect/middleware/errorhandler_test.go +++ b/internal/praefect/middleware/errorhandler_test.go @@ -75,6 +75,7 @@ func TestStreamInterceptor(t *testing.T) { grpc.WithStreamInterceptor(StreamErrorHandler(registry, errTracker, nodeName)), ) require.NoError(t, err) + t.Cleanup(func() { testhelper.MustClose(t, cc) }) f, err := peeker.Peek() require.NoError(t, err) return proxy.NewStreamParameters(proxy.Destination{Conn: cc, Ctx: ctx, Msg: f}, nil, func() error { return nil }, nil), nil @@ -90,6 +91,7 @@ func TestStreamInterceptor(t *testing.T) { go praefectSrv.Serve(praefectLis) praefectCC, err := grpc.Dial("unix://"+praefectSocket, grpc.WithInsecure()) + defer testhelper.MustClose(t, praefectCC) require.NoError(t, err) simpleClient := mock.NewSimpleServiceClient(praefectCC) diff --git a/internal/praefect/nodes/local_elector_test.go b/internal/praefect/nodes/local_elector_test.go index 778e85613..2976c32ee 100644 --- a/internal/praefect/nodes/local_elector_test.go +++ b/internal/praefect/nodes/local_elector_test.go @@ -20,6 +20,7 @@ func setupElector(t *testing.T) (*localElector, []*nodeStatus, *grpc.ClientConn) "unix://"+socket, grpc.WithInsecure(), ) + t.Cleanup(func() { testhelper.MustClose(t, cc) }) require.NoError(t, err) diff --git a/internal/praefect/nodes/manager_test.go b/internal/praefect/nodes/manager_test.go index 1c0416389..2060c7fcc 100644 --- a/internal/praefect/nodes/manager_test.go +++ b/internal/praefect/nodes/manager_test.go @@ -63,6 +63,7 @@ func TestNodeStatus(t *testing.T) { "unix://"+socket, grpc.WithInsecure(), ) + defer testhelper.MustClose(t, cc) require.NoError(t, err) diff --git a/internal/praefect/nodes/sql_elector_test.go b/internal/praefect/nodes/sql_elector_test.go index 84bbd0bcd..b86651e5b 100644 --- a/internal/praefect/nodes/sql_elector_test.go +++ b/internal/praefect/nodes/sql_elector_test.go @@ -47,6 +47,7 @@ func TestGetPrimaryAndSecondaries(t *testing.T) { "unix://"+internalSocket0, grpc.WithInsecure(), ) + defer testhelper.MustClose(t, cc0) require.NoError(t, err) storageName := "default" @@ -85,6 +86,7 @@ func TestSqlElector_slow_execution(t *testing.T) { "unix://"+gitalySocket, grpc.WithInsecure(), ) + defer testhelper.MustClose(t, gitalyConn) require.NoError(t, err) gitalyNodeStatus := newConnectionStatus(config.Node{Storage: "gitaly", Address: "gitaly-address"}, gitalyConn, logger, promtest.NewMockHistogramVec(), nil) @@ -128,6 +130,7 @@ func TestBasicFailover(t *testing.T) { addr0, grpc.WithInsecure(), ) + defer testhelper.MustClose(t, cc0) require.NoError(t, err) addr1 := "unix://" + internalSocket1 @@ -135,6 +138,7 @@ func TestBasicFailover(t *testing.T) { addr1, grpc.WithInsecure(), ) + defer testhelper.MustClose(t, cc1) require.NoError(t, err) diff --git a/internal/praefect/replicator_pg_test.go b/internal/praefect/replicator_pg_test.go index d790a88c3..a1eccbed3 100644 --- a/internal/praefect/replicator_pg_test.go +++ b/internal/praefect/replicator_pg_test.go @@ -48,6 +48,7 @@ func TestReplicatorInvalidSourceRepository(t *testing.T) { targetCC, err := client.Dial(ln.Addr().Network()+":"+ln.Addr().String(), nil) require.NoError(t, err) + defer testhelper.MustClose(t, targetCC) rs := datastore.NewPostgresRepositoryStore(glsql.NewDB(t), nil) require.NoError(t, rs.SetGeneration(ctx, "virtual-storage-1", "relative-path-1", "gitaly-1", 0)) diff --git a/internal/praefect/repository_exists_test.go b/internal/praefect/repository_exists_test.go index cf66210f2..39a25a71d 100644 --- a/internal/praefect/repository_exists_test.go +++ b/internal/praefect/repository_exists_test.go @@ -108,6 +108,7 @@ func TestRepositoryExistsHandler(t *testing.T) { clientConn, err := grpc.DialContext(ctx, "unix://"+ln.Addr().String(), grpc.WithInsecure()) require.NoError(t, err) + defer testhelper.MustClose(t, clientConn) client := gitalypb.NewRepositoryServiceClient(clientConn) _, err = client.RepositorySize(ctx, &gitalypb.RepositorySizeRequest{Repository: tc.repository}) diff --git a/internal/praefect/server_test.go b/internal/praefect/server_test.go index ec1b21715..20933e5fe 100644 --- a/internal/praefect/server_test.go +++ b/internal/praefect/server_test.go @@ -1005,6 +1005,7 @@ func TestErrorThreshold(t *testing.T) { conn, err := dial("unix://"+socket, []grpc.DialOption{grpc.WithInsecure()}) require.NoError(t, err) + defer testhelper.MustClose(t, conn) cli := mock.NewSimpleServiceClient(conn) _, repo, _ := testcfg.BuildWithRepo(t) @@ -1048,6 +1049,7 @@ func newSmartHTTPClient(t *testing.T, serverSocketPath string) (gitalypb.SmartHT conn, err := grpc.Dial(serverSocketPath, grpc.WithInsecure()) require.NoError(t, err) + t.Cleanup(func() { testhelper.MustClose(t, conn) }) return gitalypb.NewSmartHTTPServiceClient(conn), conn } |