Skip to content

Commit ffc306f

Browse files
committed
valsep: wrap new blob files in valsep output metadata in NewBlobFileInfo slice
1 parent 398e43a commit ffc306f

File tree

5 files changed

+39
-21
lines changed

5 files changed

+39
-21
lines changed

blob_rewrite_test.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,11 +131,13 @@ func TestBlobRewrite(t *testing.T) {
131131

132132
meta, err := vs.FinishOutput()
133133
require.NoError(t, err)
134-
if meta.BlobFileObject.DiskFileNum == 0 {
134+
if len(meta.NewBlobFiles) == 0 {
135135
fmt.Fprintln(&buf, "no blob file created")
136136
} else {
137-
fmt.Fprintf(&buf, "Blob file created: %s\n", meta.BlobFileMetadata)
138-
fmt.Fprintln(&buf, meta.BlobFileStats)
137+
for _, bf := range meta.NewBlobFiles {
138+
fmt.Fprintf(&buf, "Blob file created: %s\n", bf.FileMetadata)
139+
fmt.Fprintln(&buf, bf.FileStats)
140+
}
139141
}
140142
if len(meta.BlobReferences) == 0 {
141143
fmt.Fprintln(&buf, "blobrefs:[]")

compaction_value_separation.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -398,9 +398,11 @@ func (vs *writeNewBlobFiles) FinishOutput() (valsep.ValueSeparationMetadata, err
398398
},
399399
BlobReferenceSize: stats.UncompressedValueBytes,
400400
BlobReferenceDepth: 1,
401-
BlobFileStats: stats,
402-
BlobFileObject: vs.objMeta,
403-
BlobFileMetadata: meta,
401+
NewBlobFiles: []valsep.NewBlobFileInfo{{
402+
FileStats: stats,
403+
FileObject: vs.objMeta,
404+
FileMetadata: meta,
405+
}},
404406
}, nil
405407
}
406408

compaction_value_separation_test.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,11 +143,13 @@ func TestValueSeparationPolicy(t *testing.T) {
143143

144144
meta, err := vs.FinishOutput()
145145
require.NoError(t, err)
146-
if meta.BlobFileObject.DiskFileNum == 0 {
146+
if len(meta.NewBlobFiles) == 0 {
147147
fmt.Fprintln(&buf, "no blob file created")
148148
} else {
149-
fmt.Fprintf(&buf, "Blob file created: %s\n", meta.BlobFileMetadata)
150-
fmt.Fprintln(&buf, meta.BlobFileStats)
149+
for _, bf := range meta.NewBlobFiles {
150+
fmt.Fprintf(&buf, "Blob file created: %s\n", bf.FileMetadata)
151+
fmt.Fprintln(&buf, bf.FileStats)
152+
}
151153
}
152154
if len(meta.BlobReferences) == 0 {
153155
fmt.Fprintln(&buf, "blobrefs:[]")

internal/compact/run.go

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -202,16 +202,18 @@ func (r *Runner) WriteTable(
202202
// Inform the value separation policy that the table is finished.
203203
valSepMeta, valSepErr := valueSeparation.FinishOutput()
204204
if valSepErr != nil {
205-
r.err = errors.CombineErrors(r.err, valSepErr)
205+
err = errors.CombineErrors(err, valSepErr)
206206
} else {
207207
r.tables[len(r.tables)-1].BlobReferences = valSepMeta.BlobReferences
208208
r.tables[len(r.tables)-1].BlobReferenceDepth = valSepMeta.BlobReferenceDepth
209-
if valSepMeta.BlobFileObject.DiskFileNum != 0 {
210-
r.blobs = append(r.blobs, OutputBlob{
211-
Stats: valSepMeta.BlobFileStats,
212-
ObjMeta: valSepMeta.BlobFileObject,
213-
Metadata: valSepMeta.BlobFileMetadata,
214-
})
209+
if len(valSepMeta.NewBlobFiles) != 0 {
210+
for _, bf := range valSepMeta.NewBlobFiles {
211+
r.blobs = append(r.blobs, OutputBlob{
212+
Stats: bf.FileStats,
213+
ObjMeta: bf.FileObject,
214+
Metadata: bf.FileMetadata,
215+
})
216+
}
215217
}
216218
}
217219

@@ -231,9 +233,12 @@ func (r *Runner) WriteTable(
231233
return
232234
}
233235
r.tables[len(r.tables)-1].WriterMeta = *writerMeta
234-
r.stats.CumulativeWrittenSize += writerMeta.Size + valSepMeta.BlobFileStats.FileLen
236+
r.stats.CumulativeWrittenSize += writerMeta.Size
235237
r.stats.CumulativeBlobReferenceSize += valSepMeta.BlobReferenceSize
236-
r.stats.CumulativeBlobFileSize += valSepMeta.BlobFileStats.FileLen
238+
for _, bf := range valSepMeta.NewBlobFiles {
239+
r.stats.CumulativeWrittenSize += bf.FileStats.FileLen
240+
r.stats.CumulativeBlobFileSize += bf.FileStats.FileLen
241+
}
237242
}
238243

239244
func (r *Runner) writeKeysToTable(

valsep/value_separation.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,15 @@ type ValueSeparation interface {
4949
FinishOutput() (ValueSeparationMetadata, error)
5050
}
5151

52+
// NewBlobFileInfo describes a newly written blob file
53+
// created by value separation. This is returned by
54+
// ValueSeparation.FinishOutput.
55+
type NewBlobFileInfo struct {
56+
FileStats blob.FileWriterStats
57+
FileObject objstorage.ObjectMetadata
58+
FileMetadata *manifest.PhysicalBlobFile
59+
}
60+
5261
// ValueSeparationMetadata describes metadata about a table's blob references,
5362
// and optionally a newly constructed blob file.
5463
type ValueSeparationMetadata struct {
@@ -57,9 +66,7 @@ type ValueSeparationMetadata struct {
5766
BlobReferenceDepth manifest.BlobReferenceDepth
5867

5968
// The below fields are only populated if a new blob file was created.
60-
BlobFileStats blob.FileWriterStats
61-
BlobFileObject objstorage.ObjectMetadata
62-
BlobFileMetadata *manifest.PhysicalBlobFile
69+
NewBlobFiles []NewBlobFileInfo
6370
}
6471

6572
// NeverSeparateValues is a ValueSeparation implementation that never separates

0 commit comments

Comments
 (0)