Skip to content

Commit 8b224a0

Browse files
committed
[ws-manager] Set GracePeriodSeconds for deletion of objects
1 parent cc6fea0 commit 8b224a0

File tree

2 files changed

+25
-11
lines changed

2 files changed

+25
-11
lines changed

components/ws-manager/pkg/manager/manager.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -693,8 +693,10 @@ func (m *Manager) ControlPort(ctx context.Context, req *api.ControlPortRequest)
693693
if len(spec.Ports) == 0 {
694694
// we don't have any ports exposed anymore: remove the service
695695
propagationPolicy := metav1.DeletePropagationForeground
696+
var zero int64 = 0
696697
err = m.Clientset.Delete(ctx, &service, &client.DeleteOptions{
697-
PropagationPolicy: &propagationPolicy,
698+
GracePeriodSeconds: &zero,
699+
PropagationPolicy: &propagationPolicy,
698700
})
699701

700702
span.LogKV("event", "port service deleted")

components/ws-manager/pkg/manager/monitor.go

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
corev1 "k8s.io/api/core/v1"
2525
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2626
"k8s.io/apimachinery/pkg/labels"
27+
"k8s.io/apimachinery/pkg/types"
2728
"k8s.io/apimachinery/pkg/watch"
2829
"sigs.k8s.io/controller-runtime/pkg/client"
2930

@@ -978,45 +979,56 @@ func (m *Monitor) finalizeWorkspaceContent(ctx context.Context, wso *workspaceOb
978979

979980
// deleteDanglingServices removes services for which there is no corresponding workspace pod anymore
980981
func (m *Monitor) deleteDanglingServices(ctx context.Context) error {
981-
var endpoints corev1.EndpointsList
982-
err := m.manager.Clientset.List(ctx, &endpoints, workspaceObjectListOptions(m.manager.Config.Namespace))
982+
var services corev1.ServiceList
983+
err := m.manager.Clientset.List(ctx, &services, workspaceObjectListOptions(m.manager.Config.Namespace))
983984
if err != nil {
984985
return xerrors.Errorf("deleteDanglingServices: %w", err)
985986
}
986987

988+
var zero int64 = 0
987989
propagationPolicy := metav1.DeletePropagationForeground
988990

989-
for _, e := range endpoints.Items {
991+
for _, service := range services.Items {
992+
var endpoints corev1.Endpoints
993+
err := m.manager.Clientset.Get(ctx, types.NamespacedName{Namespace: service.Namespace, Name: service.Name}, &endpoints)
994+
if err != nil {
995+
return xerrors.Errorf("deleteDanglingServices: %w", err)
996+
}
997+
990998
hasReadyEndpoint := false
991-
for _, s := range e.Subsets {
999+
for _, s := range endpoints.Subsets {
9921000
hasReadyEndpoint = len(s.Addresses) > 0
9931001
}
9941002
if hasReadyEndpoint {
9951003
continue
9961004
}
9971005

998-
workspaceID, ok := e.Labels[wsk8s.WorkspaceIDLabel]
1006+
workspaceID, ok := endpoints.Labels[wsk8s.WorkspaceIDLabel]
9991007
if !ok {
1000-
m.OnError(fmt.Errorf("service endpoint %s does not have %s label", e.Name, wsk8s.WorkspaceIDLabel))
1008+
m.OnError(fmt.Errorf("service endpoint %s does not have %s label", service.Name, wsk8s.WorkspaceIDLabel))
10011009
continue
10021010
}
1003-
_, err := m.manager.findWorkspacePod(ctx, workspaceID)
1011+
1012+
_, err = m.manager.findWorkspacePod(ctx, workspaceID)
10041013
if !isKubernetesObjNotFoundError(err) {
10051014
continue
10061015
}
10071016

10081017
if m.manager.Config.DryRun {
1009-
log.WithFields(log.OWI("", "", workspaceID)).WithField("name", e.Name).Info("should have deleted dangling service but this is a dry run")
1018+
log.WithFields(log.OWI("", "", workspaceID)).WithField("name", service.Name).Info("should have deleted dangling service but this is a dry run")
10101019
continue
10111020
}
10121021

10131022
// this relies on the Kubernetes convention that endpoints have the same name as their services
1014-
err = m.manager.Clientset.Delete(ctx, &e, &client.DeleteOptions{PropagationPolicy: &propagationPolicy})
1023+
err = m.manager.Clientset.Delete(ctx, &service, &client.DeleteOptions{
1024+
GracePeriodSeconds: &zero,
1025+
PropagationPolicy: &propagationPolicy,
1026+
})
10151027
if err != nil && !isKubernetesObjNotFoundError(err) {
10161028
m.OnError(xerrors.Errorf("deleteDanglingServices: %w", err))
10171029
continue
10181030
}
1019-
log.WithFields(log.OWI("", "", workspaceID)).WithField("name", e.Name).Info("deleted dangling service")
1031+
log.WithFields(log.OWI("", "", workspaceID)).WithField("name", service.Name).Info("deleted dangling service")
10201032
}
10211033

10221034
return nil

0 commit comments

Comments
 (0)