Skip to content

Commit e0b71b5

Browse files
committed
objstorage: local settings cleanup
Cleanup for local settings.
1 parent 818109f commit e0b71b5

File tree

10 files changed

+82
-85
lines changed

10 files changed

+82
-85
lines changed

blob_rewrite_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,9 @@ func TestBlobRewrite(t *testing.T) {
5252
})
5353
)
5454
ctx := context.Background()
55-
objStore, err := objstorageprovider.Open(objstorageprovider.Settings{
56-
FS: fs,
57-
})
55+
var st objstorageprovider.Settings
56+
st.Local.FS = fs
57+
objStore, err := objstorageprovider.Open(st)
5858
require.NoError(t, err)
5959

6060
initRawWriter := func() {
@@ -261,9 +261,9 @@ func TestBlobRewriteRandomized(t *testing.T) {
261261
}()
262262

263263
ctx := context.Background()
264-
objStore, err := objstorageprovider.Open(objstorageprovider.Settings{
265-
FS: vfs.NewMem(),
266-
})
264+
var st objstorageprovider.Settings
265+
st.Local.FS = vfs.NewMem()
266+
objStore, err := objstorageprovider.Open(st)
267267
require.NoError(t, err)
268268

269269
// Write the source blob file.

download_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,8 +207,8 @@ func TestDownloadTask(t *testing.T) {
207207
func initDownloadTestProvider(t *testing.T) objstorage.Provider {
208208
providerSettings := objstorageprovider.Settings{
209209
Logger: base.DefaultLogger,
210-
FS: vfs.NewMem(),
211210
}
211+
providerSettings.Local.FS = vfs.NewMem()
212212
providerSettings.Remote.StorageFactory = remote.MakeSimpleFactory(map[remote.Locator]remote.Storage{
213213
"": remote.NewInMem(),
214214
})

ingest_test.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -430,7 +430,7 @@ func TestIngestLinkFallback(t *testing.T) {
430430
opts.WithFSDefaults()
431431
objSettings := objstorageprovider.DefaultSettings(opts.FS, "")
432432
// Prevent the provider from listing the dir (where we may get an injected error).
433-
objSettings.FSDirInitialListing = []string{}
433+
objSettings.Local.FSDirInitialListing = []string{}
434434
objProvider, err := objstorageprovider.Open(objSettings)
435435
require.NoError(t, err)
436436
defer objProvider.Close()
@@ -1025,14 +1025,14 @@ func TestSimpleIngestShared(t *testing.T) {
10251025
// Create an objProvider where we will fake-create some sstables that can
10261026
// then be shared back to the db instance.
10271027
providerSettings := objstorageprovider.Settings{
1028-
Logger: opts2.Logger,
1029-
FS: opts2.FS,
1030-
FSDirName: "",
1031-
FSDirInitialListing: nil,
1032-
FSCleaner: opts2.Cleaner,
1033-
NoSyncOnClose: opts2.NoSyncOnClose,
1034-
BytesPerSync: opts2.BytesPerSync,
1028+
Logger: opts2.Logger,
10351029
}
1030+
providerSettings.Local.FS = opts2.FS
1031+
providerSettings.Local.FSDirName = ""
1032+
providerSettings.Local.FSDirInitialListing = nil
1033+
providerSettings.Local.FSCleaner = opts2.Cleaner
1034+
providerSettings.Local.NoSyncOnClose = opts2.NoSyncOnClose
1035+
providerSettings.Local.BytesPerSync = opts2.BytesPerSync
10361036
providerSettings.Remote.StorageFactory = remote.MakeSimpleFactory(map[remote.Locator]remote.Storage{
10371037
"": remote.NewInMem(),
10381038
})

objstorage/objstorageprovider/provider.go

Lines changed: 40 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -57,37 +57,33 @@ type Settings struct {
5757
Logger base.Logger
5858

5959
// Local filesystem configuration.
60-
FS vfs.FS
61-
FSDirName string
62-
63-
// FSDirInitialListing is a listing of FSDirName at the time of calling Open.
64-
//
65-
// This is an optional optimization to avoid double listing on Open when the
66-
// higher layer already has a listing. When nil, we obtain the listing on
67-
// Open.
68-
FSDirInitialListing []string
69-
70-
// Cleaner cleans obsolete files from the local filesystem.
71-
//
72-
// The default cleaner uses the DeleteCleaner.
73-
FSCleaner base.Cleaner
74-
75-
// NoSyncOnClose decides whether the implementation will enforce a
76-
// close-time synchronization (e.g., fdatasync() or sync_file_range())
77-
// on files it writes to. Setting this to true removes the guarantee for a
78-
// sync on close. Some implementations can still issue a non-blocking sync.
79-
NoSyncOnClose bool
80-
81-
// BytesPerSync enables periodic syncing of files in order to smooth out
82-
// writes to disk. This option does not provide any persistence guarantee, but
83-
// is used to avoid latency spikes if the OS automatically decides to write
84-
// out a large chunk of dirty filesystem buffers.
85-
BytesPerSync int
86-
87-
// Local contains fields that are only relevant for files stored on the local
88-
// filesystem.
8960
Local struct {
90-
// TODO(radu): move FSCleaner, NoSyncOnClose, BytesPerSync here.
61+
FS vfs.FS
62+
FSDirName string
63+
64+
// FSDirInitialListing is a listing of FSDirName at the time of calling Open.
65+
//
66+
// This is an optional optimization to avoid double listing on Open when the
67+
// higher layer already has a listing. When nil, we obtain the listing on
68+
// Open.
69+
FSDirInitialListing []string
70+
71+
// Cleaner cleans obsolete files from the local filesystem.
72+
//
73+
// The default cleaner uses the DeleteCleaner.
74+
FSCleaner base.Cleaner
75+
76+
// NoSyncOnClose decides whether the implementation will enforce a
77+
// close-time synchronization (e.g., fdatasync() or sync_file_range())
78+
// on files it writes to. Setting this to true removes the guarantee for a
79+
// sync on close. Some implementations can still issue a non-blocking sync.
80+
NoSyncOnClose bool
81+
82+
// BytesPerSync enables periodic syncing of files in order to smooth out
83+
// writes to disk. This option does not provide any persistence guarantee, but
84+
// is used to avoid latency spikes if the OS automatically decides to write
85+
// out a large chunk of dirty filesystem buffers.
86+
BytesPerSync int
9187

9288
// ReadaheadConfig is used to retrieve the current readahead mode; it is
9389
// consulted whenever a read handle is initialized.
@@ -198,14 +194,15 @@ const (
198194
// DefaultSettings initializes default settings (with no remote storage),
199195
// suitable for tests and tools.
200196
func DefaultSettings(fs vfs.FS, dirName string) Settings {
201-
return Settings{
202-
Logger: base.DefaultLogger,
203-
FS: fs,
204-
FSDirName: dirName,
205-
FSCleaner: base.DeleteCleaner{},
206-
NoSyncOnClose: false,
207-
BytesPerSync: 512 * 1024, // 512KB
208-
}
197+
st := Settings{
198+
Logger: base.DefaultLogger,
199+
}
200+
st.Local.FS = fs
201+
st.Local.FSDirName = dirName
202+
st.Local.FSCleaner = base.DeleteCleaner{}
203+
st.Local.NoSyncOnClose = false
204+
st.Local.BytesPerSync = 512 * 1024
205+
return st
209206
}
210207

211208
// Open creates the provider.
@@ -231,7 +228,7 @@ func open(settings Settings) (p *provider, _ error) {
231228
p.mu.protectedObjects = make(map[base.DiskFileNum]int)
232229

233230
if objiotracing.Enabled {
234-
p.tracer = objiotracing.Open(settings.FS, settings.FSDirName)
231+
p.tracer = objiotracing.Open(settings.Local.FS, settings.Local.FSDirName)
235232
}
236233

237234
// Initialize local subsystem and add local vfs.FS objects.
@@ -402,12 +399,12 @@ func (p *provider) LinkOrCopyFromLocal(
402399
opts objstorage.CreateOptions,
403400
) (objstorage.ObjectMetadata, error) {
404401
shared := opts.PreferSharedStorage && p.st.Remote.CreateOnShared != remote.CreateOnSharedNone
405-
if !shared && srcFS == p.st.FS {
402+
if !shared && srcFS == p.st.Local.FS {
406403
// Wrap the normal filesystem with one which wraps newly created files with
407404
// vfs.NewSyncingFile.
408-
fs := vfs.NewSyncingFS(p.st.FS, vfs.SyncingFileOptions{
409-
NoSyncOnClose: p.st.NoSyncOnClose,
410-
BytesPerSync: p.st.BytesPerSync,
405+
fs := vfs.NewSyncingFS(p.st.Local.FS, vfs.SyncingFileOptions{
406+
NoSyncOnClose: p.st.Local.NoSyncOnClose,
407+
BytesPerSync: p.st.Local.BytesPerSync,
411408
})
412409
dstPath := p.localPath(dstFileType, dstFileNum)
413410
if err := vfs.LinkOrCopy(fs, srcFilePath, dstPath); err != nil {

objstorage/objstorageprovider/provider_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ func TestProvider(t *testing.T) {
101101
case "close":
102102
require.NoError(t, curProvider.Sync())
103103
require.NoError(t, curProvider.Close())
104-
delete(providers, curProvider.(*provider).st.FSDirName)
104+
delete(providers, curProvider.(*provider).st.Local.FSDirName)
105105
curProvider = nil
106106

107107
return log.String()
@@ -703,7 +703,7 @@ func TestParallelSync(t *testing.T) {
703703
require.NoError(t, p.Close())
704704

705705
if !shared {
706-
st.FS = crashFS
706+
st.Local.FS = crashFS
707707
}
708708
p, err = Open(st)
709709
require.NoError(t, err)

objstorage/objstorageprovider/remote.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ func (p *provider) remoteInit() error {
8989
if p.st.Remote.StorageFactory == nil {
9090
return nil
9191
}
92-
catalog, contents, err := remoteobjcat.Open(p.st.FS, p.st.FSDirName)
92+
catalog, contents, err := remoteobjcat.Open(p.st.Local.FS, p.st.Local.FSDirName)
9393
if err != nil {
9494
return errors.Wrapf(err, "pebble: could not open remote object catalog")
9595
}
@@ -123,7 +123,7 @@ func (p *provider) remoteInit() error {
123123
}
124124

125125
p.remote.cache, err = sharedcache.Open(
126-
p.st.FS, p.st.Logger, p.st.FSDirName, blockSize, shardingBlockSize, p.st.Remote.CacheSizeBytes, numShards)
126+
p.st.Local.FS, p.st.Logger, p.st.Local.FSDirName, blockSize, shardingBlockSize, p.st.Remote.CacheSizeBytes, numShards)
127127
if err != nil {
128128
return errors.Wrapf(err, "pebble: could not open remote object cache")
129129
}

objstorage/objstorageprovider/vfs.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ type localLockedState struct {
2828
}
2929

3030
func (p *provider) localPath(fileType base.FileType, fileNum base.DiskFileNum) string {
31-
return base.MakeFilepath(p.st.FS, p.st.FSDirName, fileType, fileNum)
31+
return base.MakeFilepath(p.st.Local.FS, p.st.Local.FSDirName, fileType, fileNum)
3232
}
3333

3434
func (p *provider) localOpenForReading(
@@ -38,15 +38,15 @@ func (p *provider) localOpenForReading(
3838
opts objstorage.OpenOptions,
3939
) (objstorage.Readable, error) {
4040
filename := p.localPath(fileType, fileNum)
41-
file, err := p.st.FS.Open(filename, vfs.RandomReadsOption)
41+
file, err := p.st.Local.FS.Open(filename, vfs.RandomReadsOption)
4242
if err != nil {
4343
if opts.MustExist && p.IsNotExistError(err) {
44-
err = base.AddDetailsToNotExistError(p.st.FS, filename, err)
44+
err = base.AddDetailsToNotExistError(p.st.Local.FS, filename, err)
4545
err = base.MarkCorruptionError(err)
4646
}
4747
return nil, err
4848
}
49-
return newFileReadable(file, p.st.FS, p.st.Local.ReadaheadConfig, filename)
49+
return newFileReadable(file, p.st.Local.FS, p.st.Local.ReadaheadConfig, filename)
5050
}
5151

5252
func (p *provider) vfsCreate(
@@ -56,13 +56,13 @@ func (p *provider) vfsCreate(
5656
category vfs.DiskWriteCategory,
5757
) (objstorage.Writable, objstorage.ObjectMetadata, error) {
5858
filename := p.localPath(fileType, fileNum)
59-
file, err := p.st.FS.Create(filename, category)
59+
file, err := p.st.Local.FS.Create(filename, category)
6060
if err != nil {
6161
return nil, objstorage.ObjectMetadata{}, err
6262
}
6363
file = vfs.NewSyncingFile(file, vfs.SyncingFileOptions{
64-
NoSyncOnClose: p.st.NoSyncOnClose,
65-
BytesPerSync: p.st.BytesPerSync,
64+
NoSyncOnClose: p.st.Local.NoSyncOnClose,
65+
BytesPerSync: p.st.Local.BytesPerSync,
6666
})
6767
meta := objstorage.ObjectMetadata{
6868
DiskFileNum: fileNum,
@@ -72,27 +72,27 @@ func (p *provider) vfsCreate(
7272
}
7373

7474
func (p *provider) localRemove(fileType base.FileType, fileNum base.DiskFileNum) error {
75-
return p.st.FSCleaner.Clean(p.st.FS, fileType, p.localPath(fileType, fileNum))
75+
return p.st.Local.FSCleaner.Clean(p.st.Local.FS, fileType, p.localPath(fileType, fileNum))
7676
}
7777

7878
// localInit finds any local FS objects.
7979
func (p *provider) localInit() error {
80-
fsDir, err := p.st.FS.OpenDir(p.st.FSDirName)
80+
fsDir, err := p.st.Local.FS.OpenDir(p.st.Local.FSDirName)
8181
if err != nil {
8282
return err
8383
}
8484
p.local.fsDir = fsDir
85-
listing := p.st.FSDirInitialListing
85+
listing := p.st.Local.FSDirInitialListing
8686
if listing == nil {
87-
listing, err = p.st.FS.List(p.st.FSDirName)
87+
listing, err = p.st.Local.FS.List(p.st.Local.FSDirName)
8888
if err != nil {
8989
_ = p.localClose()
9090
return errors.Wrapf(err, "pebble: could not list store directory")
9191
}
9292
}
9393

9494
for _, filename := range listing {
95-
fileType, fileNum, ok := base.ParseFilename(p.st.FS, filename)
95+
fileType, fileNum, ok := base.ParseFilename(p.st.Local.FS, filename)
9696
if ok {
9797
switch fileType {
9898
case base.FileTypeTable, base.FileTypeBlob:
@@ -140,7 +140,7 @@ func (p *provider) localSync() error {
140140

141141
func (p *provider) localSize(fileType base.FileType, fileNum base.DiskFileNum) (int64, error) {
142142
filename := p.localPath(fileType, fileNum)
143-
stat, err := p.st.FS.Stat(filename)
143+
stat, err := p.st.Local.FS.Stat(filename)
144144
if err != nil {
145145
return 0, err
146146
}

options.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2735,13 +2735,13 @@ func (d *DB) makeBlobWriterOptions(level int) blob.FileWriterOptions {
27352735

27362736
func (o *Options) MakeObjStorageProviderSettings(dirname string) objstorageprovider.Settings {
27372737
s := objstorageprovider.Settings{
2738-
Logger: o.Logger,
2739-
FS: o.FS,
2740-
FSDirName: dirname,
2741-
FSCleaner: o.Cleaner,
2742-
NoSyncOnClose: o.NoSyncOnClose,
2743-
BytesPerSync: o.BytesPerSync,
2738+
Logger: o.Logger,
27442739
}
2740+
s.Local.FS = o.FS
2741+
s.Local.FSDirName = dirname
2742+
s.Local.FSCleaner = o.Cleaner
2743+
s.Local.NoSyncOnClose = o.NoSyncOnClose
2744+
s.Local.BytesPerSync = o.BytesPerSync
27452745
s.Local.ReadaheadConfig = o.Local.ReadaheadConfig
27462746
s.Remote.StorageFactory = o.Experimental.RemoteStorage
27472747
s.Remote.CreateOnShared = o.Experimental.CreateOnShared

recovery.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ func (rs *recoveredState) init(opts *Options, dirname string) error {
6262

6363
// Open the object storage provider.
6464
providerSettings := opts.MakeObjStorageProviderSettings(dirname)
65-
providerSettings.FSDirInitialListing = rs.ls
65+
providerSettings.Local.FSDirInitialListing = rs.ls
6666
rs.objProvider, err = objstorageprovider.Open(providerSettings)
6767
if err != nil {
6868
return errors.Wrapf(err, "pebble: database %q", dirname)

valsep/value_separation_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ func TestValueSeparationPolicy(t *testing.T) {
4444
})
4545
)
4646
ctx := context.Background()
47-
objStore, err := objstorageprovider.Open(objstorageprovider.Settings{
48-
FS: fs,
49-
})
47+
st := objstorageprovider.Settings{}
48+
st.Local.FS = fs
49+
objStore, err := objstorageprovider.Open(st)
5050
require.NoError(t, err)
5151

5252
initRawWriter := func() {

0 commit comments

Comments
 (0)