@@ -149,7 +149,7 @@ func TestLifecycleNoopStandbyWithOptionsStillRejectsStandbyInstance(t *testing.T
149149 assertNoLifecycleEvent (t , events )
150150}
151151
152- func TestDeleteRetainsMetadataWhenVGPUReleaseFails (t * testing.T ) {
152+ func TestDeleteContinuesWhenVGPUReleaseFails (t * testing.T ) {
153153 m , id := newLifecycleNoopManagerWithInstance (t , StateStopped , time .Now ().UTC ())
154154 meta , err := m .loadMetadata (id )
155155 require .NoError (t , err )
@@ -158,32 +158,13 @@ func TestDeleteRetainsMetadataWhenVGPUReleaseFails(t *testing.T) {
158158 meta .GPUDevicePath = "/sys/bus/pci/devices/0000:82:00.4"
159159 require .NoError (t , m .saveMetadata (meta ))
160160
161- err = m .DeleteInstance (context .Background (), id )
162- require .Error (t , err )
163-
164- stored , err := m .loadMetadata (id )
165- require .NoError (t , err )
166- assert .Equal (t , devices .VGPUFramework ("future-framework" ), stored .GPUFramework )
167- assert .Equal (t , "/sys/bus/pci/devices/0000:82:00.4" , stored .GPUDevicePath )
168- }
169-
170- func TestDeleteBlocksRestartPolicyWhenVGPUReleaseFails (t * testing.T ) {
171- m , id := newLifecycleNoopManagerWithInstance (t , StateStopped , time .Now ().UTC ())
172- meta , err := m .loadMetadata (id )
173- require .NoError (t , err )
174- meta .RestartPolicy = & restartpolicy.Policy {Policy : restartpolicy .PolicyAlways }
175- meta .GPUProfile = "NVIDIA L40S-2Q"
176- meta .GPUFramework = devices .VGPUFramework ("future-framework" )
177- meta .GPUDevicePath = "/sys/bus/pci/devices/0000:82:00.4"
178- require .NoError (t , m .saveMetadata (meta ))
179-
180- err = m .DeleteInstance (context .Background (), id )
181- require .Error (t , err )
161+ // A failed release is logged and the delete continues, matching the
162+ // pre-refactor contract; the leaked assignment is recovered by startup
163+ // reconciliation.
164+ require .NoError (t , m .DeleteInstance (context .Background (), id ))
182165
183- stored , err := m .loadMetadata (id )
184- require .NoError (t , err )
185- assert .Equal (t , restartpolicy .BlockedReasonManualStop , stored .RestartStatus .BlockedReason ,
186- "a failed delete must not leave the instance restartable" )
166+ _ , err = m .loadMetadata (id )
167+ require .Error (t , err , "instance data must be deleted despite the failed release" )
187168}
188169
189170func TestDeletePersistsVGPUReleaseBeforeTeardown (t * testing.T ) {
@@ -214,7 +195,7 @@ func TestDeletePersistsVGPUReleaseBeforeTeardown(t *testing.T) {
214195 assert .Equal (t , restartpolicy .BlockedReasonManualStop , persisted .RestartStatus .BlockedReason )
215196}
216197
217- func TestDeleteReleasesVGPUBeforeTeardown (t * testing.T ) {
198+ func TestDeleteContinuesTeardownAfterFailedVGPURelease (t * testing.T ) {
218199 m , id := newLifecycleNoopManagerWithInstance (t , StateStopped , time .Now ().UTC ())
219200 deviceManager := & recordingDeviceManager {}
220201 m .deviceManager = deviceManager
@@ -226,15 +207,13 @@ func TestDeleteReleasesVGPUBeforeTeardown(t *testing.T) {
226207 meta .Devices = []string {"dev-1" }
227208 require .NoError (t , m .saveMetadata (meta ))
228209
229- err = m .DeleteInstance (context .Background (), id )
230- require .Error (t , err )
231- assert .ErrorContains (t , err , "destroy vGPU" )
232- assert .Empty (t , deviceManager .detached )
233- assert .Empty (t , deviceManager .unbound )
210+ // The failed release must not block the rest of the teardown: devices
211+ // are detached and the instance is fully deleted.
212+ require .NoError (t , m .DeleteInstance (context .Background (), id ))
213+ assert .Equal (t , []string {"dev-1" }, deviceManager .detached )
234214
235- stored , err := m .loadMetadata (id )
236- require .NoError (t , err )
237- assert .Equal (t , devices .VGPUFramework ("future-framework" ), stored .GPUFramework )
215+ _ , err = m .loadMetadata (id )
216+ require .Error (t , err , "instance data must be deleted despite the failed release" )
238217}
239218
240219// A stale release during start must be persisted immediately: if start fails
0 commit comments