From 523550f7da5cfb4991f7e0e3a175745607d65e57 Mon Sep 17 00:00:00 2001 From: Andrew Baptist Date: Wed, 29 Jan 2025 09:43:12 -0500 Subject: [PATCH] storage: move ExternalIODir into StorageConfig Previously the ExternalIODir was stored as a variable inside the BaseConfig struct and updated based on the StoreSpecs if it wasn't explicitly set. This commit moves it into the StorageConfig and removes it from the BaseConfig. Epic: CRDB-41111 Release note: None --- pkg/backup/BUILD.bazel | 1 + pkg/backup/alter_backup_schedule_test.go | 3 +- pkg/backup/backup_test.go | 75 +++++++++++-------- pkg/backup/backuprand/BUILD.bazel | 1 + pkg/backup/backuprand/backup_rand_test.go | 3 +- pkg/backup/backuptestutils/testutils.go | 4 +- pkg/backup/create_scheduled_backup_test.go | 3 +- pkg/backup/restore_data_processor_test.go | 5 +- pkg/backup/restore_mid_schema_change_test.go | 3 +- pkg/backup/restore_multiregion_rbr_test.go | 3 +- pkg/backup/show_test.go | 5 +- pkg/base/test_server_args.go | 9 +-- pkg/ccl/changefeedccl/BUILD.bazel | 1 + pkg/ccl/changefeedccl/changefeed_test.go | 11 +-- pkg/ccl/changefeedccl/helpers_test.go | 5 +- pkg/ccl/cloudccl/amazon/BUILD.bazel | 1 + pkg/ccl/cloudccl/amazon/s3_connection_test.go | 7 +- pkg/ccl/cloudccl/azure/BUILD.bazel | 1 + .../cloudccl/azure/azure_connection_test.go | 3 +- pkg/ccl/cloudccl/externalconn/BUILD.bazel | 1 + .../cloudccl/externalconn/datadriven_test.go | 3 +- pkg/ccl/cloudccl/gcp/BUILD.bazel | 1 + pkg/ccl/cloudccl/gcp/gcp_connection_test.go | 9 ++- pkg/ccl/importerccl/BUILD.bazel | 1 + pkg/ccl/importerccl/ccl_test.go | 7 +- .../multiregionccltestutils/BUILD.bazel | 1 + .../multiregionccltestutils/testutils.go | 3 +- .../tenantcostclient/BUILD.bazel | 1 + .../tenantcostclient/tenant_side_test.go | 5 +- pkg/ccl/serverccl/BUILD.bazel | 1 + pkg/ccl/serverccl/admin_test.go | 4 +- pkg/ccl/serverccl/server_controller_test.go | 7 +- .../spanconfigsqlwatcherccl/BUILD.bazel | 1 + .../sqlwatcher_test.go | 3 +- pkg/ccl/telemetryccl/BUILD.bazel | 1 + .../telemetryccl/telemetry_logging_test.go | 3 +- pkg/ccl/utilccl/sampledataccl/BUILD.bazel | 1 + pkg/ccl/utilccl/sampledataccl/bankdata.go | 6 +- pkg/cli/context.go | 5 -- pkg/cli/democluster/BUILD.bazel | 2 + pkg/cli/democluster/demo_cluster.go | 17 +++-- pkg/cli/democluster/demo_cluster_test.go | 5 +- pkg/cli/flags.go | 55 +++++++++----- pkg/cli/start.go | 10 +-- pkg/cli/start_test.go | 4 +- pkg/cli/testutils.go | 5 +- .../logical/logical_replication_job_test.go | 4 +- pkg/crosscluster/physical/datadriven_test.go | 2 +- .../replicationtestutils/BUILD.bazel | 1 + .../replicationtestutils/testutils.go | 5 +- pkg/kv/kvserver/batcheval/BUILD.bazel | 1 + pkg/kv/kvserver/batcheval/cmd_export_test.go | 3 +- pkg/server/config.go | 6 +- pkg/server/server.go | 4 +- pkg/server/server_controller_new_server.go | 4 +- pkg/server/tenant.go | 2 +- pkg/server/testserver.go | 12 +-- pkg/sql/importer/BUILD.bazel | 1 + pkg/sql/importer/exportcsv_test.go | 25 ++++--- pkg/sql/importer/exportparquet_test.go | 7 +- pkg/sql/importer/import_into_test.go | 3 +- pkg/sql/importer/import_stmt_test.go | 63 ++++++++-------- pkg/sql/importer/read_import_pgdump_test.go | 3 +- pkg/sql/logictest/BUILD.bazel | 1 + pkg/sql/logictest/logic.go | 5 +- pkg/sql/sqltestutils/telemetry.go | 2 +- pkg/sql/tests/BUILD.bazel | 1 + pkg/sql/tests/copy_file_upload_test.go | 13 ++-- pkg/storage/storagepb/storage.proto | 6 ++ 69 files changed, 282 insertions(+), 198 deletions(-) diff --git a/pkg/backup/BUILD.bazel b/pkg/backup/BUILD.bazel index 0f2bb759453f..872437c6cd23 100644 --- a/pkg/backup/BUILD.bazel +++ b/pkg/backup/BUILD.bazel @@ -289,6 +289,7 @@ go_test( "//pkg/sql/sqlliveness/slbase", "//pkg/sql/stats", "//pkg/storage", + "//pkg/storage/storagepb", "//pkg/testutils", "//pkg/testutils/datapathutils", "//pkg/testutils/fingerprintutils", diff --git a/pkg/backup/alter_backup_schedule_test.go b/pkg/backup/alter_backup_schedule_test.go index a2f5bcaf95ee..6b286c8e1147 100644 --- a/pkg/backup/alter_backup_schedule_test.go +++ b/pkg/backup/alter_backup_schedule_test.go @@ -17,6 +17,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/jobs/jobstest" "github.com/cockroachdb/cockroach/pkg/scheduledjobs" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" "github.com/cockroachdb/cockroach/pkg/testutils/sqlutils" @@ -71,7 +72,7 @@ func newAlterSchedulesTestHelper( } args := base.TestServerArgs{ - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, Knobs: base.TestingKnobs{ JobsTestingKnobs: knobs, }, diff --git a/pkg/backup/backup_test.go b/pkg/backup/backup_test.go index d00d187987e1..bcc69c2a305b 100644 --- a/pkg/backup/backup_test.go +++ b/pkg/backup/backup_test.go @@ -82,6 +82,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/sem/eval" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/stats" + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/fingerprintutils" "github.com/cockroachdb/cockroach/pkg/testutils/jobutils" @@ -457,28 +458,28 @@ func TestBackupRestoreExecLocality(t *testing.T) { }, ServerArgsPerNode: map[int]base.TestServerArgs{ 0: { - ExternalIODir: "/west0", + StorageConfig: storagepb.NodeConfig{ExternalIODir: "/west0"}, Locality: roachpb.Locality{Tiers: []roachpb.Tier{ {Key: "tier", Value: "0"}, {Key: "region", Value: "west"}, }}, }, 1: { - ExternalIODir: "/west1", + StorageConfig: storagepb.NodeConfig{ExternalIODir: "/west1"}, Locality: roachpb.Locality{Tiers: []roachpb.Tier{ {Key: "tier", Value: "1"}, {Key: "region", Value: "west"}, }}, }, 2: { - ExternalIODir: "/east0", + StorageConfig: storagepb.NodeConfig{ExternalIODir: "/east0"}, Locality: roachpb.Locality{Tiers: []roachpb.Tier{ {Key: "tier", Value: "0"}, {Key: "region", Value: "east"}, }}, }, 3: { - ExternalIODir: "/east1", + StorageConfig: storagepb.NodeConfig{ExternalIODir: "/east1"}, Locality: roachpb.Locality{Tiers: []roachpb.Tier{ {Key: "tier", Value: "1"}, {Key: "region", Value: "east"}, @@ -2781,7 +2782,7 @@ func TestBackupRestoreCrossTableReferences(t *testing.T) { _, origDB, dir, cleanupFn := backupRestoreTestSetup(t, singleNode, numAccounts, InitManualReplication) defer cleanupFn() args := base.TestServerArgs{ - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, } // Generate some testdata and back it up. @@ -3141,7 +3142,9 @@ func TestBackupRestoreIncremental(t *testing.T) { tc, sqlDB, dir, cleanupFn := backupRestoreTestSetup(t, singleNode, 0, InitManualReplication) defer cleanupFn() - args := base.TestServerArgs{ExternalIODir: dir} + args := base.TestServerArgs{ + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, + } rng, _ := randutil.NewTestRand() backupDir := "nodelocal://1/backup" @@ -4028,11 +4031,14 @@ func TestNonLinearChain(t *testing.T) { dir, cleanup := testutils.TempDir(t) defer cleanup() - tc := testcluster.NewTestCluster(t, 1, base.TestClusterArgs{ServerArgs: base.TestServerArgs{ - DefaultTestTenant: base.TODOTestTenantDisabled, ExternalIODir: dir, Knobs: base.TestingKnobs{ - JobsTestingKnobs: jobs.NewTestingKnobsWithShortIntervals(), - }, - }}) + tc := testcluster.NewTestCluster(t, 1, base.TestClusterArgs{ + ServerArgs: base.TestServerArgs{ + DefaultTestTenant: base.TODOTestTenantDisabled, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, + Knobs: base.TestingKnobs{ + JobsTestingKnobs: jobs.NewTestingKnobsWithShortIntervals(), + }, + }}) tc.Start(t) defer tc.Stopper().Stop(context.Background()) @@ -4647,7 +4653,7 @@ func TestRestoredPrivileges(t *testing.T) { const numAccounts = 1 _, sqlDB, dir, cleanupFn := backupRestoreTestSetup(t, singleNode, numAccounts, InitManualReplication) defer cleanupFn() - args := base.TestServerArgs{ExternalIODir: dir} + args := base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}} rootOnly := sqlDB.QueryStr(t, `SHOW GRANTS ON data.bank`) @@ -4725,7 +4731,9 @@ func TestRestoreDatabaseVersusTable(t *testing.T) { tc, origDB, _, cleanupFn := backupRestoreTestSetup(t, singleNode, numAccounts, InitManualReplication) defer cleanupFn() s := tc.ApplicationLayer(0) - args := base.TestServerArgs{ExternalIODir: s.ExternalIODir()} + args := base.TestServerArgs{ + StorageConfig: storagepb.NodeConfig{ExternalIODir: s.ExternalIODir()}, + } for _, q := range []string{ `CREATE DATABASE d2`, @@ -5201,7 +5209,7 @@ func TestBackupRestoreSequence(t *testing.T) { _, origDB, dir, cleanupFn := backupRestoreTestSetup(t, singleNode, numAccounts, InitManualReplication) defer cleanupFn() args := base.TestServerArgs{ - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, } backupLoc := localFoo @@ -5416,7 +5424,9 @@ func TestBackupRestoreSequenceOwnership(t *testing.T) { const numAccounts = 1 _, origDB, dir, cleanupFn := backupRestoreTestSetup(t, singleNode, numAccounts, InitManualReplication) defer cleanupFn() - args := base.TestServerArgs{ExternalIODir: dir} + args := base.TestServerArgs{ + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, + } // Setup for sequence ownership backup/restore tests in the same database. backupLoc := localFoo + `/d` @@ -6026,7 +6036,7 @@ func TestProtectedTimestampsDuringBackup(t *testing.T) { dir, dirCleanupFn := testutils.TempDir(t) defer dirCleanupFn() params := base.TestClusterArgs{} - params.ServerArgs.ExternalIODir = dir + params.ServerArgs.StorageConfig.ExternalIODir = dir params.ServerArgs.Knobs.JobsTestingKnobs = jobs.NewTestingKnobsWithShortIntervals() params.ServerArgs.DefaultTestTenant = base.TestControlsTenantsExplicitly tc := testcluster.StartTestCluster(t, 1, params) @@ -6344,7 +6354,7 @@ func TestRestoreErrorPropagates(t *testing.T) { params := base.TestClusterArgs{ ServerArgs: base.TestServerArgs{ - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, Knobs: base.TestingKnobs{ Store: &kvserver.StoreTestingKnobs{ TestingRequestFilter: func(ctx context.Context, ba *kvpb.BatchRequest) *kvpb.Error { @@ -6391,7 +6401,7 @@ func TestProtectedTimestampsFailDueToLimits(t *testing.T) { dir, dirCleanupFn := testutils.TempDir(t) defer dirCleanupFn() params := base.TestClusterArgs{} - params.ServerArgs.ExternalIODir = dir + params.ServerArgs.StorageConfig.ExternalIODir = dir params.ServerArgs.Knobs.ProtectedTS = &protectedts.TestingKnobs{ // The meta table is used to track limits. UseMetaTable: true, @@ -6412,7 +6422,7 @@ func TestProtectedTimestampsFailDueToLimits(t *testing.T) { // TODO(adityamaru): Remove in 22.2 once no records protect spans. t.Run("deprecated-spans-limit", func(t *testing.T) { params := base.TestClusterArgs{} - params.ServerArgs.ExternalIODir = dir + params.ServerArgs.StorageConfig.ExternalIODir = dir params.ServerArgs.Knobs.ProtectedTS = &protectedts.TestingKnobs{ DisableProtectedTimestampForMultiTenant: true, // The meta table is used to track limits. @@ -7092,7 +7102,7 @@ func TestBackupRestoreTenant(t *testing.T) { t.Run("restore-tenant10-to-latest", func(t *testing.T) { restoreTC := testcluster.StartTestCluster( t, singleNode, base.TestClusterArgs{ServerArgs: base.TestServerArgs{ - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, DefaultTestTenant: base.TestControlsTenantsExplicitly, Knobs: base.TestingKnobs{JobsTestingKnobs: jobs.NewTestingKnobsWithShortIntervals()}, }}, @@ -7271,7 +7281,7 @@ func TestBackupRestoreTenant(t *testing.T) { t.Run("restore-t10-from-cluster-backup", func(t *testing.T) { restoreTC := testcluster.StartTestCluster( t, singleNode, base.TestClusterArgs{ServerArgs: base.TestServerArgs{ - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, DefaultTestTenant: base.TestControlsTenantsExplicitly, }}, ) @@ -7329,7 +7339,7 @@ func TestBackupRestoreTenant(t *testing.T) { t.Run("restore-tenant10-to-ts1", func(t *testing.T) { restoreTC := testcluster.StartTestCluster( t, singleNode, base.TestClusterArgs{ServerArgs: base.TestServerArgs{ - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, DefaultTestTenant: base.TestControlsTenantsExplicitly, }}, ) @@ -7365,7 +7375,7 @@ func TestBackupRestoreTenant(t *testing.T) { t.Run("restore-tenant20-to-latest", func(t *testing.T) { restoreTC := testcluster.StartTestCluster( t, singleNode, base.TestClusterArgs{ServerArgs: base.TestServerArgs{ - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, DefaultTestTenant: base.TestControlsTenantsExplicitly, }}, ) @@ -7540,7 +7550,7 @@ func TestBackupExportRequestTimeout(t *testing.T) { params := base.TestClusterArgs{} dir, dirCleanupFn := testutils.TempDir(t) defer dirCleanupFn() - params.ServerArgs.ExternalIODir = dir + params.ServerArgs.StorageConfig.ExternalIODir = dir const numAccounts = 10 ctx := context.Background() tc, sqlDB, _, cleanupFn := backupRestoreTestSetupWithParams(t, 2 /* nodes */, numAccounts, @@ -8627,7 +8637,7 @@ func TestRestoreJobEventLogging(t *testing.T) { baseDir := "testdata" args := base.TestServerArgs{ - ExternalIODir: baseDir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}, Knobs: base.TestingKnobs{JobsTestingKnobs: jobs.NewTestingKnobsWithShortIntervals()}} params := base.TestClusterArgs{ServerArgs: args} tc, sqlDB, _, cleanupFn := backupRestoreTestSetupWithParams(t, singleNode, 1, @@ -9196,7 +9206,7 @@ func TestGCDropIndexSpanExpansion(t *testing.T) { defer cleanup() ctx := context.Background() tc := testcluster.StartTestCluster(t, 1, base.TestClusterArgs{ServerArgs: base.TestServerArgs{ - ExternalIODir: baseDir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}, // This test hangs when run within a tenant. It's likely that // the cause of the hang is the fact that we're waiting on the GC to // complete, and we don't have visibility into the GC completing from @@ -9485,7 +9495,7 @@ func TestExportRequestBelowGCThresholdOnDataExcludedFromBackup(t *testing.T) { DisableLastProcessedCheck: true, } args.ServerArgs.Knobs.JobsTestingKnobs = jobs.NewTestingKnobsWithShortIntervals() - args.ServerArgs.ExternalIODir = localExternalDir + args.ServerArgs.StorageConfig.ExternalIODir = localExternalDir tc := testcluster.StartTestCluster(t, 1, args) defer tc.Stopper().Stop(ctx) @@ -9579,7 +9589,7 @@ func TestExcludeDataFromBackupDoesNotHoldupGC(t *testing.T) { dir, dirCleanupFn := testutils.TempDir(t) defer dirCleanupFn() params := base.TestClusterArgs{} - params.ServerArgs.ExternalIODir = dir + params.ServerArgs.StorageConfig.ExternalIODir = dir // Test fails when run within a tenant. More investigation is // required. Tracked with #76378. params.ServerArgs.DefaultTestTenant = base.TODOTestTenantDisabled @@ -10424,9 +10434,9 @@ func TestBackupRestoreTelemetryEvents(t *testing.T) { baseDir := "testdata" args := base.TestServerArgs{ - - ExternalIODir: baseDir, - Knobs: base.TestingKnobs{JobsTestingKnobs: jobs.NewTestingKnobsWithShortIntervals()}} + StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}, + Knobs: base.TestingKnobs{JobsTestingKnobs: jobs.NewTestingKnobsWithShortIntervals()}, + } params := base.TestClusterArgs{ServerArgs: args} tc, sqlDB, _, cleanupFn := backupRestoreTestSetupWithParams(t, singleNode, 1, InitManualReplication, params) @@ -11043,7 +11053,8 @@ func TestExportResponseDataSizeZeroCPUPagination(t *testing.T) { externalDir, dirCleanup := testutils.TempDir(t) defer dirCleanup() s, db, _ := serverutils.StartServer(t, base.TestServerArgs{ - ExternalIODir: externalDir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: externalDir}, + Knobs: base.TestingKnobs{Store: &kvserver.StoreTestingKnobs{ TestingRequestFilter: func(ctx context.Context, request *kvpb.BatchRequest) *kvpb.Error { for _, ru := range request.Requests { diff --git a/pkg/backup/backuprand/BUILD.bazel b/pkg/backup/backuprand/BUILD.bazel index 2296af0a9aeb..1f81050bcbd3 100644 --- a/pkg/backup/backuprand/BUILD.bazel +++ b/pkg/backup/backuprand/BUILD.bazel @@ -20,6 +20,7 @@ go_test( "//pkg/server", "//pkg/sql/randgen", "//pkg/sql/sem/tree", + "//pkg/storage/storagepb", "//pkg/testutils", "//pkg/testutils/fingerprintutils", "//pkg/testutils/jobutils", diff --git a/pkg/backup/backuprand/backup_rand_test.go b/pkg/backup/backuprand/backup_rand_test.go index 100521d32563..1b7ad48cd93c 100644 --- a/pkg/backup/backuprand/backup_rand_test.go +++ b/pkg/backup/backuprand/backup_rand_test.go @@ -19,6 +19,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/jobs/jobspb" "github.com/cockroachdb/cockroach/pkg/sql/randgen" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/fingerprintutils" "github.com/cockroachdb/cockroach/pkg/testutils/jobutils" @@ -51,7 +52,7 @@ func TestBackupRestoreRandomDataRoundtrips(t *testing.T) { // with #76378. DefaultTestTenant: base.TODOTestTenantDisabled, UseDatabase: "rand", - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, }, } const localFoo = "nodelocal://1/foo/" diff --git a/pkg/backup/backuptestutils/testutils.go b/pkg/backup/backuptestutils/testutils.go index d924cdffd52f..f90553851107 100644 --- a/pkg/backup/backuptestutils/testutils.go +++ b/pkg/backup/backuptestutils/testutils.go @@ -186,10 +186,10 @@ func setTestClusterDefaults(params *base.TestClusterArgs, dataDir string, useDat } } - params.ServerArgs.ExternalIODir = dataDir + params.ServerArgs.StorageConfig.ExternalIODir = dataDir for i := range params.ServerArgsPerNode { param := params.ServerArgsPerNode[i] - param.ExternalIODir = dataDir + param.ExternalIODir + param.StorageConfig.ExternalIODir = dataDir + param.StorageConfig.ExternalIODir params.ServerArgsPerNode[i] = param } diff --git a/pkg/backup/create_scheduled_backup_test.go b/pkg/backup/create_scheduled_backup_test.go index c8d00ae899ba..3d5fc01f539c 100644 --- a/pkg/backup/create_scheduled_backup_test.go +++ b/pkg/backup/create_scheduled_backup_test.go @@ -30,6 +30,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/parser" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/sessiondata" + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" "github.com/cockroachdb/cockroach/pkg/testutils/sqlutils" @@ -93,7 +94,7 @@ func newTestHelper(t *testing.T) (*testHelper, func()) { args := base.TestServerArgs{ Locality: roachpb.Locality{Tiers: []roachpb.Tier{{Key: "region", Value: "of-france"}}}, Settings: cluster.MakeClusterSettings(), - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, // Some scheduled backup tests fail when run within a tenant. More // investigation is required. Tracked with #76378. DefaultTestTenant: base.TODOTestTenantDisabled, diff --git a/pkg/backup/restore_data_processor_test.go b/pkg/backup/restore_data_processor_test.go index cf44a1dca635..a1ede997e57c 100644 --- a/pkg/backup/restore_data_processor_test.go +++ b/pkg/backup/restore_data_processor_test.go @@ -38,6 +38,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/execinfrapb" "github.com/cockroachdb/cockroach/pkg/sql/sem/eval" "github.com/cockroachdb/cockroach/pkg/storage" + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" "github.com/cockroachdb/cockroach/pkg/util/encoding" @@ -241,7 +242,7 @@ func runTestIngest(t *testing.T, init func(*cluster.Settings)) { DefaultTestTenant: base.TestIsForStuffThatShouldWorkWithSecondaryTenantsButDoesntYet(107812), Knobs: knobs, - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, Settings: cs, } // TODO(dan): This currently doesn't work with AddSSTable on in-memory @@ -261,7 +262,7 @@ func runTestIngest(t *testing.T, init func(*cluster.Settings)) { DB: s.InternalDB().(descs.DB), ExternalStorage: func(ctx context.Context, dest cloudpb.ExternalStorage, opts ...cloud.ExternalStorageOption) (cloud.ExternalStorage, error) { return cloud.MakeExternalStorage(ctx, dest, base.ExternalIODirConfig{}, - s.ClusterSettings(), blobs.TestBlobServiceClient(args.ExternalIODir), + s.ClusterSettings(), blobs.TestBlobServiceClient(args.StorageConfig.ExternalIODir), nil, /* db */ nil, /* limiters */ cloud.NilMetrics, diff --git a/pkg/backup/restore_mid_schema_change_test.go b/pkg/backup/restore_mid_schema_change_test.go index 1217c1ba06da..ca355fa6dc29 100644 --- a/pkg/backup/restore_mid_schema_change_test.go +++ b/pkg/backup/restore_mid_schema_change_test.go @@ -15,6 +15,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/base" "github.com/cockroachdb/cockroach/pkg/jobs" "github.com/cockroachdb/cockroach/pkg/sql/catalog/desctestutils" + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/datapathutils" "github.com/cockroachdb/cockroach/pkg/testutils/skip" @@ -238,7 +239,7 @@ func restoreMidSchemaChange( dir, dirCleanupFn := testutils.TempDir(t) params := base.TestClusterArgs{ ServerArgs: base.TestServerArgs{ - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, Knobs: base.TestingKnobs{JobsTestingKnobs: jobs.NewTestingKnobsWithShortIntervals()}, }, } diff --git a/pkg/backup/restore_multiregion_rbr_test.go b/pkg/backup/restore_multiregion_rbr_test.go index 2530696fd764..9db0332f139e 100644 --- a/pkg/backup/restore_multiregion_rbr_test.go +++ b/pkg/backup/restore_multiregion_rbr_test.go @@ -15,6 +15,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/ccl/utilccl" "github.com/cockroachdb/cockroach/pkg/jobs" "github.com/cockroachdb/cockroach/pkg/sql" + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/skip" "github.com/cockroachdb/cockroach/pkg/testutils/sqlutils" @@ -59,7 +60,7 @@ func TestMultiRegionRegionlessRestoreNoLicense(t *testing.T) { sqlTC := testcluster.StartTestCluster( t, singleNode, base.TestClusterArgs{ServerArgs: base.TestServerArgs{ - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, DefaultTestTenant: base.TestControlsTenantsExplicitly, Knobs: base.TestingKnobs{ JobsTestingKnobs: jobs.NewTestingKnobsWithShortIntervals(), diff --git a/pkg/backup/show_test.go b/pkg/backup/show_test.go index 31077508e4b4..9fdc8428abe2 100644 --- a/pkg/backup/show_test.go +++ b/pkg/backup/show_test.go @@ -22,6 +22,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/catalog/bootstrap" "github.com/cockroachdb/cockroach/pkg/sql/catalog/desctestutils" "github.com/cockroachdb/cockroach/pkg/sql/rowenc" + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" "github.com/cockroachdb/cockroach/pkg/testutils/skip" @@ -630,7 +631,9 @@ func TestShowBackupPrivileges(t *testing.T) { dir, cleanupDir := testutils.TempDir(t) defer cleanupDir() - srv, db, _ := serverutils.StartServer(t, base.TestServerArgs{ExternalIODir: dir}) + srv, db, _ := serverutils.StartServer(t, base.TestServerArgs{ + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, + }) defer srv.Stopper().Stop(context.Background()) sqlDB := sqlutils.MakeSQLRunner(db) sqlDB.Exec(t, `CREATE USER testuser`) diff --git a/pkg/base/test_server_args.go b/pkg/base/test_server_args.go index 94e39f54e3ac..1da63418af2f 100644 --- a/pkg/base/test_server_args.go +++ b/pkg/base/test_server_args.go @@ -94,9 +94,8 @@ type TestServerArgs struct { // field on the server.Config struct. ExternalIODirConfig ExternalIODirConfig - // ExternalIODir is used to initialize the same-named field on - // the server.Config struct. - ExternalIODir string + // StorageConfig is used to initialize storage related fields. + StorageConfig storagepb.NodeConfig // Fields copied to the server.Config. Insecure bool @@ -584,9 +583,9 @@ type TestTenantArgs struct { // field on the server.Config struct. ExternalIODirConfig ExternalIODirConfig - // ExternalIODir is used to initialize the same-named field on + // StorageConfig is used to initialize the same-named field on // the server.Config struct. - ExternalIODir string + StorageConfig storagepb.NodeConfig // If set, this will be appended to the Postgres URL by functions that // automatically open a connection to the server. That's equivalent to running diff --git a/pkg/ccl/changefeedccl/BUILD.bazel b/pkg/ccl/changefeedccl/BUILD.bazel index 332c1a614a8d..70087fd0f9c1 100644 --- a/pkg/ccl/changefeedccl/BUILD.bazel +++ b/pkg/ccl/changefeedccl/BUILD.bazel @@ -315,6 +315,7 @@ go_test( "//pkg/sql/types", "//pkg/storage/enginepb", "//pkg/storage/fs", + "//pkg/storage/storagepb", "//pkg/testutils", "//pkg/testutils/jobutils", "//pkg/testutils/listenerutil", diff --git a/pkg/ccl/changefeedccl/changefeed_test.go b/pkg/ccl/changefeedccl/changefeed_test.go index 33c8e2cd21a6..03a9df4e6029 100644 --- a/pkg/ccl/changefeedccl/changefeed_test.go +++ b/pkg/ccl/changefeedccl/changefeed_test.go @@ -71,6 +71,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/sem/eval" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/storage/fs" + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/jobutils" "github.com/cockroachdb/cockroach/pkg/testutils/listenerutil" @@ -6476,7 +6477,7 @@ func TestChangefeedHandlesDrainingNodes(t *testing.T) { DefaultTestTenant: base.TODOTestTenantDisabled, UseDatabase: "test", Knobs: knobs, - ExternalIODir: sinkDir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: sinkDir}, }}) defer tc.Stopper().Stop(context.Background()) @@ -6622,7 +6623,7 @@ func TestChangefeedHandlesRollingRestart(t *testing.T) { }, JobsTestingKnobs: jobs.NewTestingKnobsWithShortIntervals(), }, - ExternalIODir: opts.externalIODir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: opts.externalIODir}, } } @@ -6784,7 +6785,7 @@ func TestChangefeedTimelyResolvedTimestampUpdatePostRollingRestart(t *testing.T) StickyVFSRegistry: stickyVFSRegistry, }, }, - ExternalIODir: opts.externalIODir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: opts.externalIODir}, UseDatabase: "d", } } @@ -6878,7 +6879,7 @@ func TestChangefeedPropagatesTerminalError(t *testing.T) { }, JobsTestingKnobs: jobs.NewTestingKnobsWithShortIntervals(), }, - ExternalIODir: opts.externalIODir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: opts.externalIODir}, UseDatabase: "d", } } @@ -9317,7 +9318,7 @@ func TestChangefeedExecLocality(t *testing.T) { } for i := 0; i < nodes; i++ { args.ServerArgsPerNode[i] = base.TestServerArgs{ - ExternalIODir: path.Join(dir, str(i)), + StorageConfig: storagepb.NodeConfig{ExternalIODir: path.Join(dir, str(i))}, Locality: roachpb.Locality{ Tiers: []roachpb.Tier{{Key: "x", Value: str(i / 2)}, {Key: "y", Value: str(i % 2)}}}, } diff --git a/pkg/ccl/changefeedccl/helpers_test.go b/pkg/ccl/changefeedccl/helpers_test.go index 47306aa61222..1dc5826aa869 100644 --- a/pkg/ccl/changefeedccl/helpers_test.go +++ b/pkg/ccl/changefeedccl/helpers_test.go @@ -38,6 +38,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/server/serverpb" "github.com/cockroachdb/cockroach/pkg/settings/cluster" "github.com/cockroachdb/cockroach/pkg/sql/execinfra" + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" "github.com/cockroachdb/cockroach/pkg/testutils/skip" @@ -407,7 +408,7 @@ func startTestFullServer( // tenants. No need for the test tenant. DefaultTestTenant: base.TestControlsTenantsExplicitly, UseDatabase: `d`, - ExternalIODir: options.externalIODir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: options.externalIODir}, Settings: options.settings, } @@ -521,7 +522,7 @@ func startTestTenant( TenantID: tenantID, UseDatabase: `d`, TestingKnobs: knobs, - ExternalIODir: options.externalIODir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: options.externalIODir}, Settings: options.settings, } diff --git a/pkg/ccl/cloudccl/amazon/BUILD.bazel b/pkg/ccl/cloudccl/amazon/BUILD.bazel index 9ff51683aab2..27fef9cbf311 100644 --- a/pkg/ccl/cloudccl/amazon/BUILD.bazel +++ b/pkg/ccl/cloudccl/amazon/BUILD.bazel @@ -17,6 +17,7 @@ go_test( "//pkg/security/securityassets", "//pkg/security/securitytest", "//pkg/server", + "//pkg/storage/storagepb", "//pkg/testutils", "//pkg/testutils/serverutils", "//pkg/testutils/skip", diff --git a/pkg/ccl/cloudccl/amazon/s3_connection_test.go b/pkg/ccl/cloudccl/amazon/s3_connection_test.go index 3b5da0fda198..425ff90b900b 100644 --- a/pkg/ccl/cloudccl/amazon/s3_connection_test.go +++ b/pkg/ccl/cloudccl/amazon/s3_connection_test.go @@ -21,6 +21,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/cloud/cloudpb" "github.com/cockroachdb/cockroach/pkg/cloud/cloudtestutils" _ "github.com/cockroachdb/cockroach/pkg/cloud/externalconn/providers" // import External Connection providers. + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" "github.com/cockroachdb/cockroach/pkg/testutils/skip" @@ -38,7 +39,7 @@ func TestS3ExternalConnection(t *testing.T) { defer dirCleanupFn() ts, db, _ := serverutils.StartServer(t, base.TestServerArgs{ - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, }) defer ts.Stopper().Stop(context.Background()) @@ -203,7 +204,7 @@ func TestAWSKMSExternalConnection(t *testing.T) { defer dirCleanupFn() ts, db, _ := serverutils.StartServer(t, base.TestServerArgs{ - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, }) defer ts.Stopper().Stop(context.Background()) sqlDB := sqlutils.MakeSQLRunner(db) @@ -311,7 +312,7 @@ func TestAWSKMSExternalConnectionAssumeRole(t *testing.T) { defer dirCleanupFn() ts, db, _ := serverutils.StartServer(t, base.TestServerArgs{ - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, }) defer ts.Stopper().Stop(context.Background()) sqlDB := sqlutils.MakeSQLRunner(db) diff --git a/pkg/ccl/cloudccl/azure/BUILD.bazel b/pkg/ccl/cloudccl/azure/BUILD.bazel index 434fc6c3c8b8..0790196f5686 100644 --- a/pkg/ccl/cloudccl/azure/BUILD.bazel +++ b/pkg/ccl/cloudccl/azure/BUILD.bazel @@ -16,6 +16,7 @@ go_test( "//pkg/security/securityassets", "//pkg/security/securitytest", "//pkg/server", + "//pkg/storage/storagepb", "//pkg/testutils", "//pkg/testutils/serverutils", "//pkg/testutils/skip", diff --git a/pkg/ccl/cloudccl/azure/azure_connection_test.go b/pkg/ccl/cloudccl/azure/azure_connection_test.go index a4709aa10c97..e6c0e2acf38a 100644 --- a/pkg/ccl/cloudccl/azure/azure_connection_test.go +++ b/pkg/ccl/cloudccl/azure/azure_connection_test.go @@ -19,6 +19,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/cloud/azure" "github.com/cockroachdb/cockroach/pkg/cloud/cloudtestutils" _ "github.com/cockroachdb/cockroach/pkg/cloud/externalconn/providers" // import External Connection providers. + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" "github.com/cockroachdb/cockroach/pkg/testutils/skip" @@ -63,7 +64,7 @@ func TestExternalConnections(t *testing.T) { defer dirCleanupFn() ts, db, _ := serverutils.StartServer(t, base.TestServerArgs{ - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, }) defer ts.Stopper().Stop(context.Background()) diff --git a/pkg/ccl/cloudccl/externalconn/BUILD.bazel b/pkg/ccl/cloudccl/externalconn/BUILD.bazel index 47ebf6194080..2fd1ec16baed 100644 --- a/pkg/ccl/cloudccl/externalconn/BUILD.bazel +++ b/pkg/ccl/cloudccl/externalconn/BUILD.bazel @@ -23,6 +23,7 @@ go_test( "//pkg/security/securityassets", "//pkg/security/securitytest", "//pkg/server", + "//pkg/storage/storagepb", "//pkg/testutils", "//pkg/testutils/datapathutils", "//pkg/testutils/serverutils", diff --git a/pkg/ccl/cloudccl/externalconn/datadriven_test.go b/pkg/ccl/cloudccl/externalconn/datadriven_test.go index e824bcb40300..d0df37ee801d 100644 --- a/pkg/ccl/cloudccl/externalconn/datadriven_test.go +++ b/pkg/ccl/cloudccl/externalconn/datadriven_test.go @@ -19,6 +19,7 @@ import ( ectestutils "github.com/cockroachdb/cockroach/pkg/cloud/externalconn/testutils" "github.com/cockroachdb/cockroach/pkg/jobs" "github.com/cockroachdb/cockroach/pkg/roachpb" + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/datapathutils" "github.com/cockroachdb/cockroach/pkg/testutils/sqlutils" @@ -57,7 +58,7 @@ func TestDataDriven(t *testing.T) { ExternalConnection: ecTestingKnobs, }, ExternalIODirConfig: base.ExternalIODirConfig{}, - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, }, }) defer tc.Stopper().Stop(ctx) diff --git a/pkg/ccl/cloudccl/gcp/BUILD.bazel b/pkg/ccl/cloudccl/gcp/BUILD.bazel index 414dfa3a405c..29559375840a 100644 --- a/pkg/ccl/cloudccl/gcp/BUILD.bazel +++ b/pkg/ccl/cloudccl/gcp/BUILD.bazel @@ -17,6 +17,7 @@ go_test( "//pkg/security/securityassets", "//pkg/security/securitytest", "//pkg/server", + "//pkg/storage/storagepb", "//pkg/testutils", "//pkg/testutils/serverutils", "//pkg/testutils/skip", diff --git a/pkg/ccl/cloudccl/gcp/gcp_connection_test.go b/pkg/ccl/cloudccl/gcp/gcp_connection_test.go index 4d46d3f66928..7504ef1a145e 100644 --- a/pkg/ccl/cloudccl/gcp/gcp_connection_test.go +++ b/pkg/ccl/cloudccl/gcp/gcp_connection_test.go @@ -23,6 +23,7 @@ import ( _ "github.com/cockroachdb/cockroach/pkg/cloud/externalconn/providers" // import External Connection providers. "github.com/cockroachdb/cockroach/pkg/cloud/gcp" _ "github.com/cockroachdb/cockroach/pkg/cloud/impl" // register ExternalStorage providers. + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" "github.com/cockroachdb/cockroach/pkg/testutils/skip" @@ -41,7 +42,7 @@ func TestGCPKMSExternalConnection(t *testing.T) { defer dirCleanupFn() ts, db, _ := serverutils.StartServer(t, base.TestServerArgs{ - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, }) defer ts.Stopper().Stop(context.Background()) sqlDB := sqlutils.MakeSQLRunner(db) @@ -167,7 +168,7 @@ func TestGCPKMSExternalConnectionAssumeRole(t *testing.T) { defer dirCleanupFn() ts, db, _ := serverutils.StartServer(t, base.TestServerArgs{ - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, }) defer ts.Stopper().Stop(context.Background()) sqlDB := sqlutils.MakeSQLRunner(db) @@ -293,7 +294,7 @@ func TestGCPAssumeRoleExternalConnection(t *testing.T) { defer dirCleanupFn() ts, db, _ := serverutils.StartServer(t, base.TestServerArgs{ - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, }) defer ts.Stopper().Stop(context.Background()) sqlDB := sqlutils.MakeSQLRunner(db) @@ -441,7 +442,7 @@ func TestGCPExternalConnection(t *testing.T) { defer dirCleanupFn() ts, db, _ := serverutils.StartServer(t, base.TestServerArgs{ - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, }) defer ts.Stopper().Stop(context.Background()) sqlDB := sqlutils.MakeSQLRunner(db) diff --git a/pkg/ccl/importerccl/BUILD.bazel b/pkg/ccl/importerccl/BUILD.bazel index ae25095566f6..a02fe35f74c8 100644 --- a/pkg/ccl/importerccl/BUILD.bazel +++ b/pkg/ccl/importerccl/BUILD.bazel @@ -32,6 +32,7 @@ go_test( "//pkg/server", "//pkg/sql", "//pkg/sql/importer", + "//pkg/storage/storagepb", "//pkg/testutils", "//pkg/testutils/datapathutils", "//pkg/testutils/serverutils", diff --git a/pkg/ccl/importerccl/ccl_test.go b/pkg/ccl/importerccl/ccl_test.go index df166eccc1b6..44e034c523ee 100644 --- a/pkg/ccl/importerccl/ccl_test.go +++ b/pkg/ccl/importerccl/ccl_test.go @@ -30,6 +30,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/roachpb" "github.com/cockroachdb/cockroach/pkg/security/username" "github.com/cockroachdb/cockroach/pkg/sql" + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/datapathutils" "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" @@ -424,7 +425,7 @@ func TestExportInsideTenant(t *testing.T) { srv := serverutils.StartServerOnly(t, base.TestServerArgs{ DefaultTestTenant: base.TestControlsTenantsExplicitly, - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, }) defer srv.Stopper().Stop(context.Background()) @@ -452,7 +453,7 @@ func TestImportInTenant(t *testing.T) { ctx := context.Background() baseDir := sharedTestdata(t) args := base.TestServerArgs{ - ExternalIODir: baseDir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}, // Test is designed to run inside a tenant so no need to // probabilistically run it inside the default test tenant. DefaultTestTenant: base.TODOTestTenantDisabled, @@ -510,7 +511,7 @@ func TestImportInMultiServerTenant(t *testing.T) { // Test is designed to run inside a tenant so no need to // probabilistically run it inside the default test tenant. DefaultTestTenant: base.TODOTestTenantDisabled, - ExternalIODir: baseDir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}, } tc := serverutils.StartCluster(t, 1, base.TestClusterArgs{ServerArgs: args}) defer tc.Stopper().Stop(ctx) diff --git a/pkg/ccl/multiregionccl/multiregionccltestutils/BUILD.bazel b/pkg/ccl/multiregionccl/multiregionccltestutils/BUILD.bazel index 05a0ce6b01df..146f862a8fb6 100644 --- a/pkg/ccl/multiregionccl/multiregionccltestutils/BUILD.bazel +++ b/pkg/ccl/multiregionccl/multiregionccltestutils/BUILD.bazel @@ -10,6 +10,7 @@ go_library( "//pkg/base", "//pkg/roachpb", "//pkg/settings/cluster", + "//pkg/storage/storagepb", "//pkg/testutils/testcluster", "@com_github_cockroachdb_errors//:errors", ], diff --git a/pkg/ccl/multiregionccl/multiregionccltestutils/testutils.go b/pkg/ccl/multiregionccl/multiregionccltestutils/testutils.go index 969b5fe791bc..e97b6f158816 100644 --- a/pkg/ccl/multiregionccl/multiregionccltestutils/testutils.go +++ b/pkg/ccl/multiregionccl/multiregionccltestutils/testutils.go @@ -15,6 +15,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/base" "github.com/cockroachdb/cockroach/pkg/roachpb" "github.com/cockroachdb/cockroach/pkg/settings/cluster" + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils/testcluster" "github.com/cockroachdb/errors" ) @@ -115,7 +116,7 @@ func TestingCreateMultiRegionClusterWithRegionList( serverArgs[totalServerCount] = base.TestServerArgs{ Settings: params.settings, Knobs: knobs, - ExternalIODir: params.baseDir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: params.baseDir}, UseDatabase: params.useDatabase, Locality: roachpb.Locality{ Tiers: []roachpb.Tier{{Key: "region", Value: region}}, diff --git a/pkg/ccl/multitenantccl/tenantcostclient/BUILD.bazel b/pkg/ccl/multitenantccl/tenantcostclient/BUILD.bazel index b8df81f8d481..46dbd01766b9 100644 --- a/pkg/ccl/multitenantccl/tenantcostclient/BUILD.bazel +++ b/pkg/ccl/multitenantccl/tenantcostclient/BUILD.bazel @@ -85,6 +85,7 @@ go_test( "//pkg/sql/sqlliveness", "//pkg/sql/sqlliveness/slbase", "//pkg/sql/stats", + "//pkg/storage/storagepb", "//pkg/testutils", "//pkg/testutils/datapathutils", "//pkg/testutils/serverutils", diff --git a/pkg/ccl/multitenantccl/tenantcostclient/tenant_side_test.go b/pkg/ccl/multitenantccl/tenantcostclient/tenant_side_test.go index fab74f0558ca..c5d212ab725c 100644 --- a/pkg/ccl/multitenantccl/tenantcostclient/tenant_side_test.go +++ b/pkg/ccl/multitenantccl/tenantcostclient/tenant_side_test.go @@ -47,6 +47,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/sqlliveness" "github.com/cockroachdb/cockroach/pkg/sql/sqlliveness/slbase" "github.com/cockroachdb/cockroach/pkg/sql/stats" + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/datapathutils" "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" @@ -1437,7 +1438,7 @@ func TestConsumptionExternalStorage(t *testing.T) { defer dirCleanupFn() hostServer, hostDB, _ := serverutils.StartServer(t, base.TestServerArgs{ DefaultTestTenant: base.TestControlsTenantsExplicitly, - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, }) defer hostServer.Stopper().Stop(context.Background()) hostSQL := sqlutils.MakeSQLRunner(hostDB) @@ -1450,7 +1451,7 @@ func TestConsumptionExternalStorage(t *testing.T) { _, tenantDB := serverutils.StartTenant(t, hostServer, base.TestTenantArgs{ TenantID: serverutils.TestTenantID(), Settings: st, - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, TestingKnobs: base.TestingKnobs{ TenantTestingKnobs: &sql.TenantTestingKnobs{ OverrideTokenBucketProvider: func(kvtenant.TokenBucketProvider) kvtenant.TokenBucketProvider { diff --git a/pkg/ccl/serverccl/BUILD.bazel b/pkg/ccl/serverccl/BUILD.bazel index 557d8de66c52..ada0d9dc8ce6 100644 --- a/pkg/ccl/serverccl/BUILD.bazel +++ b/pkg/ccl/serverccl/BUILD.bazel @@ -73,6 +73,7 @@ go_test( "//pkg/sql/sem/catconstants", "//pkg/sql/sem/eval", "//pkg/sql/sqlinstance/instancestorage", + "//pkg/storage/storagepb", "//pkg/testutils", "//pkg/testutils/serverutils", "//pkg/testutils/skip", diff --git a/pkg/ccl/serverccl/admin_test.go b/pkg/ccl/serverccl/admin_test.go index b454d6a5b968..e1acab28474f 100644 --- a/pkg/ccl/serverccl/admin_test.go +++ b/pkg/ccl/serverccl/admin_test.go @@ -14,6 +14,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/base" "github.com/cockroachdb/cockroach/pkg/server/serverpb" + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" "github.com/cockroachdb/cockroach/pkg/testutils/skip" @@ -121,7 +122,8 @@ func TestAdminAPIJobs(t *testing.T) { s, conn, _ := serverutils.StartServer(t, base.TestServerArgs{ // Fails with the default test tenant. Tracked with #76378. DefaultTestTenant: base.TODOTestTenantDisabled, - ExternalIODir: dir}) + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, + }) defer s.Stopper().Stop(context.Background()) sqlDB := sqlutils.MakeSQLRunner(conn) diff --git a/pkg/ccl/serverccl/server_controller_test.go b/pkg/ccl/serverccl/server_controller_test.go index 2c3351837ab7..ba7489f37f3f 100644 --- a/pkg/ccl/serverccl/server_controller_test.go +++ b/pkg/ccl/serverccl/server_controller_test.go @@ -25,6 +25,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/server/serverpb" "github.com/cockroachdb/cockroach/pkg/sql/lexbase" "github.com/cockroachdb/cockroach/pkg/sql/sem/catconstants" + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" "github.com/cockroachdb/cockroach/pkg/testutils/skip" @@ -68,15 +69,15 @@ func TestSharedProcessTenantNodeLocalAccess(t *testing.T) { ServerArgsPerNode: map[int]base.TestServerArgs{ 0: { DefaultTestTenant: base.TestControlsTenantsExplicitly, - ExternalIODir: dirs[0], + StorageConfig: storagepb.NodeConfig{ExternalIODir: dirs[0]}, }, 1: { DefaultTestTenant: base.TestControlsTenantsExplicitly, - ExternalIODir: dirs[1], + StorageConfig: storagepb.NodeConfig{ExternalIODir: dirs[1]}, }, 2: { DefaultTestTenant: base.TestControlsTenantsExplicitly, - ExternalIODir: dirs[2], + StorageConfig: storagepb.NodeConfig{ExternalIODir: dirs[2]}, }, }, }) diff --git a/pkg/ccl/spanconfigccl/spanconfigsqlwatcherccl/BUILD.bazel b/pkg/ccl/spanconfigccl/spanconfigsqlwatcherccl/BUILD.bazel index 28043c4c9427..d97a6e77b7ed 100644 --- a/pkg/ccl/spanconfigccl/spanconfigsqlwatcherccl/BUILD.bazel +++ b/pkg/ccl/spanconfigccl/spanconfigsqlwatcherccl/BUILD.bazel @@ -24,6 +24,7 @@ go_test( "//pkg/spanconfig/spanconfigsqlwatcher", "//pkg/sql/catalog", "//pkg/sql/catalog/descpb", + "//pkg/storage/storagepb", "//pkg/testutils", "//pkg/testutils/serverutils", "//pkg/testutils/sqlutils", diff --git a/pkg/ccl/spanconfigccl/spanconfigsqlwatcherccl/sqlwatcher_test.go b/pkg/ccl/spanconfigccl/spanconfigsqlwatcherccl/sqlwatcher_test.go index 578f9a8bbadd..9d6f587e44ca 100644 --- a/pkg/ccl/spanconfigccl/spanconfigsqlwatcherccl/sqlwatcher_test.go +++ b/pkg/ccl/spanconfigccl/spanconfigsqlwatcherccl/sqlwatcher_test.go @@ -25,6 +25,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/spanconfig/spanconfigsqlwatcher" "github.com/cockroachdb/cockroach/pkg/sql/catalog" "github.com/cockroachdb/cockroach/pkg/sql/catalog/descpb" + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/sqlutils" "github.com/cockroachdb/cockroach/pkg/testutils/testcluster" @@ -57,7 +58,7 @@ func TestSQLWatcherReactsToUpdates(t *testing.T) { defer dirCleanupFn() tc := testcluster.StartTestCluster(t, 1, base.TestClusterArgs{ ServerArgs: base.TestServerArgs{ - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, DefaultTestTenant: base.TestControlsTenantsExplicitly, Knobs: base.TestingKnobs{ SpanConfig: &spanconfig.TestingKnobs{ diff --git a/pkg/ccl/telemetryccl/BUILD.bazel b/pkg/ccl/telemetryccl/BUILD.bazel index 069a4ca7ddd0..4024dc06ec1a 100644 --- a/pkg/ccl/telemetryccl/BUILD.bazel +++ b/pkg/ccl/telemetryccl/BUILD.bazel @@ -23,6 +23,7 @@ go_test( "//pkg/sql", "//pkg/sql/sem/tree", "//pkg/sql/sqltestutils", + "//pkg/storage/storagepb", "//pkg/testutils", "//pkg/testutils/serverutils", "//pkg/testutils/skip", diff --git a/pkg/ccl/telemetryccl/telemetry_logging_test.go b/pkg/ccl/telemetryccl/telemetry_logging_test.go index 4d0880cab81f..2c15a682e296 100644 --- a/pkg/ccl/telemetryccl/telemetry_logging_test.go +++ b/pkg/ccl/telemetryccl/telemetry_logging_test.go @@ -23,6 +23,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/jobs/jobspb" "github.com/cockroachdb/cockroach/pkg/sql" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" "github.com/cockroachdb/cockroach/pkg/testutils/sqlutils" @@ -225,7 +226,7 @@ func TestBulkJobTelemetryLogging(t *testing.T) { }, TelemetryLoggingKnobs: sql.NewTelemetryLoggingTestingKnobs(st.TimeNow, sqm.QueryLevelStats, sts.TracingStatus), }, - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, }, }) sqlDB := testCluster.ServerConn(0) diff --git a/pkg/ccl/utilccl/sampledataccl/BUILD.bazel b/pkg/ccl/utilccl/sampledataccl/BUILD.bazel index 1821d7a5a6ad..17c17c7ccd5d 100644 --- a/pkg/ccl/utilccl/sampledataccl/BUILD.bazel +++ b/pkg/ccl/utilccl/sampledataccl/BUILD.bazel @@ -7,6 +7,7 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/base", + "//pkg/storage/storagepb", "//pkg/testutils/serverutils", "//pkg/workload", "//pkg/workload/workloadsql", diff --git a/pkg/ccl/utilccl/sampledataccl/bankdata.go b/pkg/ccl/utilccl/sampledataccl/bankdata.go index 74de1ecbd6b1..05213e39d5fc 100644 --- a/pkg/ccl/utilccl/sampledataccl/bankdata.go +++ b/pkg/ccl/utilccl/sampledataccl/bankdata.go @@ -14,6 +14,7 @@ import ( "testing" "github.com/cockroachdb/cockroach/pkg/base" + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" "github.com/cockroachdb/cockroach/pkg/workload" "github.com/cockroachdb/cockroach/pkg/workload/workloadsql" @@ -29,7 +30,10 @@ func toBackup( ) (*Backup, error) { // TODO(dan): Get rid of the `t testing.TB` parameter and this `TestServer`. ctx := context.Background() - s, db, _ := serverutils.StartServer(t, base.TestServerArgs{ExternalIODir: externalIODir}) + s, db, _ := serverutils.StartServer(t, base.TestServerArgs{ + StorageConfig: storagepb.NodeConfig{ExternalIODir: externalIODir}, + }, + ) defer s.Stopper().Stop(ctx) if _, err := db.Exec(`CREATE DATABASE data`); err != nil { return nil, err diff --git a/pkg/cli/context.go b/pkg/cli/context.go index 633312dae27c..a5b0db8be416 100644 --- a/pkg/cli/context.go +++ b/pkg/cli/context.go @@ -498,10 +498,6 @@ var startCtx struct { // temporary directory to use to spill computation results to disk. tempDir string - // directory to use for remotely-initiated operations that can - // specify node-local I/O paths, like BACKUP/RESTORE/IMPORT. - externalIODir string - // inBackground is set to true when restarting in the // background after --background was processed. inBackground bool @@ -543,7 +539,6 @@ func setStartContextDefaults() { startCtx.serverListenAddr = "" startCtx.unencryptedLocalhostHTTP = false startCtx.tempDir = "" - startCtx.externalIODir = "" startCtx.listeningURLFile = "" startCtx.pidFile = "" startCtx.inBackground = false diff --git a/pkg/cli/democluster/BUILD.bazel b/pkg/cli/democluster/BUILD.bazel index 57cbcb8e135a..439a52c40a9d 100644 --- a/pkg/cli/democluster/BUILD.bazel +++ b/pkg/cli/democluster/BUILD.bazel @@ -39,6 +39,7 @@ go_library( "//pkg/sql/sem/catconstants", "//pkg/sql/sqlclustersettings", "//pkg/storage/fs", + "//pkg/storage/storagepb", "//pkg/testutils/serverutils", "//pkg/testutils/serverutils/regionlatency", "//pkg/util/envutil", @@ -80,6 +81,7 @@ go_test( "//pkg/server", "//pkg/sql/sqlclustersettings", "//pkg/storage/fs", + "//pkg/storage/storagepb", "//pkg/testutils", "//pkg/testutils/serverutils/regionlatency", "//pkg/testutils/skip", diff --git a/pkg/cli/democluster/demo_cluster.go b/pkg/cli/democluster/demo_cluster.go index 717287ff3545..56dd67a7c46c 100644 --- a/pkg/cli/democluster/demo_cluster.go +++ b/pkg/cli/democluster/demo_cluster.go @@ -41,6 +41,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/sem/catconstants" "github.com/cockroachdb/cockroach/pkg/sql/sqlclustersettings" "github.com/cockroachdb/cockroach/pkg/storage/fs" + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" "github.com/cockroachdb/cockroach/pkg/testutils/serverutils/regionlatency" "github.com/cockroachdb/cockroach/pkg/util/envutil" @@ -911,13 +912,15 @@ func (demoCtx *Context) testServerArgsForTransientCluster( storeSpec.StickyVFSID = fmt.Sprintf("demo-server%d", serverIdx) args := base.TestServerArgs{ - SocketFile: sock.filename(), - PartOfCluster: true, - Stopper: stop.NewStopper(), - JoinAddr: joinAddr, - DisableTLSForHTTP: true, - StoreSpecs: []base.StoreSpec{storeSpec}, - ExternalIODir: filepath.Join(demoDir, "nodelocal", fmt.Sprintf("n%d", serverIdx+1)), + SocketFile: sock.filename(), + PartOfCluster: true, + Stopper: stop.NewStopper(), + JoinAddr: joinAddr, + DisableTLSForHTTP: true, + StoreSpecs: []base.StoreSpec{storeSpec}, + StorageConfig: storagepb.NodeConfig{ + ExternalIODir: filepath.Join(demoDir, "nodelocal", fmt.Sprintf("n%d", serverIdx+1)), + }, SQLMemoryPoolSize: demoCtx.SQLPoolMemorySize, CacheSize: demoCtx.CacheSize, NoAutoInitializeCluster: true, diff --git a/pkg/cli/democluster/demo_cluster_test.go b/pkg/cli/democluster/demo_cluster_test.go index 13928586868a..29fe89b17ff6 100644 --- a/pkg/cli/democluster/demo_cluster_test.go +++ b/pkg/cli/democluster/demo_cluster_test.go @@ -24,6 +24,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/server" "github.com/cockroachdb/cockroach/pkg/sql/sqlclustersettings" "github.com/cockroachdb/cockroach/pkg/storage/fs" + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/serverutils/regionlatency" "github.com/cockroachdb/cockroach/pkg/testutils/skip" @@ -85,7 +86,7 @@ func TestTestServerArgsForTransientCluster(t *testing.T) { StickyVFSRegistry: stickyVFSRegistry, }, }, - ExternalIODir: "nodelocal/n1", + StorageConfig: storagepb.NodeConfig{ExternalIODir: "nodelocal/n1"}, }, }, { @@ -113,7 +114,7 @@ func TestTestServerArgsForTransientCluster(t *testing.T) { StickyVFSRegistry: stickyVFSRegistry, }, }, - ExternalIODir: "nodelocal/n3", + StorageConfig: storagepb.NodeConfig{ExternalIODir: "nodelocal/n3"}, }, }, } diff --git a/pkg/cli/flags.go b/pkg/cli/flags.go index ffe41e4c731a..326447de035a 100644 --- a/pkg/cli/flags.go +++ b/pkg/cli/flags.go @@ -581,7 +581,7 @@ func init() { // percentage refers to becomes known. cliflagcfg.VarFlag(f, &startCtx.diskTempStorageSizeValue, cliflags.SQLTempStorage) cliflagcfg.StringFlag(f, &startCtx.tempDir, cliflags.TempDir) - cliflagcfg.StringFlag(f, &startCtx.externalIODir, cliflags.ExternalIODir) + cliflagcfg.StringFlag(f, &serverCfg.StorageConfig.ExternalIODir, cliflags.ExternalIODir) if backgroundFlagDefined { cliflagcfg.BoolFlag(f, &startBackground, cliflags.Background) @@ -1410,25 +1410,8 @@ func extraStoreFlagInit(cmd *cobra.Command) error { } serverCfg.StorageConfig.WALFailover.PrevPath.Path = absPath } - - // Configure the external I/O directory. - if !fs.Changed(cliflags.ExternalIODir.Name) { - // Try to find a directory from the store configuration. - for _, ss := range serverCfg.Stores.Specs { - if ss.InMemory { - continue - } - startCtx.externalIODir = filepath.Join(ss.Path, "extern") - break - } - } - if startCtx.externalIODir != "" { - // Make the directory name absolute. - var err error - startCtx.externalIODir, err = base.GetAbsoluteFSPath(cliflags.ExternalIODir.Name, startCtx.externalIODir) - if err != nil { - return err - } + if err := populateExternalIODir(fs); err != nil { + return err } return nil } @@ -1514,3 +1497,35 @@ func populateStoreSpecsEncryption() error { // package rather than the cliccl package to defeat the duplicate envvar // registration logic. func RegisterFlags(f func()) { f() } + +// populateExternalIODir initializes the externalIODir based on either the user +// specified value or one of the directories from the stores. +func populateExternalIODir(fs *pflag.FlagSet) error { + // Configure the external I/O directory. If the user manually configured the + // external IO dir, convert it to an absolute path, otherwise base it on the + // store specs. + if fs.Changed(cliflags.ExternalIODir.Name) { + if serverCfg.StorageConfig.ExternalIODir != "" { + absPath, err := base.GetAbsoluteFSPath(cliflags.ExternalIODir.Name, serverCfg.StorageConfig.ExternalIODir) + if err != nil { + return err + } + serverCfg.StorageConfig.ExternalIODir = absPath + } + } else { + // Try to find a directory from the store configuration. + for _, ss := range serverCfg.Stores.Specs { + if ss.InMemory { + continue + } + // TODO: Do we need the abs here? + absPath, err := filepath.Abs(filepath.Join(ss.Path, "extern")) + if err != nil { + return err + } + serverCfg.StorageConfig.ExternalIODir = absPath + break + } + } + return nil +} diff --git a/pkg/cli/start.go b/pkg/cli/start.go index 20dc390e84f6..cd4ce258da3e 100644 --- a/pkg/cli/start.go +++ b/pkg/cli/start.go @@ -602,9 +602,6 @@ func runStartInternal( return errors.Wrapf(err, "failed to initialize %s", serverType) } - // Derive temporary/auxiliary directory specifications. - serverCfg.ExternalIODir = startCtx.externalIODir - st := serverCfg.BaseConfig.Settings if serverCfg.SQLConfig.TempStorageConfig, err = initTempStorageConfig( ctx, st, stopper, serverCfg.Stores, @@ -861,7 +858,7 @@ func createAndStartServerAsync( // Now inform the user that the server is running and tell the // user about its run-time derived parameters. return reportServerInfo(ctx, tBegin, serverCfg, s.ClusterSettings(), - serverType, s.InitialStart(), s.LogicalClusterID(), startCtx.externalIODir) + serverType, s.InitialStart(), s.LogicalClusterID()) }(); err != nil { shutdownReqC <- serverctl.MakeShutdownRequest( serverctl.ShutdownReasonServerStartupError, errors.Wrapf(err, "server startup failed")) @@ -1179,7 +1176,6 @@ func reportServerInfo( serverType redact.SafeString, initialStart bool, tenantClusterID uuid.UUID, - externalIODir string, ) error { var buf redact.StringBuilder info := build.GetInfo() @@ -1227,8 +1223,8 @@ func reportServerInfo( if tmpDir := serverCfg.SQLConfig.TempStorageConfig.Path; tmpDir != "" { buf.Printf("temp dir:\t%s\n", log.SafeManaged(tmpDir)) } - if externalIODir != "" { - buf.Printf("external I/O path: \t%s\n", log.SafeManaged(externalIODir)) + if serverCfg.StorageConfig.ExternalIODir != "" { + buf.Printf("external I/O path: \t%s\n", log.SafeManaged(serverCfg.StorageConfig.ExternalIODir)) } else { buf.Printf("external I/O path: \t\n") } diff --git a/pkg/cli/start_test.go b/pkg/cli/start_test.go index f48e79ebb76f..c69decb7a7d3 100644 --- a/pkg/cli/start_test.go +++ b/pkg/cli/start_test.go @@ -117,8 +117,8 @@ func TestExternalIODirSpec(t *testing.T) { t.Error(err) continue } - if startCtx.externalIODir != c.expected { - t.Errorf("%d: expected:\n%q\ngot:\n%s", i, c.expected, startCtx.externalIODir) + if serverCfg.StorageConfig.ExternalIODir != c.expected { + t.Errorf("%d: expected:\n%q\ngot:\n%s", i, c.expected, serverCfg.StorageConfig.ExternalIODir) } } } diff --git a/pkg/cli/testutils.go b/pkg/cli/testutils.go index f230e65ccd49..a8110485da14 100644 --- a/pkg/cli/testutils.go +++ b/pkg/cli/testutils.go @@ -30,6 +30,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/security/username" "github.com/cockroachdb/cockroach/pkg/sql/sqlstats" "github.com/cockroachdb/cockroach/pkg/sql/stats" + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" "github.com/cockroachdb/cockroach/pkg/util/log" @@ -164,7 +165,7 @@ func newCLITestWithArgs(params TestCLIParams, argsFn func(args *base.TestServerA SSLCertsDir: c.certsDir, StoreSpecs: params.StoreSpecs, Locality: params.Locality, - ExternalIODir: filepath.Join(certsDir, "extern"), + StorageConfig: storagepb.NodeConfig{ExternalIODir: filepath.Join(certsDir, "extern")}, Knobs: base.TestingKnobs{ SQLStatsKnobs: sqlstats.CreateTestingKnobs(), }, @@ -173,7 +174,7 @@ func newCLITestWithArgs(params TestCLIParams, argsFn func(args *base.TestServerA argsFn(&args) } if params.NoNodelocal { - args.ExternalIODir = "" + args.StorageConfig.ExternalIODir = "" } s, err := serverutils.StartServerOnlyE(params.T, args) if err != nil { diff --git a/pkg/crosscluster/logical/logical_replication_job_test.go b/pkg/crosscluster/logical/logical_replication_job_test.go index d602588fee0b..cac0b39cb1fe 100644 --- a/pkg/crosscluster/logical/logical_replication_job_test.go +++ b/pkg/crosscluster/logical/logical_replication_job_test.go @@ -579,7 +579,7 @@ func TestRestoreFromLDR(t *testing.T) { dataDir, dirCleanupFunc := testutils.TempDir(t) defer dirCleanupFunc() args := testClusterBaseClusterArgs - args.ServerArgs.ExternalIODir = dataDir + args.ServerArgs.StorageConfig.ExternalIODir = dataDir server, s, dbA, dbB := setupLogicalTestServer(t, ctx, args, 1) defer server.Stopper().Stop(ctx) @@ -609,7 +609,7 @@ func TestImportIntoLDR(t *testing.T) { dataDir, dirCleanupFunc := testutils.TempDir(t) defer dirCleanupFunc() args := testClusterBaseClusterArgs - args.ServerArgs.ExternalIODir = dataDir + args.ServerArgs.StorageConfig.ExternalIODir = dataDir server, s, dbA, dbB := setupLogicalTestServer(t, ctx, args, 1) defer server.Stopper().Stop(ctx) diff --git a/pkg/crosscluster/physical/datadriven_test.go b/pkg/crosscluster/physical/datadriven_test.go index 95cdd9d94866..4223bc6a2cc9 100644 --- a/pkg/crosscluster/physical/datadriven_test.go +++ b/pkg/crosscluster/physical/datadriven_test.go @@ -130,7 +130,7 @@ func TestDataDriven(t *testing.T) { args := replicationtestutils.DefaultTenantStreamingClustersArgs args.NoMetamorphicExternalConnection = d.HasArg("no-external-conn") tempDir, dirCleanup := testutils.TempDir(t) - args.ExternalIODir = tempDir + args.StorageConfig.ExternalIODir = tempDir var cleanup func() ds.replicationClusters, cleanup = replicationtestutils.CreateTenantStreamingClusters(ctx, t, args) ds.cleanupFns = append(ds.cleanupFns, func() error { diff --git a/pkg/crosscluster/replicationtestutils/BUILD.bazel b/pkg/crosscluster/replicationtestutils/BUILD.bazel index ce61d37605c4..995d9aa4b5ec 100644 --- a/pkg/crosscluster/replicationtestutils/BUILD.bazel +++ b/pkg/crosscluster/replicationtestutils/BUILD.bazel @@ -40,6 +40,7 @@ go_library( "//pkg/sql/sem/catconstants", "//pkg/sql/sem/tree", "//pkg/storage", + "//pkg/storage/storagepb", "//pkg/testutils", "//pkg/testutils/jobutils", "//pkg/testutils/serverutils", diff --git a/pkg/crosscluster/replicationtestutils/testutils.go b/pkg/crosscluster/replicationtestutils/testutils.go index 6b8d99e76df8..59f7b27ed829 100644 --- a/pkg/crosscluster/replicationtestutils/testutils.go +++ b/pkg/crosscluster/replicationtestutils/testutils.go @@ -30,6 +30,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql" "github.com/cockroachdb/cockroach/pkg/sql/execinfra" "github.com/cockroachdb/cockroach/pkg/storage" + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/jobutils" "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" @@ -77,7 +78,7 @@ type TenantStreamingClustersArgs struct { MultiTenantSingleClusterTestRegions []string NoMetamorphicExternalConnection bool - ExternalIODir string + StorageConfig storagepb.NodeConfig RoutingMode streamclient.RoutingMode } @@ -408,7 +409,7 @@ func CreateServerArgs(args TenantStreamingClustersArgs) base.TestServerArgs { EnableTenantIDReuse: true, }, }, - ExternalIODir: args.ExternalIODir, + StorageConfig: args.StorageConfig, } } diff --git a/pkg/kv/kvserver/batcheval/BUILD.bazel b/pkg/kv/kvserver/batcheval/BUILD.bazel index 4affe4876eb9..b5929caf0e3f 100644 --- a/pkg/kv/kvserver/batcheval/BUILD.bazel +++ b/pkg/kv/kvserver/batcheval/BUILD.bazel @@ -169,6 +169,7 @@ go_test( "//pkg/storage", "//pkg/storage/enginepb", "//pkg/storage/fs", + "//pkg/storage/storagepb", "//pkg/testutils", "//pkg/testutils/serverutils", "//pkg/testutils/skip", diff --git a/pkg/kv/kvserver/batcheval/cmd_export_test.go b/pkg/kv/kvserver/batcheval/cmd_export_test.go index 59b4cb364d65..558d9ce10b94 100644 --- a/pkg/kv/kvserver/batcheval/cmd_export_test.go +++ b/pkg/kv/kvserver/batcheval/cmd_export_test.go @@ -30,6 +30,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/catalog/desctestutils" "github.com/cockroachdb/cockroach/pkg/storage" "github.com/cockroachdb/cockroach/pkg/storage/fs" + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" "github.com/cockroachdb/cockroach/pkg/testutils/skip" @@ -53,7 +54,7 @@ func TestExportCmd(t *testing.T) { defer dirCleanupFn() srv, db, kvDB := serverutils.StartServer(t, base.TestServerArgs{ DefaultTestTenant: base.TestIsForStuffThatShouldWorkWithSecondaryTenantsButDoesntYet(109429), - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, }) defer srv.Stopper().Stop(ctx) ts := srv.ApplicationLayer() diff --git a/pkg/server/config.go b/pkg/server/config.go index 4e44be57bdf2..6edd5aafe4e3 100644 --- a/pkg/server/config.go +++ b/pkg/server/config.go @@ -269,11 +269,6 @@ type BaseConfig struct { // CidrLookup is used to look up the tag name for a given IP address. CidrLookup *cidr.Lookup - - // ExternalIODir is the local file path under which remotely-initiated - // operations that can specify node-local I/O paths (such as BACKUP, RESTORE - // or IMPORT) can access files. - ExternalIODir string } // MakeBaseConfig returns a BaseConfig with default values. @@ -617,6 +612,7 @@ func MakeConfig(ctx context.Context, st *cluster.Settings) Config { // multiple times. func (cfg *Config) SetDefaults(ctx context.Context, st *cluster.Settings) { storeSpec, tempStorageCfg := makeStorageCfg(ctx, st) + cfg.StorageConfig = storagepb.NodeConfig{} cfg.SQLConfig.SetDefaults(tempStorageCfg) cfg.KVConfig.SetDefaults() tr := tracing.NewTracerWithOpt(ctx, tracing.WithClusterSettings(&st.SV)) diff --git a/pkg/server/server.go b/pkg/server/server.go index 2ad3f8b9ff51..7c74528348d1 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -967,7 +967,7 @@ func NewServer(cfg Config, stopper *stop.Stopper) (serverctl.ServerStartupInterf ctpb.RegisterSideTransportServer(grpcServer.Server, ctReceiver) // Create blob service for inter-node file sharing. - blobService, err := blobs.NewBlobService(cfg.ExternalIODir) + blobService, err := blobs.NewBlobService(cfg.StorageConfig.ExternalIODir) if err != nil { return nil, errors.Wrap(err, "creating blob service") } @@ -2078,7 +2078,7 @@ func (s *topLevelServer) PreStart(ctx context.Context) error { s.sqlServer.execCfg.InternalDB.CloneWithMemoryMonitor(sql.MemoryMetrics{}, ieMon), nil, /* TenantExternalIORecorder */ s.appRegistry, - s.cfg.ExternalIODir, + s.cfg.StorageConfig.ExternalIODir, ) if err := s.runIdempontentSQLForInitType(ctx, state.initType); err != nil { diff --git a/pkg/server/server_controller_new_server.go b/pkg/server/server_controller_new_server.go index ca92320a0859..b4bd36c28c57 100644 --- a/pkg/server/server_controller_new_server.go +++ b/pkg/server/server_controller_new_server.go @@ -327,7 +327,9 @@ func makeSharedProcessTenantServerConfig( sqlCfg = MakeSQLConfig(tenantID, tempStorageCfg) baseCfg.ExternalIODirConfig = kvServerCfg.BaseConfig.ExternalIODirConfig - baseCfg.ExternalIODir = kvServerCfg.BaseConfig.ExternalIODir + // TODO(baptist): Validate if the entire storage config should be copied or + // if some needs to be stripped out as we add more to StorageConfig. + baseCfg.StorageConfig = kvServerCfg.StorageConfig // Use the internal connector instead of the network. // See: https://github.com/cockroachdb/cockroach/issues/84591 diff --git a/pkg/server/tenant.go b/pkg/server/tenant.go index ef816737893f..8a766e44a2d8 100644 --- a/pkg/server/tenant.go +++ b/pkg/server/tenant.go @@ -858,7 +858,7 @@ func (s *SQLServerWrapper) PreStart(ctx context.Context) error { CloneWithMemoryMonitor(sql.MemoryMetrics{}, ieMon), s.costController, s.registry, - s.cfg.ExternalIODir, + s.cfg.StorageConfig.ExternalIODir, ) // Start the job scheduler now that the SQL Server and diff --git a/pkg/server/testserver.go b/pkg/server/testserver.go index f698f9ac2cb9..f6322756fbb9 100644 --- a/pkg/server/testserver.go +++ b/pkg/server/testserver.go @@ -163,7 +163,7 @@ func makeTestConfigFromParams(params base.TestServerArgs) Config { cfg.Locality = params.Locality cfg.StartDiagnosticsReporting = params.StartDiagnosticsReporting cfg.DisableSQLServer = params.DisableSQLServer - cfg.ExternalIODir = params.ExternalIODir + cfg.StorageConfig = params.StorageConfig if params.TraceDir != "" { if err := initTraceDir(params.TraceDir); err == nil { cfg.InflightTraceDirName = params.TraceDir @@ -566,7 +566,7 @@ func (ts *testServer) TestingKnobs() *base.TestingKnobs { // ExternalIODir is part of the serverutils.ApplicationLayerInterface. func (ts *testServer) ExternalIODir() string { - return ts.cfg.ExternalIODir + return ts.cfg.StorageConfig.ExternalIODir } // SQLServerInternal is part of the serverutils.ApplicationLayerInterface. @@ -613,7 +613,7 @@ func (ts *testServer) startDefaultTestTenant( MemoryPoolSize: ts.params.SQLMemoryPoolSize, TempStorageConfig: &tempStorageConfig, Locality: ts.params.Locality, - ExternalIODir: ts.params.ExternalIODir, + StorageConfig: ts.params.StorageConfig, ExternalIODirConfig: ts.params.ExternalIODirConfig, ForceInsecure: ts.Insecure(), UseDatabase: ts.params.UseDatabase, @@ -758,7 +758,7 @@ func (ts *testServer) grantDefaultTenantCapabilities( // cases, we only set the nodelocal storage capability if the caller has // configured an ExternalIODir since nodelocal storage only works with that // configured. - shouldGrantNodelocalCap := ts.params.ExternalIODir != "" + shouldGrantNodelocalCap := ts.params.StorageConfig.ExternalIODir != "" if shouldGrantNodelocalCap { _, err := ie.Exec(ctx, "testserver-alter-tenant-cap", nil, "ALTER TENANT [$1] GRANT CAPABILITY can_use_nodelocal_storage", tenantID.ToUint64()) @@ -951,7 +951,7 @@ func (t *testTenant) RPCAddr() string { // ExternalIODir is part of the serverutils.ApplicationLayerInterface. func (t *testTenant) ExternalIODir() string { - return t.Cfg.ExternalIODir + return t.Cfg.StorageConfig.ExternalIODir } // SQLConn is part of the serverutils.ApplicationLayerInterface. @@ -1707,7 +1707,7 @@ func (ts *testServer) StartTenant( baseCfg.CPUProfileDirName = ts.Cfg.BaseConfig.CPUProfileDirName baseCfg.GoroutineDumpDirName = ts.Cfg.BaseConfig.GoroutineDumpDirName baseCfg.ExternalIODirConfig = params.ExternalIODirConfig - baseCfg.ExternalIODir = params.ExternalIODir + baseCfg.StorageConfig = params.StorageConfig // Grant the tenant the default capabilities. if err := ts.grantDefaultTenantCapabilities(ctx, params.TenantID, params.SkipTenantCheck); err != nil { diff --git a/pkg/sql/importer/BUILD.bazel b/pkg/sql/importer/BUILD.bazel index 11daa31195ea..46acf215073a 100644 --- a/pkg/sql/importer/BUILD.bazel +++ b/pkg/sql/importer/BUILD.bazel @@ -224,6 +224,7 @@ go_test( "//pkg/sql/tests", "//pkg/sql/types", "//pkg/storage", + "//pkg/storage/storagepb", "//pkg/testutils", "//pkg/testutils/datapathutils", "//pkg/testutils/jobutils", diff --git a/pkg/sql/importer/exportcsv_test.go b/pkg/sql/importer/exportcsv_test.go index 09fa131ad658..ac32ffd7d023 100644 --- a/pkg/sql/importer/exportcsv_test.go +++ b/pkg/sql/importer/exportcsv_test.go @@ -33,6 +33,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/catalog/descidgen" "github.com/cockroachdb/cockroach/pkg/sql/execinfrapb" "github.com/cockroachdb/cockroach/pkg/sql/rowenc" + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" "github.com/cockroachdb/cockroach/pkg/testutils/skip" @@ -59,7 +60,7 @@ func setupExportableBank(t *testing.T, nodes, rows int) (*sqlutils.SQLRunner, st tc := testcluster.StartTestCluster(t, nodes, base.TestClusterArgs{ ServerArgs: base.TestServerArgs{ - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, }, }, ) @@ -153,7 +154,7 @@ func TestExportNullWithEmptyNullAs(t *testing.T) { defer cleanup() tc := testcluster.StartTestCluster( - t, 1, base.TestClusterArgs{ServerArgs: base.TestServerArgs{ExternalIODir: dir}}) + t, 1, base.TestClusterArgs{ServerArgs: base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}}}) defer tc.Stopper().Stop(ctx) conn := tc.Conns[0] @@ -246,7 +247,7 @@ func TestExportJoin(t *testing.T) { dir, cleanupDir := testutils.TempDir(t) defer cleanupDir() - srv, db, _ := serverutils.StartServer(t, base.TestServerArgs{ExternalIODir: dir}) + srv, db, _ := serverutils.StartServer(t, base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}}) defer srv.Stopper().Stop(context.Background()) sqlDB := sqlutils.MakeSQLRunner(db) @@ -272,7 +273,7 @@ func TestExportOrder(t *testing.T) { dir, cleanupDir := testutils.TempDir(t) defer cleanupDir() - srv, db, _ := serverutils.StartServer(t, base.TestServerArgs{ExternalIODir: dir}) + srv, db, _ := serverutils.StartServer(t, base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}}) defer srv.Stopper().Stop(context.Background()) sqlDB := sqlutils.MakeSQLRunner(db) @@ -293,7 +294,7 @@ func TestExportUniqueness(t *testing.T) { dir, cleanupDir := testutils.TempDir(t) defer cleanupDir() - srv, db, _ := serverutils.StartServer(t, base.TestServerArgs{ExternalIODir: dir}) + srv, db, _ := serverutils.StartServer(t, base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}}) defer srv.Stopper().Stop(context.Background()) sqlDB := sqlutils.MakeSQLRunner(db) @@ -322,7 +323,7 @@ func TestExportUserDefinedTypes(t *testing.T) { defer cleanup() tc := testcluster.StartTestCluster( - t, 1, base.TestClusterArgs{ServerArgs: base.TestServerArgs{ExternalIODir: dir}}) + t, 1, base.TestClusterArgs{ServerArgs: base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}}}) defer tc.Stopper().Stop(ctx) conn := tc.Conns[0] @@ -376,7 +377,7 @@ func TestExportOrderCompressed(t *testing.T) { } } - srv, db, _ := serverutils.StartServer(t, base.TestServerArgs{ExternalIODir: dir}) + srv, db, _ := serverutils.StartServer(t, base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}}) defer srv.Stopper().Stop(context.Background()) sqlDB := sqlutils.MakeSQLRunner(db) @@ -406,7 +407,7 @@ func TestExportShow(t *testing.T) { dir, cleanupDir := testutils.TempDir(t) defer cleanupDir() - srv, db, _ := serverutils.StartServer(t, base.TestServerArgs{ExternalIODir: dir}) + srv, db, _ := serverutils.StartServer(t, base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}}) defer srv.Stopper().Stop(context.Background()) sqlDB := sqlutils.MakeSQLRunner(db) @@ -428,7 +429,7 @@ func TestExportVectorized(t *testing.T) { dir, cleanupDir := testutils.TempDir(t) defer cleanupDir() - srv, db, _ := serverutils.StartServer(t, base.TestServerArgs{ExternalIODir: dir}) + srv, db, _ := serverutils.StartServer(t, base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}}) defer srv.Stopper().Stop(context.Background()) sqlDB := sqlutils.MakeSQLRunner(db) @@ -444,7 +445,7 @@ func TestExportFeatureFlag(t *testing.T) { dir, cleanupDir := testutils.TempDir(t) defer cleanupDir() - srv, db, _ := serverutils.StartServer(t, base.TestServerArgs{ExternalIODir: dir}) + srv, db, _ := serverutils.StartServer(t, base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}}) defer srv.Stopper().Stop(context.Background()) sqlDB := sqlutils.MakeSQLRunner(db) @@ -465,7 +466,7 @@ func TestExportPrivileges(t *testing.T) { dir, cleanupDir := testutils.TempDir(t) defer cleanupDir() - srv, db, _ := serverutils.StartServer(t, base.TestServerArgs{ExternalIODir: dir}) + srv, db, _ := serverutils.StartServer(t, base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}}) defer srv.Stopper().Stop(context.Background()) sqlDB := sqlutils.MakeSQLRunner(db) sqlDB.Exec(t, `CREATE USER testuser`) @@ -511,7 +512,7 @@ func TestExportTargetFileSizeSetting(t *testing.T) { defer cleanup() tc := testcluster.StartTestCluster( - t, 1, base.TestClusterArgs{ServerArgs: base.TestServerArgs{ExternalIODir: dir}}) + t, 1, base.TestClusterArgs{ServerArgs: base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}}}) defer tc.Stopper().Stop(ctx) conn := tc.Conns[0] diff --git a/pkg/sql/importer/exportparquet_test.go b/pkg/sql/importer/exportparquet_test.go index f5a578cf1edd..285e3fb9070b 100644 --- a/pkg/sql/importer/exportparquet_test.go +++ b/pkg/sql/importer/exportparquet_test.go @@ -25,6 +25,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/sessiondata" "github.com/cockroachdb/cockroach/pkg/sql/types" + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" "github.com/cockroachdb/cockroach/pkg/testutils/sqlutils" @@ -179,7 +180,7 @@ func TestRandomParquetExports(t *testing.T) { dbName := "rand" srv, db, _ := serverutils.StartServer(t, base.TestServerArgs{ UseDatabase: dbName, - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, }) ctx := context.Background() defer srv.Stopper().Stop(ctx) @@ -275,7 +276,7 @@ func TestBasicParquetTypes(t *testing.T) { dbName := "baz" srv, db, _ := serverutils.StartServer(t, base.TestServerArgs{ UseDatabase: dbName, - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, }) ctx := context.Background() defer srv.Stopper().Stop(ctx) @@ -403,7 +404,7 @@ func TestMemoryMonitor(t *testing.T) { defer dirCleanupFn() s, db, _ := serverutils.StartServer(t, base.TestServerArgs{ - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, Knobs: base.TestingKnobs{ DistSQL: &execinfra.TestingKnobs{ Export: &importer.ExportTestingKnobs{ diff --git a/pkg/sql/importer/import_into_test.go b/pkg/sql/importer/import_into_test.go index e1381ee2f5d6..196875f9c3d1 100644 --- a/pkg/sql/importer/import_into_test.go +++ b/pkg/sql/importer/import_into_test.go @@ -19,6 +19,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/kv/kvserver" "github.com/cockroachdb/cockroach/pkg/kv/kvserver/protectedts" "github.com/cockroachdb/cockroach/pkg/roachpb" + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" "github.com/cockroachdb/cockroach/pkg/testutils/sqlutils" @@ -194,7 +195,7 @@ func TestImportIntoWithUDTArray(t *testing.T) { ctx := context.Background() srv, db, _ := serverutils.StartServer(t, base.TestServerArgs{ - ExternalIODir: dir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: dir}, }) defer srv.Stopper().Stop(ctx) diff --git a/pkg/sql/importer/import_stmt_test.go b/pkg/sql/importer/import_stmt_test.go index 9c7aa3609cd9..7244a9d47be4 100644 --- a/pkg/sql/importer/import_stmt_test.go +++ b/pkg/sql/importer/import_stmt_test.go @@ -59,6 +59,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/stats" "github.com/cockroachdb/cockroach/pkg/sql/tests" + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/datapathutils" "github.com/cockroachdb/cockroach/pkg/testutils/jobutils" @@ -1389,7 +1390,7 @@ func TestImportIntoUserDefinedTypes(t *testing.T) { baseDir, cleanup := testutils.TempDir(t) defer cleanup() tc := serverutils.StartCluster( - t, 1, base.TestClusterArgs{ServerArgs: base.TestServerArgs{ExternalIODir: baseDir}}) + t, 1, base.TestClusterArgs{ServerArgs: base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}}}) defer tc.Stopper().Stop(ctx) conn := tc.ServerConn(0) sqlDB := sqlutils.MakeSQLRunner(conn) @@ -1681,7 +1682,7 @@ func TestImportRowLimit(t *testing.T) { ctx := context.Background() baseDir := datapathutils.TestDataPath(t) - args := base.TestServerArgs{ExternalIODir: baseDir} + args := base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}} tc := serverutils.StartCluster(t, 1, base.TestClusterArgs{ServerArgs: args}) defer tc.Stopper().Stop(ctx) conn := tc.ServerConn(0) @@ -2034,7 +2035,7 @@ func TestFailedImportGC(t *testing.T) { // investigation is required. Tracked with #76378. DefaultTestTenant: base.TODOTestTenantDisabled, SQLMemoryPoolSize: 256 << 20, - ExternalIODir: baseDir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}, Knobs: base.TestingKnobs{ GCJob: &sql.GCJobTestingKnobs{ RunBeforeResume: func(_ jobspb.JobID) error { <-blockGC; return nil }, @@ -2139,7 +2140,7 @@ func TestImportIntoCSVCancel(t *testing.T) { JobsTestingKnobs: jobs.NewTestingKnobsWithShortIntervals(), }, DefaultTestTenant: base.TODOTestTenantDisabled, - ExternalIODir: baseDir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}, }}) defer tc.Stopper().Stop(ctx) conn := tc.ServerConn(0) @@ -2197,7 +2198,7 @@ func TestImportCSVStmt(t *testing.T) { // investigation is required. Tracked with #76378. DefaultTestTenant: base.TODOTestTenantDisabled, SQLMemoryPoolSize: 256 << 20, - ExternalIODir: baseDir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}, }}) defer tc.Stopper().Stop(ctx) conn := tc.ServerConn(0) @@ -2727,7 +2728,7 @@ func TestImportFeatureFlag(t *testing.T) { ctx := context.Background() baseDir := datapathutils.TestDataPath(t, "csv") - tc := serverutils.StartCluster(t, nodes, base.TestClusterArgs{ServerArgs: base.TestServerArgs{ExternalIODir: baseDir}}) + tc := serverutils.StartCluster(t, nodes, base.TestClusterArgs{ServerArgs: base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}}}) defer tc.Stopper().Stop(ctx) sqlDB := sqlutils.MakeSQLRunner(tc.ServerConn(0)) @@ -2772,7 +2773,7 @@ func TestImportObjectLevelRBAC(t *testing.T) { // Test fails when run within a test tenant. More investigation // is required. Tracked with #76378. DefaultTestTenant: base.TODOTestTenantDisabled, - ExternalIODir: baseDir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}, SQLMemoryPoolSize: 256 << 20, }}) defer tc.Stopper().Stop(ctx) @@ -2883,7 +2884,7 @@ func TestExportImportRoundTrip(t *testing.T) { defer cleanup() tc := serverutils.StartCluster( - t, 1, base.TestClusterArgs{ServerArgs: base.TestServerArgs{ExternalIODir: baseDir}}) + t, 1, base.TestClusterArgs{ServerArgs: base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}}}) defer tc.Stopper().Stop(ctx) conn := tc.ServerConn(0) @@ -2962,7 +2963,8 @@ func TestImportIntoCSV(t *testing.T) { // Test fails when run within a test tenant. More investigation // is required. Tracked with #76378. DefaultTestTenant: base.TODOTestTenantDisabled, - ExternalIODir: baseDir}}) + StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}, + }}) defer tc.Stopper().Stop(ctx) conn := tc.ServerConn(0) @@ -3851,7 +3853,7 @@ func benchUserUpload(b *testing.B, uploadBaseURI string) { require.NoError(b, err) testFileBase := fmt.Sprintf("/%s", filepath.Base(f.Name())) - tc := serverutils.StartCluster(b, nodes, base.TestClusterArgs{ServerArgs: base.TestServerArgs{ExternalIODir: baseDir}}) + tc := serverutils.StartCluster(b, nodes, base.TestClusterArgs{ServerArgs: base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}}}) defer tc.Stopper().Stop(ctx) sqlDB := sqlutils.MakeSQLRunner(tc.ServerConn(0)) @@ -4121,7 +4123,7 @@ func TestImportDefault(t *testing.T) { ctx := context.Background() baseDir := datapathutils.TestDataPath(t, "csv") - tc := serverutils.StartCluster(t, nodes, base.TestClusterArgs{ServerArgs: base.TestServerArgs{ExternalIODir: baseDir}}) + tc := serverutils.StartCluster(t, nodes, base.TestClusterArgs{ServerArgs: base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}}}) defer tc.Stopper().Stop(ctx) conn := tc.ServerConn(0) @@ -4549,7 +4551,7 @@ func TestImportDefaultNextVal(t *testing.T) { ctx := context.Background() baseDir := datapathutils.TestDataPath(t, "csv") - tc := serverutils.StartCluster(t, nodes, base.TestClusterArgs{ServerArgs: base.TestServerArgs{ExternalIODir: baseDir}}) + tc := serverutils.StartCluster(t, nodes, base.TestClusterArgs{ServerArgs: base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}}}) defer tc.Stopper().Stop(ctx) conn := tc.ServerConn(0) @@ -4817,7 +4819,7 @@ func TestImportComputed(t *testing.T) { ctx := context.Background() baseDir := datapathutils.TestDataPath(t, "csv") - tc := serverutils.StartCluster(t, nodes, base.TestClusterArgs{ServerArgs: base.TestServerArgs{ExternalIODir: baseDir}}) + tc := serverutils.StartCluster(t, nodes, base.TestClusterArgs{ServerArgs: base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}}}) defer tc.Stopper().Stop(ctx) conn := tc.ServerConn(0) @@ -5428,7 +5430,7 @@ func TestImportMysql(t *testing.T) { const nodes = 3 ctx := context.Background() baseDir := datapathutils.TestDataPath(t) - args := base.TestServerArgs{ExternalIODir: baseDir} + args := base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}} tc := serverutils.StartCluster(t, nodes, base.TestClusterArgs{ServerArgs: args}) defer tc.Stopper().Stop(ctx) sqlDB := sqlutils.MakeSQLRunner(tc.ServerConn(0)) @@ -5558,7 +5560,8 @@ func TestImportIntoMysql(t *testing.T) { const nodes = 3 ctx := context.Background() baseDir := datapathutils.TestDataPath(t) - args := base.TestServerArgs{ExternalIODir: baseDir} + args := base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}} + tc := serverutils.StartCluster(t, nodes, base.TestClusterArgs{ServerArgs: args}) defer tc.Stopper().Stop(ctx) sqlDB := sqlutils.MakeSQLRunner(tc.ServerConn(0)) @@ -5585,7 +5588,7 @@ func TestImportDelimited(t *testing.T) { const nodes = 3 ctx := context.Background() baseDir := datapathutils.TestDataPath(t, "mysqlout") - args := base.TestServerArgs{ExternalIODir: baseDir} + args := base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}} tc := serverutils.StartCluster(t, nodes, base.TestClusterArgs{ServerArgs: args}) defer tc.Stopper().Stop(ctx) conn := tc.ServerConn(0) @@ -5675,7 +5678,7 @@ func TestImportPgCopy(t *testing.T) { const nodes = 3 ctx := context.Background() baseDir := datapathutils.TestDataPath(t, "pgcopy") - args := base.TestServerArgs{ExternalIODir: baseDir} + args := base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}} tc := serverutils.StartCluster(t, nodes, base.TestClusterArgs{ServerArgs: args}) defer tc.Stopper().Stop(ctx) conn := tc.ServerConn(0) @@ -5761,7 +5764,7 @@ func TestImportPgDump(t *testing.T) { const nodes = 3 ctx := context.Background() baseDir := datapathutils.TestDataPath(t) - args := base.TestServerArgs{ExternalIODir: baseDir} + args := base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}} tc := serverutils.StartCluster(t, nodes, base.TestClusterArgs{ServerArgs: args}) defer tc.Stopper().Stop(ctx) conn := tc.ServerConn(0) @@ -6121,7 +6124,7 @@ func TestImportPgDumpGeo(t *testing.T) { const nodes = 1 ctx := context.Background() baseDir := datapathutils.TestDataPath(t, "pgdump") - args := base.TestServerArgs{ExternalIODir: baseDir} + args := base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}} t.Run("geo_shp2pgsql.sql", func(t *testing.T) { tc := serverutils.StartCluster(t, nodes, base.TestClusterArgs{ServerArgs: args}) @@ -6200,7 +6203,7 @@ func TestImportPgDumpDropTable(t *testing.T) { ctx := context.Background() baseDir := datapathutils.TestDataPath(t) - args := base.TestServerArgs{ExternalIODir: baseDir} + args := base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}} tc := serverutils.StartCluster(t, 1, base.TestClusterArgs{ServerArgs: args}) defer tc.Stopper().Stop(ctx) conn := tc.ServerConn(0) @@ -6288,7 +6291,7 @@ func TestImportPgDumpSchemas(t *testing.T) { s := cluster.MakeTestingClusterSettings() return base.TestServerArgs{ Settings: s, - ExternalIODir: baseDir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}, Knobs: base.TestingKnobs{ KeyVisualizer: &keyvisualizer.TestingKnobs{ SkipJobBootstrap: true, @@ -6515,7 +6518,7 @@ func TestImportCockroachDump(t *testing.T) { const nodes = 3 ctx := context.Background() baseDir := datapathutils.TestDataPath(t) - args := base.TestServerArgs{ExternalIODir: baseDir} + args := base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}} tc := serverutils.StartCluster(t, nodes, base.TestClusterArgs{ServerArgs: args}) defer tc.Stopper().Stop(ctx) conn := tc.ServerConn(0) @@ -6578,7 +6581,7 @@ func TestCreateStatsAfterImport(t *testing.T) { args := base.TestServerArgs{ Settings: st, DefaultTestTenant: base.TODOTestTenantDisabled, - ExternalIODir: baseDir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}, } tc := serverutils.StartCluster(t, nodes, base.TestClusterArgs{ServerArgs: args}) defer tc.Stopper().Stop(ctx) @@ -6614,7 +6617,7 @@ func TestImportAvro(t *testing.T) { const nodes = 3 ctx := context.Background() baseDir := datapathutils.TestDataPath(t, "avro") - args := base.TestServerArgs{ExternalIODir: baseDir} + args := base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}} tc := serverutils.StartCluster(t, nodes, base.TestClusterArgs{ServerArgs: args}) defer tc.Stopper().Stop(ctx) sqlDB := sqlutils.MakeSQLRunner(tc.ServerConn(0)) @@ -6941,7 +6944,7 @@ func TestDetachedImport(t *testing.T) { const nodes = 3 ctx := context.Background() baseDir := datapathutils.TestDataPath(t, "avro") - args := base.TestServerArgs{ExternalIODir: baseDir} + args := base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}} tc := serverutils.StartCluster(t, nodes, base.TestClusterArgs{ServerArgs: args}) defer tc.Stopper().Stop(ctx) connDB := tc.ServerConn(0) @@ -7043,7 +7046,7 @@ func TestImportJobEventLogging(t *testing.T) { const nodes = 3 ctx := context.Background() baseDir := datapathutils.TestDataPath(t, "avro") - args := base.TestServerArgs{ExternalIODir: baseDir} + args := base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}} // Test fails within a test tenant. More investigation is required. // Tracked with #76378. args.DefaultTestTenant = base.TODOTestTenantDisabled @@ -7128,7 +7131,7 @@ func TestImportDefautIntSizeSetting(t *testing.T) { baseDir, cleanup := testutils.TempDir(t) defer cleanup() tc := serverutils.StartCluster( - t, 1, base.TestClusterArgs{ServerArgs: base.TestServerArgs{ExternalIODir: baseDir}}) + t, 1, base.TestClusterArgs{ServerArgs: base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}}}) defer tc.Stopper().Stop(ctx) conn := tc.ServerConn(0) sqlDB := sqlutils.MakeSQLRunner(conn) @@ -7270,7 +7273,7 @@ func TestUDTChangeDuringImport(t *testing.T) { allowResponse := make(chan struct{}) tc := serverutils.StartCluster( t, 1, base.TestClusterArgs{ServerArgs: base.TestServerArgs{ - ExternalIODir: baseDir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}, Knobs: base.TestingKnobs{ JobsTestingKnobs: jobs.NewTestingKnobsWithShortIntervals(), Store: &kvserver.StoreTestingKnobs{ @@ -7345,7 +7348,7 @@ func TestImportIntoPartialIndexes(t *testing.T) { ctx := context.Background() baseDir := filepath.Join("testdata", "avro") - args := base.TestServerArgs{ExternalIODir: baseDir} + args := base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}} tc := serverutils.StartCluster( t, 1, base.TestClusterArgs{ServerArgs: args}) defer tc.Stopper().Stop(ctx) @@ -7453,7 +7456,7 @@ func TestImportIntoWithHashShardedIndex(t *testing.T) { ctx := context.Background() baseDir := filepath.Join("testdata", "avro") - args := base.TestServerArgs{ExternalIODir: baseDir} + args := base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}} tc := serverutils.StartCluster( t, 1, base.TestClusterArgs{ServerArgs: args}) defer tc.Stopper().Stop(ctx) diff --git a/pkg/sql/importer/read_import_pgdump_test.go b/pkg/sql/importer/read_import_pgdump_test.go index 88bc0f761b25..8516986ab83a 100644 --- a/pkg/sql/importer/read_import_pgdump_test.go +++ b/pkg/sql/importer/read_import_pgdump_test.go @@ -15,6 +15,7 @@ import ( "testing" "github.com/cockroachdb/cockroach/pkg/base" + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" "github.com/cockroachdb/cockroach/pkg/testutils/sqlutils" @@ -161,7 +162,7 @@ func TestImportPGDump(t *testing.T) { baseDir, cleanup := testutils.TempDir(t) defer cleanup() tc := serverutils.StartCluster( - t, 1, base.TestClusterArgs{ServerArgs: base.TestServerArgs{ExternalIODir: baseDir}}) + t, 1, base.TestClusterArgs{ServerArgs: base.TestServerArgs{StorageConfig: storagepb.NodeConfig{ExternalIODir: baseDir}}}) defer tc.Stopper().Stop(ctx) conn := tc.ServerConn(0) sqlDB := sqlutils.MakeSQLRunner(conn) diff --git a/pkg/sql/logictest/BUILD.bazel b/pkg/sql/logictest/BUILD.bazel index b6f964479cd6..9f0c43e4aea4 100644 --- a/pkg/sql/logictest/BUILD.bazel +++ b/pkg/sql/logictest/BUILD.bazel @@ -81,6 +81,7 @@ go_library( "//pkg/sql/sessiondatapb", "//pkg/sql/sqlstats", "//pkg/sql/stats", + "//pkg/storage/storagepb", "//pkg/testutils", "//pkg/testutils/datapathutils", "//pkg/testutils/floatcmp", diff --git a/pkg/sql/logictest/logic.go b/pkg/sql/logictest/logic.go index a68eb878c271..33abd2f6204b 100644 --- a/pkg/sql/logictest/logic.go +++ b/pkg/sql/logictest/logic.go @@ -60,6 +60,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/sessiondatapb" "github.com/cockroachdb/cockroach/pkg/sql/sqlstats" "github.com/cockroachdb/cockroach/pkg/sql/stats" + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/datapathutils" "github.com/cockroachdb/cockroach/pkg/testutils/floatcmp" @@ -1545,7 +1546,7 @@ func (t *logicTest) newCluster( }, }, ClusterName: "testclustername", - ExternalIODir: t.sharedIODir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: t.sharedIODir}, }, // For distributed SQL tests, we use the fake span resolver; it doesn't // matter where the data really is. @@ -1641,7 +1642,7 @@ func (t *logicTest) newCluster( Locality: paramsPerNode[i].Locality, TracingDefault: params.ServerArgs.TracingDefault, // Give every tenant its own ExternalIO directory. - ExternalIODir: path.Join(t.sharedIODir, strconv.Itoa(i)), + StorageConfig: storagepb.NodeConfig{ExternalIODir: path.Join(t.sharedIODir, strconv.Itoa(i))}, } setSQLTestingKnobs(&tenantArgs.TestingKnobs) diff --git a/pkg/sql/sqltestutils/telemetry.go b/pkg/sql/sqltestutils/telemetry.go index c4f79d073b5a..586e19c82779 100644 --- a/pkg/sql/sqltestutils/telemetry.go +++ b/pkg/sql/sqltestutils/telemetry.go @@ -144,7 +144,7 @@ func (tt *telemetryTest) Start(t *testing.T, serverArgs []base.TestServerArgs) { OverrideReportingURL: &diagSrvURL, }, } - v.ExternalIODir = tempExternalIODir + v.StorageConfig.ExternalIODir = tempExternalIODir mapServerArgs[i] = v } tt.cluster = serverutils.StartCluster( diff --git a/pkg/sql/tests/BUILD.bazel b/pkg/sql/tests/BUILD.bazel index ab8115642c80..34d0bdc1b174 100644 --- a/pkg/sql/tests/BUILD.bazel +++ b/pkg/sql/tests/BUILD.bazel @@ -117,6 +117,7 @@ go_test( "//pkg/sql/stats", "//pkg/sql/types", "//pkg/storage", + "//pkg/storage/storagepb", "//pkg/testutils", "//pkg/testutils/datapathutils", "//pkg/testutils/serverutils", diff --git a/pkg/sql/tests/copy_file_upload_test.go b/pkg/sql/tests/copy_file_upload_test.go index edfe13005ea1..745b18ba2d32 100644 --- a/pkg/sql/tests/copy_file_upload_test.go +++ b/pkg/sql/tests/copy_file_upload_test.go @@ -21,6 +21,7 @@ import ( _ "github.com/cockroachdb/cockroach/pkg/cloud/impl" // register cloud storage providers "github.com/cockroachdb/cockroach/pkg/security/username" "github.com/cockroachdb/cockroach/pkg/sql" + "github.com/cockroachdb/cockroach/pkg/storage/storagepb" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" "github.com/cockroachdb/cockroach/pkg/util/ioctx" @@ -159,7 +160,7 @@ func TestFileUpload(t *testing.T) { defer cleanup() s, db, _ := serverutils.StartServer(t, base.TestServerArgs{ - ExternalIODir: localExternalDir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: localExternalDir}, }) defer s.Stopper().Stop(context.Background()) tt := s.ApplicationLayer() @@ -188,7 +189,7 @@ func TestUploadEmptyFile(t *testing.T) { localExternalDir, cleanup := testutils.TempDir(t) defer cleanup() s, db, _ := serverutils.StartServer(t, base.TestServerArgs{ - ExternalIODir: localExternalDir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: localExternalDir}, }) defer s.Stopper().Stop(context.Background()) tt := s.ApplicationLayer() @@ -216,7 +217,7 @@ func TestFileNotExist(t *testing.T) { localExternalDir, cleanup := testutils.TempDir(t) defer cleanup() s, db, _ := serverutils.StartServer(t, base.TestServerArgs{ - ExternalIODir: localExternalDir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: localExternalDir}, }) defer s.Stopper().Stop(context.Background()) @@ -234,7 +235,7 @@ func TestFileExist(t *testing.T) { localExternalDir, cleanup := testutils.TempDir(t) defer cleanup() s, db, _ := serverutils.StartServer(t, base.TestServerArgs{ - ExternalIODir: localExternalDir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: localExternalDir}, }) defer s.Stopper().Stop(context.Background()) @@ -265,7 +266,7 @@ func TestNodelocalNotAdmin(t *testing.T) { localExternalDir, cleanup := testutils.TempDir(t) defer cleanup() s, rootDB, _ := serverutils.StartServer(t, base.TestServerArgs{ - ExternalIODir: localExternalDir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: localExternalDir}, Insecure: true, }) defer s.Stopper().Stop(context.Background()) @@ -300,7 +301,7 @@ func TestUserfileNotAdmin(t *testing.T) { localExternalDir, cleanup := testutils.TempDir(t) defer cleanup() s, rootDB, _ := serverutils.StartServer(t, base.TestServerArgs{ - ExternalIODir: localExternalDir, + StorageConfig: storagepb.NodeConfig{ExternalIODir: localExternalDir}, Insecure: true, }) defer s.Stopper().Stop(context.Background()) diff --git a/pkg/storage/storagepb/storage.proto b/pkg/storage/storagepb/storage.proto index def8286b4966..227c821ad972 100644 --- a/pkg/storage/storagepb/storage.proto +++ b/pkg/storage/storagepb/storage.proto @@ -110,6 +110,12 @@ message NodeConfig { WALFailover wal_failover = 2 [ (gogoproto.nullable) = false, (gogoproto.customname) = "WALFailover" ]; + // ExternalIODir is the local file path under which remotely-initiated + // operations that can specify node-local I/O paths (such as BACKUP, RESTORE + // or IMPORT) can access files. If it is not explicitly set, it is computed + // based on the store configuration. + string external_io_dir = 3 [ (gogoproto.customname) = "ExternalIODir" ]; + // SharedStorage is specified to enable disaggregated shared storage. It is // enabled if the uri is set. SharedStorage shared_storage = 4 [ (gogoproto.nullable) = false ];