mirror of https://github.com/portainer/portainer
fix(edgejobs): fix data race on task logs clear EE-4767 (#8236)
parent
1b12ee9f01
commit
088262b6dc
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue