Skip to content

Commit fa478f8

Browse files
committed
db: remove unnecessary metric updates
When we apply a new version, we also pass "delta metrics" that are added to the current `LevelMetrics`. Some of `LevelMetrics` fields (like table counts/sizes, estimated ref size) are reset from the `LevelMetadata` from the new version. These fields don't require maintenance through the delta metrics. This change removes the ineffectual code which attempts to keep these fields updated through the delta metrics.
1 parent 8375b02 commit fa478f8

File tree

5 files changed

+3
-78
lines changed

5 files changed

+3
-78
lines changed

compaction.go

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1520,22 +1520,6 @@ func (d *DB) runIngestFlush(c *tableCompaction) (*manifest.VersionEdit, error) {
15201520
var ingestSplitFiles []ingestSplitFile
15211521
ingestFlushable := c.flush.flushables[0].flushable.(*ingestedFlushable)
15221522

1523-
updateLevelMetricsOnExcise := func(m *manifest.TableMetadata, level int, added []manifest.NewTableEntry) {
1524-
levelMetrics := c.metrics.perLevel[level]
1525-
if levelMetrics == nil {
1526-
levelMetrics = &LevelMetrics{}
1527-
c.metrics.perLevel[level] = levelMetrics
1528-
}
1529-
levelMetrics.TablesCount--
1530-
levelMetrics.TablesSize -= int64(m.Size)
1531-
levelMetrics.EstimatedReferencesSize -= m.EstimatedReferenceSize()
1532-
for i := range added {
1533-
levelMetrics.TablesCount++
1534-
levelMetrics.TablesSize += int64(added[i].Meta.Size)
1535-
levelMetrics.EstimatedReferencesSize += added[i].Meta.EstimatedReferenceSize()
1536-
}
1537-
}
1538-
15391523
suggestSplit := d.opts.Experimental.IngestSplit != nil && d.opts.Experimental.IngestSplit() &&
15401524
d.FormatMajorVersion() >= FormatVirtualSSTables
15411525

@@ -1609,13 +1593,12 @@ func (d *DB) runIngestFlush(c *tableCompaction) (*manifest.VersionEdit, error) {
16091593
}
16101594
newFiles := applyExciseToVersionEdit(ve, m, leftTable, rightTable, layer.Level())
16111595
replacedTables[m.TableNum] = newFiles
1612-
updateLevelMetricsOnExcise(m, layer.Level(), newFiles)
16131596
}
16141597
}
16151598
}
16161599

16171600
if len(ingestSplitFiles) > 0 {
1618-
if err := d.ingestSplit(context.TODO(), ve, updateLevelMetricsOnExcise, ingestSplitFiles, replacedTables); err != nil {
1601+
if err := d.ingestSplit(context.TODO(), ve, ingestSplitFiles, replacedTables); err != nil {
16191602
return nil, err
16201603
}
16211604
}
@@ -3615,9 +3598,6 @@ func (c *tableCompaction) makeVersionEdit(result compact.Result) (*manifest.Vers
36153598
outputMetrics.TablesFlushed++
36163599
outputMetrics.TableBytesFlushed += fileMeta.Size
36173600
}
3618-
outputMetrics.EstimatedReferencesSize += fileMeta.EstimatedReferenceSize()
3619-
outputMetrics.TablesSize += int64(fileMeta.Size)
3620-
outputMetrics.TablesCount++
36213601
outputMetrics.Additional.BytesWrittenDataBlocks += t.WriterMeta.Properties.DataSize
36223602
outputMetrics.Additional.BytesWrittenValueBlocks += t.WriterMeta.Properties.ValueBlocksSize
36233603
}

data_test.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1190,7 +1190,6 @@ func runDBDefineCmd(td *datadriven.TestData, opts *Options) (*DB, error) {
11901190
return versionUpdate{
11911191
VE: ve,
11921192
JobID: jobID,
1193-
Metrics: newFileMetrics(ve.NewTables),
11941193
InProgressCompactionsFn: func() []compactionInfo { return nil },
11951194
}, nil
11961195
})

