MCPcopy Create free account
hub / github.com/ByteStorage/FlyDB / Merge

Method Merge

engine/merge.go:21–160  ·  view source on GitHub ↗

Merge Clear the invalid data and generate the hint index file

()

Source from the content-addressed store, hash-verified

19
20// Merge Clear the invalid data and generate the hint index file
21func (db *DB) Merge() error {
22 // If the database is empty, it is returned directly
23 if db.activeFile == nil {
24 return nil
25 }
26 db.lock.Lock()
27 // If the merge is in progress, return directly
28 if db.isMerging {
29 db.lock.Unlock()
30 return _const.ErrMergeIsProgress
31 }
32 db.isMerging = true
33 defer func() {
34 db.isMerging = false
35 }()
36
37 // Persist the currently active file
38 if err := db.activeFile.Sync(); err != nil {
39 db.lock.Unlock()
40 return err
41 }
42
43 // Converts the currently active file to the old data file
44 db.olderFiles[db.activeFile.FileID] = db.activeFile
45 // Open a new active file
46 if err := db.setActiveDataFile(); err != nil {
47 db.lock.Unlock()
48 return nil
49 }
50
51 // Records files that have not participated in the merge recently
52 noMergeFileId := db.activeFile.FileID
53
54 // Retrieve all files that need to be merged
55 var mergeFiles []*data2.DataFile
56 for _, files := range db.olderFiles {
57 mergeFiles = append(mergeFiles, files)
58 }
59 db.lock.Unlock()
60
61 // Sort merge files from smallest to largest
62 sort.Slice(mergeFiles, func(i, j int) bool {
63 return mergeFiles[i].FileID < mergeFiles[j].FileID
64 })
65
66 mergePath := db.getMergePath()
67 // If the directory exists, it has been merged and needs to be deleted
68 if _, err := os.Stat(mergePath); err == nil {
69 if err := os.RemoveAll(mergePath); err != nil {
70 return err
71 }
72 }
73 // Creating a merge Directory
74 if err := os.MkdirAll(mergePath, os.ModePerm); err != nil {
75 return err
76 }
77
78 // Open a temporary new instance and modify the configuration item

Callers 3

TestDB_MergeFunction · 0.95
TestDB_Merge2Function · 0.95
TestDB_Merge3Function · 0.95

Calls 12

setActiveDataFileMethod · 0.95
getMergePathMethod · 0.95
appendLogRecordMethod · 0.95
SyncMethod · 0.95
NewDBFunction · 0.85
parseLogRecordKeyAndSeqFunction · 0.85
ReadLogRecordMethod · 0.80
WriteHintRecordMethod · 0.80
SyncMethod · 0.65
GetMethod · 0.65
WriteMethod · 0.65

Tested by 3

TestDB_MergeFunction · 0.76
TestDB_Merge2Function · 0.76
TestDB_Merge3Function · 0.76