Skip to content

Commit 21b9fb5

Browse files
committed
internal/manifest: track virtual tables by level in VirtualBacking
1 parent 8817b06 commit 21b9fb5

File tree

3 files changed

+22
-13
lines changed

3 files changed

+22
-13
lines changed

internal/manifest/virtual_backings.go

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ type backingWithMetadata struct {
100100

101101
// virtualTables is the list of virtual tables that use this backing.
102102
// AddTable/RemoveTable maintain this map.
103-
virtualTables map[base.TableNum]*TableMetadata
103+
virtualTables map[base.TableNum]tableAndLevel
104104
heapIndex int
105105
}
106106

@@ -120,7 +120,7 @@ func (bv *VirtualBackings) AddAndRef(backing *TableBacking) {
120120
backing.Ref()
121121
bm := &backingWithMetadata{
122122
backing: backing,
123-
virtualTables: make(map[base.TableNum]*TableMetadata),
123+
virtualTables: make(map[base.TableNum]tableAndLevel),
124124
heapIndex: -1,
125125
}
126126
bv.mustAdd(bm)
@@ -150,7 +150,7 @@ func (bv *VirtualBackings) Remove(n base.DiskFileNum) {
150150

151151
// AddTable is used when a new table is using an existing backing. The backing
152152
// must be in the set already.
153-
func (bv *VirtualBackings) AddTable(m *TableMetadata) {
153+
func (bv *VirtualBackings) AddTable(m *TableMetadata, level int) {
154154
if !m.Virtual {
155155
panic(errors.AssertionFailedf("table %s not virtual", m.TableNum))
156156
}
@@ -162,7 +162,10 @@ func (bv *VirtualBackings) AddTable(m *TableMetadata) {
162162
delete(bv.unused, v.backing)
163163
}
164164
v.virtualizedSize += m.Size
165-
v.virtualTables[m.TableNum] = m
165+
v.virtualTables[m.TableNum] = tableAndLevel{
166+
meta: m,
167+
level: level,
168+
}
166169
// Update candidates heap.
167170
if v.heapIndex == -1 {
168171
heap.Push(&bv.rewriteCandidates, v)
@@ -180,7 +183,7 @@ func (bv *VirtualBackings) RemoveTable(backing base.DiskFileNum, table base.Tabl
180183
panic(errors.AssertionFailedf("table %s does not use backing %s", table, v.backing.DiskFileNum))
181184
}
182185
delete(v.virtualTables, table)
183-
v.virtualizedSize -= t.Size
186+
v.virtualizedSize -= t.meta.Size
184187
if !v.inUse() {
185188
bv.unused[v.backing] = struct{}{}
186189
}
@@ -295,12 +298,16 @@ func (bv *VirtualBackings) Backings() []*TableBacking {
295298
// referenced by virtual tables to total size, along with the list of virtual
296299
// tables that use the backing. If there are no backings in the set, nil is
297300
// returned.
298-
func (bv *VirtualBackings) ReplacementCandidate() (*TableBacking, []*TableMetadata) {
301+
func (bv *VirtualBackings) ReplacementCandidate() (*TableBacking, [NumLevels][]*TableMetadata) {
299302
if bv.rewriteCandidates.Len() == 0 {
300-
return nil, nil
303+
return nil, [NumLevels][]*TableMetadata{}
304+
}
305+
v := bv.rewriteCandidates.items[0]
306+
var tables [NumLevels][]*TableMetadata
307+
for _, tl := range v.virtualTables {
308+
tables[tl.level] = append(tables[tl.level], tl.meta)
301309
}
302-
return bv.rewriteCandidates.items[0].backing,
303-
slices.Collect(maps.Values(bv.rewriteCandidates.items[0].virtualTables))
310+
return v.backing, tables
304311
}
305312

306313
func (bv *VirtualBackings) String() string {

internal/manifest/virtual_backings_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,15 @@ func TestVirtualBackings(t *testing.T) {
4343
bv.Remove(n)
4444

4545
case "add-table":
46+
level := 1
47+
d.MaybeScanArgs(t, "level", &level)
4648
m := &TableMetadata{
4749
TableNum: tableNum,
4850
TableBacking: &TableBacking{DiskFileNum: n},
4951
Size: size,
5052
Virtual: true,
5153
}
52-
bv.AddTable(m)
54+
bv.AddTable(m, level)
5355

5456
case "remove-table":
5557
bv.RemoveTable(n, tableNum)

version_set.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -320,10 +320,10 @@ func (vs *versionSet) load(
320320
vs.latest.virtualBackings.AddAndRef(b)
321321
}
322322

323-
for _, addedLevel := range bve.AddedTables {
323+
for l, addedLevel := range bve.AddedTables {
324324
for _, m := range addedLevel {
325325
if m.Virtual {
326-
vs.latest.virtualBackings.AddTable(m)
326+
vs.latest.virtualBackings.AddTable(m, l)
327327
}
328328
}
329329
}
@@ -879,7 +879,7 @@ func getZombieTablesAndUpdateVirtualBackings(
879879
}
880880
for _, nf := range ve.NewTables {
881881
if nf.Meta.Virtual {
882-
virtualBackings.AddTable(nf.Meta)
882+
virtualBackings.AddTable(nf.Meta, nf.Level)
883883
}
884884
}
885885

0 commit comments

Comments
 (0)