Skip to content

Commit 06eda7f

Browse files
authored
tag all process logs with its ID (#103)
Makes identifying Process of log messages easier
1 parent 5fad24c commit 06eda7f

File tree

2 files changed

+26
-27
lines changed

2 files changed

+26
-27
lines changed

proxy/process.go

+25-26
Original file line numberDiff line numberDiff line change
@@ -93,17 +93,17 @@ func (p *Process) swapState(expectedState, newState ProcessState) (ProcessState,
9393
defer p.stateMutex.Unlock()
9494

9595
if p.state != expectedState {
96-
p.proxyLogger.Warnf("swapState() Unexpected current state %s, expected %s", p.state, expectedState)
96+
p.proxyLogger.Warnf("<%s> swapState() Unexpected current state %s, expected %s", p.ID, p.state, expectedState)
9797
return p.state, ErrExpectedStateMismatch
9898
}
9999

100100
if !isValidTransition(p.state, newState) {
101-
p.proxyLogger.Warnf("swapState() Invalid state transition from %s to %s", p.state, newState)
101+
p.proxyLogger.Warnf("<%s> swapState() Invalid state transition from %s to %s", p.ID, p.state, newState)
102102
return p.state, ErrInvalidStateTransition
103103
}
104104

105105
p.state = newState
106-
p.proxyLogger.Debugf("swapState() State transitioned from %s to %s", expectedState, newState)
106+
p.proxyLogger.Debugf("<%s> swapState() State transitioned from %s to %s", p.ID, expectedState, newState)
107107
return p.state, nil
108108
}
109109

@@ -187,7 +187,7 @@ func (p *Process) start() error {
187187
// Capture the exit error for later signaling
188188
go func() {
189189
exitErr := p.cmd.Wait()
190-
p.proxyLogger.Debugf("cmd.Wait() returned for [%s] error: %v", p.ID, exitErr)
190+
p.proxyLogger.Debugf("<%s> cmd.Wait() returned error: %v", p.ID, exitErr)
191191
p.cmdWaitChan <- exitErr
192192
}()
193193

@@ -236,32 +236,32 @@ func (p *Process) start() error {
236236
return errors.New("health check interrupted due to shutdown")
237237
case exitErr := <-p.cmdWaitChan:
238238
if exitErr != nil {
239-
p.proxyLogger.Warnf("upstream command exited prematurely with error: %v", exitErr)
239+
p.proxyLogger.Warnf("<%s> upstream command exited prematurely with error: %v", p.ID, exitErr)
240240
if curState, err := p.swapState(StateStarting, StateFailed); err != nil {
241241
return fmt.Errorf("upstream command exited unexpectedly: %s AND state swap failed: %v, current state: %v", exitErr.Error(), err, curState)
242242
} else {
243243
return fmt.Errorf("upstream command exited unexpectedly: %s", exitErr.Error())
244244
}
245245
} else {
246-
p.proxyLogger.Warnf("upstream command exited prematurely with no error")
246+
p.proxyLogger.Warnf("<%s> upstream command exited prematurely but successfully", p.ID)
247247
if curState, err := p.swapState(StateStarting, StateFailed); err != nil {
248-
return fmt.Errorf("upstream command exited prematurely with no error AND state swap failed: %v, current state: %v", err, curState)
248+
return fmt.Errorf("upstream command exited prematurely but successfully AND state swap failed: %v, current state: %v", err, curState)
249249
} else {
250-
return fmt.Errorf("upstream command exited prematurely with no error")
250+
return fmt.Errorf("upstream command exited prematurely but successfully")
251251
}
252252
}
253253
default:
254254
if err := p.checkHealthEndpoint(healthURL); err == nil {
255-
p.proxyLogger.Infof("Health check passed on %s", healthURL)
255+
p.proxyLogger.Infof("<%s> Health check passed on %s", p.ID, healthURL)
256256
cancelHealthCheck()
257257
break loop
258258
} else {
259259
if strings.Contains(err.Error(), "connection refused") {
260260
endTime, _ := checkDeadline.Deadline()
261261
ttl := time.Until(endTime)
262-
p.proxyLogger.Infof("Connection refused on %s, giving up in %.0fs", healthURL, ttl.Seconds())
262+
p.proxyLogger.Infof("<%s> Connection refused on %s, giving up in %.0fs", p.ID, healthURL, ttl.Seconds())
263263
} else {
264-
p.proxyLogger.Infof("Health check error on %s, %v", healthURL, err)
264+
p.proxyLogger.Infof("<%s> Health check error on %s, %v", p.ID, healthURL, err)
265265
}
266266
}
267267
}
@@ -285,7 +285,7 @@ func (p *Process) start() error {
285285
p.inFlightRequests.Wait()
286286

287287
if time.Since(p.lastRequestHandled) > maxDuration {
288-
p.proxyLogger.Infof("Unloading model %s, TTL of %ds reached.", p.ID, p.config.UnloadAfter)
288+
p.proxyLogger.Infof("<%s> Unloading model, TTL of %ds reached", p.ID, p.config.UnloadAfter)
289289
p.Stop()
290290
return
291291
}
@@ -303,19 +303,19 @@ func (p *Process) start() error {
303303
func (p *Process) Stop() {
304304
// wait for any inflight requests before proceeding
305305
p.inFlightRequests.Wait()
306-
p.proxyLogger.Debugf("Stopping process [%s]", p.ID)
306+
p.proxyLogger.Debugf("<%s> Stopping process", p.ID)
307307

308308
// calling Stop() when state is invalid is a no-op
309309
if curState, err := p.swapState(StateReady, StateStopping); err != nil {
310-
p.proxyLogger.Infof("Stop() Ready -> StateStopping err: %v, current state: %v", err, curState)
310+
p.proxyLogger.Infof("<%s> Stop() Ready -> StateStopping err: %v, current state: %v", p.ID, err, curState)
311311
return
312312
}
313313

314314
// stop the process with a graceful exit timeout
315315
p.stopCommand(5 * time.Second)
316316

317317
if curState, err := p.swapState(StateStopping, StateStopped); err != nil {
318-
p.proxyLogger.Infof("Stop() StateStopping -> StateStopped err: %v, current state: %v", err, curState)
318+
p.proxyLogger.Infof("<%s> Stop() StateStopping -> StateStopped err: %v, current state: %v", p.ID, err, curState)
319319
}
320320
}
321321

@@ -333,24 +333,24 @@ func (p *Process) Shutdown() {
333333
func (p *Process) stopCommand(sigtermTTL time.Duration) {
334334
stopStartTime := time.Now()
335335
defer func() {
336-
p.proxyLogger.Debugf("Process [%s] stopCommand took %v", p.ID, time.Since(stopStartTime))
336+
p.proxyLogger.Debugf("<%s> stopCommand took %v", p.ID, time.Since(stopStartTime))
337337
}()
338338

339339
sigtermTimeout, cancelTimeout := context.WithTimeout(context.Background(), sigtermTTL)
340340
defer cancelTimeout()
341341

342342
if p.cmd == nil || p.cmd.Process == nil {
343-
p.proxyLogger.Warnf("Process [%s] cmd or cmd.Process is nil", p.ID)
343+
p.proxyLogger.Warnf("<%s> cmd or cmd.Process is nil", p.ID)
344344
return
345345
}
346346

347347
if err := p.terminateProcess(); err != nil {
348-
p.proxyLogger.Infof("Failed to gracefully terminate process [%s]: %v", p.ID, err)
348+
p.proxyLogger.Infof("<%s> Failed to gracefully terminate process: %v", p.ID, err)
349349
}
350350

351351
select {
352352
case <-sigtermTimeout.Done():
353-
p.proxyLogger.Infof("Process [%s] timed out waiting to stop, sending KILL signal", p.ID)
353+
p.proxyLogger.Infof("<%s> Process timed out waiting to stop, sending KILL signal", p.ID)
354354
p.cmd.Process.Kill()
355355
case err := <-p.cmdWaitChan:
356356
// Note: in start(), p.cmdWaitChan also has a select { ... }. That should be OK
@@ -359,24 +359,23 @@ func (p *Process) stopCommand(sigtermTTL time.Duration) {
359359
// succeeded but that's not a case llama-swap is handling for now.
360360
if err != nil {
361361
if errno, ok := err.(syscall.Errno); ok {
362-
p.proxyLogger.Errorf("Process [%s] errno >> %v", p.ID, errno)
362+
p.proxyLogger.Errorf("<%s> errno >> %v", p.ID, errno)
363363
} else if exitError, ok := err.(*exec.ExitError); ok {
364364
if strings.Contains(exitError.String(), "signal: terminated") {
365-
p.proxyLogger.Infof("Process [%s] stopped OK", p.ID)
365+
p.proxyLogger.Infof("<%s> Process stopped OK", p.ID)
366366
} else if strings.Contains(exitError.String(), "signal: interrupt") {
367-
p.proxyLogger.Infof("Process [%s] interrupted OK", p.ID)
367+
p.proxyLogger.Infof("<%s> Process interrupted OK", p.ID)
368368
} else {
369-
p.proxyLogger.Warnf("Process [%s] ExitError >> %v, exit code: %d", p.ID, exitError, exitError.ExitCode())
369+
p.proxyLogger.Warnf("<%s> ExitError >> %v, exit code: %d", p.ID, exitError, exitError.ExitCode())
370370
}
371371
} else {
372-
p.proxyLogger.Errorf("Process [%s] exited >> %v", p.ID, err)
372+
p.proxyLogger.Errorf("<%s> Process exited >> %v", p.ID, err)
373373
}
374374
}
375375
}
376376
}
377377

378378
func (p *Process) checkHealthEndpoint(healthURL string) error {
379-
380379
client := &http.Client{
381380
Timeout: 500 * time.Millisecond,
382381
}
@@ -471,6 +470,6 @@ func (p *Process) ProxyRequest(w http.ResponseWriter, r *http.Request) {
471470
}
472471

473472
totalTime := time.Since(requestBeginTime)
474-
p.proxyLogger.Debugf("Process [%s] request %s - start: %v, total: %v",
473+
p.proxyLogger.Debugf("<%s> request %s - start: %v, total: %v",
475474
p.ID, r.RequestURI, startDuration, totalTime)
476475
}

proxy/process_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,6 @@ func TestProcess_ExitInterruptsHealthCheck(t *testing.T) {
337337
process := NewProcess("sleepy", checkHealthTimeout, config, debugLogger, debugLogger)
338338
process.healthCheckLoopInterval = time.Second // make it faster
339339
err := process.start()
340-
assert.Equal(t, "upstream command exited prematurely with no error", err.Error())
340+
assert.Equal(t, "upstream command exited prematurely but successfully", err.Error())
341341
assert.Equal(t, process.CurrentState(), StateFailed)
342342
}

0 commit comments

Comments
 (0)