From 7f3fc89c9d2b3f045fef2fe52e7e54532b364dbe Mon Sep 17 00:00:00 2001 From: kercylan98 Date: Wed, 29 Nov 2023 16:34:03 +0800 Subject: [PATCH] =?UTF-8?q?recessive:=20=E4=BF=AE=E5=A4=8D=20ReadLineWithP?= =?UTF-8?q?arallel=20=E5=BD=93=E8=AF=BB=E5=8F=96=E5=88=B0=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=B0=BE=E6=97=B6=EF=BC=8C=E8=BF=94=E5=9B=9E=E7=9A=84?= =?UTF-8?q?=20offset=20=E6=9C=89=E8=AF=AF=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/file/file.go | 5 ++++- utils/log/survey/survey.go | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/utils/file/file.go b/utils/file/file.go index eddb77b..879ccb4 100644 --- a/utils/file/file.go +++ b/utils/file/file.go @@ -164,9 +164,12 @@ func ReadLineWithParallel(filename string, chunkSize int64, handlerFunc func(str }() fileSize, err := file.Seek(0, io.SeekEnd) - if err != nil || offset-1 >= fileSize { + if err != nil { return offset, err } + if offset-1 >= fileSize { + return fileSize + 1, nil + } chunks := FindLineChunksByOffset(file, offset, chunkSize) var end int64 diff --git a/utils/log/survey/survey.go b/utils/log/survey/survey.go index 8fff7c5..a87f91e 100644 --- a/utils/log/survey/survey.go +++ b/utils/log/survey/survey.go @@ -156,8 +156,11 @@ func AnalyzeMulti(filePaths []string, handle func(analyzer *Analyzer, record R)) func IncrementAnalyze(filePath string, handle func(analyzer *Analyzer, record R)) func() (*Report, error) { var analyzer = new(Analyzer) var offset int64 + var m = new(sync.Mutex) return func() (*Report, error) { var err error + m.Lock() + defer m.Unlock() offset, err = file.ReadLineWithParallel(filePath, 1*1024*1024*1024, func(s string) { handle(analyzer, R(s)) }, offset)