Skip to content

Commit c50aa21

Browse files
Clean up resourceSlices during exit
Signed-off-by: Carlos Eduardo Arango Gutierrez <[email protected]>
1 parent 322a3a7 commit c50aa21

File tree

1 file changed

+35
-1
lines changed

1 file changed

+35
-1
lines changed

cmd/nvidia-dra-controller/imex.go

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ package main
1919
import (
2020
"context"
2121
"fmt"
22+
"os"
23+
"os/signal"
24+
"syscall"
2225
"time"
2326

2427
v1 "k8s.io/api/core/v1"
@@ -94,6 +97,10 @@ func manageResourceSlices(ctx context.Context, clientset kubernetes.Interface, o
9497
return fmt.Errorf("error starting resource slice controller: %w", err)
9598
}
9699

100+
// Setup signal catching
101+
sigs := make(chan os.Signal, 1)
102+
signal.Notify(sigs, syscall.SIGTERM, syscall.SIGINT)
103+
97104
go func() {
98105
for {
99106
select {
@@ -109,7 +116,12 @@ func manageResourceSlices(ctx context.Context, clientset kubernetes.Interface, o
109116
delete(newDriverResources.Pools, removedDomain)
110117
controller.Update(&newDriverResources)
111118
driverResources = newDriverResources
112-
case <-ctx.Done():
119+
case <-sigs:
120+
controller.Stop()
121+
err = cleanupImexChannels(ctx, clientset)
122+
if err != nil {
123+
klog.Errorf("error cleaning up resource slices: %v", err)
124+
}
113125
return
114126
}
115127
}
@@ -259,3 +271,25 @@ func generateImexChannelPool(imexDomain string, numChannels int) resourceslice.P
259271

260272
return pool
261273
}
274+
275+
// cleanupImexChannels removes all resource slices created by the IMEX manager.
276+
func cleanupImexChannels(ctx context.Context, clientset kubernetes.Interface) error {
277+
// Delete all resource slices created by the IMEX manager
278+
ops := metav1.ListOptions{
279+
FieldSelector: fmt.Sprintf("%s=%s", resourceapi.ResourceSliceSelectorDriver, DriverName),
280+
}
281+
l, err := clientset.ResourceV1alpha3().ResourceSlices().List(ctx, ops)
282+
if err != nil {
283+
return fmt.Errorf("error listing resource slices: %w", err)
284+
}
285+
286+
for _, rs := range l.Items {
287+
klog.Info("Deleting resource slice: ", rs.Name)
288+
err := clientset.ResourceV1alpha3().ResourceSlices().Delete(ctx, rs.Name, metav1.DeleteOptions{})
289+
if err != nil {
290+
return fmt.Errorf("error deleting resource slice %s: %w", rs.Name, err)
291+
}
292+
}
293+
294+
return nil
295+
}

0 commit comments

Comments
 (0)