Skip to content

Commit c5efa71

Browse files
authored
[wsman-mk2] Emit event for timed out workspaces (#17003)
1 parent 13db847 commit c5efa71

File tree

4 files changed

+11
-5
lines changed

4 files changed

+11
-5
lines changed

components/ws-manager-mk2/controllers/suite_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ var _ = BeforeSuite(func() {
111111
Expect(wsReconciler.SetupWithManager(k8sManager)).To(Succeed())
112112

113113
wsActivity = &activity.WorkspaceActivity{}
114-
timeoutReconciler, err := NewTimeoutReconciler(k8sManager.GetClient(), conf, wsActivity)
114+
timeoutReconciler, err := NewTimeoutReconciler(k8sManager.GetClient(), k8sManager.GetEventRecorderFor("workspace"), conf, wsActivity)
115115
Expect(err).ToNot(HaveOccurred())
116116
Expect(timeoutReconciler.SetupWithManager(k8sManager)).To(Succeed())
117117

components/ws-manager-mk2/controllers/timeout_controller.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@ import (
99
"fmt"
1010
"time"
1111

12+
corev1 "k8s.io/api/core/v1"
1213
apierrors "k8s.io/apimachinery/pkg/api/errors"
1314
"k8s.io/apimachinery/pkg/types"
15+
"k8s.io/client-go/tools/record"
1416
"k8s.io/client-go/util/retry"
1517
ctrl "sigs.k8s.io/controller-runtime"
1618
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -24,7 +26,7 @@ import (
2426
workspacev1 "github.com/gitpod-io/gitpod/ws-manager/api/crd/v1"
2527
)
2628

27-
func NewTimeoutReconciler(c client.Client, cfg config.Configuration, activity *wsactivity.WorkspaceActivity) (*TimeoutReconciler, error) {
29+
func NewTimeoutReconciler(c client.Client, recorder record.EventRecorder, cfg config.Configuration, activity *wsactivity.WorkspaceActivity) (*TimeoutReconciler, error) {
2830
if cfg.HeartbeatInterval == 0 {
2931
return nil, fmt.Errorf("invalid heartbeat interval, must not be 0")
3032
}
@@ -39,6 +41,7 @@ func NewTimeoutReconciler(c client.Client, cfg config.Configuration, activity *w
3941
activity: activity,
4042
reconcileInterval: reconcileInterval,
4143
ctrlStartTime: time.Now().UTC(),
44+
recorder: recorder,
4245
}, nil
4346
}
4447

@@ -53,6 +56,7 @@ type TimeoutReconciler struct {
5356
activity *wsactivity.WorkspaceActivity
5457
reconcileInterval time.Duration
5558
ctrlStartTime time.Time
59+
recorder record.EventRecorder
5660
}
5761

5862
//+kubebuilder:rbac:groups=workspace.gitpod.io,resources=workspaces,verbs=get;list;watch;create;update;patch;delete
@@ -109,6 +113,7 @@ func (r *TimeoutReconciler) Reconcile(ctx context.Context, req ctrl.Request) (re
109113
return ctrl.Result{}, err
110114
}
111115

116+
r.recorder.Event(&workspace, corev1.EventTypeNormal, "TimedOut", timedout)
112117
return ctrl.Result{}, nil
113118
}
114119

components/ws-manager-mk2/controllers/timeout_controller_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
. "github.com/onsi/gomega"
1616
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1717
"k8s.io/apimachinery/pkg/types"
18+
"k8s.io/client-go/tools/record"
1819
"k8s.io/utils/pointer"
1920
"sigs.k8s.io/controller-runtime/pkg/client"
2021
"sigs.k8s.io/controller-runtime/pkg/client/fake"
@@ -35,7 +36,7 @@ var _ = Describe("TimeoutController", func() {
3536
// Use a fake client instead of the envtest's k8s client, such that we can add objects
3637
// with custom CreationTimestamps and check timeout logic.
3738
fakeClient = fake.NewClientBuilder().WithScheme(k8sClient.Scheme()).Build()
38-
r, err = NewTimeoutReconciler(fakeClient, conf, &activity.WorkspaceActivity{})
39+
r, err = NewTimeoutReconciler(fakeClient, record.NewFakeRecorder(100), conf, &activity.WorkspaceActivity{})
3940
Expect(err).ToNot(HaveOccurred())
4041
})
4142

@@ -196,7 +197,7 @@ var _ = Describe("TimeoutController", func() {
196197
var r *TimeoutReconciler
197198
BeforeEach(func() {
198199
var err error
199-
r, err = NewTimeoutReconciler(k8sClient, newTestConfig(), &activity.WorkspaceActivity{})
200+
r, err = NewTimeoutReconciler(k8sClient, record.NewFakeRecorder(100), newTestConfig(), &activity.WorkspaceActivity{})
200201
Expect(err).ToNot(HaveOccurred())
201202
})
202203

components/ws-manager-mk2/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ func main() {
148148
}
149149

150150
activity := &activity.WorkspaceActivity{}
151-
timeoutReconciler, err := controllers.NewTimeoutReconciler(mgr.GetClient(), cfg.Manager, activity)
151+
timeoutReconciler, err := controllers.NewTimeoutReconciler(mgr.GetClient(), mgr.GetEventRecorderFor("workspace"), cfg.Manager, activity)
152152
if err != nil {
153153
setupLog.Error(err, "unable to create timeout controller", "controller", "Timeout")
154154
os.Exit(1)

0 commit comments

Comments
 (0)