@@ -233,10 +233,9 @@ def do_setup(self, ctxt):
233
233
svm_lib .do_setup (ctxt )
234
234
self ._libraries [svm_name ] = svm_lib
235
235
236
- def _remove_svm_lib (self , svm_name : str , svm_lib : NetAppMinimalLibrary ):
236
+ def _remove_svm_lib (self , svm_lib : NetAppMinimalLibrary ):
237
237
"""Remove resources for a given SVM library."""
238
238
# TODO: Need to free up resources here.
239
- LOG .info ("Removing resources for SVM library %s" , svm_name )
240
239
for task in svm_lib .loopingcalls .tasks :
241
240
task .looping_call .stop ()
242
241
svm_lib .loopingcalls .tasks = []
@@ -257,17 +256,16 @@ def _actual_refresh_svm_libraries(self, ctxt):
257
256
stale_svms = existing_libs - current_svms
258
257
for svm_name in stale_svms :
259
258
LOG .info ("Removing stale NVMe library for SVM: %s" , svm_name )
260
- # TODO : stop looping calls, free resources.
261
- svm_lib = self ._libraries .get (svm_name )
262
- self ._remove_svm_lib (svm_name , svm_lib )
259
+ svm_lib = self ._libraries [svm_name ]
260
+ self ._remove_svm_lib (svm_lib )
263
261
del self ._libraries [svm_name ]
264
262
265
263
# Add new SVM libraries
266
264
new_svms = current_svms - existing_libs
267
265
for svm_name in new_svms :
268
266
LOG .info ("Creating NVMe library for new SVM: %s" , svm_name )
267
+ lib = self ._create_svm_lib (svm_name )
269
268
try :
270
- lib = self ._create_svm_lib (svm_name )
271
269
# Call do_setup to initialize the library
272
270
lib .do_setup (ctxt )
273
271
lib .check_for_setup_error ()
@@ -278,13 +276,21 @@ def _actual_refresh_svm_libraries(self, ctxt):
278
276
"Failed to create library for SVM %s" ,
279
277
svm_name ,
280
278
)
279
+ self ._remove_svm_lib (lib )
281
280
LOG .info ("Final libraries loaded: %s" , list (self ._libraries .keys ()))
282
281
283
282
def check_for_setup_error (self ):
284
283
"""Check for setup errors."""
285
- for svm_name , svm_lib in self ._libraries .items ():
284
+ svm_to_init = set (self ._libraries .keys ())
285
+ for svm_name in svm_to_init :
286
286
LOG .info ("Checking NVMe library for errors for SVM %s" , svm_name )
287
- svm_lib .check_for_setup_error ()
287
+ svm_lib = self ._libraries [svm_name ]
288
+ try :
289
+ svm_lib .check_for_setup_error ()
290
+ except Exception :
291
+ LOG .exception ("Failed to initialize SVM %s, skipping" , svm_name )
292
+ self ._remove_svm_lib (svm_lib )
293
+ del self ._libraries [svm_name ]
288
294
289
295
# looping call to refresh SVM libraries
290
296
if not self ._looping_call :
0 commit comments