Skip to content

Commit 8c6b50d

Browse files
authored
Merge pull request #209 from weaveworks-liquidmetal/fix_grpc_connection_close
fix: explicitly close grpc client connection
2 parents af96cb5 + c9ad8c8 commit 8c6b50d

File tree

5 files changed

+81
-3
lines changed

5 files changed

+81
-3
lines changed

controllers/microvmmachine_controller.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,8 @@ func (r *MicrovmMachineReconciler) reconcileNormal(
256256
return ctrl.Result{}, err
257257
}
258258

259+
defer mvmSvc.Dispose()
260+
259261
var microvm *flintlocktypes.MicroVM
260262

261263
providerID := machineScope.GetProviderID()

internal/client/client.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,10 @@ func NewFlintlockClient(address string, opts ...Options) (microvm.Client, error)
9090
return nil, fmt.Errorf("creating grpc connection: %w", err)
9191
}
9292

93-
flClient := flintlockv1.NewMicroVMClient(conn)
94-
95-
return flClient, nil
93+
return &disposableClient{
94+
flintlockClient: flintlockv1.NewMicroVMClient(conn),
95+
conn: conn,
96+
}, nil
9697
}
9798

9899
func buildConfig(opts ...Options) clientConfig {

internal/client/disposable.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package client
2+
3+
import (
4+
"context"
5+
6+
flintlockv1 "github.com/weaveworks-liquidmetal/flintlock/api/services/microvm/v1alpha1"
7+
"google.golang.org/grpc"
8+
"google.golang.org/protobuf/types/known/emptypb"
9+
)
10+
11+
type disposableClient struct {
12+
flintlockClient flintlockv1.MicroVMClient
13+
conn *grpc.ClientConn
14+
}
15+
16+
func (c *disposableClient) Dispose() {
17+
if c.conn != nil {
18+
c.conn.Close()
19+
}
20+
}
21+
22+
func (c *disposableClient) CreateMicroVM(ctx context.Context, in *flintlockv1.CreateMicroVMRequest, opts ...grpc.CallOption) (*flintlockv1.CreateMicroVMResponse, error) { //nolint:lll // it would make it less readable
23+
return c.flintlockClient.CreateMicroVM(ctx, in, opts...)
24+
}
25+
26+
func (c *disposableClient) DeleteMicroVM(ctx context.Context, in *flintlockv1.DeleteMicroVMRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { //nolint:lll // it would make it less readable
27+
return c.flintlockClient.DeleteMicroVM(ctx, in, opts...)
28+
}
29+
30+
func (c *disposableClient) GetMicroVM(ctx context.Context, in *flintlockv1.GetMicroVMRequest, opts ...grpc.CallOption) (*flintlockv1.GetMicroVMResponse, error) { //nolint:lll // it would make it less readable
31+
return c.flintlockClient.GetMicroVM(ctx, in, opts...)
32+
}
33+
34+
func (c *disposableClient) ListMicroVMs(ctx context.Context, in *flintlockv1.ListMicroVMsRequest, opts ...grpc.CallOption) (*flintlockv1.ListMicroVMsResponse, error) { //nolint:lll // it would make it less readable
35+
return c.flintlockClient.ListMicroVMs(ctx, in, opts...)
36+
}
37+
38+
func (c *disposableClient) ListMicroVMsStream(ctx context.Context, in *flintlockv1.ListMicroVMsRequest, opts ...grpc.CallOption) (flintlockv1.MicroVM_ListMicroVMsStreamClient, error) { //nolint:lll // it would make it less readable
39+
return c.flintlockClient.ListMicroVMsStream(ctx, in, opts...)
40+
}

internal/services/microvm/mock_client/fake_client.go

Lines changed: 30 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/services/microvm/service.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ const (
2727

2828
type Client interface {
2929
flintlockv1.MicroVMClient
30+
Dispose()
3031
}
3132

3233
type Service struct {
@@ -113,6 +114,10 @@ func (s *Service) Delete(ctx context.Context) (*emptypb.Empty, error) {
113114
return s.client.DeleteMicroVM(ctx, input)
114115
}
115116

117+
func (s *Service) Dispose() {
118+
s.client.Dispose()
119+
}
120+
116121
func (s *Service) addMetadata(apiMicroVM *flintlocktypes.MicroVMSpec) error {
117122
bootstrapData, err := s.scope.GetRawBootstrapData()
118123
if err != nil {

0 commit comments

Comments
 (0)