in logger/buffered_logger.go [293:328]
func (b *ringBuffer) Enqueue(msg *dockerlogger.Message) error {
b.lock.Lock()
defer b.lock.Unlock()
lineSizeInBytes := len(msg.Line)
// If there is already at least one log message in the queue and not enough space left
// for the new coming log message to take up, drop this log message. Otherwise, save this
// message to ring buffer anyway.
if len(b.queue) > 0 &&
b.curSizeInBytes+lineSizeInBytes > b.maxSizeInBytes {
if debug.Verbose {
debug.SendEventsToLog(DaemonName,
"buffer is full/message is too long, waiting for available bytes",
debug.DEBUG, 0)
debug.SendEventsToLog(DaemonName,
fmt.Sprintf("message size: %d, current buffer size: %d, max buffer size %d",
lineSizeInBytes,
b.curSizeInBytes,
b.maxSizeInBytes),
debug.DEBUG, 0)
}
// Wake up "Dequeue" or the other "Enqueue" go routine (called by the other pipe)
// waiting on current mutex lock if there's any
b.wait.Signal()
return nil
}
b.queue = append(b.queue, msg)
b.curSizeInBytes += lineSizeInBytes
// Wake up "Dequeue" or the other "Enqueue" go routine (called by the other pipe)
// waiting on current mutex lock if there's any
b.wait.Signal()
return nil
}