Skip to content

Commit 13ed04d

Browse files
authored
Fix driver initialization failure and backend updates
1 parent 964332f commit 13ed04d

File tree

3 files changed

+56
-16
lines changed

3 files changed

+56
-16
lines changed

core/orchestrator_core.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1337,8 +1337,16 @@ func (o *TridentOrchestrator) updateBackendByBackendUUID(
13371337
return nil, err
13381338
case updateCode.Contains(storage.PrefixChange):
13391339
err := errors.UnsupportedConfigError("updating the storage prefix isn't currently supported")
1340-
Logc(ctx).WithField("error", err).Error("Backend update failed.")
1341-
return nil, err
1340+
// TODO: (victorir) to unblock updating a backend 25.02. Needs refactoring.
1341+
Logc(ctx).WithField("error", err).Error("Backend update continuing, " +
1342+
"if storage prefix has been changed there may be errors.")
1343+
// return nil, err
1344+
// Update backend information
1345+
if err = o.updateBackendOnPersistentStore(ctx, backend, false); err != nil {
1346+
Logc(ctx).WithField("error", err).Errorf("Could not persist renamed backend from %v to %v",
1347+
originalBackend.Name(), backend.Name())
1348+
return nil, err
1349+
}
13421350
case updateCode.Contains(storage.BackendRename):
13431351
checkingBackend, lookupErr := o.getBackendByBackendName(backend.Name())
13441352
if lookupErr == nil {

core/orchestrator_core_test.go

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7639,16 +7639,17 @@ func TestUpdateBackendByBackendUUID(t *testing.T) {
76397639
mocks: func(mockStoreClient *mockpersistentstore.MockStoreClient) {},
76407640
wantErr: assert.Error,
76417641
},
7642-
{
7643-
name: "UpdateStoragePrefixError",
7644-
backendName: bName,
7645-
newBackendConfig: map[string]interface{}{
7646-
"version": 1, "storageDriverName": "fake", "backendName": bName,
7647-
"storagePrefix": "new", "protocol": config.File,
7648-
},
7649-
mocks: func(mockStoreClient *mockpersistentstore.MockStoreClient) {},
7650-
wantErr: assert.Error,
7651-
},
7642+
// TODO: (victorir) to unblock updating a backend 25.02. Needs refactoring.
7643+
// {
7644+
// name: "UpdateStoragePrefixError",
7645+
// backendName: bName,
7646+
// newBackendConfig: map[string]interface{}{
7647+
// "version": 1, "storageDriverName": "fake", "backendName": bName,
7648+
// "storagePrefix": "new", "protocol": config.File,
7649+
// },
7650+
// mocks: func(mockStoreClient *mockpersistentstore.MockStoreClient) {},
7651+
// wantErr: assert.Error,
7652+
// },
76527653
{
76537654
name: "BackendRenameWithExistingNameError",
76547655
backendName: bName,

storage_drivers/ontap/ontap_factory.go

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright 2024 NetApp, Inc. All Rights Reserved.
1+
// Copyright 2025 NetApp, Inc. All Rights Reserved.
22

33
package ontap
44

@@ -30,6 +30,7 @@ func GetStorageDriver(
3030
ctx context.Context, configJSON string, commonConfig *drivers.CommonStorageDriverConfig,
3131
backendSecret map[string]string,
3232
) (storage.Driver, error) {
33+
var storageDriver storage.Driver
3334
driverProtocol, err := GetDriverProtocol(commonConfig.StorageDriverName, configJSON)
3435
if err != nil {
3536
Logc(ctx).WithField("error", err).Error("Failed to get driver protocol.")
@@ -51,8 +52,13 @@ func GetStorageDriver(
5152

5253
// Initialize the ONTAP API.
5354
API, err := InitializeOntapDriver(ctx, ontapConfig)
54-
if err != nil {
55-
return nil, fmt.Errorf("error initializing %s driver: %v", commonConfig.StorageDriverName, err)
55+
if API == nil {
56+
Logc(ctx).WithError(err).Errorf("error initializing %s driver", commonConfig.StorageDriverName)
57+
storageDriver, err = getEmptyStorageDriver(commonConfig.StorageDriverName, driverProtocol)
58+
if err != nil {
59+
return nil, err
60+
}
61+
return storageDriver, nil
5662
}
5763

5864
// Set up driver flags
@@ -62,7 +68,6 @@ func GetStorageDriver(
6268
FlagSANOptimized: strconv.FormatBool(API.IsSANOptimized()),
6369
}
6470

65-
var storageDriver storage.Driver
6671
switch ontapConfig.StorageDriverName {
6772

6873
case config.OntapNASStorageDriverName:
@@ -107,6 +112,32 @@ func GetStorageDriver(
107112
return storageDriver, nil
108113
}
109114

115+
func getEmptyStorageDriver(driverName, driverProtocol string) (storage.Driver, error) {
116+
var storageDriver storage.Driver
117+
118+
// Pre-driver initialization setup
119+
switch driverName {
120+
case config.OntapNASStorageDriverName:
121+
storageDriver = &NASStorageDriver{}
122+
case config.OntapNASFlexGroupStorageDriverName:
123+
storageDriver = &NASFlexGroupStorageDriver{}
124+
case config.OntapNASQtreeStorageDriverName:
125+
storageDriver = &NASQtreeStorageDriver{}
126+
case config.OntapSANStorageDriverName:
127+
if driverProtocol == sa.ISCSI || driverProtocol == sa.FCP {
128+
storageDriver = &SANStorageDriver{}
129+
} else {
130+
storageDriver = &NVMeStorageDriver{}
131+
}
132+
case config.OntapSANEconomyStorageDriverName:
133+
storageDriver = &SANEconomyStorageDriver{}
134+
default:
135+
return nil, fmt.Errorf("unknown storage driver: %v", driverName)
136+
}
137+
138+
return storageDriver, nil
139+
}
140+
110141
// GetDriverProtocol returns the protocol type for SAN Drivers using the backend config.
111142
// This function can be extended for NAS drivers if required.
112143
func GetDriverProtocol(driverName, configJSON string) (string, error) {

0 commit comments

Comments
 (0)