Skip to content

Commit b3c6918

Browse files
committed
Create event on plan timeout
1 parent 705c3c7 commit b3c6918

File tree

4 files changed

+18
-3
lines changed

4 files changed

+18
-3
lines changed

pkg/deployment/reconcile/context.go

+3
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ type Context interface {
5454
GetAgencyClients(ctx context.Context, predicate func(id string) bool) ([]driver.Connection, error)
5555
// GetSyncServerClient returns a cached client for a specific arangosync server.
5656
GetSyncServerClient(ctx context.Context, group api.ServerGroup, id string) (client.API, error)
57+
// CreateEvent creates a given event.
58+
// On error, the error is logged.
59+
CreateEvent(evt *v1.Event)
5760
// CreateMember adds a new member to the given group.
5861
// If ID is non-empty, it will be used, otherwise a new ID is created.
5962
CreateMember(group api.ServerGroup, id string) error

pkg/deployment/reconcile/plan_executor.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,11 @@ import (
2727
"fmt"
2828
"time"
2929

30+
"github.com/rs/zerolog"
3031
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3132

3233
api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1alpha"
33-
"github.com/rs/zerolog"
34+
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil"
3435
)
3536

3637
// ExecutePlan tries to execute the plan as far as possible.
@@ -112,8 +113,9 @@ func (d *Reconciler) ExecutePlan(ctx context.Context) (bool, error) {
112113
if time.Now().After(deadline) {
113114
// Timeout has expired
114115
log.Warn().Msg("Action not finished in time. Removing the entire plan")
116+
d.context.CreateEvent(k8sutil.NewPlanTimeoutEvent(d.context.GetAPIObject(), string(planAction.Type), planAction.MemberID, planAction.Group.AsRole()))
117+
// Replace plan with empty one and save it.
115118
status.Plan = api.Plan{}
116-
// Save plan update
117119
if err := d.context.UpdateStatus(status); err != nil {
118120
log.Debug().Err(err).Msg("Failed to update CR status")
119121
return false, maskAny(err)

pkg/deployment/resources/context.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ type Context interface {
6262
GetLifecycleImage() string
6363
// GetNamespace returns the namespace that contains the deployment
6464
GetNamespace() string
65-
// createEvent creates a given event.
65+
// CreateEvent creates a given event.
6666
// On error, the error is logged.
6767
CreateEvent(evt *v1.Event)
6868
// GetOwnedPods returns a list of all pods owned by the deployment.

pkg/util/k8sutil/events.go

+10
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,16 @@ func NewAccessPackageDeletedEvent(apiObject APIObject, apSecretName string) *v1.
145145
return event
146146
}
147147

148+
// NewPlanTimeoutEvent creates an event indicating that an item on a reconciliation plan did not
149+
// finish before its deadline.
150+
func NewPlanTimeoutEvent(apiObject APIObject, itemType, memberID, role string) *v1.Event {
151+
event := newDeploymentEvent(apiObject)
152+
event.Type = v1.EventTypeNormal
153+
event.Reason = "Reconciliation Plan Timeout"
154+
event.Message = fmt.Sprintf("An plan item of type %s or member %s with role %s did not finish in time", itemType, memberID, role)
155+
return event
156+
}
157+
148158
// NewErrorEvent creates an even of type error.
149159
func NewErrorEvent(reason string, err error, apiObject APIObject) *v1.Event {
150160
event := newDeploymentEvent(apiObject)

0 commit comments

Comments
 (0)