@@ -2,6 +2,10 @@ package workerpool
2
2
3
3
import (
4
4
"context"
5
+ "fmt"
6
+ "runtime"
7
+ "strconv"
8
+ "strings"
5
9
"sync"
6
10
"time"
7
11
@@ -62,10 +66,10 @@ func (w *internalWorker) start() {
62
66
63
67
w .setIdleSince (time.Time {})
64
68
if w .delegate .Work () {
65
- w .logger .Infof ("worker %q produced work" , w .partition )
69
+ w .logger .Infof ("worker %q produced work %d " , w .partition , goid () )
66
70
exponentialSleep .Reset ()
67
71
} else {
68
- w .logger .Infof ("worker %q didn't produce any work" , w .partition )
72
+ w .logger .Infof ("worker %q didn't produce any work %d " , w .partition , goid () )
69
73
if err := misc .SleepCtx (w .lifecycle .ctx , exponentialSleep .Next (w .delegate .SleepDurations ())); err != nil {
70
74
w .logger .Debugf ("worker %q sleep interrupted: %v" , w .partition , err )
71
75
return
@@ -84,6 +88,17 @@ func (w *internalWorker) setIdleSince(t time.Time) {
84
88
}
85
89
}
86
90
91
+ func goid () int {
92
+ var buf [64 ]byte
93
+ n := runtime .Stack (buf [:], false )
94
+ idField := strings .Fields (strings .TrimPrefix (string (buf [:n ]), "goroutine" ))[0 ]
95
+ id , err := strconv .Atoi (idField )
96
+ if err != nil {
97
+ panic (fmt .Sprintf ("cannot get goroutine id: %v" , err ))
98
+ }
99
+ return id
100
+ }
101
+
87
102
// Ping triggers the worker to pick more jobs
88
103
func (w * internalWorker ) Ping () {
89
104
w .logger .Debugf ("worker %q pinged" , w .partition )
@@ -94,9 +109,9 @@ func (w *internalWorker) Ping() {
94
109
}
95
110
select {
96
111
case w .ping <- struct {}{}:
97
- w .logger .Infof ("worker %q pinged" , w .partition )
112
+ w .logger .Infof ("worker %q pinged %d " , w .partition , goid () )
98
113
default :
99
- w .logger .Infof ("worker %q pinged but channel was full" , w .partition )
114
+ w .logger .Infof ("worker %q pinged but channel was full %d " , w .partition , goid () )
100
115
}
101
116
}
102
117
0 commit comments