1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-07-26 00:39:41 +02:00

fix(edgejobs): fix data race on task logs clear EE-4767 (#8236)

This commit is contained in:
matias-portainer 2023-02-23 16:21:17 -03:00 committed by GitHub
parent 1b12ee9f01
commit 088262b6dc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -44,22 +44,33 @@ func (handler *Handler) edgeJobTasksClear(w http.ResponseWriter, r *http.Request
return httperror.InternalServerError("Unable to find an Edge job with the specified identifier inside the database", err) return httperror.InternalServerError("Unable to find an Edge job with the specified identifier inside the database", err)
} }
err = handler.FileService.ClearEdgeJobTaskLogs(strconv.Itoa(edgeJobID), strconv.Itoa(taskID))
if err != nil {
return httperror.InternalServerError("Unable to clear log file from disk", err)
}
endpointID := portainer.EndpointID(taskID) endpointID := portainer.EndpointID(taskID)
endpointsFromGroups, err := edge.GetEndpointsFromEdgeGroups(edgeJob.EdgeGroups, handler.DataStore) endpointsFromGroups, err := edge.GetEndpointsFromEdgeGroups(edgeJob.EdgeGroups, handler.DataStore)
if err != nil { if err != nil {
return httperror.InternalServerError("Unable to get Endpoints from EdgeGroups", err) return httperror.InternalServerError("Unable to get Endpoints from EdgeGroups", err)
} }
if slices.Contains(endpointsFromGroups, endpointID) { err = handler.DataStore.EdgeJob().UpdateEdgeJobFunc(edgeJob.ID, func(j *portainer.EdgeJob) {
edgeJob.GroupLogsCollection[endpointID] = portainer.EdgeJobEndpointMeta{ if slices.Contains(endpointsFromGroups, endpointID) {
CollectLogs: false, j.GroupLogsCollection[endpointID] = portainer.EdgeJobEndpointMeta{
LogsStatus: portainer.EdgeJobLogsStatusIdle, CollectLogs: false,
LogsStatus: portainer.EdgeJobLogsStatusIdle,
}
} else {
meta := j.Endpoints[endpointID]
meta.CollectLogs = false
meta.LogsStatus = portainer.EdgeJobLogsStatusIdle
j.Endpoints[endpointID] = meta
} }
} else { })
meta := edgeJob.Endpoints[endpointID]
meta.CollectLogs = false if err != nil {
meta.LogsStatus = portainer.EdgeJobLogsStatusIdle return httperror.InternalServerError("Unable to persist Edge job changes in the database", err)
edgeJob.Endpoints[endpointID] = meta
} }
err = handler.FileService.ClearEdgeJobTaskLogs(strconv.Itoa(edgeJobID), strconv.Itoa(taskID)) err = handler.FileService.ClearEdgeJobTaskLogs(strconv.Itoa(edgeJobID), strconv.Itoa(taskID))
@ -74,10 +85,5 @@ func (handler *Handler) edgeJobTasksClear(w http.ResponseWriter, r *http.Request
handler.ReverseTunnelService.AddEdgeJob(endpoint, edgeJob) handler.ReverseTunnelService.AddEdgeJob(endpoint, edgeJob)
err = handler.DataStore.EdgeJob().UpdateEdgeJob(edgeJob.ID, edgeJob)
if err != nil {
return httperror.InternalServerError("Unable to persist Edge job changes in the database", err)
}
return response.Empty(w) return response.Empty(w)
} }