Skip to content

Commit 447857f

Browse files
committed
solver: use logrus fields for more scheduler debug logs
While debugging solver bugs with scheduler debug logs I ended up with so many logs that I needed to write a program that parsed them and extracted relevant information so it could be summarized more comprehensibly. That was greatly simplified by updating some of the old scheduler debug logs to use logrus fields rather than one-off `fmt.Sprintf`s. All the same information as before is present, just formatted more consistently for easier parsability. I also ended up removing one of the logs I recently added that printed each job for a vertex in `loadUnlocked`. I realized that information was parsable from the rest of the logs and thus was mostly just extra noise. Signed-off-by: Erik Sipsma <[email protected]>
1 parent 56df2df commit 447857f

File tree

2 files changed

+71
-25
lines changed

2 files changed

+71
-25
lines changed

solver/jobs.go

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -476,16 +476,25 @@ func (jl *Solver) loadUnlocked(ctx context.Context, v, parent Vertex, j *Job, ca
476476
if debugScheduler {
477477
lg := bklog.G(ctx).
478478
WithField("vertex_name", v.Name()).
479-
WithField("vertex_digest", v.Digest())
479+
WithField("vertex_digest", v.Digest()).
480+
WithField("actives_digest_key", dgst)
480481
if j != nil {
481482
lg = lg.WithField("job", j.id)
482483
}
483484
lg.Debug("adding active vertex")
485+
for i, inp := range v.Inputs() {
486+
lg.WithField("input_index", i).
487+
WithField("input_vertex_name", inp.Vertex.Name()).
488+
WithField("input_vertex_digest", inp.Vertex.Digest()).
489+
WithField("input_edge_index", inp.Index).
490+
Debug("new active vertex input")
491+
}
484492
}
485493
} else if debugScheduler {
486494
lg := bklog.G(ctx).
487495
WithField("vertex_name", v.Name()).
488-
WithField("vertex_digest", v.Digest())
496+
WithField("vertex_digest", v.Digest()).
497+
WithField("actives_digest_key", dgst)
489498
if j != nil {
490499
lg = lg.WithField("job", j.id)
491500
}
@@ -505,17 +514,6 @@ func (jl *Solver) loadUnlocked(ctx context.Context, v, parent Vertex, j *Job, ca
505514
if _, ok := st.jobs[j]; !ok {
506515
st.jobs[j] = struct{}{}
507516
}
508-
if debugScheduler {
509-
jobIDs := make([]string, 0, len(st.jobs))
510-
for j := range st.jobs {
511-
jobIDs = append(jobIDs, j.id)
512-
}
513-
bklog.G(ctx).
514-
WithField("vertex_name", v.Name()).
515-
WithField("vertex_digest", v.Digest()).
516-
WithField("jobs", jobIDs).
517-
Debug("current jobs for vertex")
518-
}
519517
}
520518
st.mu.Unlock()
521519

solver/scheduler.go

Lines changed: 60 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -423,38 +423,77 @@ func (pf *pipeFactory) NewFuncRequest(f func(context.Context) (interface{}, erro
423423
}
424424

425425
func debugSchedulerPreUnpark(e *edge, inc []pipe.Sender, updates, allPipes []pipe.Receiver) {
426-
log := bklog.G(context.TODO())
427-
428-
log.Debugf(">> unpark %s req=%d upt=%d out=%d state=%s %s", e.edge.Vertex.Name(), len(inc), len(updates), len(allPipes), e.state, e.edge.Vertex.Digest())
426+
log := bklog.G(context.TODO()).
427+
WithField("edge_vertex_name", e.edge.Vertex.Name()).
428+
WithField("edge_vertex_digest", e.edge.Vertex.Digest()).
429+
WithField("edge_index", e.edge.Index)
430+
431+
log.
432+
WithField("edge_state", e.state).
433+
WithField("req", len(inc)).
434+
WithField("upt", len(updates)).
435+
WithField("out", len(allPipes)).
436+
Debug(">> unpark")
429437

430438
for i, dep := range e.deps {
431439
des := edgeStatusInitial
432440
if dep.req != nil {
433441
des = dep.req.Request().(*edgeRequest).desiredState
434442
}
435-
log.Debugf(":: dep%d %s state=%s des=%s keys=%d hasslowcache=%v preprocessfunc=%v", i, e.edge.Vertex.Inputs()[i].Vertex.Name(), dep.state, des, len(dep.keys), e.slowCacheFunc(dep) != nil, e.preprocessFunc(dep) != nil)
443+
log.
444+
WithField("dep_index", i).
445+
WithField("dep_vertex_name", e.edge.Vertex.Inputs()[i].Vertex.Name()).
446+
WithField("dep_vertex_digest", e.edge.Vertex.Inputs()[i].Vertex.Digest()).
447+
WithField("dep_state", dep.state).
448+
WithField("dep_desired_state", des).
449+
WithField("dep_keys", len(dep.keys)).
450+
WithField("dep_has_slow_cache", e.slowCacheFunc(dep) != nil).
451+
WithField("dep_preprocess_func", e.preprocessFunc(dep) != nil).
452+
Debug(":: dep")
436453
}
437454

438455
for i, in := range inc {
439456
req := in.Request()
440-
log.Debugf("> incoming-%d: %p dstate=%s canceled=%v", i, in, req.Payload.(*edgeRequest).desiredState, req.Canceled)
457+
log.
458+
WithField("incoming_index", i).
459+
WithField("incoming_pointer", in).
460+
WithField("incoming_desired_state", req.Payload.(*edgeRequest).desiredState).
461+
WithField("incoming_canceled", req.Canceled).
462+
Debug("> incoming")
441463
}
442464

443465
for i, up := range updates {
444466
if up == e.cacheMapReq {
445-
log.Debugf("> update-%d: %p cacheMapReq complete=%v", i, up, up.Status().Completed)
467+
log.
468+
WithField("update_index", i).
469+
WithField("update_pointer", up).
470+
WithField("update_complete", up.Status().Completed).
471+
Debug("> update cacheMapReq")
446472
} else if up == e.execReq {
447-
log.Debugf("> update-%d: %p execReq complete=%v", i, up, up.Status().Completed)
473+
log.
474+
WithField("update_index", i).
475+
WithField("update_pointer", up).
476+
WithField("update_complete", up.Status().Completed).
477+
Debug("> update execReq")
448478
} else {
449479
st, ok := up.Status().Value.(*edgeState)
450480
if ok {
451481
index := -1
452482
if dep, ok := e.depRequests[up]; ok {
453483
index = int(dep.index)
454484
}
455-
log.Debugf("> update-%d: %p input-%d keys=%d state=%s", i, up, index, len(st.keys), st.state)
485+
log.
486+
WithField("update_index", i).
487+
WithField("update_pointer", up).
488+
WithField("update_complete", up.Status().Completed).
489+
WithField("update_input_index", index).
490+
WithField("update_keys", len(st.keys)).
491+
WithField("update_state", st.state).
492+
Debugf("> update edgeState")
456493
} else {
457-
log.Debugf("> update-%d: unknown", i)
494+
log.
495+
WithField("update_index", i).
496+
Debug("> update unknown")
458497
}
459498
}
460499
}
@@ -463,7 +502,16 @@ func debugSchedulerPreUnpark(e *edge, inc []pipe.Sender, updates, allPipes []pip
463502
func debugSchedulerPostUnpark(e *edge, inc []pipe.Sender) {
464503
log := bklog.G(context.TODO())
465504
for i, in := range inc {
466-
log.Debugf("< incoming-%d: %p completed=%v", i, in, in.Status().Completed)
467-
}
468-
log.Debugf("<< unpark %s\n", e.edge.Vertex.Name())
505+
log.
506+
WithField("incoming_index", i).
507+
WithField("incoming_pointer", in).
508+
WithField("incoming_complete", in.Status().Completed).
509+
Debug("< incoming")
510+
}
511+
log.
512+
WithField("edge_vertex_name", e.edge.Vertex.Name()).
513+
WithField("edge_vertex_digest", e.edge.Vertex.Digest()).
514+
WithField("edge_index", e.edge.Index).
515+
WithField("edge_state", e.state).
516+
Debug("<< unpark")
469517
}

0 commit comments

Comments
 (0)