@@ -2,7 +2,6 @@ package instances
22
33import (
44 "context"
5- "fmt"
65 "path/filepath"
76
87 "github.com/kernel/hypeman/lib/devices"
@@ -24,7 +23,12 @@ func clearStoredVGPUDevice(stored *StoredMetadata) {
2423func releaseStoredVGPU (ctx context.Context , stored * StoredMetadata ) error {
2524 path := storedVGPUDevicePath (stored )
2625 if path != "" {
27- if err := devices .DestroyVGPU (ctx , stored .GPUFramework , path , stored .GPUMdevUUID ); err != nil {
26+ assignment := devices.VGPUAssignment {
27+ Framework : stored .GPUFramework ,
28+ DevicePath : path ,
29+ MdevUUID : stored .GPUMdevUUID ,
30+ }
31+ if err := devices .DestroyVGPU (ctx , assignment ); err != nil {
2832 return err
2933 }
3034 }
@@ -34,21 +38,26 @@ func releaseStoredVGPU(ctx context.Context, stored *StoredMetadata) error {
3438
3539// releaseRetainedVGPULocked releases a vGPU assignment retained on a stopped
3640// instance after a failed release during the original stop. It is a no-op
37- // when no assignment is retained. The caller must hold the instance lock.
38- func (m * manager ) releaseRetainedVGPULocked (ctx context.Context , id string ) error {
41+ // when no assignment is retained, and a failed retry only logs so the
42+ // metadata stays for the next retry. The caller must hold the instance lock.
43+ func (m * manager ) releaseRetainedVGPULocked (ctx context.Context , id string ) {
44+ log := logger .FromContext (ctx )
3945 meta , err := m .loadMetadata (id )
4046 if err != nil {
41- return err
47+ log .WarnContext (ctx , "failed to load metadata for retained vGPU release" , "instance_id" , id , "error" , err )
48+ return
4249 }
4350 stored := & meta .StoredMetadata
4451 if storedVGPUDevicePath (stored ) == "" {
45- return nil
52+ return
4653 }
4754 if err := releaseStoredVGPU (ctx , stored ); err != nil {
48- logger .FromContext (ctx ).ErrorContext (ctx , "failed to destroy retained vGPU; retaining assignment metadata" , "instance_id" , id , "error" , err )
49- return fmt .Errorf ("destroy vGPU: %w" , err )
55+ log .WarnContext (ctx , "failed to destroy retained vGPU; retaining assignment metadata" , "instance_id" , id , "error" , err )
56+ return
57+ }
58+ if err := m .saveMetadata (meta ); err != nil {
59+ log .WarnContext (ctx , "failed to save metadata after retained vGPU release" , "instance_id" , id , "error" , err )
5060 }
51- return m .saveMetadata (meta )
5261}
5362
5463func storedVGPUDevicePath (stored * StoredMetadata ) string {
0 commit comments