Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add timestamps to evals #5881

Merged
merged 10 commits into from
Aug 7, 2019
2 changes: 2 additions & 0 deletions api/evaluations.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,8 @@ type Evaluation struct {
SnapshotIndex uint64
CreateIndex uint64
ModifyIndex uint64
CreateTime int64
ModifyTime int64
}

// EvalIndexSort is a wrapper to sort evaluations by CreateIndex.
Expand Down
2 changes: 2 additions & 0 deletions nomad/alloc_endpoint.go
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,8 @@ func (a *Alloc) Stop(args *structs.AllocStopRequest, reply *structs.AllocStopRes
JobID: alloc.Job.ID,
JobModifyIndex: alloc.Job.ModifyIndex,
Status: structs.EvalStatusPending,
CreateTime: time.Now().UTC().UnixNano(),
ModifyTime: time.Now().UTC().UnixNano(),
jazzyfresh marked this conversation as resolved.
Show resolved Hide resolved
}

transitionReq := &structs.AllocUpdateDesiredTransitionRequest{
Expand Down
2 changes: 2 additions & 0 deletions nomad/deploymentwatcher/deployment_watcher.go
Original file line number Diff line number Diff line change
Expand Up @@ -800,6 +800,8 @@ func (w *deploymentWatcher) getEval() *structs.Evaluation {
JobID: w.j.ID,
DeploymentID: w.deploymentID,
Status: structs.EvalStatusPending,
CreateTime: time.Now().UTC().UnixNano(),
ModifyTime: time.Now().UTC().UnixNano(),
}
}

Expand Down
2 changes: 2 additions & 0 deletions nomad/drainer/drainer.go
Original file line number Diff line number Diff line change
Expand Up @@ -411,6 +411,8 @@ func (n *NodeDrainer) drainAllocs(future *structs.BatchFuture, allocs []*structs
TriggeredBy: structs.EvalTriggerNodeDrain,
JobID: job,
Status: structs.EvalStatusPending,
CreateTime: time.Now().UTC().UnixNano(),
ModifyTime: time.Now().UTC().UnixNano(),
})
}

Expand Down
13 changes: 13 additions & 0 deletions nomad/job_endpoint.go
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,8 @@ func (j *Job) Register(args *structs.JobRegisterRequest, reply *structs.JobRegis
JobID: args.Job.ID,
JobModifyIndex: reply.JobModifyIndex,
Status: structs.EvalStatusPending,
CreateTime: time.Now().UTC().UnixNano(),
ModifyTime: time.Now().UTC().UnixNano(),
}
update := &structs.EvalUpdateRequest{
Evals: []*structs.Evaluation{eval},
Expand Down Expand Up @@ -580,6 +582,8 @@ func (j *Job) Evaluate(args *structs.JobEvaluateRequest, reply *structs.JobRegis
JobID: job.ID,
JobModifyIndex: job.ModifyIndex,
Status: structs.EvalStatusPending,
CreateTime: time.Now().UTC().UnixNano(),
ModifyTime: time.Now().UTC().UnixNano(),
}

// Create a AllocUpdateDesiredTransitionRequest request with the eval and any forced rescheduled allocs
Expand Down Expand Up @@ -659,6 +663,8 @@ func (j *Job) Deregister(args *structs.JobDeregisterRequest, reply *structs.JobD
JobID: args.JobID,
JobModifyIndex: index,
Status: structs.EvalStatusPending,
CreateTime: time.Now().UTC().UnixNano(),
ModifyTime: time.Now().UTC().UnixNano(),
}
update := &structs.EvalUpdateRequest{
Evals: []*structs.Evaluation{eval},
Expand Down Expand Up @@ -746,6 +752,8 @@ func (j *Job) BatchDeregister(args *structs.JobBatchDeregisterRequest, reply *st
TriggeredBy: structs.EvalTriggerJobDeregister,
JobID: jobNS.ID,
Status: structs.EvalStatusPending,
CreateTime: time.Now().UTC().UnixNano(),
ModifyTime: time.Now().UTC().UnixNano(),
}
args.Evals = append(args.Evals, eval)
}
Expand Down Expand Up @@ -1205,6 +1213,9 @@ func (j *Job) Plan(args *structs.JobPlanRequest, reply *structs.JobPlanResponse)
JobModifyIndex: updatedIndex,
Status: structs.EvalStatusPending,
AnnotatePlan: true,
// Timestamps are added for consistency but this eval is never persisted
CreateTime: time.Now().UTC().UnixNano(),
ModifyTime: time.Now().UTC().UnixNano(),
}