file_cache_test.go

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -393,27 +393,11 @@ func TestVirtualReadsWiring(t *testing.T) {
393393
d.checkVirtualBounds(v2)
394394

395395
// Write the version edit.
396-
fileMetrics := func(ve *manifest.VersionEdit) levelMetricsDelta {
397-
metrics := newFileMetrics(ve.NewTables)
398-
for de, f := range ve.DeletedTables {
399-
lm := metrics[de.Level]
400-
if lm == nil {
401-
lm = &LevelMetrics{}
402-
metrics[de.Level] = lm
403-
}
404-
metrics[de.Level].TablesCount--
405-
metrics[de.Level].TablesSize -= int64(f.Size)
406-
metrics[de.Level].EstimatedReferencesSize -= f.EstimatedReferenceSize()
407-
}
408-
return metrics
409-
}
410-
411396
applyVE := func(ve *manifest.VersionEdit) error {
412397
_, err := d.mu.versions.UpdateVersionLocked(func() (versionUpdate, error) {
413398
return versionUpdate{
414399
VE: ve,
415400
JobID: d.newJobIDLocked(),
416-
Metrics: fileMetrics(ve),
417401
InProgressCompactionsFn: func() []compactionInfo { return d.getInProgressCompactionInfoLocked(nil) },
418402
}, nil
419403
})

ingest.go

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1869,7 +1869,6 @@ type ingestSplitFile struct {
18691869
func (d *DB) ingestSplit(
18701870
ctx context.Context,
18711871
ve *manifest.VersionEdit,
1872-
updateMetrics func(*manifest.TableMetadata, int, []manifest.NewTableEntry),
18731872
files []ingestSplitFile,
18741873
replacedTables map[base.TableNum][]manifest.NewTableEntry,
18751874
) error {
@@ -1946,7 +1945,6 @@ func (d *DB) ingestSplit(
19461945
panic("ingest-time split produced a file that overlaps with ingested file")
19471946
}
19481947
}
1949-
updateMetrics(splitFile, s.level, added)
19501948
}
19511949
// Flatten the version edit by removing any entries from ve.NewFiles that
19521950
// are also in ve.DeletedFiles.
@@ -2113,14 +2111,7 @@ func (d *DB) ingestApply(
21132111
f.Level, sharedLevelsStart))
21142112
}
21152113
f.Meta = m
2116-
levelMetrics := metrics[f.Level]
2117-
if levelMetrics == nil {
2118-
levelMetrics = &LevelMetrics{}
2119-
metrics[f.Level] = levelMetrics
2120-
}
2121-
levelMetrics.TablesCount++
2122-
levelMetrics.TablesSize += int64(m.Size)
2123-
levelMetrics.EstimatedReferencesSize += m.EstimatedReferenceSize()
2114+
levelMetrics := metrics.level(f.Level)
21242115
levelMetrics.TableBytesIngested += m.Size
21252116
levelMetrics.TablesIngested++
21262117
}
@@ -2131,21 +2122,6 @@ func (d *DB) ingestApply(
21312122
// newer fileMetadata due to a split induced by another ingestion file, or an
21322123
// excise.
21332124
replacedTables := make(map[base.TableNum][]manifest.NewTableEntry)
2134-
updateLevelMetricsOnExcise := func(m *manifest.TableMetadata, level int, added []manifest.NewTableEntry) {
2135-
levelMetrics := metrics[level]
2136-
if levelMetrics == nil {
2137-
levelMetrics = &LevelMetrics{}
2138-
metrics[level] = levelMetrics
2139-
}
2140-
levelMetrics.TablesCount--
2141-
levelMetrics.TablesSize -= int64(m.Size)
2142-
levelMetrics.EstimatedReferencesSize -= m.EstimatedReferenceSize()
2143-
for i := range added {
2144-
levelMetrics.TablesCount++
2145-
levelMetrics.TablesSize += int64(added[i].Meta.Size)
2146-
levelMetrics.EstimatedReferencesSize += added[i].Meta.EstimatedReferenceSize()
2147-
}
2148-
}
21492125
var exciseBounds base.UserKeyBounds
21502126
if exciseSpan.Valid() {
21512127
exciseBounds = exciseSpan.UserKeyBounds()
@@ -2173,7 +2149,6 @@ func (d *DB) ingestApply(
21732149
}
21742150
newFiles := applyExciseToVersionEdit(ve, m, leftTable, rightTable, layer.Level())
21752151
replacedTables[m.TableNum] = newFiles
2176-
updateLevelMetricsOnExcise(m, layer.Level(), newFiles)
21772152
}
21782153
}
21792154
if d.FormatMajorVersion() >= FormatExciseBoundsRecord {
@@ -2186,7 +2161,7 @@ func (d *DB) ingestApply(
21862161
if len(filesToSplit) > 0 {
21872162
// For the same reasons as the above call to excise, we hold the db mutex
21882163
// while calling this method.
2189-
if err := d.ingestSplit(ctx, ve, updateLevelMetricsOnExcise, filesToSplit, replacedTables); err != nil {
2164+
if err := d.ingestSplit(ctx, ve, filesToSplit, replacedTables); err != nil {
21902165
return versionUpdate{}, err
21912166
}
21922167
}

version_set_test.go

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -147,23 +147,10 @@ func TestVersionSet(t *testing.T) {
147147
createFile(ve.CreatedBackingTables[i].DiskFileNum)
148148
}
149149

150-
fileMetrics := newFileMetrics(ve.NewTables)
151-
for de, f := range ve.DeletedTables {
152-
lm := fileMetrics[de.Level]
153-
if lm == nil {
154-
lm = &LevelMetrics{}
155-
fileMetrics[de.Level] = lm
156-
}
157-
lm.TablesCount--
158-
lm.TablesSize -= int64(f.Size)
159-
lm.EstimatedReferencesSize -= f.EstimatedReferenceSize()
160-
}
161-
162150
mu.Lock()
163151
_, err = vs.UpdateVersionLocked(func() (versionUpdate, error) {
164152
return versionUpdate{
165153
VE: ve,
166-
Metrics: fileMetrics,
167154
ForceManifestRotation: rand.IntN(3) == 0,
168155
InProgressCompactionsFn: func() []compactionInfo { return nil },
169156
}, nil

0 commit comments

Comments
 (0)