Wait for log file after rotation

This commit is contained in:
Riccardo Biraghi
2018-04-10 10:01:47 +01:00
parent 9c71fa1c6c
commit 7009f3a392

View File

@@ -33,7 +33,7 @@ func waitForFile(ctx context.Context, path string) (os.FileInfo, error) {
select {
// Check to see if cancellation has been requested
case <-ctx.Done():
return nil, nil
return os.Stat(path)
default:
fi, err = os.Stat(path)
if err != nil {
@@ -145,7 +145,8 @@ func mirrorLog(ctx context.Context, wg *sync.WaitGroup, path string, fromStart b
for {
// If there's already data there, mirror it now.
mirrorAvailableMessages(f, mf)
newFI, err := os.Stat(path)
// Wait for the new log file (after rotation)
newFI, err := waitForFile(ctx, path)
if err != nil {
log.Error(err)
errorChannel <- err
@@ -171,7 +172,6 @@ func mirrorLog(ctx context.Context, wg *sync.WaitGroup, path string, fromStart b
// Don't seek this time, because we know it's a new file
mirrorAvailableMessages(f, mf)
}
select {
case <-ctx.Done():
log.Debugf("Context cancelled for mirroring %v", path)
@@ -181,9 +181,9 @@ func mirrorLog(ctx context.Context, wg *sync.WaitGroup, path string, fromStart b
}
// Set a flag, to allow one more time through the loop
closing = true
default:
time.Sleep(500 * time.Millisecond)
}
time.Sleep(500 * time.Millisecond)
}
}()
return errorChannel, nil