Skip to content

Commit 8c249fe

Browse files
author
liukai2012
authored
Merge pull request #1164 from PapaPiya/fix_filedone_sort
修复filedone文件读取顺序不对导致重复采集的问题
2 parents 1156e5e + 78bf0fc commit 8c249fe

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

reader/meta.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -525,11 +525,14 @@ func (m *Meta) SyncDoneFileInode(inodeOffset map[string]int64) (err error) {
525525

526526
var data bytes.Buffer
527527
for inodeFile, offset := range inodeOffset {
528-
str := strings.Split(inodeFile, "_")
529-
if len(str) != 2 {
528+
pos := strings.LastIndex(inodeFile, "_")
529+
if pos == -1 {
530530
continue
531531
}
532-
data.WriteString(fmt.Sprintf("%s\t%v\t%v\t%s\n", str[0], str[1], offset, time.Now().Format(time.RFC3339Nano)))
532+
_, err = data.WriteString(fmt.Sprintf("%s\t%v\t%v\t%s\n", inodeFile[:pos], inodeFile[pos+1:], offset, time.Now().Format(time.RFC3339Nano)))
533+
if err != nil {
534+
log.Errorf("write string to bytes.Buffer failed when sync done file inode, error: ", err)
535+
}
533536
}
534537
_, err = fmt.Fprintf(f, data.String())
535538
return
@@ -567,8 +570,9 @@ func (m *Meta) GetDoneFileInode(inodeSensitive bool) map[string]int64 {
567570
log.Error(err)
568571
return inodeMap
569572
}
570-
for _, v := range contents {
571-
sps := strings.Split(v, "\t")
573+
// 按从旧到新的顺序读取
574+
for i := len(contents) - 1; i >= 0; i-- {
575+
sps := strings.Split(contents[i], "\t")
572576
offset := int64(-1)
573577
if len(sps) == 4 {
574578
offset, err = strconv.ParseInt(sps[2], 10, 64)

0 commit comments

Comments
 (0)