diff --git a/api/http/handler/edgestacks/edgestack_status_update.go b/api/http/handler/edgestacks/edgestack_status_update.go index 4cf912030..fef5a6927 100644 --- a/api/http/handler/edgestacks/edgestack_status_update.go +++ b/api/http/handler/edgestacks/edgestack_status_update.go @@ -79,7 +79,7 @@ func (handler *Handler) edgeStackStatusUpdate(w http.ResponseWriter, r *http.Req } updateFn := func(stack *portainer.EdgeStack) (*portainer.EdgeStack, error) { - return handler.updateEdgeStackStatus(stack, endpoint, r, stack.ID, payload) + return handler.updateEdgeStackStatus(stack, stack.ID, payload) } stack, err := handler.stackCoordinator.UpdateStatus(r, portainer.EdgeStackID(stackID), updateFn) @@ -99,7 +99,7 @@ func (handler *Handler) edgeStackStatusUpdate(w http.ResponseWriter, r *http.Req return response.JSON(w, stack) } -func (handler *Handler) updateEdgeStackStatus(stack *portainer.EdgeStack, endpoint *portainer.Endpoint, r *http.Request, stackID portainer.EdgeStackID, payload updateStatusPayload) (*portainer.EdgeStack, error) { +func (handler *Handler) updateEdgeStackStatus(stack *portainer.EdgeStack, stackID portainer.EdgeStackID, payload updateStatusPayload) (*portainer.EdgeStack, error) { if payload.Version > 0 && payload.Version < stack.Version { return stack, nil } diff --git a/api/http/handler/edgestacks/edgestack_status_update_coordinator.go b/api/http/handler/edgestacks/edgestack_status_update_coordinator.go index f81e2fc3e..885b4c6da 100644 --- a/api/http/handler/edgestacks/edgestack_status_update_coordinator.go +++ b/api/http/handler/edgestacks/edgestack_status_update_coordinator.go @@ -60,6 +60,11 @@ func (c *EdgeStackStatusUpdateCoordinator) loop() { return err } + // Return early when the agent tries to update the status on a deleted stack + if stack == nil { + return nil + } + // 2. Mutate the edge stack opportunistically until there are no more pending updates for { stack, err = u.updateFn(stack)