Fix missing Runner-Delete events.
This commit is contained in:

committed by
Sebastian Serth

parent
8950ce29d8
commit
a720553dd1
@ -314,8 +314,12 @@ func handleAllocationEvent(startTime int64, allocations storage.Storage[*allocat
|
|||||||
handlePendingAllocationEvent(alloc, allocations, callbacks)
|
handlePendingAllocationEvent(alloc, allocations, callbacks)
|
||||||
case structs.AllocClientStatusRunning:
|
case structs.AllocClientStatusRunning:
|
||||||
handleRunningAllocationEvent(alloc, allocations, callbacks)
|
handleRunningAllocationEvent(alloc, allocations, callbacks)
|
||||||
|
case structs.AllocClientStatusComplete:
|
||||||
|
handleCompleteAllocationEvent(alloc, allocations, callbacks)
|
||||||
case structs.AllocClientStatusFailed:
|
case structs.AllocClientStatusFailed:
|
||||||
handleFailedAllocationEvent(alloc)
|
handleFailedAllocationEvent(alloc)
|
||||||
|
default:
|
||||||
|
log.WithField("alloc", alloc).Warn("Other Client Status")
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -325,27 +329,25 @@ func handleAllocationEvent(startTime int64, allocations storage.Storage[*allocat
|
|||||||
func handlePendingAllocationEvent(alloc *nomadApi.Allocation,
|
func handlePendingAllocationEvent(alloc *nomadApi.Allocation,
|
||||||
allocations storage.Storage[*allocationData], callbacks *AllocationProcessoring) {
|
allocations storage.Storage[*allocationData], callbacks *AllocationProcessoring) {
|
||||||
if alloc.DesiredStatus == structs.AllocDesiredStatusRun {
|
if alloc.DesiredStatus == structs.AllocDesiredStatusRun {
|
||||||
// Handle Runner (/Container) re-allocations.
|
allocData, ok := allocations.Get(alloc.ID)
|
||||||
if allocData, ok := allocations.Get(alloc.ID); ok && allocData.allocClientStatus == structs.AllocClientStatusRunning {
|
if ok && allocData.allocClientStatus != structs.AllocClientStatusRunning {
|
||||||
|
// Pending Allocation is already stored.
|
||||||
|
return
|
||||||
|
} else if ok {
|
||||||
|
// Handle Runner (/Container) re-allocations.
|
||||||
callbacks.OnDeleted(alloc)
|
callbacks.OnDeleted(alloc)
|
||||||
}
|
}
|
||||||
// allocation is started, wait until it runs and add to our list afterwards
|
// Store Pending Allocation - Allocation gets started, wait until it runs.
|
||||||
allocations.Add(alloc.ID, &allocationData{allocClientStatus: structs.AllocClientStatusPending, start: time.Now()})
|
allocations.Add(alloc.ID, &allocationData{allocClientStatus: structs.AllocClientStatusPending, start: time.Now()})
|
||||||
|
} else {
|
||||||
|
log.WithField("alloc", alloc).Warn("Other Desired Status")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// handleRunningAllocationEvent calls the passed AllocationProcessor filtering similar events.
|
// handleRunningAllocationEvent calls the passed AllocationProcessor filtering similar events.
|
||||||
func handleRunningAllocationEvent(alloc *nomadApi.Allocation,
|
func handleRunningAllocationEvent(alloc *nomadApi.Allocation,
|
||||||
allocations storage.Storage[*allocationData], callbacks *AllocationProcessoring) {
|
allocations storage.Storage[*allocationData], callbacks *AllocationProcessoring) {
|
||||||
switch alloc.DesiredStatus {
|
if alloc.DesiredStatus == structs.AllocDesiredStatusRun {
|
||||||
case structs.AllocDesiredStatusStop:
|
|
||||||
callbacks.OnDeleted(alloc)
|
|
||||||
if _, ok := allocations.Get(alloc.ID); ok {
|
|
||||||
allocations.Delete(alloc.ID)
|
|
||||||
} else {
|
|
||||||
log.WithField("id", alloc.ID).Warn("Removing not listed allocation")
|
|
||||||
}
|
|
||||||
case structs.AllocDesiredStatusRun:
|
|
||||||
// is first event that marks the transition between pending and running?
|
// is first event that marks the transition between pending and running?
|
||||||
if allocData, ok := allocations.Get(alloc.ID); ok && allocData.allocClientStatus == structs.AllocClientStatusPending {
|
if allocData, ok := allocations.Get(alloc.ID); ok && allocData.allocClientStatus == structs.AllocClientStatusPending {
|
||||||
startupDuration := time.Since(allocData.start)
|
startupDuration := time.Since(allocData.start)
|
||||||
@ -355,6 +357,19 @@ func handleRunningAllocationEvent(alloc *nomadApi.Allocation,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// handleCompleteAllocationEvent handles allocations that stopped.
|
||||||
|
func handleCompleteAllocationEvent(alloc *nomadApi.Allocation,
|
||||||
|
allocations storage.Storage[*allocationData], callbacks *AllocationProcessoring) {
|
||||||
|
if alloc.DesiredStatus == structs.AllocDesiredStatusStop {
|
||||||
|
if _, ok := allocations.Get(alloc.ID); ok {
|
||||||
|
callbacks.OnDeleted(alloc)
|
||||||
|
allocations.Delete(alloc.ID)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.WithField("alloc", alloc).Warn("Other Desired Status")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// handleFailedAllocationEvent logs only the first of the multiple failure events.
|
// handleFailedAllocationEvent logs only the first of the multiple failure events.
|
||||||
func handleFailedAllocationEvent(alloc *nomadApi.Allocation) {
|
func handleFailedAllocationEvent(alloc *nomadApi.Allocation) {
|
||||||
if alloc.FollowupEvalID == "" && alloc.PreviousAllocation == "" {
|
if alloc.FollowupEvalID == "" && alloc.PreviousAllocation == "" {
|
||||||
|
Reference in New Issue
Block a user