Skip to content

Commit 456a2a2

Browse files
committed
objstorage: rename Shared to Remote in the objstorage provider API
`IsShared()` is split into `IsRemote()`, `IsShared()`, `IsExternal()`.
1 parent fb76a24 commit 456a2a2

File tree

15 files changed

+198
-183
lines changed

15 files changed

+198
-183
lines changed

cleaner.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,8 +181,8 @@ func (cm *cleanupManager) needsPacing(fileType base.FileType, fileNum base.DiskF
181181
// delete anything, so we don't need to pace.
182182
return false
183183
}
184-
// Don't throttle deletion of shared objects.
185-
return !meta.IsShared()
184+
// Don't throttle deletion of remote objects.
185+
return !meta.IsRemote()
186186
}
187187

188188
// maybePace sleeps before deleting an object if appropriate. It is always

db.go

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2005,15 +2005,17 @@ func (d *DB) SSTables(opts ...SSTablesOption) ([][]SSTableInfo, error) {
20052005
if err != nil {
20062006
return nil, err
20072007
}
2008-
if objMeta.IsShared() {
2009-
if d.objProvider.IsForeign(objMeta) {
2010-
destTables[j].BackingType = BackingTypeSharedForeign
2011-
} else if objMeta.Shared.CleanupMethod == objstorage.SharedNoCleanup {
2012-
destTables[j].BackingType = BackingTypeExternal
2008+
if objMeta.IsRemote() {
2009+
if objMeta.IsShared() {
2010+
if d.objProvider.IsForeign(objMeta) {
2011+
destTables[j].BackingType = BackingTypeSharedForeign
2012+
} else {
2013+
destTables[j].BackingType = BackingTypeShared
2014+
}
20132015
} else {
2014-
destTables[j].BackingType = BackingTypeShared
2016+
destTables[j].BackingType = BackingTypeExternal
20152017
}
2016-
destTables[j].Locator = objMeta.Shared.Locator
2018+
destTables[j].Locator = objMeta.Remote.Locator
20172019
} else {
20182020
destTables[j].BackingType = BackingTypeLocal
20192021
}
@@ -2102,9 +2104,9 @@ func (d *DB) EstimateDiskUsageByBackingType(
21022104
if err != nil {
21032105
return 0, 0, 0, err
21042106
}
2105-
if meta.IsShared() {
2107+
if meta.IsRemote() {
21062108
remoteSize += file.Size
2107-
if meta.Shared.CleanupMethod == objstorage.SharedNoCleanup {
2109+
if meta.Remote.CleanupMethod == objstorage.SharedNoCleanup {
21082110
externalSize += file.Size
21092111
}
21102112
}
@@ -2137,9 +2139,9 @@ func (d *DB) EstimateDiskUsageByBackingType(
21372139
if err != nil {
21382140
return 0, 0, 0, err
21392141
}
2140-
if meta.IsShared() {
2142+
if meta.IsRemote() {
21412143
remoteSize += size
2142-
if meta.Shared.CleanupMethod == objstorage.SharedNoCleanup {
2144+
if meta.Remote.CleanupMethod == objstorage.SharedNoCleanup {
21432145
externalSize += size
21442146
}
21452147
}

ingest.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -449,19 +449,19 @@ func ingestLink(
449449
})
450450
}
451451
}
452-
sharedObjs := make([]objstorage.SharedObjectToAttach, 0, len(shared))
452+
sharedObjs := make([]objstorage.RemoteObjectToAttach, 0, len(shared))
453453
for i := range shared {
454454
backing, err := shared[i].Backing.Get()
455455
if err != nil {
456456
return err
457457
}
458-
sharedObjs = append(sharedObjs, objstorage.SharedObjectToAttach{
458+
sharedObjs = append(sharedObjs, objstorage.RemoteObjectToAttach{
459459
FileNum: lr.sharedMeta[i].FileBacking.DiskFileNum,
460460
FileType: fileTypeTable,
461461
Backing: backing,
462462
})
463463
}
464-
sharedObjMetas, err := objProvider.AttachSharedObjects(sharedObjs)
464+
sharedObjMetas, err := objProvider.AttachRemoteObjects(sharedObjs)
465465
if err != nil {
466466
return err
467467
}
@@ -473,7 +473,7 @@ func ingestLink(
473473
// open the db again after a crash/restart (see checkConsistency in open.go),
474474
// plus it more accurately allows us to prioritize compactions of files
475475
// that were originally created by us.
476-
if !objProvider.IsForeign(sharedObjMetas[i]) {
476+
if sharedObjMetas[i].IsShared() && !objProvider.IsForeign(sharedObjMetas[i]) {
477477
size, err := objProvider.Size(sharedObjMetas[i])
478478
if err != nil {
479479
return err

ingest_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1092,7 +1092,7 @@ func TestSimpleIngestShared(t *testing.T) {
10921092
}
10931093

10941094
m := metaMap[base.FileNum(2).DiskFileNum()]
1095-
handle, err := provider2.SharedObjectBacking(&m)
1095+
handle, err := provider2.RemoteObjectBacking(&m)
10961096
require.NoError(t, err)
10971097
size, err := provider2.Size(m)
10981098
require.NoError(t, err)

objstorage/objstorage.go

Lines changed: 45 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,8 @@ type ObjectMetadata struct {
8989
DiskFileNum base.DiskFileNum
9090
FileType base.FileType
9191

92-
// The fields below are only set if the object is on shared storage.
93-
Shared struct {
92+
// The fields below are only set if the object is on remote storage.
93+
Remote struct {
9494
// CreatorID identifies the DB instance that originally created the object.
9595
//
9696
// Only used when CustomObjectName is not set.
@@ -113,31 +113,44 @@ type ObjectMetadata struct {
113113
}
114114
}
115115

116-
// IsShared returns true if the object is on shared storage.
116+
// IsRemote returns true if the object is on remote storage.
117+
func (meta *ObjectMetadata) IsRemote() bool {
118+
return meta.IsShared() || meta.IsExternal()
119+
}
120+
121+
// IsExternal returns true if the object is on remote storage but is not owned
122+
// by any Pebble instances in the cluster.
123+
func (meta *ObjectMetadata) IsExternal() bool {
124+
return meta.Remote.CustomObjectName != ""
125+
}
126+
127+
// IsShared returns true if the object is on remote storage and is owned by a
128+
// Pebble instance in the cluster (potentially shared between multiple
129+
// instances).
117130
func (meta *ObjectMetadata) IsShared() bool {
118-
return meta.Shared.CreatorID.IsSet() || meta.Shared.CustomObjectName != ""
131+
return meta.Remote.CreatorID.IsSet()
119132
}
120133

121134
// AssertValid checks that the metadata is sane.
122135
func (meta *ObjectMetadata) AssertValid() {
123-
if !meta.IsShared() {
124-
// Verify all Shared fields are empty.
125-
if meta.Shared != (ObjectMetadata{}).Shared {
126-
panic(errors.AssertionFailedf("meta.Shared not empty: %#v", meta.Shared))
136+
if !meta.IsRemote() {
137+
// Verify all Remote fields are empty.
138+
if meta.Remote != (ObjectMetadata{}).Remote {
139+
panic(errors.AssertionFailedf("meta.Remote not empty: %#v", meta.Remote))
127140
}
128141
} else {
129-
if meta.Shared.CustomObjectName != "" {
130-
if meta.Shared.CreatorID == 0 {
142+
if meta.Remote.CustomObjectName != "" {
143+
if meta.Remote.CreatorID == 0 {
131144
panic(errors.AssertionFailedf("CreatorID not set"))
132145
}
133-
if meta.Shared.CreatorFileNum == base.FileNum(0).DiskFileNum() {
146+
if meta.Remote.CreatorFileNum == base.FileNum(0).DiskFileNum() {
134147
panic(errors.AssertionFailedf("CreatorFileNum not set"))
135148
}
136149
}
137-
if meta.Shared.CleanupMethod != SharedNoCleanup && meta.Shared.CleanupMethod != SharedRefTracking {
138-
panic(errors.AssertionFailedf("invalid CleanupMethod %d", meta.Shared.CleanupMethod))
150+
if meta.Remote.CleanupMethod != SharedNoCleanup && meta.Remote.CleanupMethod != SharedRefTracking {
151+
panic(errors.AssertionFailedf("invalid CleanupMethod %d", meta.Remote.CleanupMethod))
139152
}
140-
if meta.Shared.Storage == nil {
153+
if meta.Remote.Storage == nil {
141154
panic(errors.AssertionFailedf("Storage not set"))
142155
}
143156
}
@@ -161,7 +174,7 @@ const (
161174
// keep track of references via reference marker objects.
162175
SharedRefTracking SharedCleanupMethod = iota
163176

164-
// SharedNoCleanup is used for shared objects that are managed externally; the
177+
// SharedNoCleanup is used for remote objects that are managed externally; the
165178
// objstorage provider never deletes such objects.
166179
SharedNoCleanup
167180
)
@@ -249,7 +262,7 @@ type Provider interface {
249262
List() []ObjectMetadata
250263

251264
// SetCreatorID sets the CreatorID which is needed in order to use shared
252-
// objects. Shared object usage is disabled until this method is called the
265+
// objects. Remote object usage is disabled until this method is called the
253266
// first time. Once set, the Creator ID is persisted and cannot change.
254267
//
255268
// Cannot be called if shared storage is not configured for the provider.
@@ -260,16 +273,16 @@ type Provider interface {
260273
// exist in this provider.
261274
IsForeign(meta ObjectMetadata) bool
262275

263-
// SharedObjectBacking encodes the shared object metadata for the given object.
264-
SharedObjectBacking(meta *ObjectMetadata) (SharedObjectBackingHandle, error)
276+
// RemoteObjectBacking encodes the remote object metadata for the given object.
277+
RemoteObjectBacking(meta *ObjectMetadata) (RemoteObjectBackingHandle, error)
265278

266-
// CreateSharedObjectBacking creates a backing for an existing object with a
279+
// CreateExternalObjectBacking creates a backing for an existing object with a
267280
// custom object name. The object is considered to be managed outside of
268281
// Pebble and will never be removed by Pebble.
269-
CreateSharedObjectBacking(locator shared.Locator, objName string) (SharedObjectBacking, error)
282+
CreateExternalObjectBacking(locator shared.Locator, objName string) (RemoteObjectBacking, error)
270283

271-
// AttachSharedObjects registers existing shared objects with this provider.
272-
AttachSharedObjects(objs []SharedObjectToAttach) ([]ObjectMetadata, error)
284+
// AttachRemoteObjects registers existing remote objects with this provider.
285+
AttachRemoteObjects(objs []RemoteObjectToAttach) ([]ObjectMetadata, error)
273286

274287
Close() error
275288

@@ -278,31 +291,31 @@ type Provider interface {
278291
IsNotExistError(err error) bool
279292
}
280293

281-
// SharedObjectBacking encodes the metadata necessary to incorporate a shared
294+
// RemoteObjectBacking encodes the metadata necessary to incorporate a shared
282295
// object into a different Pebble instance. The encoding is specific to a given
283296
// Provider implementation.
284-
type SharedObjectBacking []byte
297+
type RemoteObjectBacking []byte
285298

286-
// SharedObjectBackingHandle is a container for a SharedObjectBacking which
299+
// RemoteObjectBackingHandle is a container for a RemoteObjectBacking which
287300
// ensures that the backing stays valid. A backing can otherwise become invalid
288-
// if this provider unrefs the shared object. The SharedObjectBackingHandle
301+
// if this provider unrefs the shared object. The RemoteObjectBackingHandle
289302
// delays any unref until Close.
290-
type SharedObjectBackingHandle interface {
303+
type RemoteObjectBackingHandle interface {
291304
// Get returns the backing. The backing is only guaranteed to be valid until
292305
// Close is called (or until the Provider is closed). If Close was already
293306
// called, returns an error.
294-
Get() (SharedObjectBacking, error)
307+
Get() (RemoteObjectBacking, error)
295308
Close()
296309
}
297310

298-
// SharedObjectToAttach contains the arguments needed to attach an existing shared object.
299-
type SharedObjectToAttach struct {
311+
// RemoteObjectToAttach contains the arguments needed to attach an existing remote object.
312+
type RemoteObjectToAttach struct {
300313
// FileNum is the file number that will be used to refer to this object (in
301314
// the context of this instance).
302315
FileNum base.DiskFileNum
303316
FileType base.FileType
304-
// Backing contains the metadata for the shared object backing (normally
317+
// Backing contains the metadata for the remote object backing (normally
305318
// generated from a different instance, but using the same Provider
306319
// implementation).
307-
Backing SharedObjectBacking
320+
Backing RemoteObjectBacking
308321
}

objstorage/objstorageprovider/provider.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ func (p *provider) OpenForReading(
214214
}
215215

216216
var r objstorage.Readable
217-
if !meta.IsShared() {
217+
if !meta.IsRemote() {
218218
r, err = p.vfsOpenForReading(ctx, fileType, fileNum, opts)
219219
} else {
220220
r, err = p.sharedOpenForReading(ctx, meta, opts)
@@ -271,7 +271,7 @@ func (p *provider) Remove(fileType base.FileType, fileNum base.DiskFileNum) erro
271271
return err
272272
}
273273

274-
if !meta.IsShared() {
274+
if !meta.IsRemote() {
275275
err = p.vfsRemove(fileType, fileNum)
276276
} else {
277277
// TODO(radu): implement shared object removal (i.e. deref).
@@ -293,8 +293,8 @@ func (p *provider) Remove(fileType base.FileType, fileNum base.DiskFileNum) erro
293293
}
294294

295295
func (p *provider) isNotExistError(meta objstorage.ObjectMetadata, err error) bool {
296-
if meta.Shared.Storage != nil {
297-
return meta.Shared.Storage.IsNotExistError(err)
296+
if meta.Remote.Storage != nil {
297+
return meta.Remote.Storage.IsNotExistError(err)
298298
}
299299
return oserror.IsNotExist(err)
300300
}
@@ -411,15 +411,15 @@ func (p *provider) Lookup(
411411

412412
// Path is part of the objstorage.Provider interface.
413413
func (p *provider) Path(meta objstorage.ObjectMetadata) string {
414-
if !meta.IsShared() {
414+
if !meta.IsRemote() {
415415
return p.vfsPath(meta.FileType, meta.DiskFileNum)
416416
}
417417
return p.sharedPath(meta)
418418
}
419419

420420
// Size returns the size of the object.
421421
func (p *provider) Size(meta objstorage.ObjectMetadata) (int64, error) {
422-
if !meta.IsShared() {
422+
if !meta.IsRemote() {
423423
return p.vfsSize(meta.FileType, meta.DiskFileNum)
424424
}
425425
return p.sharedSize(meta)
@@ -446,14 +446,14 @@ func (p *provider) addMetadata(meta objstorage.ObjectMetadata) {
446446
p.mu.Lock()
447447
defer p.mu.Unlock()
448448
p.mu.knownObjects[meta.DiskFileNum] = meta
449-
if meta.IsShared() {
449+
if meta.IsRemote() {
450450
p.mu.shared.catalogBatch.AddObject(sharedobjcat.SharedObjectMetadata{
451451
FileNum: meta.DiskFileNum,
452452
FileType: meta.FileType,
453-
CreatorID: meta.Shared.CreatorID,
454-
CreatorFileNum: meta.Shared.CreatorFileNum,
455-
Locator: meta.Shared.Locator,
456-
CleanupMethod: meta.Shared.CleanupMethod,
453+
CreatorID: meta.Remote.CreatorID,
454+
CreatorFileNum: meta.Remote.CreatorFileNum,
455+
Locator: meta.Remote.Locator,
456+
CleanupMethod: meta.Remote.CleanupMethod,
457457
})
458458
} else {
459459
p.mu.localObjectsChanged = true
@@ -469,7 +469,7 @@ func (p *provider) removeMetadata(fileNum base.DiskFileNum) {
469469
return
470470
}
471471
delete(p.mu.knownObjects, fileNum)
472-
if meta.IsShared() {
472+
if meta.IsRemote() {
473473
p.mu.shared.catalogBatch.DeleteObject(fileNum)
474474
} else {
475475
p.mu.localObjectsChanged = true

0 commit comments

Comments
 (0)