Skip to content

Commit fae8465

Browse files
committed
kvserver,storage: pass Server's ExternalStorage factory to pebble
Release note: none. Epic: none.
1 parent d93799f commit fae8465

File tree

11 files changed

+54
-38
lines changed

11 files changed

+54
-38
lines changed

pkg/kv/kvserver/BUILD.bazel

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,6 @@ go_library(
108108
visibility = ["//visibility:public"],
109109
deps = [
110110
"//pkg/base",
111-
"//pkg/cloud",
112111
"//pkg/clusterversion",
113112
"//pkg/config",
114113
"//pkg/config/zonepb",
@@ -176,7 +175,6 @@ go_library(
176175
"//pkg/roachpb",
177176
"//pkg/rpc",
178177
"//pkg/rpc/nodedialer",
179-
"//pkg/security/username",
180178
"//pkg/server/status",
181179
"//pkg/server/telemetry",
182180
"//pkg/settings",
@@ -201,7 +199,6 @@ go_library(
201199
"//pkg/util/grunning",
202200
"//pkg/util/hlc",
203201
"//pkg/util/humanizeutil",
204-
"//pkg/util/ioctx",
205202
"//pkg/util/iterutil",
206203
"//pkg/util/limit",
207204
"//pkg/util/log",

pkg/kv/kvserver/app_batch.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ package kvserver
1313
import (
1414
"context"
1515

16-
"github.com/cockroachdb/cockroach/pkg/cloud"
1716
"github.com/cockroachdb/cockroach/pkg/kv/kvpb"
1817
"github.com/cockroachdb/cockroach/pkg/kv/kvserver/kvserverbase"
1918
"github.com/cockroachdb/cockroach/pkg/kv/kvserver/kvserverpb"
@@ -155,7 +154,6 @@ type postAddEnv struct {
155154
eng storage.Engine
156155
sideloaded logstore.SideloadStorage
157156
bulkLimiter *rate.Limiter
158-
external *cloud.ExternalStorageAccessor
159157
}
160158

161159
func (b *appBatch) runPostAddTriggers(

pkg/kv/kvserver/replica_app_batch.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,6 @@ func (b *replicaAppBatch) Stage(
149149
eng: b.r.store.TODOEngine(),
150150
sideloaded: b.r.raftMu.sideloaded,
151151
bulkLimiter: b.r.store.limiters.BulkIOWriteRate,
152-
external: b.r.store.cfg.ExternalStorage,
153152
}); err != nil {
154153
return nil, err
155154
}

pkg/kv/kvserver/replica_proposal.go

Lines changed: 20 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import (
1616
"path/filepath"
1717
"time"
1818

19-
"github.com/cockroachdb/cockroach/pkg/cloud"
2019
"github.com/cockroachdb/cockroach/pkg/keys"
2120
"github.com/cockroachdb/cockroach/pkg/kv/kvpb"
2221
"github.com/cockroachdb/cockroach/pkg/kv/kvserver/batcheval/result"
@@ -27,14 +26,12 @@ import (
2726
"github.com/cockroachdb/cockroach/pkg/kv/kvserver/readsummary/rspb"
2827
"github.com/cockroachdb/cockroach/pkg/kv/kvserver/uncertainty"
2928
"github.com/cockroachdb/cockroach/pkg/roachpb"
30-
"github.com/cockroachdb/cockroach/pkg/security/username"
3129
"github.com/cockroachdb/cockroach/pkg/settings/cluster"
3230
"github.com/cockroachdb/cockroach/pkg/storage"
3331
"github.com/cockroachdb/cockroach/pkg/storage/enginepb"
3432
"github.com/cockroachdb/cockroach/pkg/util"
3533
"github.com/cockroachdb/cockroach/pkg/util/hlc"
3634
"github.com/cockroachdb/cockroach/pkg/util/humanizeutil"
37-
"github.com/cockroachdb/cockroach/pkg/util/ioctx"
3835
"github.com/cockroachdb/cockroach/pkg/util/log"
3936
"github.com/cockroachdb/cockroach/pkg/util/quotapool"
4037
"github.com/cockroachdb/cockroach/pkg/util/timeutil"
@@ -622,29 +619,26 @@ func addSSTablePreApply(
622619
sst kvserverpb.ReplicatedEvalResult_AddSSTable,
623620
) bool {
624621
if sst.RemoteFilePath != "" {
625-
// TODO(dt, bilal, msbutler): Replace this with eng.IngestRemoteFile()
626-
log.Warningf(ctx, "EXPERIMENTAL AddSSTABLE REMOTE FILE UNSUPPORTED; downloading %s ("+
627-
"with size %d) from %s and adding it whole, ignoring span %s", sst.RemoteFilePath,
628-
sst.BackingFileSize, sst.RemoteFileLoc, sst.Span)
629-
s, err := env.external.OpenURL(ctx, sst.RemoteFileLoc, username.SQLUsername{})
630-
if err != nil {
631-
log.Fatalf(ctx, "failed to open remote location %q below raft: %v", sst.RemoteFileLoc, err)
632-
}
633-
r, _, err := s.ReadFile(ctx, sst.RemoteFilePath, cloud.ReadOptions{})
634-
if err != nil {
635-
log.Fatalf(ctx, "failed to open remote file path %q in %q below raft: %v", sst.RemoteFilePath, sst.RemoteFileLoc, err)
636-
}
637-
content, err := ioctx.ReadAll(ctx, r)
638-
r.Close(ctx)
639-
if err != nil {
640-
log.Fatalf(ctx, "failed to read remote file %q in %q below raft: %v", sst.RemoteFilePath, sst.RemoteFileLoc, err)
641-
}
642-
sst.Data = content
643-
sst.CRC32 = util.CRC32(content)
644-
log.Infof(ctx, "Unsupported RemoteFile AddSSTABLE downloaded %q, read %d bytes", sst.RemoteFileLoc, len(content))
645-
if err := env.sideloaded.Put(ctx, index, term, content); err != nil {
646-
log.Fatalf(ctx, "failed to write downloaded remote file %q in %q below raft: %v", sst.RemoteFilePath, sst.RemoteFileLoc, err)
647-
}
622+
log.Infof(ctx,
623+
"EXPERIMENTAL AddSSTABLE EXTERNAL %s (size %d, span %s) from %s",
624+
sst.RemoteFilePath,
625+
sst.BackingFileSize,
626+
sst.Span,
627+
sst.RemoteFileLoc,
628+
)
629+
// TODO(bilal): replace this with the real ingest.
630+
/*
631+
start := storage.EngineKey{Key: sst.Span.Key}
632+
end := storage.EngineKey{Key: sst.Span.EndKey}
633+
634+
externalFile := pebble.ExternalFile{
635+
Locator: shared.Locator(sst.RemoteFileLoc),
636+
ObjName: sst.RemoteFilePath,
637+
Size: sst.BackingFileSize,
638+
SmallestUserKey: start.Encode(),
639+
LargestUserKey: end.Encode(),
640+
}*/
641+
log.Fatalf(ctx, "Unsupported IngestRemoteFile")
648642
}
649643
checksum := util.CRC32(sst.Data)
650644

pkg/kv/kvserver/store.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import (
2525
"time"
2626

2727
"github.com/cockroachdb/cockroach/pkg/base"
28-
"github.com/cockroachdb/cockroach/pkg/cloud"
2928
"github.com/cockroachdb/cockroach/pkg/clusterversion"
3029
"github.com/cockroachdb/cockroach/pkg/config"
3130
"github.com/cockroachdb/cockroach/pkg/config/zonepb"
@@ -1224,8 +1223,6 @@ type StoreConfig struct {
12241223

12251224
// RangeLogWriter is used to write entries to the system.rangelog table.
12261225
RangeLogWriter RangeLogWriter
1227-
1228-
ExternalStorage *cloud.ExternalStorageAccessor
12291226
}
12301227

12311228
// logRangeAndNodeEventsEnabled is used to enable or disable logging range events

pkg/server/config.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,7 @@ type BaseConfig struct {
236236

237237
// SharedStorage is specified to enable disaggregated shared storage.
238238
SharedStorage string
239+
*cloud.ExternalStorageAccessor
239240

240241
// StartDiagnosticsReporting starts the asynchronous goroutine that
241242
// checks for CockroachDB upgrades and periodically reports
@@ -310,6 +311,7 @@ func (cfg *BaseConfig) SetDefaults(
310311
cfg.AmbientCtx.AddLogTag("n", cfg.IDContainer)
311312
cfg.Config.InitDefaults()
312313
cfg.InitTestingKnobs()
314+
cfg.ExternalStorageAccessor = cloud.NewExternalStorageAccessor()
313315
}
314316

315317
// InitTestingKnobs sets up any testing knobs based on e.g. envvars.
@@ -823,6 +825,7 @@ func (cfg *Config) CreateEngines(ctx context.Context) (Engines, error) {
823825
// TODO(radu): move up all remaining settings below so they apply to in-memory stores as well.
824826
addCfgOpt(storage.MaxOpenFiles(int(openFileLimitPerStore)))
825827
addCfgOpt(storage.MaxWriterConcurrency(2))
828+
addCfgOpt(storage.RemoteStorageFactory(cfg.ExternalStorageAccessor))
826829
if sharedStorage != nil {
827830
addCfgOpt(storage.SharedStorage(sharedStorage))
828831
}

pkg/server/config_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,8 @@ func TestReadEnvironmentVariables(t *testing.T) {
130130
cfg.AmbientCtx.Tracer = nil
131131
cfgExpected.Tracer = nil
132132
cfgExpected.AmbientCtx.Tracer = nil
133+
cfg.ExternalStorageAccessor = nil
134+
cfgExpected.ExternalStorageAccessor = nil
133135
// Temp storage disk monitors will have slightly different names, so we
134136
// override them to point to the same one.
135137
cfgExpected.TempStorageConfig.Mon = cfg.TempStorageConfig.Mon

pkg/server/server.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import (
2525
"github.com/cockroachdb/cockroach/pkg/blobs"
2626
"github.com/cockroachdb/cockroach/pkg/blobs/blobspb"
2727
"github.com/cockroachdb/cockroach/pkg/build"
28-
"github.com/cockroachdb/cockroach/pkg/cloud"
2928
"github.com/cockroachdb/cockroach/pkg/clusterversion"
3029
"github.com/cockroachdb/cockroach/pkg/gossip"
3130
"github.com/cockroachdb/cockroach/pkg/inspectz"
@@ -865,7 +864,6 @@ func NewServer(cfg Config, stopper *stop.Stopper) (*Server, error) {
865864
KVFlowHandles: admissionControl.storesFlowControl,
866865
KVFlowHandleMetrics: admissionControl.kvFlowHandleMetrics,
867866
SchedulerLatencyListener: admissionControl.schedulerLatencyListener,
868-
ExternalStorage: cloud.NewExternalStorageAccessor(),
869867
}
870868
if storeTestingKnobs := cfg.TestingKnobs.Store; storeTestingKnobs != nil {
871869
storeCfg.TestingKnobs = *storeTestingKnobs.(*kvserver.StoreTestingKnobs)
@@ -2059,7 +2057,7 @@ func (s *Server) PreStart(ctx context.Context) error {
20592057
nil, /* TenantExternalIORecorder */
20602058
s.registry,
20612059
)
2062-
if err := s.node.storeCfg.ExternalStorage.Init(
2060+
if err := s.cfg.ExternalStorageAccessor.Init(
20632061
s.externalStorageBuilder.makeExternalStorage, s.externalStorageBuilder.makeExternalStorageFromURI,
20642062
); err != nil {
20652063
return err

pkg/storage/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ go_library(
5656
"//pkg/kv/kvserver/diskmap",
5757
"//pkg/kv/kvserver/uncertainty",
5858
"//pkg/roachpb",
59+
"//pkg/security/username",
5960
"//pkg/settings",
6061
"//pkg/settings/cluster",
6162
"//pkg/sql/catalog/fetchpb",

pkg/storage/open.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,14 @@ func SharedStorage(sharedStorage cloud.ExternalStorage) ConfigOption {
185185
}
186186
}
187187

188+
// RemoteStorageFactory enables use of remote storage (experimental).
189+
func RemoteStorageFactory(accessor *cloud.ExternalStorageAccessor) ConfigOption {
190+
return func(cfg *engineConfig) error {
191+
cfg.RemoteStorageFactory = accessor
192+
return nil
193+
}
194+
}
195+
188196
// MaxConcurrentCompactions configures the maximum number of concurrent
189197
// compactions an Engine will execute.
190198
func MaxConcurrentCompactions(n int) ConfigOption {

0 commit comments

Comments
 (0)