Skip to content

Commit 4a895e7

Browse files
authored
Merge branch 'main' into metadata-logging
2 parents 013dd42 + eea2f43 commit 4a895e7

File tree

10 files changed

+87
-38
lines changed

10 files changed

+87
-38
lines changed

internal/driver/controllerserver.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717

1818
linodeclient "github.com/linode/linode-blockstorage-csi-driver/pkg/linode-client"
1919
linodevolumes "github.com/linode/linode-blockstorage-csi-driver/pkg/linode-volumes"
20+
"github.com/linode/linode-blockstorage-csi-driver/pkg/logger"
2021
)
2122

2223
// MinVolumeSizeBytes is the smallest allowed size for a Linode block storage
@@ -91,19 +92,28 @@ type ControllerServer struct {
9192
// If driver or client are nil, NewControllerServer returns a non-nil error.
9293
//
9394
// [Controller Service RPC]: https://github.com/container-storage-interface/spec/blob/master/spec.md#controller-service-rpc
94-
func NewControllerServer(driver *LinodeDriver, client linodeclient.LinodeClient, metadata Metadata) (*ControllerServer, error) {
95+
func NewControllerServer(ctx context.Context, driver *LinodeDriver, client linodeclient.LinodeClient, metadata Metadata) (*ControllerServer, error) {
96+
log := logger.GetLogger(ctx)
97+
98+
log.V(4).Info("Creating new ControllerServer")
99+
95100
if driver == nil {
101+
log.Error(nil, "LinodeDriver is nil")
96102
return nil, errNilDriver
97103
}
98104
if client == nil {
105+
log.Error(nil, "Linode client is nil")
99106
return nil, errors.New("nil client")
100107
}
101108

102-
return &ControllerServer{
109+
cs := &ControllerServer{
103110
driver: driver,
104111
client: client,
105112
metadata: metadata,
106-
}, nil
113+
}
114+
115+
log.V(4).Info("ControllerServer created successfully")
116+
return cs, nil
107117
}
108118

109119
// CreateVolume will be called by the CO to provision a new volume on behalf of a user (to be consumed

internal/driver/driver.go

Lines changed: 35 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -58,15 +58,22 @@ type LinodeDriver struct {
5858
// prefix.
5959
const MaxVolumeLabelPrefixLength = 12
6060

61-
func GetLinodeDriver() *LinodeDriver {
62-
return &LinodeDriver{
61+
func GetLinodeDriver(ctx context.Context) *LinodeDriver {
62+
log, _, done := logger.GetLogger(ctx).WithMethod("GetLinodeDriver")
63+
defer done()
64+
65+
log.V(2).Info("Creating LinodeDriver")
66+
driver := &LinodeDriver{
6367
vcap: VolumeCapabilityAccessModes(),
6468
cscap: ControllerServiceCapabilities(),
6569
nscap: NodeServiceCapabilities(),
6670
}
71+
log.V(2).Info("LinodeDriver created successfully")
72+
return driver
6773
}
6874

6975
func (linodeDriver *LinodeDriver) SetupLinodeDriver(
76+
ctx context.Context,
7077
linodeClient linodeclient.LinodeClient,
7178
mounter *mount.SafeFormatAndMount,
7279
deviceUtils mountmanager.DeviceUtils,
@@ -76,20 +83,19 @@ func (linodeDriver *LinodeDriver) SetupLinodeDriver(
7683
volumeLabelPrefix string,
7784
encrypt Encryption,
7885
) error {
86+
log, ctx, done := logger.GetLogger(ctx).WithMethod("SetupLinodeDriver")
87+
defer done()
88+
89+
log.V(2).Info("Setting up LinodeDriver")
90+
7991
if name == "" {
8092
return fmt.Errorf("driver name missing")
8193
}
8294

8395
linodeDriver.name = name
8496
linodeDriver.vendorVersion = vendorVersion
8597

86-
// Validate the volume label prefix, if it is set.
87-
//
88-
// First, we want to make sure it is the right length, then we will make
89-
// sure it only contains the acceptable characters.
90-
//
91-
// When checking the length, we will convert it to a []rune first, to count
92-
// the number of unicode characters.
98+
log.V(3).Info("Validating volume label prefix", "prefix", volumeLabelPrefix)
9399
if r := []rune(volumeLabelPrefix); len(r) > MaxVolumeLabelPrefixLength {
94100
return fmt.Errorf("volume label prefix is too long: length=%d max=%d", len(r), MaxVolumeLabelPrefixLength)
95101
}
@@ -102,33 +108,41 @@ func (linodeDriver *LinodeDriver) SetupLinodeDriver(
102108
}
103109
linodeDriver.volumeLabelPrefix = volumeLabelPrefix
104110

105-
// Set up RPC Servers
106-
linodeDriver.ns, err = NewNodeServer(linodeDriver, mounter, deviceUtils, linodeClient, metadata, encrypt)
111+
log.V(2).Info("Setting up RPC Servers")
112+
linodeDriver.ns, err = NewNodeServer(ctx, linodeDriver, mounter, deviceUtils, linodeClient, metadata, encrypt)
107113
if err != nil {
108114
return fmt.Errorf("new node server: %w", err)
109115
}
110116

111-
linodeDriver.ids, err = NewIdentityServer(linodeDriver)
117+
linodeDriver.ids, err = NewIdentityServer(ctx, linodeDriver)
112118
if err != nil {
113119
return fmt.Errorf("new identity server: %w", err)
114120
}
115121

116-
cs, err := NewControllerServer(linodeDriver, linodeClient, metadata)
122+
cs, err := NewControllerServer(ctx, linodeDriver, linodeClient, metadata)
117123
if err != nil {
118124
return fmt.Errorf("new controller server: %w", err)
119125
}
120126
linodeDriver.cs = cs
121127

128+
log.V(2).Info("LinodeDriver setup completed successfully")
122129
return nil
123130
}
124131

125-
func (linodeDriver *LinodeDriver) ValidateControllerServiceRequest(c csi.ControllerServiceCapability_RPC_Type) error {
132+
func (linodeDriver *LinodeDriver) ValidateControllerServiceRequest(ctx context.Context, c csi.ControllerServiceCapability_RPC_Type) error {
133+
log, _, done := logger.GetLogger(ctx).WithMethod("ValidateControllerServiceRequest")
134+
defer done()
135+
136+
log.V(4).Info("Validating controller service request", "type", c)
137+
126138
if c == csi.ControllerServiceCapability_RPC_UNKNOWN {
139+
log.V(4).Info("Unknown controller service capability, skipping validation")
127140
return nil
128141
}
129142

130143
for _, cap := range linodeDriver.cscap {
131144
if c == cap.GetRpc().Type {
145+
log.V(4).Info("Controller service request validated successfully")
132146
return nil
133147
}
134148
}
@@ -137,8 +151,10 @@ func (linodeDriver *LinodeDriver) ValidateControllerServiceRequest(c csi.Control
137151
}
138152

139153
func (linodeDriver *LinodeDriver) Run(ctx context.Context, endpoint string) {
140-
log := logger.GetLogger(ctx)
141-
log.V(4).Info("Driver", "name", linodeDriver.name)
154+
log, _, done := logger.GetLogger(ctx).WithMethod("Run")
155+
defer done()
156+
157+
log.V(2).Info("Starting LinodeDriver", "name", linodeDriver.name)
142158
if len(linodeDriver.volumeLabelPrefix) > 0 {
143159
log.V(4).Info("BS Volume Prefix", "prefix", linodeDriver.volumeLabelPrefix)
144160
}
@@ -147,12 +163,10 @@ func (linodeDriver *LinodeDriver) Run(ctx context.Context, endpoint string) {
147163
linodeDriver.ready = true
148164
linodeDriver.readyMu.Unlock()
149165

150-
// Start the nonblocking GRPC
166+
log.V(2).Info("Starting non-blocking GRPC server")
151167
s := NewNonBlockingGRPCServer()
152-
// TODO(#34): Only start specific servers based on a flag.
153-
// In the future have this only run specific combinations of servers depending on which version this is.
154-
// The schema for that was in util. basically it was just s.start but with some nil servers.
155-
156168
s.Start(endpoint, linodeDriver.ids, linodeDriver.cs, linodeDriver.ns)
169+
log.V(2).Info("GRPC server started successfully")
157170
s.Wait()
171+
log.V(2).Info("LinodeDriver run completed")
158172
}

internal/driver/driver_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,8 @@ func TestDriverSuite(t *testing.T) {
7373
Region: fake.Instance.Region,
7474
Memory: 4 << 30, // 4GiB
7575
}
76-
linodeDriver := GetLinodeDriver()
77-
if err := linodeDriver.SetupLinodeDriver(fakeCloudProvider, mounter, deviceUtils, md, driver, vendorVersion, bsPrefix, encrypt); err != nil {
76+
linodeDriver := GetLinodeDriver(context.Background())
77+
if err := linodeDriver.SetupLinodeDriver(context.Background(), fakeCloudProvider, mounter, deviceUtils, md, driver, vendorVersion, bsPrefix, encrypt); err != nil {
7878
t.Fatalf("Failed to setup Linode Driver: %v", err)
7979
}
8080

internal/driver/identityserver.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"fmt"
1919

2020
csi "github.com/container-storage-interface/spec/lib/go/csi"
21+
"github.com/linode/linode-blockstorage-csi-driver/pkg/logger"
2122
"golang.org/x/net/context"
2223
"google.golang.org/grpc/codes"
2324
"google.golang.org/grpc/status"
@@ -31,13 +32,22 @@ type IdentityServer struct {
3132
csi.UnimplementedIdentityServer
3233
}
3334

34-
func NewIdentityServer(linodeDriver *LinodeDriver) (*IdentityServer, error) {
35+
func NewIdentityServer(ctx context.Context, linodeDriver *LinodeDriver) (*IdentityServer, error) {
36+
log := logger.GetLogger(ctx)
37+
38+
log.V(4).Info("Creating new IdentityServer")
39+
3540
if linodeDriver == nil {
41+
log.Error(nil, "LinodeDriver is nil")
3642
return nil, fmt.Errorf("linodeDriver cannot be nil")
3743
}
38-
return &IdentityServer{
44+
45+
identityServer := &IdentityServer{
3946
driver: linodeDriver,
40-
}, nil
47+
}
48+
49+
log.V(4).Info("IdentityServer created successfully")
50+
return identityServer, nil
4151
}
4252

4353
// GetPluginInfo(context.Context, *GetPluginInfoRequest) (*GetPluginInfoResponse, error)

internal/driver/identityserver_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ limitations under the License.
1515
package driver
1616

1717
import (
18+
"context"
1819
"reflect"
1920
"testing"
2021
)
@@ -50,7 +51,7 @@ func TestNewIdentityServer(t *testing.T) {
5051
}
5152
for _, tt := range tests {
5253
t.Run(tt.name, func(t *testing.T) {
53-
got, err := NewIdentityServer(tt.args.linodeDriver)
54+
got, err := NewIdentityServer(context.Background(), tt.args.linodeDriver)
5455
if (err != nil) != tt.wantErr {
5556
t.Errorf("NewIdentityServer() error = %v, wantErr %v", err, tt.wantErr)
5657
return

internal/driver/nodeserver.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,28 +45,39 @@ type NodeServer struct {
4545

4646
var _ csi.NodeServer = &NodeServer{}
4747

48-
func NewNodeServer(linodeDriver *LinodeDriver, mounter *mount.SafeFormatAndMount, deviceUtils mountmanager.DeviceUtils, client linodeclient.LinodeClient, metadata Metadata, encrypt Encryption) (*NodeServer, error) {
48+
func NewNodeServer(ctx context.Context, linodeDriver *LinodeDriver, mounter *mount.SafeFormatAndMount, deviceUtils mountmanager.DeviceUtils, client linodeclient.LinodeClient, metadata Metadata, encrypt Encryption) (*NodeServer, error) {
49+
log := logger.GetLogger(ctx)
50+
51+
log.V(4).Info("Creating new NodeServer")
52+
4953
if linodeDriver == nil {
54+
log.Error(nil, "LinodeDriver is nil")
5055
return nil, fmt.Errorf("linodeDriver is nil")
5156
}
5257
if mounter == nil {
58+
log.Error(nil, "Mounter is nil")
5359
return nil, fmt.Errorf("mounter is nil")
5460
}
5561
if deviceUtils == nil {
62+
log.Error(nil, "DeviceUtils is nil")
5663
return nil, fmt.Errorf("deviceUtils is nil")
5764
}
5865
if client == nil {
66+
log.Error(nil, "Linode client is nil")
5967
return nil, fmt.Errorf("linode client is nil")
6068
}
6169

62-
return &NodeServer{
70+
ns := &NodeServer{
6371
driver: linodeDriver,
6472
mounter: mounter,
6573
deviceutils: deviceUtils,
6674
client: client,
6775
metadata: metadata,
6876
encrypt: encrypt,
69-
}, nil
77+
}
78+
79+
log.V(4).Info("NodeServer created successfully")
80+
return ns, nil
7081
}
7182

7283
func (ns *NodeServer) NodePublishVolume(ctx context.Context, req *csi.NodePublishVolumeRequest) (*csi.NodePublishVolumeResponse, error) {

internal/driver/nodeserver_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package driver
22

33
import (
4+
"context"
45
"reflect"
56
"testing"
67

@@ -100,7 +101,7 @@ func TestNewNodeServer(t *testing.T) {
100101
}
101102
for _, tt := range tests {
102103
t.Run(tt.name, func(t *testing.T) {
103-
got, err := NewNodeServer(tt.args.linodeDriver, tt.args.mounter, tt.args.deviceUtils, tt.args.client, tt.args.metadata, tt.args.encrypt)
104+
got, err := NewNodeServer(context.Background(), tt.args.linodeDriver, tt.args.mounter, tt.args.deviceUtils, tt.args.client, tt.args.metadata, tt.args.encrypt)
104105
if (err != nil) != tt.wantErr {
105106
t.Errorf("NewNodeServer() error = %v, wantErr %v", err, tt.wantErr)
106107
return

internal/driver/nodeserver_windows.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
package driver
22

33
import (
4+
"context"
45
"fmt"
56

67
"github.com/container-storage-interface/spec/lib/go/csi"
78
"google.golang.org/grpc/codes"
89
"google.golang.org/grpc/status"
910
)
1011

11-
func nodeGetVolumeStats(req *csi.NodeGetVolumeStatsRequest) (*csi.NodeGetVolumeStatsResponse, error) {
12+
func nodeGetVolumeStats(ctx context.Context, req *csi.NodeGetVolumeStatsRequest) (*csi.NodeGetVolumeStatsResponse, error) {
1213
return nil, status.Error(codes.Unimplemented, fmt.Sprintf("NodeGetVolumeStats is not yet implemented on Windows"))
1314
}

main.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ func handle(ctx context.Context) error {
9696
return errors.New("linode token required")
9797
}
9898

99-
linodeDriver := driver.GetLinodeDriver()
99+
linodeDriver := driver.GetLinodeDriver(ctx)
100100

101101
// Initialize Linode Driver (Move setup to main?)
102102
uaPrefix := fmt.Sprintf("LinodeCSI/%s", vendorVersion)
@@ -119,6 +119,7 @@ func handle(ctx context.Context) error {
119119
}
120120

121121
if err := linodeDriver.SetupLinodeDriver(
122+
ctx,
122123
cloudProvider,
123124
mounter,
124125
deviceUtils,

pkg/logger/logger.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ func NewLogger(ctx context.Context) *Logger {
2121
}
2222
}
2323

24-
// WithMethod returns a new Logger with method and traceID values,
24+
// WithMethod returns a new Logger with method and traceID values,
2525
// a context containing the new Logger, and a function to log method completion.
2626
func (l *Logger) WithMethod(method string) (*Logger, context.Context, func()) {
2727
traceID := uuid.New().String()
@@ -53,4 +53,4 @@ func GetLogger(ctx context.Context) *Logger {
5353
return logger
5454
}
5555
return NewLogger(ctx)
56-
}
56+
}

0 commit comments

Comments
 (0)