MCPcopy
hub / github.com/dgraph-io/badger / runCompactDef

Method runCompactDef

levels.go:912–954  ·  view source on GitHub ↗
(l int, cd compactDef)

Source from the content-addressed store, hash-verified

910}
911
912func (s *levelsController) runCompactDef(l int, cd compactDef) (err error) {
913 timeStart := time.Now()
914
915 thisLevel := cd.thisLevel
916 nextLevel := cd.nextLevel
917
918 // Table should never be moved directly between levels, always be rewritten to allow discarding
919 // invalid versions.
920
921 newTables, decr, err := s.compactBuildTables(l, cd)
922 if err != nil {
923 return err
924 }
925 defer func() {
926 // Only assign to err, if it's not already nil.
927 if decErr := decr(); err == nil {
928 err = decErr
929 }
930 }()
931 changeSet := buildChangeSet(&cd, newTables)
932
933 // We write to the manifest _before_ we delete files (and after we created files)
934 if err := s.kv.manifest.addChanges(changeSet.Changes); err != nil {
935 return err
936 }
937
938 // See comment earlier in this function about the ordering of these ops, and the order in which
939 // we access levels when reading.
940 if err := nextLevel.replaceTables(cd.bot, newTables); err != nil {
941 return err
942 }
943 if err := thisLevel.deleteTables(cd.top); err != nil {
944 return err
945 }
946
947 // Note: For level 0, while doCompact is running, it is possible that new tables are added.
948 // However, the tables are added only to the end, so it is ok to just delete the first table.
949
950 s.kv.opt.Infof("LOG Compact %d->%d, del %d tables, add %d tables, took %v\n",
951 thisLevel.level, nextLevel.level, len(cd.top)+len(cd.bot),
952 len(newTables), time.Since(timeStart))
953 return nil
954}
955
956var errFillTables = errors.New("Unable to fill tables")
957

Callers 9

dropPrefixesMethod · 0.95
doCompactMethod · 0.95
TestCompactionFunction · 0.80
TestHeadKeyCleanupFunction · 0.80
TestDiscardTsFunction · 0.80
TestDiscardFirstVersionFunction · 0.80

Calls 6

compactBuildTablesMethod · 0.95
buildChangeSetFunction · 0.85
addChangesMethod · 0.80
replaceTablesMethod · 0.80
deleteTablesMethod · 0.80
InfofMethod · 0.65

Tested by 7

TestCompactionFunction · 0.64
TestHeadKeyCleanupFunction · 0.64
TestDiscardTsFunction · 0.64
TestDiscardFirstVersionFunction · 0.64