Browse Source

Merge pull request #15209 from cpuguy83/15199_fix_tailing_more_than_available

Ensure reader position is at the end after tailing
Alexander Morozov 10 năm trước cách đây
mục cha
commit
d080d262b3
2 tập tin đã thay đổi với 10 bổ sung2 xóa
  1. 2 1
      daemon/logger/jsonfilelog/jsonfilelog.go
  2. 8 1
      daemon/logger/logger.go

+ 2 - 1
daemon/logger/jsonfilelog/jsonfilelog.go

@@ -267,7 +267,8 @@ func (l *JSONFileLogger) readLogs(logWatcher *logger.LogWatcher, config logger.R
 	if !config.Follow {
 		return
 	}
-	if config.Tail == 0 {
+
+	if config.Tail >= 0 {
 		latestFile.Seek(0, os.SEEK_END)
 	}
 

+ 8 - 1
daemon/logger/logger.go

@@ -9,6 +9,7 @@ package logger
 
 import (
 	"errors"
+	"sync"
 	"time"
 
 	"github.com/docker/docker/pkg/timeutils"
@@ -58,6 +59,7 @@ type LogWatcher struct {
 	// For sending error messages that occur while while reading logs.
 	Err           chan error
 	closeNotifier chan struct{}
+	closeOnce     sync.Once
 }
 
 // NewLogWatcher returns a new LogWatcher.
@@ -71,7 +73,12 @@ func NewLogWatcher() *LogWatcher {
 
 // Close notifies the underlying log reader to stop.
 func (w *LogWatcher) Close() {
-	close(w.closeNotifier)
+	// only close if not already closed
+	select {
+	case <-w.closeNotifier:
+	default:
+		close(w.closeNotifier)
+	}
 }
 
 // WatchClose returns a channel receiver that receives notification