snap.UpsertEvals(100, []*structs.Evaluation{eval})
Expand Down Expand Up @@ -1424,6 +1435,8 @@ func (j *Job) Dispatch(args *structs.JobDispatchRequest, reply *structs.JobDispa
JobID: dispatchJob.ID,
JobModifyIndex: jobCreateIndex,
Status: structs.EvalStatusPending,
CreateTime: time.Now().UTC().UnixNano(),
ModifyTime: time.Now().UTC().UnixNano(),
}
update := &structs.EvalUpdateRequest{
Evals: []*structs.Evaluation{eval},
Expand Down
5 changes: 5 additions & 0 deletions nomad/leader.go
Original file line number Diff line number Diff line change
Expand Up @@ -532,8 +532,12 @@ func (s *Server) reapFailedEvaluations(stopCh chan struct{}) {
// due to the fairly large backoff.
followupEvalWait := s.config.EvalFailedFollowupBaselineDelay +
time.Duration(rand.Int63n(int64(s.config.EvalFailedFollowupDelayRange)))

// TODO: what is this followup eval and where to create timestamp?
jazzyfresh marked this conversation as resolved.
Show resolved Hide resolved
followupEval := eval.CreateFailedFollowUpEval(followupEvalWait)
updateEval.NextEval = followupEval.ID
updateEval.CreateTime = time.Now().UTC().UnixNano()
jazzyfresh marked this conversation as resolved.
Show resolved Hide resolved
updateEval.ModifyTime = time.Now().UTC().UnixNano()
jazzyfresh marked this conversation as resolved.
Show resolved Hide resolved
jazzyfresh marked this conversation as resolved.
Show resolved Hide resolved
jazzyfresh marked this conversation as resolved.
Show resolved Hide resolved

// Update via Raft
req := structs.EvalUpdateRequest{
Expand Down Expand Up @@ -570,6 +574,7 @@ func (s *Server) reapDupBlockedEvaluations(stopCh chan struct{}) {
newEval := dup.Copy()
newEval.Status = structs.EvalStatusCancelled
newEval.StatusDescription = fmt.Sprintf("existing blocked evaluation exists for job %q", newEval.JobID)
newEval.ModifyTime = time.Now().UTC().UnixNano()
cancel[i] = newEval
}

Expand Down
2 changes: 2 additions & 0 deletions nomad/mock/mock.go
Original file line number Diff line number Diff line change
Expand Up @@ -409,6 +409,8 @@ func Eval() *structs.Evaluation {
Type: structs.JobTypeService,
JobID: uuid.Generate(),
Status: structs.EvalStatusPending,
CreateTime: time.Now().UTC().UnixNano(),
ModifyTime: time.Now().UTC().UnixNano(),
}
return eval
}
Expand Down
8 changes: 8 additions & 0 deletions nomad/node_endpoint.go
Original file line number Diff line number Diff line change
Expand Up @@ -1038,6 +1038,8 @@ func (n *Node) UpdateAlloc(args *structs.AllocUpdateRequest, reply *structs.Gene
Type: job.Type,
Priority: job.Priority,
Status: structs.EvalStatusPending,
CreateTime: time.Now().UTC().UnixNano(),
ModifyTime: time.Now().UTC().UnixNano(),
}
evals = append(evals, eval)
}
Expand Down Expand Up @@ -1095,6 +1097,8 @@ func (n *Node) batchUpdate(future *structs.BatchFuture, updates []*structs.Alloc
}
_, exists := evalsByJobId[namespacedID]
if !exists {
eval.CreateTime = time.Now().UTC().UnixNano()
eval.ModifyTime = time.Now().UTC().UnixNano()
trimmedEvals = append(trimmedEvals, eval)
evalsByJobId[namespacedID] = struct{}{}
}
Expand Down Expand Up @@ -1261,6 +1265,8 @@ func (n *Node) createNodeEvals(nodeID string, nodeIndex uint64) ([]string, uint6
NodeID: nodeID,
NodeModifyIndex: nodeIndex,
Status: structs.EvalStatusPending,
CreateTime: time.Now().UTC().UnixNano(),
ModifyTime: time.Now().UTC().UnixNano(),
}
evals = append(evals, eval)
evalIDs = append(evalIDs, eval.ID)
Expand All @@ -1285,6 +1291,8 @@ func (n *Node) createNodeEvals(nodeID string, nodeIndex uint64) ([]string, uint6
NodeID: nodeID,
NodeModifyIndex: nodeIndex,
Status: structs.EvalStatusPending,
CreateTime: time.Now().UTC().UnixNano(),
ModifyTime: time.Now().UTC().UnixNano(),
}
evals = append(evals, eval)
evalIDs = append(evalIDs, eval.ID)
Expand Down
3 changes: 3 additions & 0 deletions nomad/periodic.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ func (s *Server) DispatchJob(job *structs.Job) (*structs.Evaluation, error) {
JobID: job.ID,
JobModifyIndex: index,
Status: structs.EvalStatusPending,
CreateTime: time.Now().UTC().UnixNano(),
ModifyTime: time.Now().UTC().UnixNano(),
}
update := &structs.EvalUpdateRequest{
Evals: []*structs.Evaluation{eval},
Expand All @@ -85,6 +87,7 @@ func (s *Server) DispatchJob(job *structs.Job) (*structs.Evaluation, error) {
return nil, err
}

// TODO: do the timestamps need to be at the same time that the raft index is updated?
jazzyfresh marked this conversation as resolved.
Show resolved Hide resolved
// Update its indexes.
eval.CreateIndex = evalIndex
eval.ModifyIndex = evalIndex
Expand Down
2 changes: 2 additions & 0 deletions nomad/plan_apply.go
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,8 @@ func (p *planner) applyPlan(plan *structs.Plan, result *structs.PlanResult, snap
Type: job.Type,
Priority: job.Priority,
Status: structs.EvalStatusPending,
CreateTime: time.Now().UTC().UnixNano(),
ModifyTime: time.Now().UTC().UnixNano(),
}
evals = append(evals, eval)
}
Expand Down
3 changes: 3 additions & 0 deletions nomad/structs/structs.go
Original file line number Diff line number Diff line change
Expand Up @@ -8394,6 +8394,9 @@ type Evaluation struct {
// Raft Indexes
CreateIndex uint64
ModifyIndex uint64

CreateTime int64
ModifyTime int64
jazzyfresh marked this conversation as resolved.
Show resolved Hide resolved
}

// TerminalStatus returns if the current status is terminal and
Expand Down
6 changes: 6 additions & 0 deletions nomad/worker.go
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,8 @@ func (w *Worker) UpdateEval(eval *structs.Evaluation) error {

// Store the snapshot index in the eval
eval.SnapshotIndex = w.snapshotIndex
eval.CreateTime = time.Now().UTC().UnixNano()
jazzyfresh marked this conversation as resolved.
Show resolved Hide resolved
eval.ModifyTime = time.Now().UTC().UnixNano()

// Setup the request
req := structs.EvalUpdateRequest{
Expand Down Expand Up @@ -386,6 +388,8 @@ func (w *Worker) CreateEval(eval *structs.Evaluation) error {

// Store the snapshot index in the eval
eval.SnapshotIndex = w.snapshotIndex
eval.CreateTime = time.Now().UTC().UnixNano()
eval.ModifyTime = time.Now().UTC().UnixNano()

// Setup the request
req := structs.EvalUpdateRequest{
Expand Down Expand Up @@ -447,6 +451,8 @@ func (w *Worker) ReblockEval(eval *structs.Evaluation) error {

// Store the snapshot index in the eval
eval.SnapshotIndex = w.snapshotIndex
eval.CreateTime = time.Now().UTC().UnixNano()
jazzyfresh marked this conversation as resolved.
Show resolved Hide resolved
eval.ModifyTime = time.Now().UTC().UnixNano()

// Setup the request
req := structs.EvalUpdateRequest{
Expand Down