MCPcopy
hub / github.com/etcd-io/bbolt / surgeryFreelistRebuildFunc

Function surgeryFreelistRebuildFunc

cmd/bbolt/command/command_surgery_freelist.go:79–111  ·  view source on GitHub ↗
(srcDBPath string, cfg surgeryBaseOptions)

Source from the content-addressed store, hash-verified

77}
78
79func surgeryFreelistRebuildFunc(srcDBPath string, cfg surgeryBaseOptions) error {
80 // Ensure source file exists.
81 fi, err := checkSourceDBPath(srcDBPath)
82 if err != nil {
83 return err
84 }
85
86 // make sure the freelist isn't present in the file.
87 meta, err := readMetaPage(srcDBPath)
88 if err != nil {
89 return err
90 }
91 if meta.IsFreelistPersisted() {
92 return ErrSurgeryFreelistAlreadyExist
93 }
94
95 if err := common.CopyFile(srcDBPath, cfg.outputDBFilePath); err != nil {
96 return fmt.Errorf("[freelist rebuild] copy file failed: %w", err)
97 }
98
99 // bboltDB automatically reconstruct & sync freelist in write mode.
100 db, err := bolt.Open(cfg.outputDBFilePath, fi.Mode(), &bolt.Options{NoFreelistSync: false})
101 if err != nil {
102 return fmt.Errorf("[freelist rebuild] open db file failed: %w", err)
103 }
104 err = db.Close()
105 if err != nil {
106 return fmt.Errorf("[freelist rebuild] close db file failed: %w", err)
107 }
108
109 fmt.Fprintf(os.Stdout, "The freelist was successfully rebuilt.\n")
110 return nil
111}

Callers 1

Calls 6

CopyFileFunction · 0.92
checkSourceDBPathFunction · 0.85
IsFreelistPersistedMethod · 0.80
readMetaPageFunction · 0.70
ErrorfMethod · 0.65
CloseMethod · 0.45

Tested by

no test coverage detected