@@ -111,13 +111,12 @@ exception Message_switch_failure
111
111
let on_xapi_start ~__context =
112
112
(* An SM is either implemented as a plugin - for which we check its
113
113
presence, or via an API *)
114
- let is_available ( _rf , rc ) =
114
+ let is_available rc =
115
115
Sys. file_exists rc.API. sM_driver_filename
116
116
|| Version.String. ge rc.sM_required_api_version " 5.0"
117
117
in
118
118
let existing =
119
119
Db.SM. get_all_records ~__context
120
- |> List. filter is_available
121
120
|> List. map (fun (rf , rc ) -> (rc.API. sM_type, (rf, rc)))
122
121
in
123
122
let explicitly_configured_drivers =
@@ -172,6 +171,9 @@ let on_xapi_start ~__context =
172
171
in
173
172
(* Add all the running SMAPIv2 drivers *)
174
173
let to_keep = to_keep @ running_smapiv2_drivers in
174
+ let unavailable =
175
+ List. filter (fun (_ , (_ , rc )) -> not (is_available rc)) existing
176
+ in
175
177
(* Delete all records which aren't configured or in-use *)
176
178
List. iter
177
179
(fun ty ->
@@ -181,7 +183,12 @@ let on_xapi_start ~__context =
181
183
let self, _ = List. assoc ty existing in
182
184
try Db.SM. destroy ~__context ~self with _ -> ()
183
185
)
184
- (Listext.List. set_difference (List. map fst existing) to_keep) ;
186
+ (List. concat
187
+ [
188
+ Listext.List. set_difference (List. map fst existing) to_keep
189
+ ; List. map fst unavailable
190
+ ]
191
+ ) ;
185
192
186
193
(* Synchronize SMAPIv1 plugins *)
187
194
0 commit comments