Skip to content

Commit b58cf88

Browse files
committed
cmd/buildlet/stage0: more logging about various delays, pass in env to child
Updates golang/go#21153 Updates golang/go#17167 Change-Id: Ibe575d295468235a16c01f3420a9597373ab3891 Reviewed-on: https://go-review.googlesource.com/51192 Reviewed-by: Brad Fitzpatrick <[email protected]>
1 parent b5bac7d commit b58cf88

File tree

1 file changed

+20
-3
lines changed

1 file changed

+20
-3
lines changed

cmd/buildlet/stage0/stage0.go

+20-3
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ var (
4949
closeSerialLogOutput func()
5050
)
5151

52+
var timeStart = time.Now()
53+
5254
func main() {
5355
if configureSerialLogOutput != nil {
5456
configureSerialLogOutput()
@@ -88,6 +90,9 @@ func main() {
8890
if !awaitNetwork() {
8991
sleepFatalf("network didn't become reachable")
9092
}
93+
timeNetwork := time.Now()
94+
netDelay := prettyDuration(timeNetwork.Sub(timeStart))
95+
log.Printf("network up after %v", netDelay)
9196

9297
// Note: we name it ".exe" for Windows, but the name also
9398
// works fine on Linux, etc.
@@ -101,6 +106,8 @@ func main() {
101106
log.Fatal(err)
102107
}
103108
}
109+
downloadDelay := prettyDuration(time.Since(timeNetwork))
110+
log.Printf("downloaded buildlet in %v", downloadDelay)
104111

105112
env := os.Environ()
106113
if isUnix() && os.Getuid() == 0 {
@@ -111,6 +118,8 @@ func main() {
111118
env = append(env, "HOME=/root")
112119
}
113120
}
121+
env = append(env, fmt.Sprintf("GO_STAGE0_NET_DELAY=%v", netDelay))
122+
env = append(env, fmt.Sprintf("GO_STAGE0_DL_DELAY=%v", downloadDelay))
114123

115124
cmd := exec.Command(target)
116125
cmd.Stdout = os.Stdout
@@ -194,13 +203,13 @@ func awaitNetwork() bool {
194203
for time.Now().Before(deadline) {
195204
t0 := time.Now()
196205
if isNetworkUp() {
197-
log.Printf("network is up.")
198206
return true
199207
}
200208
failAfter := time.Since(t0)
201209
if now := time.Now(); now.After(lastSpam.Add(5 * time.Second)) {
202-
const round = time.Second / 10
203-
log.Printf("network still down; probe failure took %v", failAfter/round*round)
210+
log.Printf("network still down for %v; probe failure took %v",
211+
prettyDuration(time.Since(timeStart)),
212+
prettyDuration(failAfter))
204213
lastSpam = now
205214
}
206215
time.Sleep(1 * time.Second)
@@ -209,6 +218,9 @@ func awaitNetwork() bool {
209218
return false
210219
}
211220

221+
// isNetworkUp reports whether the network is up by hitting an
222+
// known-up HTTP server. It might block for a few seconds before
223+
// returning an answer.
212224
func isNetworkUp() bool {
213225
const probeURL = "http://farmer.golang.org/netcheck" // 404 is fine.
214226
c := &http.Client{
@@ -360,3 +372,8 @@ func untarMode() {
360372
log.Fatalf("Untarring %q to %q: %v", *untarFile, *untarDestDir, err)
361373
}
362374
}
375+
376+
func prettyDuration(d time.Duration) time.Duration {
377+
const round = time.Second / 10
378+
return d / round * round
379+
}

0 commit comments

Comments
 (0)