diff --git a/db.go b/db.go index 95526f0389..d95f4e68f7 100644 --- a/db.go +++ b/db.go @@ -2561,7 +2561,7 @@ func firstError(err0, err1 error) error { } // SetCreatorID sets the CreatorID which is needed in order to use shared objects. -// Shared object usage is disabled until this method is called the first time. +// Remote object usage is disabled until this method is called the first time. // Once set, the Creator ID is persisted and cannot change. // // Does nothing if SharedStorage was not set in the options when the DB was diff --git a/ingest.go b/ingest.go index e792683c60..41ee4875f1 100644 --- a/ingest.go +++ b/ingest.go @@ -858,7 +858,7 @@ func ingestTargetLevel( // local sstables. This is the step where overlap with memtables is // determined. If there is overlap, we remember the most recent memtable // that overlaps. -// 6. Update the sequence number in the ingested local sstables. (Shared +// 6. Update the sequence number in the ingested local sstables. (Remote // sstables get fixed sequence numbers that were determined at load time.) // 7. Wait for the most recent memtable that overlaps to flush (if any). // 8. Add the ingested sstables to the version (DB.ingestApply). @@ -1295,7 +1295,7 @@ func (d *DB) ingest( } } - // NB: Shared-sstable-only ingestions do not assign a sequence number to + // NB: Remote-sstable-only ingestions do not assign a sequence number to // any sstables. globalSeqNum := uint64(0) if len(loadResult.localMeta) > 0 { diff --git a/ingest_test.go b/ingest_test.go index 6064dad922..00b2aae0f8 100644 --- a/ingest_test.go +++ b/ingest_test.go @@ -1030,11 +1030,11 @@ func TestSimpleIngestShared(t *testing.T) { NoSyncOnClose: opts2.NoSyncOnClose, BytesPerSync: opts2.BytesPerSync, } - providerSettings.Shared.StorageFactory = remote.MakeSimpleFactory(map[remote.Locator]remote.Storage{ + providerSettings.Remote.StorageFactory = remote.MakeSimpleFactory(map[remote.Locator]remote.Storage{ "": remote.NewInMem(), }) - providerSettings.Shared.CreateOnShared = true - providerSettings.Shared.CreateOnSharedLocator = "" + providerSettings.Remote.CreateOnShared = true + providerSettings.Remote.CreateOnSharedLocator = "" provider2, err := objstorageprovider.Open(providerSettings) require.NoError(t, err) @@ -1059,9 +1059,9 @@ func TestSimpleIngestShared(t *testing.T) { L0CompactionThreshold: 100, L0StopWritesThreshold: 100, } - opts.Experimental.RemoteStorage = providerSettings.Shared.StorageFactory - opts.Experimental.CreateOnShared = providerSettings.Shared.CreateOnShared - opts.Experimental.CreateOnSharedLocator = providerSettings.Shared.CreateOnSharedLocator + opts.Experimental.RemoteStorage = providerSettings.Remote.StorageFactory + opts.Experimental.CreateOnShared = providerSettings.Remote.CreateOnShared + opts.Experimental.CreateOnSharedLocator = providerSettings.Remote.CreateOnSharedLocator var err error d, err = Open("", opts) diff --git a/objstorage/objstorageprovider/provider.go b/objstorage/objstorageprovider/provider.go index 7ac35631a8..f739407a3a 100644 --- a/objstorage/objstorageprovider/provider.go +++ b/objstorage/objstorageprovider/provider.go @@ -30,20 +30,20 @@ type provider struct { tracer *objiotracing.Tracer - shared sharedSubsystem + remote remoteSubsystem mu struct { sync.RWMutex - shared struct { - // catalogBatch accumulates shared object creations and deletions until + remote struct { + // catalogBatch accumulates remote object creations and deletions until // Sync is called. catalogBatch remoteobjcat.Batch storageObjects map[remote.Locator]remote.Storage } - // localObjectsChanged is set if non-shared objects were created or deleted + // localObjectsChanged is set if non-remote objects were created or deleted // but Sync was not yet called. localObjectsChanged bool @@ -91,19 +91,19 @@ type Settings struct { // out a large chunk of dirty filesystem buffers. BytesPerSync int - // Fields here are set only if the provider is to support shared objects + // Fields here are set only if the provider is to support remote objects // (experimental). - Shared struct { + Remote struct { StorageFactory remote.StorageFactory - // If CreateOnShared is true, sstables are created on shared storage using + // If CreateOnShared is true, sstables are created on remote storage using // the CreateOnSharedLocator (when the PreferSharedStorage create option is // true). CreateOnShared bool CreateOnSharedLocator remote.Locator // CacheSizeBytes is the size of the on-disk block cache for objects - // on shared storage. If it is 0, no cache is used. + // on remote storage. If it is 0, no cache is used. CacheSizeBytes int64 // CacheBlockSize is the block size of the cache; if 0, the default of 32KB is used. @@ -128,7 +128,7 @@ type Settings struct { } } -// DefaultSettings initializes default settings (with no shared storage), +// DefaultSettings initializes default settings (with no remote storage), // suitable for tests and tools. func DefaultSettings(fs vfs.FS, dirName string) Settings { return Settings{ @@ -174,8 +174,8 @@ func open(settings Settings) (p *provider, _ error) { return nil, err } - // Initialize shared subsystem (if configured) and add shared objects. - if err := p.sharedInit(); err != nil { + // Initialize remote subsystem (if configured) and add remote objects. + if err := p.remoteInit(); err != nil { return nil, err } @@ -217,7 +217,7 @@ func (p *provider) OpenForReading( if !meta.IsRemote() { r, err = p.vfsOpenForReading(ctx, fileType, fileNum, opts) } else { - r, err = p.sharedOpenForReading(ctx, meta, opts) + r, err = p.remoteOpenForReading(ctx, meta, opts) if err != nil && p.isNotExistError(meta, err) { // Wrap the error so that IsNotExistError functions properly. err = errors.Mark(err, os.ErrNotExist) @@ -242,8 +242,8 @@ func (p *provider) Create( fileNum base.DiskFileNum, opts objstorage.CreateOptions, ) (w objstorage.Writable, meta objstorage.ObjectMetadata, err error) { - if opts.PreferSharedStorage && p.st.Shared.CreateOnShared { - w, meta, err = p.sharedCreate(ctx, fileType, fileNum, p.st.Shared.CreateOnSharedLocator, opts) + if opts.PreferSharedStorage && p.st.Remote.CreateOnShared { + w, meta, err = p.sharedCreate(ctx, fileType, fileNum, p.st.Remote.CreateOnSharedLocator, opts) } else { w, meta, err = p.vfsCreate(ctx, fileType, fileNum) } @@ -260,8 +260,8 @@ func (p *provider) Create( // Remove removes an object. // -// Note that if the object is shared, the object is only (conceptually) removed -// from this provider. If other providers have references on the shared object, +// Note that if the object is remote, the object is only (conceptually) removed +// from this provider. If other providers have references on the remote object, // it will not be removed. // // The object is not guaranteed to be durably removed until Sync is called. @@ -274,7 +274,7 @@ func (p *provider) Remove(fileType base.FileType, fileNum base.DiskFileNum) erro if !meta.IsRemote() { err = p.vfsRemove(fileType, fileNum) } else { - // TODO(radu): implement shared object removal (i.e. deref). + // TODO(radu): implement remote object removal (i.e. deref). err = p.sharedUnref(meta) if err != nil && p.isNotExistError(meta, err) { // Wrap the error so that IsNotExistError functions properly. @@ -331,7 +331,7 @@ func (p *provider) LinkOrCopyFromLocal( dstFileNum base.DiskFileNum, opts objstorage.CreateOptions, ) (objstorage.ObjectMetadata, error) { - shared := opts.PreferSharedStorage && p.st.Shared.CreateOnShared + shared := opts.PreferSharedStorage && p.st.Remote.CreateOnShared if !shared && srcFS == p.st.FS { // Wrap the normal filesystem with one which wraps newly created files with // vfs.NewSyncingFile. @@ -414,7 +414,7 @@ func (p *provider) Path(meta objstorage.ObjectMetadata) string { if !meta.IsRemote() { return p.vfsPath(meta.FileType, meta.DiskFileNum) } - return p.sharedPath(meta) + return p.remotePath(meta) } // Size returns the size of the object. @@ -422,7 +422,7 @@ func (p *provider) Size(meta objstorage.ObjectMetadata) (int64, error) { if !meta.IsRemote() { return p.vfsSize(meta.FileType, meta.DiskFileNum) } - return p.sharedSize(meta) + return p.remoteSize(meta) } // List is part of the objstorage.Provider interface. @@ -447,7 +447,7 @@ func (p *provider) addMetadata(meta objstorage.ObjectMetadata) { defer p.mu.Unlock() p.mu.knownObjects[meta.DiskFileNum] = meta if meta.IsRemote() { - p.mu.shared.catalogBatch.AddObject(remoteobjcat.RemoteObjectMetadata{ + p.mu.remote.catalogBatch.AddObject(remoteobjcat.RemoteObjectMetadata{ FileNum: meta.DiskFileNum, FileType: meta.FileType, CreatorID: meta.Remote.CreatorID, @@ -470,13 +470,13 @@ func (p *provider) removeMetadata(fileNum base.DiskFileNum) { } delete(p.mu.knownObjects, fileNum) if meta.IsRemote() { - p.mu.shared.catalogBatch.DeleteObject(fileNum) + p.mu.remote.catalogBatch.DeleteObject(fileNum) } else { p.mu.localObjectsChanged = true } } -// protectObject prevents the unreferencing of a shared object until +// protectObject prevents the unreferencing of a remote object until // unprotectObject is called. func (p *provider) protectObject(fileNum base.DiskFileNum) { p.mu.Lock() diff --git a/objstorage/objstorageprovider/provider_test.go b/objstorage/objstorageprovider/provider_test.go index aad226e9b3..1ae8671179 100644 --- a/objstorage/objstorageprovider/provider_test.go +++ b/objstorage/objstorageprovider/provider_test.go @@ -25,7 +25,7 @@ func TestProvider(t *testing.T) { log.Infof(" "+fmt, args...) }) sharedStore := remote.WithLogging(remote.NewInMem(), func(fmt string, args ...interface{}) { - log.Infof(" "+fmt, args...) + log.Infof(" "+fmt, args...) }) sharedFactory := remote.MakeSimpleFactory(map[remote.Locator]remote.Storage{ "": sharedStore, @@ -58,13 +58,13 @@ func TestProvider(t *testing.T) { case "open": var fsDir string var creatorID objstorage.CreatorID - scanArgs(" ", &fsDir, &creatorID) + scanArgs(" ", &fsDir, &creatorID) st := DefaultSettings(fs, fsDir) if creatorID != 0 { - st.Shared.StorageFactory = sharedFactory - st.Shared.CreateOnShared = true - st.Shared.CreateOnSharedLocator = "" + st.Remote.StorageFactory = sharedFactory + st.Remote.CreateOnShared = true + st.Remote.CreateOnSharedLocator = "" } require.NoError(t, fs.MkdirAll(fsDir, 0755)) p, err := Open(st) @@ -75,7 +75,7 @@ func TestProvider(t *testing.T) { // Checking refs on open affects the test output. We don't want tests to // only pass when the `invariants` tag is used, so unconditionally // enable ref checking on open. - p.(*provider).shared.checkRefsOnOpen = true + p.(*provider).remote.shared.checkRefsOnOpen = true providers[fsDir] = p curProvider = p @@ -283,17 +283,17 @@ func TestSharedMultipleLocators(t *testing.T) { sharedFactory := remote.MakeSimpleFactory(stores) st1 := DefaultSettings(vfs.NewMem(), "") - st1.Shared.StorageFactory = sharedFactory - st1.Shared.CreateOnShared = true - st1.Shared.CreateOnSharedLocator = "foo" + st1.Remote.StorageFactory = sharedFactory + st1.Remote.CreateOnShared = true + st1.Remote.CreateOnSharedLocator = "foo" p1, err := Open(st1) require.NoError(t, err) require.NoError(t, p1.SetCreatorID(1)) st2 := DefaultSettings(vfs.NewMem(), "") - st2.Shared.StorageFactory = sharedFactory - st2.Shared.CreateOnShared = true - st2.Shared.CreateOnSharedLocator = "bar" + st2.Remote.StorageFactory = sharedFactory + st2.Remote.CreateOnShared = true + st2.Remote.CreateOnSharedLocator = "bar" p2, err := Open(st2) require.NoError(t, err) require.NoError(t, p2.SetCreatorID(2)) @@ -369,7 +369,7 @@ func TestSharedMultipleLocators(t *testing.T) { // Try to attach an object to a provider that doesn't recognize the locator. st3 := DefaultSettings(vfs.NewMem(), "") - st3.Shared.StorageFactory = remote.MakeSimpleFactory(nil) + st3.Remote.StorageFactory = remote.MakeSimpleFactory(nil) p3, err := Open(st3) require.NoError(t, err) require.NoError(t, p3.SetCreatorID(3)) @@ -390,7 +390,7 @@ func TestAttachCustomObject(t *testing.T) { }) st1 := DefaultSettings(vfs.NewMem(), "") - st1.Shared.StorageFactory = sharedFactory + st1.Remote.StorageFactory = sharedFactory p1, err := Open(st1) require.NoError(t, err) defer p1.Close() @@ -434,7 +434,7 @@ func TestAttachCustomObject(t *testing.T) { require.NoError(t, err) st2 := DefaultSettings(vfs.NewMem(), "") - st2.Shared.StorageFactory = sharedFactory + st2.Remote.StorageFactory = sharedFactory p2, err := Open(st2) require.NoError(t, err) defer p2.Close() @@ -461,11 +461,11 @@ func TestNotExistError(t *testing.T) { fs := vfs.NewMem() st := DefaultSettings(fs, "") sharedStorage := remote.NewInMem() - st.Shared.StorageFactory = remote.MakeSimpleFactory(map[remote.Locator]remote.Storage{ + st.Remote.StorageFactory = remote.MakeSimpleFactory(map[remote.Locator]remote.Storage{ "": sharedStorage, }) - st.Shared.CreateOnShared = true - st.Shared.CreateOnSharedLocator = "" + st.Remote.CreateOnShared = true + st.Remote.CreateOnSharedLocator = "" provider, err := Open(st) require.NoError(t, err) require.NoError(t, provider.SetCreatorID(1)) @@ -474,7 +474,7 @@ func TestNotExistError(t *testing.T) { fileNum := base.FileNum(1 + i).DiskFileNum() name := "local" if shared { - name = "shared" + name = "remote" } t.Run(name, func(t *testing.T) { // Removing or opening an object that the provider doesn't know anything @@ -497,7 +497,7 @@ func TestNotExistError(t *testing.T) { } else { meta, err := provider.Lookup(base.FileTypeTable, fileNum) require.NoError(t, err) - require.NoError(t, sharedStorage.Delete(sharedObjectName(meta))) + require.NoError(t, sharedStorage.Delete(remoteObjectName(meta))) } _, err = provider.OpenForReading(context.Background(), base.FileTypeTable, fileNum, objstorage.OpenOptions{}) diff --git a/objstorage/objstorageprovider/shared.go b/objstorage/objstorageprovider/remote.go similarity index 60% rename from objstorage/objstorageprovider/shared.go rename to objstorage/objstorageprovider/remote.go index 107d83dd45..f8bd7a444e 100644 --- a/objstorage/objstorageprovider/shared.go +++ b/objstorage/objstorageprovider/remote.go @@ -6,6 +6,7 @@ package objstorageprovider import ( "context" + "fmt" "runtime" "sync" "sync/atomic" @@ -19,73 +20,70 @@ import ( "github.com/cockroachdb/pebble/objstorage/remote" ) -// sharedSubsystem contains the provider fields related to shared storage. -// All fields remain unset if shared storage is not configured. -type sharedSubsystem struct { +// remoteSubsystem contains the provider fields related to remote storage. +// All fields remain unset if remote storage is not configured. +type remoteSubsystem struct { catalog *remoteobjcat.Catalog cache *sharedcache.Cache - // checkRefsOnOpen controls whether we check the ref marker file when opening - // an object. Normally this is true when invariants are enabled (but the provider - // test tweaks this field). - checkRefsOnOpen bool + // shared contains the fields relevant to shared objects, i.e. objects that + // are created by Pebble and potentially shared between Pebble instances. + shared struct { + // initialized guards access to the creatorID field. + initialized atomic.Bool + creatorID objstorage.CreatorID + initOnce sync.Once - // initialized guards access to the creatorID field. - initialized atomic.Bool - creatorID objstorage.CreatorID - initOnce sync.Once -} - -func (ss *sharedSubsystem) init(creatorID objstorage.CreatorID) { - ss.initOnce.Do(func() { - ss.creatorID = creatorID - ss.initialized.Store(true) - }) + // checkRefsOnOpen controls whether we check the ref marker file when opening + // an object. Normally this is true when invariants are enabled (but the provider + // test tweaks this field). + checkRefsOnOpen bool + } } -// sharedInit initializes the shared object subsystem (if configured) and finds -// any shared objects. -func (p *provider) sharedInit() error { - if p.st.Shared.StorageFactory == nil { +// remoteInit initializes the remote object subsystem (if configured) and finds +// any remote objects. +func (p *provider) remoteInit() error { + if p.st.Remote.StorageFactory == nil { return nil } catalog, contents, err := remoteobjcat.Open(p.st.FS, p.st.FSDirName) if err != nil { - return errors.Wrapf(err, "pebble: could not open shared object catalog") + return errors.Wrapf(err, "pebble: could not open remote object catalog") } - p.shared.catalog = catalog - p.shared.checkRefsOnOpen = invariants.Enabled + p.remote.catalog = catalog + p.remote.shared.checkRefsOnOpen = invariants.Enabled // The creator ID may or may not be initialized yet. if contents.CreatorID.IsSet() { - p.shared.init(contents.CreatorID) - p.st.Logger.Infof("shared storage configured; creatorID = %s", contents.CreatorID) + p.remote.initShared(contents.CreatorID) + p.st.Logger.Infof("remote storage configured; creatorID = %s", contents.CreatorID) } else { - p.st.Logger.Infof("shared storage configured; no creatorID yet") + p.st.Logger.Infof("remote storage configured; no creatorID yet") } - if p.st.Shared.CacheSizeBytes > 0 { + if p.st.Remote.CacheSizeBytes > 0 { const defaultBlockSize = 32 * 1024 - blockSize := p.st.Shared.CacheBlockSize + blockSize := p.st.Remote.CacheBlockSize if blockSize == 0 { blockSize = defaultBlockSize } const defaultShardingBlockSize = 1024 * 1024 - shardingBlockSize := p.st.Shared.ShardingBlockSize + shardingBlockSize := p.st.Remote.ShardingBlockSize if shardingBlockSize == 0 { shardingBlockSize = defaultShardingBlockSize } - numShards := p.st.Shared.CacheShardCount + numShards := p.st.Remote.CacheShardCount if numShards == 0 { numShards = 2 * runtime.GOMAXPROCS(0) } - p.shared.cache, err = sharedcache.Open( - p.st.FS, p.st.Logger, p.st.FSDirName, blockSize, shardingBlockSize, p.st.Shared.CacheSizeBytes, numShards) + p.remote.cache, err = sharedcache.Open( + p.st.FS, p.st.Logger, p.st.FSDirName, blockSize, shardingBlockSize, p.st.Remote.CacheSizeBytes, numShards) if err != nil { - return errors.Wrapf(err, "pebble: could not open shared object cache") + return errors.Wrapf(err, "pebble: could not open remote object cache") } } @@ -111,53 +109,68 @@ func (p *provider) sharedInit() error { return nil } +// initShared initializes the creator ID, allowing use of shared objects. +func (ss *remoteSubsystem) initShared(creatorID objstorage.CreatorID) { + ss.shared.initOnce.Do(func() { + ss.shared.creatorID = creatorID + ss.shared.initialized.Store(true) + }) +} + func (p *provider) sharedClose() error { - if p.st.Shared.StorageFactory == nil { + if p.st.Remote.StorageFactory == nil { return nil } var err error - if p.shared.cache != nil { - err = p.shared.cache.Close() - p.shared.cache = nil + if p.remote.cache != nil { + err = p.remote.cache.Close() + p.remote.cache = nil } - if p.shared.catalog != nil { - err = firstError(err, p.shared.catalog.Close()) - p.shared.catalog = nil + if p.remote.catalog != nil { + err = firstError(err, p.remote.catalog.Close()) + p.remote.catalog = nil } return err } // SetCreatorID is part of the objstorage.Provider interface. func (p *provider) SetCreatorID(creatorID objstorage.CreatorID) error { - if p.st.Shared.StorageFactory == nil { - return errors.AssertionFailedf("attempt to set CreatorID but shared storage not enabled") + if p.st.Remote.StorageFactory == nil { + return errors.AssertionFailedf("attempt to set CreatorID but remote storage not enabled") } // Note: this call is a cheap no-op if the creator ID was already set. This // call also checks if we are trying to change the ID. - if err := p.shared.catalog.SetCreatorID(creatorID); err != nil { + if err := p.remote.catalog.SetCreatorID(creatorID); err != nil { return err } - if !p.shared.initialized.Load() { - p.st.Logger.Infof("shared storage creatorID set to %s", creatorID) - p.shared.init(creatorID) + if !p.remote.shared.initialized.Load() { + p.st.Logger.Infof("remote storage creatorID set to %s", creatorID) + p.remote.initShared(creatorID) } return nil } // IsForeign is part of the objstorage.Provider interface. func (p *provider) IsForeign(meta objstorage.ObjectMetadata) bool { - if !p.shared.initialized.Load() { + if !p.remote.shared.initialized.Load() { return false } - return meta.IsRemote() && (meta.Remote.CustomObjectName != "" || meta.Remote.CreatorID != p.shared.creatorID) + return meta.IsRemote() && (meta.Remote.CustomObjectName != "" || meta.Remote.CreatorID != p.remote.shared.creatorID) +} + +func (p *provider) remoteCheckInitialized() error { + if p.st.Remote.StorageFactory == nil { + return errors.Errorf("remote object support not configured") + } + return nil } func (p *provider) sharedCheckInitialized() error { - if p.st.Shared.StorageFactory == nil { - return errors.Errorf("shared object support not configured") + if err := p.remoteCheckInitialized(); err != nil { + return err } - if !p.shared.initialized.Load() { - return errors.Errorf("shared object support not available: shared creator ID not yet set") + if !p.remote.shared.initialized.Load() { + return errors.Errorf("remote object support not available: remote creator ID not yet set") } return nil } @@ -166,8 +179,8 @@ func (p *provider) sharedSync() error { batch := func() remoteobjcat.Batch { p.mu.Lock() defer p.mu.Unlock() - res := p.mu.shared.catalogBatch.Copy() - p.mu.shared.catalogBatch.Reset() + res := p.mu.remote.catalogBatch.Copy() + p.mu.remote.catalogBatch.Reset() return res }() @@ -175,25 +188,31 @@ func (p *provider) sharedSync() error { return nil } - err := p.shared.catalog.ApplyBatch(batch) + err := p.remote.catalog.ApplyBatch(batch) if err != nil { // We have to put back the batch (for the next Sync). p.mu.Lock() defer p.mu.Unlock() - batch.Append(p.mu.shared.catalogBatch) - p.mu.shared.catalogBatch = batch + batch.Append(p.mu.remote.catalogBatch) + p.mu.remote.catalogBatch = batch return err } return nil } -func (p *provider) sharedPath(meta objstorage.ObjectMetadata) string { - return "shared://" + sharedObjectName(meta) +func (p *provider) remotePath(meta objstorage.ObjectMetadata) string { + if meta.Remote.Locator != "" { + return fmt.Sprintf("remote-%s://%s", meta.Remote.Locator, remoteObjectName(meta)) + } + return "remote://" + remoteObjectName(meta) } // sharedCreateRef creates a reference marker object. func (p *provider) sharedCreateRef(meta objstorage.ObjectMetadata) error { + if err := p.sharedCheckInitialized(); err != nil { + return err + } if meta.Remote.CleanupMethod != objstorage.SharedRefTracking { return nil } @@ -227,13 +246,13 @@ func (p *provider) sharedCreate( DiskFileNum: fileNum, FileType: fileType, } - meta.Remote.CreatorID = p.shared.creatorID + meta.Remote.CreatorID = p.remote.shared.creatorID meta.Remote.CreatorFileNum = fileNum meta.Remote.CleanupMethod = opts.SharedCleanupMethod meta.Remote.Locator = locator meta.Remote.Storage = storage - objName := sharedObjectName(meta) + objName := remoteObjectName(meta) writer, err := storage.CreateObject(objName) if err != nil { return nil, objstorage.ObjectMetadata{}, errors.Wrapf(err, "creating object %q", objName) @@ -245,15 +264,18 @@ func (p *provider) sharedCreate( }, meta, nil } -func (p *provider) sharedOpenForReading( +func (p *provider) remoteOpenForReading( ctx context.Context, meta objstorage.ObjectMetadata, opts objstorage.OpenOptions, ) (objstorage.Readable, error) { - if err := p.sharedCheckInitialized(); err != nil { + if err := p.remoteCheckInitialized(); err != nil { return nil, err } // Verify we have a reference on this object; for performance reasons, we only // do this in testing scenarios. - if p.shared.checkRefsOnOpen && meta.Remote.CleanupMethod == objstorage.SharedRefTracking { + if p.remote.shared.checkRefsOnOpen && meta.Remote.CleanupMethod == objstorage.SharedRefTracking { + if err := p.sharedCheckInitialized(); err != nil { + return nil, err + } refName := p.sharedObjectRefName(meta) if _, err := meta.Remote.Storage.Size(refName); err != nil { if meta.Remote.Storage.IsNotExistError(err) { @@ -266,7 +288,7 @@ func (p *provider) sharedOpenForReading( return nil, errors.Wrapf(err, "checking marker object %q", refName) } } - objName := sharedObjectName(meta) + objName := remoteObjectName(meta) reader, size, err := meta.Remote.Storage.ReadObject(ctx, objName) if err != nil { if opts.MustExist && meta.Remote.Storage.IsNotExistError(err) { @@ -275,18 +297,18 @@ func (p *provider) sharedOpenForReading( } return nil, err } - return p.newSharedReadable(reader, size, meta.DiskFileNum), nil + return p.newRemoteReadable(reader, size, meta.DiskFileNum), nil } -func (p *provider) sharedSize(meta objstorage.ObjectMetadata) (int64, error) { - if err := p.sharedCheckInitialized(); err != nil { +func (p *provider) remoteSize(meta objstorage.ObjectMetadata) (int64, error) { + if err := p.remoteCheckInitialized(); err != nil { return 0, err } - objName := sharedObjectName(meta) + objName := remoteObjectName(meta) return meta.Remote.Storage.Size(objName) } -// sharedUnref implements object "removal" with the shared backend. The ref +// sharedUnref implements object "removal" with the remote backend. The ref // marker object is removed and the backing object is removed only if there are // no other ref markers. func (p *provider) sharedUnref(meta objstorage.ObjectMetadata) error { @@ -310,7 +332,7 @@ func (p *provider) sharedUnref(meta objstorage.ObjectMetadata) error { return err } if len(otherRefs) == 0 { - objName := sharedObjectName(meta) + objName := remoteObjectName(meta) if err := meta.Remote.Storage.Delete(objName); err != nil && !meta.Remote.Storage.IsNotExistError(err) { return err } @@ -318,21 +340,25 @@ func (p *provider) sharedUnref(meta objstorage.ObjectMetadata) error { return nil } +// ensureStorageLocked populates the remote.Storage object for the given +// locator, if necessary. p.mu must be held. func (p *provider) ensureStorageLocked(locator remote.Locator) (remote.Storage, error) { - if p.mu.shared.storageObjects == nil { - p.mu.shared.storageObjects = make(map[remote.Locator]remote.Storage) + if p.mu.remote.storageObjects == nil { + p.mu.remote.storageObjects = make(map[remote.Locator]remote.Storage) } - if res, ok := p.mu.shared.storageObjects[locator]; ok { + if res, ok := p.mu.remote.storageObjects[locator]; ok { return res, nil } - res, err := p.st.Shared.StorageFactory.CreateStorage(locator) + res, err := p.st.Remote.StorageFactory.CreateStorage(locator) if err != nil { return nil, err } - p.mu.shared.storageObjects[locator] = res + p.mu.remote.storageObjects[locator] = res return res, nil } + +// ensureStorage populates the remote.Storage object for the given locator, if necessary. func (p *provider) ensureStorage(locator remote.Locator) (remote.Storage, error) { p.mu.Lock() defer p.mu.Unlock() diff --git a/objstorage/objstorageprovider/shared_backing.go b/objstorage/objstorageprovider/remote_backing.go similarity index 90% rename from objstorage/objstorageprovider/shared_backing.go rename to objstorage/objstorageprovider/remote_backing.go index b988383e60..d302151b29 100644 --- a/objstorage/objstorageprovider/shared_backing.go +++ b/objstorage/objstorageprovider/remote_backing.go @@ -41,11 +41,11 @@ const ( tagNotSafeToIgnoreMask = 64 ) -func (p *provider) encodeSharedObjectBacking( +func (p *provider) encodeRemoteObjectBacking( meta *objstorage.ObjectMetadata, ) (objstorage.RemoteObjectBacking, error) { if !meta.IsRemote() { - return nil, errors.AssertionFailedf("object %s not on shared storage", meta.DiskFileNum) + return nil, errors.AssertionFailedf("object %s not on remote storage", meta.DiskFileNum) } buf := make([]byte, 0, binary.MaxVarintLen64*4) @@ -58,7 +58,7 @@ func (p *provider) encodeSharedObjectBacking( buf = binary.AppendUvarint(buf, uint64(meta.Remote.CleanupMethod)) if meta.Remote.CleanupMethod == objstorage.SharedRefTracking { buf = binary.AppendUvarint(buf, tagRefCheckID) - buf = binary.AppendUvarint(buf, uint64(p.shared.creatorID)) + buf = binary.AppendUvarint(buf, uint64(p.remote.shared.creatorID)) buf = binary.AppendUvarint(buf, uint64(meta.DiskFileNum.FileNum())) } if meta.Remote.Locator != "" { @@ -72,38 +72,38 @@ func (p *provider) encodeSharedObjectBacking( return buf, nil } -type sharedObjectBackingHandle struct { +type remoteObjectBackingHandle struct { backing objstorage.RemoteObjectBacking fileNum base.DiskFileNum p *provider } -func (s *sharedObjectBackingHandle) Get() (objstorage.RemoteObjectBacking, error) { +func (s *remoteObjectBackingHandle) Get() (objstorage.RemoteObjectBacking, error) { if s.backing == nil { return nil, errors.Errorf("RemoteObjectBackingHandle.Get() called after Close()") } return s.backing, nil } -func (s *sharedObjectBackingHandle) Close() { +func (s *remoteObjectBackingHandle) Close() { if s.backing != nil { s.backing = nil s.p.unprotectObject(s.fileNum) } } -var _ objstorage.RemoteObjectBackingHandle = (*sharedObjectBackingHandle)(nil) +var _ objstorage.RemoteObjectBackingHandle = (*remoteObjectBackingHandle)(nil) // RemoteObjectBacking is part of the objstorage.Provider interface. func (p *provider) RemoteObjectBacking( meta *objstorage.ObjectMetadata, ) (objstorage.RemoteObjectBackingHandle, error) { - backing, err := p.encodeSharedObjectBacking(meta) + backing, err := p.encodeRemoteObjectBacking(meta) if err != nil { return nil, err } p.protectObject(meta.DiskFileNum) - return &sharedObjectBackingHandle{ + return &remoteObjectBackingHandle{ backing: backing, fileNum: meta.DiskFileNum, p: p, @@ -118,7 +118,7 @@ func (p *provider) CreateExternalObjectBacking( meta.Remote.Locator = locator meta.Remote.CustomObjectName = objName meta.Remote.CleanupMethod = objstorage.SharedNoCleanup - return p.encodeSharedObjectBacking(&meta) + return p.encodeRemoteObjectBacking(&meta) } type decodedBacking struct { @@ -130,10 +130,10 @@ type decodedBacking struct { } } -// decodeSharedObjectBacking decodes the shared object metadata. +// decodeRemoteObjectBacking decodes the remote object metadata. // // Note that the meta.Remote.Storage field is not set. -func decodeSharedObjectBacking( +func decodeRemoteObjectBacking( fileType base.FileType, fileNum base.DiskFileNum, buf objstorage.RemoteObjectBacking, ) (decodedBacking, error) { var creatorID, creatorFileNum, cleanupMethod, refCheckCreatorID, refCheckFileNum uint64 @@ -186,10 +186,10 @@ func decodeSharedObjectBacking( } if customObjName == "" { if creatorID == 0 { - return decodedBacking{}, errors.Newf("shared object backing missing creator ID") + return decodedBacking{}, errors.Newf("remote object backing missing creator ID") } if creatorFileNum == 0 { - return decodedBacking{}, errors.Newf("shared object backing missing creator file num") + return decodedBacking{}, errors.Newf("remote object backing missing creator file num") } } var res decodedBacking @@ -200,7 +200,7 @@ func decodeSharedObjectBacking( res.meta.Remote.CleanupMethod = objstorage.SharedCleanupMethod(cleanupMethod) if res.meta.Remote.CleanupMethod == objstorage.SharedRefTracking { if refCheckCreatorID == 0 || refCheckFileNum == 0 { - return decodedBacking{}, errors.Newf("shared object backing missing ref to check") + return decodedBacking{}, errors.Newf("remote object backing missing ref to check") } res.refToCheck.creatorID = objstorage.CreatorID(refCheckCreatorID) res.refToCheck.fileNum = base.FileNum(refCheckFileNum).DiskFileNum() @@ -238,7 +238,7 @@ func (p *provider) AttachRemoteObjects( decoded := make([]decodedBacking, len(objs)) for i, o := range objs { var err error - decoded[i], err = decodeSharedObjectBacking(o.FileType, o.FileNum, o.Backing) + decoded[i], err = decodeRemoteObjectBacking(o.FileType, o.FileNum, o.Backing) if err != nil { return nil, err } @@ -275,7 +275,7 @@ func (p *provider) AttachRemoteObjects( p.mu.Lock() defer p.mu.Unlock() for _, d := range decoded { - p.mu.shared.catalogBatch.AddObject(remoteobjcat.RemoteObjectMetadata{ + p.mu.remote.catalogBatch.AddObject(remoteobjcat.RemoteObjectMetadata{ FileNum: d.meta.DiskFileNum, FileType: d.meta.FileType, CreatorID: d.meta.Remote.CreatorID, diff --git a/objstorage/objstorageprovider/shared_backing_test.go b/objstorage/objstorageprovider/remote_backing_test.go similarity index 91% rename from objstorage/objstorageprovider/shared_backing_test.go rename to objstorage/objstorageprovider/remote_backing_test.go index 0ad5ea3f8a..14170b8800 100644 --- a/objstorage/objstorageprovider/shared_backing_test.go +++ b/objstorage/objstorageprovider/remote_backing_test.go @@ -24,7 +24,7 @@ func TestSharedObjectBacking(t *testing.T) { t.Run(name, func(t *testing.T) { st := DefaultSettings(vfs.NewMem(), "") sharedStorage := remote.NewInMem() - st.Shared.StorageFactory = remote.MakeSimpleFactory(map[remote.Locator]remote.Storage{ + st.Remote.StorageFactory = remote.MakeSimpleFactory(map[remote.Locator]remote.Storage{ "foo": sharedStorage, }) p, err := Open(st) @@ -52,7 +52,7 @@ func TestSharedObjectBacking(t *testing.T) { _, err = h.Get() require.Error(t, err) - d1, err := decodeSharedObjectBacking(base.FileTypeTable, base.FileNum(100).DiskFileNum(), buf) + d1, err := decodeRemoteObjectBacking(base.FileTypeTable, base.FileNum(100).DiskFileNum(), buf) require.NoError(t, err) require.Equal(t, uint64(100), uint64(d1.meta.DiskFileNum.FileNum())) require.Equal(t, base.FileTypeTable, d1.meta.FileType) @@ -73,7 +73,7 @@ func TestSharedObjectBacking(t *testing.T) { buf2 = binary.AppendUvarint(buf2, 2) buf2 = append(buf2, 1, 1) - d2, err := decodeSharedObjectBacking(base.FileTypeTable, base.FileNum(100).DiskFileNum(), buf2) + d2, err := decodeRemoteObjectBacking(base.FileTypeTable, base.FileNum(100).DiskFileNum(), buf2) require.NoError(t, err) require.Equal(t, uint64(100), uint64(d2.meta.DiskFileNum.FileNum())) require.Equal(t, base.FileTypeTable, d2.meta.FileType) @@ -89,7 +89,7 @@ func TestSharedObjectBacking(t *testing.T) { buf3 := buf2 buf3 = binary.AppendUvarint(buf3, tagNotSafeToIgnoreMask+5) - _, err = decodeSharedObjectBacking(meta.FileType, meta.DiskFileNum, buf3) + _, err = decodeRemoteObjectBacking(meta.FileType, meta.DiskFileNum, buf3) require.Error(t, err) require.Contains(t, err.Error(), "unknown tag") }) @@ -100,7 +100,7 @@ func TestSharedObjectBacking(t *testing.T) { func TestCreateSharedObjectBacking(t *testing.T) { st := DefaultSettings(vfs.NewMem(), "") sharedStorage := remote.NewInMem() - st.Shared.StorageFactory = remote.MakeSimpleFactory(map[remote.Locator]remote.Storage{ + st.Remote.StorageFactory = remote.MakeSimpleFactory(map[remote.Locator]remote.Storage{ "foo": sharedStorage, }) p, err := Open(st) @@ -111,7 +111,7 @@ func TestCreateSharedObjectBacking(t *testing.T) { backing, err := p.CreateExternalObjectBacking("foo", "custom-obj-name") require.NoError(t, err) - d, err := decodeSharedObjectBacking(base.FileTypeTable, base.FileNum(100).DiskFileNum(), backing) + d, err := decodeRemoteObjectBacking(base.FileTypeTable, base.FileNum(100).DiskFileNum(), backing) require.NoError(t, err) require.Equal(t, uint64(100), uint64(d.meta.DiskFileNum.FileNum())) require.Equal(t, base.FileTypeTable, d.meta.FileType) diff --git a/objstorage/objstorageprovider/shared_obj_name.go b/objstorage/objstorageprovider/remote_obj_name.go similarity index 93% rename from objstorage/objstorageprovider/shared_obj_name.go rename to objstorage/objstorageprovider/remote_obj_name.go index f76cffff0a..b33a908b11 100644 --- a/objstorage/objstorageprovider/shared_obj_name.go +++ b/objstorage/objstorageprovider/remote_obj_name.go @@ -11,11 +11,11 @@ import ( "github.com/cockroachdb/pebble/objstorage" ) -// sharedObjectName returns the name of an object on shared storage. +// remoteObjectName returns the name of an object on remote storage. // // For sstables, the format is: --.sst // For example: 1a3f-2-000001.sst -func sharedObjectName(meta objstorage.ObjectMetadata) string { +func remoteObjectName(meta objstorage.ObjectMetadata) string { if meta.Remote.CustomObjectName != "" { return meta.Remote.CustomObjectName } @@ -78,7 +78,7 @@ func (p *provider) sharedObjectRefName(meta objstorage.ObjectMetadata) string { if meta.Remote.CleanupMethod != objstorage.SharedRefTracking { panic("ref object used when ref tracking disabled") } - return sharedObjectRefName(meta, p.shared.creatorID, meta.DiskFileNum) + return sharedObjectRefName(meta, p.remote.shared.creatorID, meta.DiskFileNum) } // objHash returns a 16-bit hash value derived from the creator ID and creator diff --git a/objstorage/objstorageprovider/shared_obj_name_test.go b/objstorage/objstorageprovider/remote_obj_name_test.go similarity index 95% rename from objstorage/objstorageprovider/shared_obj_name_test.go rename to objstorage/objstorageprovider/remote_obj_name_test.go index 2af201c58e..abe6c4d95d 100644 --- a/objstorage/objstorageprovider/shared_obj_name_test.go +++ b/objstorage/objstorageprovider/remote_obj_name_test.go @@ -29,7 +29,7 @@ func TestSharedObjectNames(t *testing.T) { meta.Remote.CustomObjectName = fmt.Sprintf("foo-%d.sst", rand.Intn(10000)) } - obj := sharedObjectName(meta) + obj := remoteObjectName(meta) // Cross-check against cleaner implementations. expObj := meta.Remote.CustomObjectName if expObj == "" { @@ -52,7 +52,7 @@ func TestSharedObjectNames(t *testing.T) { meta.FileType = base.FileTypeTable meta.Remote.CreatorID = objstorage.CreatorID(456) meta.Remote.CreatorFileNum = base.FileNum(789).DiskFileNum() - require.Equal(t, sharedObjectName(meta), "0e17-456-000789.sst") + require.Equal(t, remoteObjectName(meta), "0e17-456-000789.sst") require.Equal(t, sharedObjectRefPrefix(meta), "0e17-456-000789.sst.ref.") refCreatorID := objstorage.CreatorID(101112) diff --git a/objstorage/objstorageprovider/shared_readable.go b/objstorage/objstorageprovider/remote_readable.go similarity index 74% rename from objstorage/objstorageprovider/shared_readable.go rename to objstorage/objstorageprovider/remote_readable.go index a002f15ab4..991a1bae85 100644 --- a/objstorage/objstorageprovider/shared_readable.go +++ b/objstorage/objstorageprovider/remote_readable.go @@ -14,23 +14,23 @@ import ( "github.com/cockroachdb/pebble/objstorage/remote" ) -const sharedMaxReadaheadSize = 1024 * 1024 /* 1MB */ +const remoteMaxReadaheadSize = 1024 * 1024 /* 1MB */ -// sharedReadable is a very simple implementation of Readable on top of the +// remoteReadable is a very simple implementation of Readable on top of the // ReadCloser returned by remote.Storage.CreateObject. -type sharedReadable struct { +type remoteReadable struct { objReader remote.ObjectReader size int64 fileNum base.DiskFileNum provider *provider } -var _ objstorage.Readable = (*sharedReadable)(nil) +var _ objstorage.Readable = (*remoteReadable)(nil) -func (p *provider) newSharedReadable( +func (p *provider) newRemoteReadable( objReader remote.ObjectReader, size int64, fileNum base.DiskFileNum, -) *sharedReadable { - return &sharedReadable{ +) *remoteReadable { + return &remoteReadable{ objReader: objReader, size: size, fileNum: fileNum, @@ -39,43 +39,43 @@ func (p *provider) newSharedReadable( } // ReadAt is part of the objstorage.Readable interface. -func (r *sharedReadable) ReadAt(ctx context.Context, p []byte, offset int64) error { +func (r *remoteReadable) ReadAt(ctx context.Context, p []byte, offset int64) error { return r.readInternal(ctx, p, offset, false /* forCompaction */) } // readInternal performs a read for the object, using the cache when // appropriate. -func (r *sharedReadable) readInternal( +func (r *remoteReadable) readInternal( ctx context.Context, p []byte, offset int64, forCompaction bool, ) error { - if cache := r.provider.shared.cache; cache != nil { + if cache := r.provider.remote.cache; cache != nil { flags := sharedcache.ReadFlags{ // Don't add data to the cache if this read is for a compaction. ReadOnly: forCompaction, } - return r.provider.shared.cache.ReadAt(ctx, r.fileNum, p, offset, r.objReader, r.size, flags) + return r.provider.remote.cache.ReadAt(ctx, r.fileNum, p, offset, r.objReader, r.size, flags) } return r.objReader.ReadAt(ctx, p, offset) } -func (r *sharedReadable) Close() error { +func (r *remoteReadable) Close() error { defer func() { r.objReader = nil }() return r.objReader.Close() } -func (r *sharedReadable) Size() int64 { +func (r *remoteReadable) Size() int64 { return r.size } -func (r *sharedReadable) NewReadHandle(_ context.Context) objstorage.ReadHandle { +func (r *remoteReadable) NewReadHandle(_ context.Context) objstorage.ReadHandle { // TODO(radu): use a pool. - rh := &sharedReadHandle{readable: r} - rh.readahead.state = makeReadaheadState(sharedMaxReadaheadSize) + rh := &remoteReadHandle{readable: r} + rh.readahead.state = makeReadaheadState(remoteMaxReadaheadSize) return rh } -type sharedReadHandle struct { - readable *sharedReadable +type remoteReadHandle struct { + readable *remoteReadable readahead struct { state readaheadState data []byte @@ -84,10 +84,10 @@ type sharedReadHandle struct { forCompaction bool } -var _ objstorage.ReadHandle = (*sharedReadHandle)(nil) +var _ objstorage.ReadHandle = (*remoteReadHandle)(nil) // ReadAt is part of the objstorage.ReadHandle interface. -func (r *sharedReadHandle) ReadAt(ctx context.Context, p []byte, offset int64) error { +func (r *remoteReadHandle) ReadAt(ctx context.Context, p []byte, offset int64) error { readaheadSize := r.maybeReadahead(offset, len(p)) // Check if we already have the data from a previous read-ahead. @@ -135,27 +135,27 @@ func (r *sharedReadHandle) ReadAt(ctx context.Context, p []byte, offset int64) e return r.readable.readInternal(ctx, p, offset, r.forCompaction) } -func (r *sharedReadHandle) maybeReadahead(offset int64, len int) int { +func (r *remoteReadHandle) maybeReadahead(offset int64, len int) int { if r.forCompaction { - return sharedMaxReadaheadSize + return remoteMaxReadaheadSize } return int(r.readahead.state.maybeReadahead(offset, int64(len))) } // Close is part of the objstorage.ReadHandle interface. -func (r *sharedReadHandle) Close() error { +func (r *remoteReadHandle) Close() error { r.readable = nil r.readahead.data = nil return nil } // SetupForCompaction is part of the objstorage.ReadHandle interface. -func (r *sharedReadHandle) SetupForCompaction() { +func (r *remoteReadHandle) SetupForCompaction() { r.forCompaction = true } // RecordCacheHit is part of the objstorage.ReadHandle interface. -func (r *sharedReadHandle) RecordCacheHit(_ context.Context, offset, size int64) { +func (r *remoteReadHandle) RecordCacheHit(_ context.Context, offset, size int64) { if !r.forCompaction { r.readahead.state.recordCacheHit(offset, size) } diff --git a/objstorage/objstorageprovider/testdata/provider/shared_attach b/objstorage/objstorageprovider/testdata/provider/shared_attach index aa121686dc..fac25a8a0b 100644 --- a/objstorage/objstorageprovider/testdata/provider/shared_attach +++ b/objstorage/objstorageprovider/testdata/provider/shared_attach @@ -15,24 +15,24 @@ open p1 1 create 1 shared 1 100 ---- - create object "61a6-1-000001.sst" - close writer for "61a6-1-000001.sst" after 100 bytes - create object "61a6-1-000001.sst.ref.1.000001" - close writer for "61a6-1-000001.sst.ref.1.000001" after 0 bytes + create object "61a6-1-000001.sst" + close writer for "61a6-1-000001.sst" after 100 bytes + create object "61a6-1-000001.sst.ref.1.000001" + close writer for "61a6-1-000001.sst.ref.1.000001" after 0 bytes create 2 shared 2 200 ---- - create object "a629-1-000002.sst" - close writer for "a629-1-000002.sst" after 200 bytes - create object "a629-1-000002.sst.ref.1.000002" - close writer for "a629-1-000002.sst.ref.1.000002" after 0 bytes + create object "a629-1-000002.sst" + close writer for "a629-1-000002.sst" after 200 bytes + create object "a629-1-000002.sst.ref.1.000002" + close writer for "a629-1-000002.sst.ref.1.000002" after 0 bytes create 3 shared 3 300 ---- - create object "eaac-1-000003.sst" - close writer for "eaac-1-000003.sst" after 300 bytes - create object "eaac-1-000003.sst.ref.1.000003" - close writer for "eaac-1-000003.sst.ref.1.000003" after 0 bytes + create object "eaac-1-000003.sst" + close writer for "eaac-1-000003.sst" after 300 bytes + create object "eaac-1-000003.sst.ref.1.000003" + close writer for "eaac-1-000003.sst.ref.1.000003" after 0 bytes create 100 local 100 15 ---- @@ -42,15 +42,15 @@ create 100 local 100 15 list ---- -000001 -> shared://61a6-1-000001.sst -000002 -> shared://a629-1-000002.sst -000003 -> shared://eaac-1-000003.sst +000001 -> remote://61a6-1-000001.sst +000002 -> remote://a629-1-000002.sst +000003 -> remote://eaac-1-000003.sst 000100 -> p1/000100.sst # Can't get backing of local object. save-backing foo 100 ---- -object 000100 not on shared storage +object 000100 not on remote storage save-backing b1 1 ---- @@ -82,69 +82,69 @@ open p2 2 create 100 shared 100 15 ---- - create object "fd72-2-000100.sst" - close writer for "fd72-2-000100.sst" after 15 bytes - create object "fd72-2-000100.sst.ref.2.000100" - close writer for "fd72-2-000100.sst.ref.2.000100" after 0 bytes + create object "fd72-2-000100.sst" + close writer for "fd72-2-000100.sst" after 15 bytes + create object "fd72-2-000100.sst.ref.2.000100" + close writer for "fd72-2-000100.sst.ref.2.000100" after 0 bytes attach b1 101 b2 102 b3 103 ---- - create object "61a6-1-000001.sst.ref.2.000101" - close writer for "61a6-1-000001.sst.ref.2.000101" after 0 bytes - size of object "61a6-1-000001.sst.ref.1.000001": 0 - create object "a629-1-000002.sst.ref.2.000102" - close writer for "a629-1-000002.sst.ref.2.000102" after 0 bytes - size of object "a629-1-000002.sst.ref.1.000002": 0 - create object "eaac-1-000003.sst.ref.2.000103" - close writer for "eaac-1-000003.sst.ref.2.000103" after 0 bytes - size of object "eaac-1-000003.sst.ref.1.000003": 0 + create object "61a6-1-000001.sst.ref.2.000101" + close writer for "61a6-1-000001.sst.ref.2.000101" after 0 bytes + size of object "61a6-1-000001.sst.ref.1.000001": 0 + create object "a629-1-000002.sst.ref.2.000102" + close writer for "a629-1-000002.sst.ref.2.000102" after 0 bytes + size of object "a629-1-000002.sst.ref.1.000002": 0 + create object "eaac-1-000003.sst.ref.2.000103" + close writer for "eaac-1-000003.sst.ref.2.000103" after 0 bytes + size of object "eaac-1-000003.sst.ref.1.000003": 0 sync: p2/REMOTE-OBJ-CATALOG-000001 -000101 -> shared://61a6-1-000001.sst -000102 -> shared://a629-1-000002.sst -000103 -> shared://eaac-1-000003.sst +000101 -> remote://61a6-1-000001.sst +000102 -> remote://a629-1-000002.sst +000103 -> remote://eaac-1-000003.sst list ---- -000100 -> shared://fd72-2-000100.sst -000101 -> shared://61a6-1-000001.sst -000102 -> shared://a629-1-000002.sst -000103 -> shared://eaac-1-000003.sst +000100 -> remote://fd72-2-000100.sst +000101 -> remote://61a6-1-000001.sst +000102 -> remote://a629-1-000002.sst +000103 -> remote://eaac-1-000003.sst read 101 0 100 15 10 ---- - size of object "61a6-1-000001.sst.ref.2.000101": 0 - create reader for object "61a6-1-000001.sst": 100 bytes + size of object "61a6-1-000001.sst.ref.2.000101": 0 + create reader for object "61a6-1-000001.sst": 100 bytes size: 100 - read object "61a6-1-000001.sst" at 0 (length 100) + read object "61a6-1-000001.sst" at 0 (length 100) 0 100: ok (salt 1) - read object "61a6-1-000001.sst" at 15 (length 10) + read object "61a6-1-000001.sst" at 15 (length 10) 15 10: ok (salt 1) - close reader for "61a6-1-000001.sst" + close reader for "61a6-1-000001.sst" read 102 0 200 90 100 ---- - size of object "a629-1-000002.sst.ref.2.000102": 0 - create reader for object "a629-1-000002.sst": 200 bytes + size of object "a629-1-000002.sst.ref.2.000102": 0 + create reader for object "a629-1-000002.sst": 200 bytes size: 200 - read object "a629-1-000002.sst" at 0 (length 200) + read object "a629-1-000002.sst" at 0 (length 200) 0 200: ok (salt 2) - read object "a629-1-000002.sst" at 90 (length 100) + read object "a629-1-000002.sst" at 90 (length 100) 90 100: ok (salt 2) - close reader for "a629-1-000002.sst" + close reader for "a629-1-000002.sst" read 103 0 300 ---- - size of object "eaac-1-000003.sst.ref.2.000103": 0 - create reader for object "eaac-1-000003.sst": 300 bytes + size of object "eaac-1-000003.sst.ref.2.000103": 0 + create reader for object "eaac-1-000003.sst": 300 bytes size: 300 - read object "eaac-1-000003.sst" at 0 (length 300) + read object "eaac-1-000003.sst" at 0 (length 300) 0 300: ok (salt 3) - close reader for "eaac-1-000003.sst" + close reader for "eaac-1-000003.sst" diff --git a/objstorage/objstorageprovider/testdata/provider/shared_attach_after_unref b/objstorage/objstorageprovider/testdata/provider/shared_attach_after_unref index 8b4c462841..719737cbcf 100644 --- a/objstorage/objstorageprovider/testdata/provider/shared_attach_after_unref +++ b/objstorage/objstorageprovider/testdata/provider/shared_attach_after_unref @@ -14,10 +14,10 @@ open p5 5 create 1 shared 1 100 ---- - create object "d632-5-000001.sst" - close writer for "d632-5-000001.sst" after 100 bytes - create object "d632-5-000001.sst.ref.5.000001" - close writer for "d632-5-000001.sst.ref.5.000001" after 0 bytes + create object "d632-5-000001.sst" + close writer for "d632-5-000001.sst" after 100 bytes + create object "d632-5-000001.sst.ref.5.000001" + close writer for "d632-5-000001.sst.ref.5.000001" after 0 bytes save-backing p5b1 1 ---- @@ -42,11 +42,11 @@ open p6 6 attach p5b1 101 ---- - create object "d632-5-000001.sst.ref.6.000101" - close writer for "d632-5-000001.sst.ref.6.000101" after 0 bytes - size of object "d632-5-000001.sst.ref.5.000001": 0 + create object "d632-5-000001.sst.ref.6.000101" + close writer for "d632-5-000001.sst.ref.6.000101" after 0 bytes + size of object "d632-5-000001.sst.ref.5.000001": 0 sync: p6/REMOTE-OBJ-CATALOG-000001 -000101 -> shared://d632-5-000001.sst +000101 -> remote://d632-5-000001.sst switch p5 ---- @@ -57,10 +57,10 @@ close-backing p5b1 create 2 shared 2 100 ---- - create object "1ab5-5-000002.sst" - close writer for "1ab5-5-000002.sst" after 100 bytes - create object "1ab5-5-000002.sst.ref.5.000002" - close writer for "1ab5-5-000002.sst.ref.5.000002" after 0 bytes + create object "1ab5-5-000002.sst" + close writer for "1ab5-5-000002.sst" after 100 bytes + create object "1ab5-5-000002.sst.ref.5.000002" + close writer for "1ab5-5-000002.sst.ref.5.000002" after 0 bytes save-backing p5b2 2 ---- @@ -71,9 +71,9 @@ close-backing p5b2 remove 2 ---- - delete object "1ab5-5-000002.sst.ref.5.000002" - list (prefix="1ab5-5-000002.sst.ref.", delimiter="") - delete object "1ab5-5-000002.sst" + delete object "1ab5-5-000002.sst.ref.5.000002" + list (prefix="1ab5-5-000002.sst.ref.", delimiter="") + delete object "1ab5-5-000002.sst" switch p6 ---- @@ -82,10 +82,10 @@ switch p6 attach p5b2 102 ---- - create object "1ab5-5-000002.sst.ref.6.000102" - close writer for "1ab5-5-000002.sst.ref.6.000102" after 0 bytes - size of object "1ab5-5-000002.sst.ref.5.000002": error: file does not exist - delete object "1ab5-5-000002.sst.ref.6.000102" - list (prefix="1ab5-5-000002.sst.ref.", delimiter="") - delete object "1ab5-5-000002.sst" + create object "1ab5-5-000002.sst.ref.6.000102" + close writer for "1ab5-5-000002.sst.ref.6.000102" after 0 bytes + size of object "1ab5-5-000002.sst.ref.5.000002": error: file does not exist + delete object "1ab5-5-000002.sst.ref.6.000102" + list (prefix="1ab5-5-000002.sst.ref.", delimiter="") + delete object "1ab5-5-000002.sst" error: origin marker object "1ab5-5-000002.sst.ref.5.000002" does not exist; object probably removed from the provider which created the backing diff --git a/objstorage/objstorageprovider/testdata/provider/shared_attach_multi b/objstorage/objstorageprovider/testdata/provider/shared_attach_multi index 1167698f0d..93baa318ac 100644 --- a/objstorage/objstorageprovider/testdata/provider/shared_attach_multi +++ b/objstorage/objstorageprovider/testdata/provider/shared_attach_multi @@ -14,10 +14,10 @@ open p1 1 create 1 shared 1 100 ---- - create object "61a6-1-000001.sst" - close writer for "61a6-1-000001.sst" after 100 bytes - create object "61a6-1-000001.sst.ref.1.000001" - close writer for "61a6-1-000001.sst.ref.1.000001" after 0 bytes + create object "61a6-1-000001.sst" + close writer for "61a6-1-000001.sst" after 100 bytes + create object "61a6-1-000001.sst.ref.1.000001" + close writer for "61a6-1-000001.sst.ref.1.000001" after 0 bytes save-backing b1 1 ---- @@ -40,19 +40,19 @@ b1 101 b1 102 b1 103 ---- - create object "61a6-1-000001.sst.ref.2.000101" - close writer for "61a6-1-000001.sst.ref.2.000101" after 0 bytes - size of object "61a6-1-000001.sst.ref.1.000001": 0 - create object "61a6-1-000001.sst.ref.2.000102" - close writer for "61a6-1-000001.sst.ref.2.000102" after 0 bytes - size of object "61a6-1-000001.sst.ref.1.000001": 0 - create object "61a6-1-000001.sst.ref.2.000103" - close writer for "61a6-1-000001.sst.ref.2.000103" after 0 bytes - size of object "61a6-1-000001.sst.ref.1.000001": 0 + create object "61a6-1-000001.sst.ref.2.000101" + close writer for "61a6-1-000001.sst.ref.2.000101" after 0 bytes + size of object "61a6-1-000001.sst.ref.1.000001": 0 + create object "61a6-1-000001.sst.ref.2.000102" + close writer for "61a6-1-000001.sst.ref.2.000102" after 0 bytes + size of object "61a6-1-000001.sst.ref.1.000001": 0 + create object "61a6-1-000001.sst.ref.2.000103" + close writer for "61a6-1-000001.sst.ref.2.000103" after 0 bytes + size of object "61a6-1-000001.sst.ref.1.000001": 0 sync: p2/REMOTE-OBJ-CATALOG-000001 -000101 -> shared://61a6-1-000001.sst -000102 -> shared://61a6-1-000001.sst -000103 -> shared://61a6-1-000001.sst +000101 -> remote://61a6-1-000001.sst +000102 -> remote://61a6-1-000001.sst +000103 -> remote://61a6-1-000001.sst close-backing b1 ---- @@ -63,30 +63,30 @@ switch p1 remove 1 ---- - delete object "61a6-1-000001.sst.ref.1.000001" - list (prefix="61a6-1-000001.sst.ref.", delimiter="") - - 61a6-1-000001.sst.ref.2.000101 - - 61a6-1-000001.sst.ref.2.000102 - - 61a6-1-000001.sst.ref.2.000103 + delete object "61a6-1-000001.sst.ref.1.000001" + list (prefix="61a6-1-000001.sst.ref.", delimiter="") + - 61a6-1-000001.sst.ref.2.000101 + - 61a6-1-000001.sst.ref.2.000102 + - 61a6-1-000001.sst.ref.2.000103 switch p2 ---- remove 101 ---- - delete object "61a6-1-000001.sst.ref.2.000101" - list (prefix="61a6-1-000001.sst.ref.", delimiter="") - - 61a6-1-000001.sst.ref.2.000102 - - 61a6-1-000001.sst.ref.2.000103 + delete object "61a6-1-000001.sst.ref.2.000101" + list (prefix="61a6-1-000001.sst.ref.", delimiter="") + - 61a6-1-000001.sst.ref.2.000102 + - 61a6-1-000001.sst.ref.2.000103 remove 103 ---- - delete object "61a6-1-000001.sst.ref.2.000103" - list (prefix="61a6-1-000001.sst.ref.", delimiter="") - - 61a6-1-000001.sst.ref.2.000102 + delete object "61a6-1-000001.sst.ref.2.000103" + list (prefix="61a6-1-000001.sst.ref.", delimiter="") + - 61a6-1-000001.sst.ref.2.000102 remove 102 ---- - delete object "61a6-1-000001.sst.ref.2.000102" - list (prefix="61a6-1-000001.sst.ref.", delimiter="") - delete object "61a6-1-000001.sst" + delete object "61a6-1-000001.sst.ref.2.000102" + list (prefix="61a6-1-000001.sst.ref.", delimiter="") + delete object "61a6-1-000001.sst" diff --git a/objstorage/objstorageprovider/testdata/provider/shared_basic b/objstorage/objstorageprovider/testdata/provider/shared_basic index 7e1ae39be0..540c54c956 100644 --- a/objstorage/objstorageprovider/testdata/provider/shared_basic +++ b/objstorage/objstorageprovider/testdata/provider/shared_basic @@ -30,25 +30,25 @@ size: 100 create 2 shared 2 100 ---- - create object "a629-1-000002.sst" - close writer for "a629-1-000002.sst" after 100 bytes - create object "a629-1-000002.sst.ref.1.000002" - close writer for "a629-1-000002.sst.ref.1.000002" after 0 bytes + create object "a629-1-000002.sst" + close writer for "a629-1-000002.sst" after 100 bytes + create object "a629-1-000002.sst.ref.1.000002" + close writer for "a629-1-000002.sst.ref.1.000002" after 0 bytes read 2 0 100 ---- - size of object "a629-1-000002.sst.ref.1.000002": 0 - create reader for object "a629-1-000002.sst": 100 bytes + size of object "a629-1-000002.sst.ref.1.000002": 0 + create reader for object "a629-1-000002.sst": 100 bytes size: 100 - read object "a629-1-000002.sst" at 0 (length 100) + read object "a629-1-000002.sst" at 0 (length 100) 0 100: ok (salt 2) - close reader for "a629-1-000002.sst" + close reader for "a629-1-000002.sst" list ---- 000001 -> p1/000001.sst -000002 -> shared://a629-1-000002.sst +000002 -> remote://a629-1-000002.sst close ---- @@ -69,7 +69,7 @@ open p1 1 list ---- 000001 -> p1/000001.sst -000002 -> shared://a629-1-000002.sst +000002 -> remote://a629-1-000002.sst remove 1 ---- @@ -77,9 +77,9 @@ remove 1 remove 2 ---- - delete object "a629-1-000002.sst.ref.1.000002" - list (prefix="a629-1-000002.sst.ref.", delimiter="") - delete object "a629-1-000002.sst" + delete object "a629-1-000002.sst.ref.1.000002" + list (prefix="a629-1-000002.sst.ref.", delimiter="") + delete object "a629-1-000002.sst" link-or-copy 3 local 3 100 ---- @@ -100,22 +100,22 @@ link-or-copy 4 shared 4 100 ---- create: temp-file-2 close: temp-file-2 - create object "2f2f-1-000004.sst" + create object "2f2f-1-000004.sst" open: temp-file-2 - close writer for "2f2f-1-000004.sst" after 100 bytes - create object "2f2f-1-000004.sst.ref.1.000004" - close writer for "2f2f-1-000004.sst.ref.1.000004" after 0 bytes + close writer for "2f2f-1-000004.sst" after 100 bytes + create object "2f2f-1-000004.sst.ref.1.000004" + close writer for "2f2f-1-000004.sst.ref.1.000004" after 0 bytes close: temp-file-2 read 4 0 100 ---- - size of object "2f2f-1-000004.sst.ref.1.000004": 0 - create reader for object "2f2f-1-000004.sst": 100 bytes + size of object "2f2f-1-000004.sst.ref.1.000004": 0 + create reader for object "2f2f-1-000004.sst": 100 bytes size: 100 - read object "2f2f-1-000004.sst" at 0 (length 100) + read object "2f2f-1-000004.sst" at 0 (length 100) 0 100: ok (salt 4) - close reader for "2f2f-1-000004.sst" + close reader for "2f2f-1-000004.sst" close ---- diff --git a/objstorage/objstorageprovider/testdata/provider/shared_no_ref b/objstorage/objstorageprovider/testdata/provider/shared_no_ref index f1075c5ea2..6c16f9af2c 100644 --- a/objstorage/objstorageprovider/testdata/provider/shared_no_ref +++ b/objstorage/objstorageprovider/testdata/provider/shared_no_ref @@ -15,54 +15,54 @@ open p1 1 create 1 shared 1 100 no-ref-tracking ---- - create object "61a6-1-000001.sst" - close writer for "61a6-1-000001.sst" after 100 bytes + create object "61a6-1-000001.sst" + close writer for "61a6-1-000001.sst" after 100 bytes read 1 0 100 ---- - create reader for object "61a6-1-000001.sst": 100 bytes + create reader for object "61a6-1-000001.sst": 100 bytes size: 100 - read object "61a6-1-000001.sst" at 0 (length 100) + read object "61a6-1-000001.sst" at 0 (length 100) 0 100: ok (salt 1) - close reader for "61a6-1-000001.sst" + close reader for "61a6-1-000001.sst" create 2 shared 2 100 no-ref-tracking ---- - create object "a629-1-000002.sst" - close writer for "a629-1-000002.sst" after 100 bytes + create object "a629-1-000002.sst" + close writer for "a629-1-000002.sst" after 100 bytes read 2 0 100 ---- - create reader for object "a629-1-000002.sst": 100 bytes + create reader for object "a629-1-000002.sst": 100 bytes size: 100 - read object "a629-1-000002.sst" at 0 (length 100) + read object "a629-1-000002.sst" at 0 (length 100) 0 100: ok (salt 2) - close reader for "a629-1-000002.sst" + close reader for "a629-1-000002.sst" list ---- -000001 -> shared://61a6-1-000001.sst -000002 -> shared://a629-1-000002.sst +000001 -> remote://61a6-1-000001.sst +000002 -> remote://a629-1-000002.sst link-or-copy 3 shared 3 100 no-ref-tracking ---- create: temp-file-1 close: temp-file-1 - create object "eaac-1-000003.sst" + create object "eaac-1-000003.sst" open: temp-file-1 - close writer for "eaac-1-000003.sst" after 100 bytes + close writer for "eaac-1-000003.sst" after 100 bytes close: temp-file-1 read 3 0 100 ---- - create reader for object "eaac-1-000003.sst": 100 bytes + create reader for object "eaac-1-000003.sst": 100 bytes size: 100 - read object "eaac-1-000003.sst" at 0 (length 100) + read object "eaac-1-000003.sst" at 0 (length 100) 0 100: ok (salt 3) - close reader for "eaac-1-000003.sst" + close reader for "eaac-1-000003.sst" close ---- @@ -81,36 +81,36 @@ open p1 1 list ---- -000001 -> shared://61a6-1-000001.sst -000002 -> shared://a629-1-000002.sst -000003 -> shared://eaac-1-000003.sst +000001 -> remote://61a6-1-000001.sst +000002 -> remote://a629-1-000002.sst +000003 -> remote://eaac-1-000003.sst read 1 0 100 ---- - create reader for object "61a6-1-000001.sst": 100 bytes + create reader for object "61a6-1-000001.sst": 100 bytes size: 100 - read object "61a6-1-000001.sst" at 0 (length 100) + read object "61a6-1-000001.sst" at 0 (length 100) 0 100: ok (salt 1) - close reader for "61a6-1-000001.sst" + close reader for "61a6-1-000001.sst" read 2 0 100 ---- - create reader for object "a629-1-000002.sst": 100 bytes + create reader for object "a629-1-000002.sst": 100 bytes size: 100 - read object "a629-1-000002.sst" at 0 (length 100) + read object "a629-1-000002.sst" at 0 (length 100) 0 100: ok (salt 2) - close reader for "a629-1-000002.sst" + close reader for "a629-1-000002.sst" read 3 0 100 ---- - create reader for object "eaac-1-000003.sst": 100 bytes + create reader for object "eaac-1-000003.sst": 100 bytes size: 100 - read object "eaac-1-000003.sst" at 0 (length 100) + read object "eaac-1-000003.sst" at 0 (length 100) 0 100: ok (salt 3) - close reader for "eaac-1-000003.sst" + close reader for "eaac-1-000003.sst" save-backing b1 1 ---- @@ -135,31 +135,31 @@ b1 101 b2 102 ---- sync: p2/REMOTE-OBJ-CATALOG-000001 -000101 -> shared://61a6-1-000001.sst -000102 -> shared://61a6-1-000001.sst +000101 -> remote://61a6-1-000001.sst +000102 -> remote://61a6-1-000001.sst list ---- -000101 -> shared://61a6-1-000001.sst -000102 -> shared://61a6-1-000001.sst +000101 -> remote://61a6-1-000001.sst +000102 -> remote://61a6-1-000001.sst read 101 0 100 ---- - create reader for object "61a6-1-000001.sst": 100 bytes + create reader for object "61a6-1-000001.sst": 100 bytes size: 100 - read object "61a6-1-000001.sst" at 0 (length 100) + read object "61a6-1-000001.sst" at 0 (length 100) 0 100: ok (salt 1) - close reader for "61a6-1-000001.sst" + close reader for "61a6-1-000001.sst" read 102 0 100 ---- - create reader for object "61a6-1-000001.sst": 100 bytes + create reader for object "61a6-1-000001.sst": 100 bytes size: 100 - read object "61a6-1-000001.sst" at 0 (length 100) + read object "61a6-1-000001.sst" at 0 (length 100) 0 100: ok (salt 1) - close reader for "61a6-1-000001.sst" + close reader for "61a6-1-000001.sst" # In this mode, all removes should be no-ops on the shared backend. remove 101 diff --git a/objstorage/objstorageprovider/testdata/provider/shared_readahead b/objstorage/objstorageprovider/testdata/provider/shared_readahead index aba18cbf9a..45e1c4971b 100644 --- a/objstorage/objstorageprovider/testdata/provider/shared_readahead +++ b/objstorage/objstorageprovider/testdata/provider/shared_readahead @@ -12,10 +12,10 @@ open p1 1 create 1 shared 1 2000000 ---- - create object "61a6-1-000001.sst" - close writer for "61a6-1-000001.sst" after 2000000 bytes - create object "61a6-1-000001.sst.ref.1.000001" - close writer for "61a6-1-000001.sst.ref.1.000001" after 0 bytes + create object "61a6-1-000001.sst" + close writer for "61a6-1-000001.sst" after 2000000 bytes + create object "61a6-1-000001.sst.ref.1.000001" + close writer for "61a6-1-000001.sst.ref.1.000001" after 0 bytes # We should be seeing larger and larger reads. But the last read should be # capped to the object size. @@ -34,30 +34,30 @@ read 1 800000 1000 1500000 10000 ---- - size of object "61a6-1-000001.sst.ref.1.000001": 0 - create reader for object "61a6-1-000001.sst": 2000000 bytes + size of object "61a6-1-000001.sst.ref.1.000001": 0 + create reader for object "61a6-1-000001.sst": 2000000 bytes size: 2000000 - read object "61a6-1-000001.sst" at 0 (length 1000) + read object "61a6-1-000001.sst" at 0 (length 1000) 0 1000: ok (salt 1) - read object "61a6-1-000001.sst" at 1000 (length 15000) + read object "61a6-1-000001.sst" at 1000 (length 15000) 1000 15000: ok (salt 1) - read object "61a6-1-000001.sst" at 16000 (length 65536) + read object "61a6-1-000001.sst" at 16000 (length 65536) 16000 30000: ok (salt 1) 46000 10000: ok (salt 1) - read object "61a6-1-000001.sst" at 81536 (length 105536) + read object "61a6-1-000001.sst" at 81536 (length 105536) 56000 50000: ok (salt 1) 106000 30000: ok (salt 1) 150000 20000: ok (salt 1) - read object "61a6-1-000001.sst" at 187072 (length 255072) + read object "61a6-1-000001.sst" at 187072 (length 255072) 180000 10000: ok (salt 1) 210000 30000: ok (salt 1) 300000 10000: ok (salt 1) - read object "61a6-1-000001.sst" at 500000 (length 524288) + read object "61a6-1-000001.sst" at 500000 (length 524288) 500000 1000: ok (salt 1) 800000 1000: ok (salt 1) - read object "61a6-1-000001.sst" at 1500000 (length 500000) + read object "61a6-1-000001.sst" at 1500000 (length 500000) 1500000 10000: ok (salt 1) - close reader for "61a6-1-000001.sst" + close reader for "61a6-1-000001.sst" # When reading for a compaction, we should be doing large reads from the start. read 1 for-compaction @@ -71,10 +71,10 @@ read 1 for-compaction 180000 10000 210000 30000 ---- - size of object "61a6-1-000001.sst.ref.1.000001": 0 - create reader for object "61a6-1-000001.sst": 2000000 bytes + size of object "61a6-1-000001.sst.ref.1.000001": 0 + create reader for object "61a6-1-000001.sst": 2000000 bytes size: 2000000 - read object "61a6-1-000001.sst" at 0 (length 1048576) + read object "61a6-1-000001.sst" at 0 (length 1048576) 0 1000: ok (salt 1) 1000 15000: ok (salt 1) 16000 30000: ok (salt 1) @@ -84,4 +84,4 @@ size: 2000000 150000 20000: ok (salt 1) 180000 10000: ok (salt 1) 210000 30000: ok (salt 1) - close reader for "61a6-1-000001.sst" + close reader for "61a6-1-000001.sst" diff --git a/objstorage/objstorageprovider/testdata/provider/shared_remove b/objstorage/objstorageprovider/testdata/provider/shared_remove index 5204ca641a..f9c52a1497 100644 --- a/objstorage/objstorageprovider/testdata/provider/shared_remove +++ b/objstorage/objstorageprovider/testdata/provider/shared_remove @@ -12,24 +12,24 @@ open p1 1 create 1 shared 1 100 ---- - create object "61a6-1-000001.sst" - close writer for "61a6-1-000001.sst" after 100 bytes - create object "61a6-1-000001.sst.ref.1.000001" - close writer for "61a6-1-000001.sst.ref.1.000001" after 0 bytes + create object "61a6-1-000001.sst" + close writer for "61a6-1-000001.sst" after 100 bytes + create object "61a6-1-000001.sst.ref.1.000001" + close writer for "61a6-1-000001.sst.ref.1.000001" after 0 bytes create 2 shared 2 100 ---- - create object "a629-1-000002.sst" - close writer for "a629-1-000002.sst" after 100 bytes - create object "a629-1-000002.sst.ref.1.000002" - close writer for "a629-1-000002.sst.ref.1.000002" after 0 bytes + create object "a629-1-000002.sst" + close writer for "a629-1-000002.sst" after 100 bytes + create object "a629-1-000002.sst.ref.1.000002" + close writer for "a629-1-000002.sst.ref.1.000002" after 0 bytes create 3 shared 3 100 ---- - create object "eaac-1-000003.sst" - close writer for "eaac-1-000003.sst" after 100 bytes - create object "eaac-1-000003.sst.ref.1.000003" - close writer for "eaac-1-000003.sst.ref.1.000003" after 0 bytes + create object "eaac-1-000003.sst" + close writer for "eaac-1-000003.sst" after 100 bytes + create object "eaac-1-000003.sst.ref.1.000003" + close writer for "eaac-1-000003.sst.ref.1.000003" after 0 bytes save-backing b1 1 ---- @@ -51,38 +51,38 @@ open p2 2 create 4 shared 4 100 ---- - create object "4c52-2-000004.sst" - close writer for "4c52-2-000004.sst" after 100 bytes - create object "4c52-2-000004.sst.ref.2.000004" - close writer for "4c52-2-000004.sst.ref.2.000004" after 0 bytes + create object "4c52-2-000004.sst" + close writer for "4c52-2-000004.sst" after 100 bytes + create object "4c52-2-000004.sst.ref.2.000004" + close writer for "4c52-2-000004.sst.ref.2.000004" after 0 bytes attach b1 101 b2 102 ---- - create object "61a6-1-000001.sst.ref.2.000101" - close writer for "61a6-1-000001.sst.ref.2.000101" after 0 bytes - size of object "61a6-1-000001.sst.ref.1.000001": 0 - create object "a629-1-000002.sst.ref.2.000102" - close writer for "a629-1-000002.sst.ref.2.000102" after 0 bytes - size of object "a629-1-000002.sst.ref.1.000002": 0 + create object "61a6-1-000001.sst.ref.2.000101" + close writer for "61a6-1-000001.sst.ref.2.000101" after 0 bytes + size of object "61a6-1-000001.sst.ref.1.000001": 0 + create object "a629-1-000002.sst.ref.2.000102" + close writer for "a629-1-000002.sst.ref.2.000102" after 0 bytes + size of object "a629-1-000002.sst.ref.1.000002": 0 sync: p2/REMOTE-OBJ-CATALOG-000001 -000101 -> shared://61a6-1-000001.sst -000102 -> shared://a629-1-000002.sst +000101 -> remote://61a6-1-000001.sst +000102 -> remote://a629-1-000002.sst # Remove of object with no other refs; backing object should be removed. remove 4 ---- - delete object "4c52-2-000004.sst.ref.2.000004" - list (prefix="4c52-2-000004.sst.ref.", delimiter="") - delete object "4c52-2-000004.sst" + delete object "4c52-2-000004.sst.ref.2.000004" + list (prefix="4c52-2-000004.sst.ref.", delimiter="") + delete object "4c52-2-000004.sst" # Object shared with p2; backing object should not be removed. remove 101 ---- - delete object "61a6-1-000001.sst.ref.2.000101" - list (prefix="61a6-1-000001.sst.ref.", delimiter="") - - 61a6-1-000001.sst.ref.1.000001 + delete object "61a6-1-000001.sst.ref.2.000101" + list (prefix="61a6-1-000001.sst.ref.", delimiter="") + - 61a6-1-000001.sst.ref.1.000001 switch p1 ---- @@ -100,6 +100,6 @@ switch p2 remove 102 ---- - delete object "a629-1-000002.sst.ref.2.000102" - list (prefix="a629-1-000002.sst.ref.", delimiter="") - - a629-1-000002.sst.ref.1.000002 + delete object "a629-1-000002.sst.ref.2.000102" + list (prefix="a629-1-000002.sst.ref.", delimiter="") + - a629-1-000002.sst.ref.1.000002 diff --git a/open.go b/open.go index cba896d8e2..ecdd9843c7 100644 --- a/open.go +++ b/open.go @@ -297,10 +297,10 @@ func Open(dirname string, opts *Options) (db *DB, _ error) { NoSyncOnClose: opts.NoSyncOnClose, BytesPerSync: opts.BytesPerSync, } - providerSettings.Shared.StorageFactory = opts.Experimental.RemoteStorage - providerSettings.Shared.CreateOnShared = opts.Experimental.CreateOnShared - providerSettings.Shared.CreateOnSharedLocator = opts.Experimental.CreateOnSharedLocator - providerSettings.Shared.CacheSizeBytes = opts.Experimental.SecondaryCacheSize + providerSettings.Remote.StorageFactory = opts.Experimental.RemoteStorage + providerSettings.Remote.CreateOnShared = opts.Experimental.CreateOnShared + providerSettings.Remote.CreateOnSharedLocator = opts.Experimental.CreateOnSharedLocator + providerSettings.Remote.CacheSizeBytes = opts.Experimental.SecondaryCacheSize d.objProvider, err = objstorageprovider.Open(providerSettings) if err != nil {