@@ -54,16 +54,17 @@ type LastSync struct {
5454
5555// BufReader implements buffering for an FileReader object.
5656type BufReader struct {
57- stopped int32
58- buf []byte
59- delim []byte
60- mutiLineCache * LineCache
61- rd reader.FileReader // reader provided by the client
62- r , w int // buf read and write positions
63- err error
64- lastByte int
65- lastRuneSize int
66- lastSync LastSync
57+ stopped int32
58+ buf []byte
59+ delim []byte
60+ mutiLineCache * LineCache
61+ waitForWholeLine bool //readWholeLine
62+ rd reader.FileReader // reader provided by the client
63+ r , w int // buf read and write positions
64+ err error
65+ lastByte int
66+ lastRuneSize int
67+ lastSync LastSync
6768
6869 runTime reader.RunTime
6970
@@ -88,7 +89,7 @@ type BufReader struct {
8889const minReadBufferSize = 16
8990
9091//最大连续读到空的尝试次数
91- const maxConsecutiveEmptyReads = 10
92+ const maxConsecutiveEmptyReads = 40
9293
9394// NewReaderSize returns a new Reader whose buffer has at least the specified
9495// size. If the argument FileReader is already a Reader with large enough
@@ -189,6 +190,11 @@ func (b *BufReader) SetMode(mode string, v interface{}) (err error) {
189190 return
190191}
191192
193+ func (b * BufReader ) SetWaitFlagForWholeLine () {
194+ b .waitForWholeLine = true
195+ return
196+ }
197+
192198func (b * BufReader ) SetRunTime (mode string , v interface {}) (err error ) {
193199 b .runTime , err = reader .ParseRunTimeWithMode (mode , v )
194200 return err
@@ -280,13 +286,25 @@ func (b *BufReader) fill() {
280286 }
281287
282288 b .w += n
289+
290+ if err == io .EOF && b .waitForWholeLine {
291+ if i == 1 { //when last attempts,return err info;
292+ b .err = err
293+ return
294+ }
295+
296+ time .Sleep (1 * time .Second )
297+ continue
298+ }
299+
283300 if err != nil {
284301 b .err = err
285302 return
286303 }
287304 if n > 0 {
288305 return
289306 }
307+
290308 }
291309 b .err = io .ErrNoProgress
292310}
@@ -666,7 +684,9 @@ func NewSingleFileReader(meta *reader.Meta, conf conf.MapConf) (reader reader.Re
666684 return
667685 }
668686 maxLineLen , _ := conf .GetInt64Or (KeyRunnerMaxLineLen , 0 )
669- return NewReaderSize (fr , meta , bufSize , maxLineLen )
687+ r , err := NewReaderSize (fr , meta , bufSize , maxLineLen )
688+ r .SetWaitFlagForWholeLine ()
689+ return r , err
670690}
671691
672692func init () {
0 commit comments