Skip to content

Commit 97ea5bc

Browse files
committed
batcheval: make TestExportCmd work with secondary tenants
Closes #109429 Release note: None
1 parent cdd0b29 commit 97ea5bc

File tree

1 file changed

+46
-39
lines changed

1 file changed

+46
-39
lines changed

pkg/kv/kvserver/batcheval/cmd_export_test.go

Lines changed: 46 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,11 @@ func TestExportCmd(t *testing.T) {
5353
dir, dirCleanupFn := testutils.TempDir(t)
5454
defer dirCleanupFn()
5555
srv, db, kvDB := serverutils.StartServer(t, base.TestServerArgs{
56-
DefaultTestTenant: base.TestIsForStuffThatShouldWorkWithSecondaryTenantsButDoesntYet(109429),
57-
ExternalIODir: dir,
56+
ExternalIODir: dir,
5857
})
5958
defer srv.Stopper().Stop(ctx)
6059
ts := srv.ApplicationLayer()
60+
ss := srv.SystemLayer()
6161

6262
export := func(
6363
t *testing.T, start hlc.Timestamp, mvccFilter kvpb.MVCCFilter, maxResponseSSTBytes int64,
@@ -184,28 +184,22 @@ func TestExportCmd(t *testing.T) {
184184
t, sqlDB.DB, "mvcclatest", "public", "export",
185185
))
186186

187-
const (
188-
targetSizeSetting = "kv.bulk_sst.target_size"
189-
maxOverageSetting = "kv.bulk_sst.max_allowed_overage"
190-
)
191187
var (
192-
setSetting = func(t *testing.T, variable, val string) {
193-
sqlDB.Exec(t, "SET CLUSTER SETTING "+variable+" = "+val)
194-
}
195-
resetSetting = func(t *testing.T, variable string) {
196-
setSetting(t, variable, "DEFAULT")
197-
}
198-
setExportTargetSize = func(t *testing.T, val string) {
199-
setSetting(t, targetSizeSetting, val)
188+
setExportTargetSize = func(t *testing.T, val int64) {
189+
batcheval.ExportRequestTargetFileSize.Override(ctx, &ss.ClusterSettings().SV, val)
200190
}
201191
resetExportTargetSize = func(t *testing.T) {
202-
resetSetting(t, targetSizeSetting)
192+
batcheval.ExportRequestTargetFileSize.Override(
193+
ctx, &ss.ClusterSettings().SV, batcheval.ExportRequestTargetFileSize.Default(),
194+
)
203195
}
204-
setMaxOverage = func(t *testing.T, val string) {
205-
setSetting(t, maxOverageSetting, val)
196+
setMaxOverage = func(t *testing.T, val int64) {
197+
batcheval.ExportRequestMaxAllowedFileSizeOverage.Override(ctx, &ss.ClusterSettings().SV, val)
206198
}
207199
resetMaxOverage = func(t *testing.T) {
208-
resetSetting(t, maxOverageSetting)
200+
batcheval.ExportRequestMaxAllowedFileSizeOverage.Override(
201+
ctx, &ss.ClusterSettings().SV, batcheval.ExportRequestMaxAllowedFileSizeOverage.Default(),
202+
)
209203
}
210204
)
211205

@@ -220,7 +214,7 @@ func TestExportCmd(t *testing.T) {
220214
res1 = exportAndSlurp(t, hlc.Timestamp{}, noTargetBytes)
221215
expect(t, res1, 1, 2, 1, 4)
222216
defer resetExportTargetSize(t)
223-
setExportTargetSize(t, "'1b'")
217+
setExportTargetSize(t, 1)
224218
res1 = exportAndSlurp(t, hlc.Timestamp{}, noTargetBytes)
225219
expect(t, res1, 2, 2, 3, 4)
226220
})
@@ -264,7 +258,7 @@ func TestExportCmd(t *testing.T) {
264258

265259
// Re-run the test with a 1b target size which will lead to more files.
266260
defer resetExportTargetSize(t)
267-
setExportTargetSize(t, "'1b'")
261+
setExportTargetSize(t, 1)
268262
res5 = exportAndSlurp(t, hlc.Timestamp{}, noTargetBytes)
269263
expect(t, res5, 2, 2, 4, 7)
270264
})
@@ -287,15 +281,17 @@ INTO
287281

288282
// Re-run the test with a 1b target size which will lead to 100 files.
289283
defer resetExportTargetSize(t)
290-
setExportTargetSize(t, "'1b'")
284+
setExportTargetSize(t, 1)
291285
res6 = exportAndSlurp(t, res5.end, noTargetBytes)
292286
expect(t, res6, 100, 100, 100, 100)
293287

294288
// Set the MaxOverage to 1b and ensure that we get errors due to
295289
// the max overage being exceeded.
296290
defer resetMaxOverage(t)
297-
setMaxOverage(t, "'1b'")
298-
const expectedError = `export size \(11 bytes\) exceeds max size \(2 bytes\)`
291+
setMaxOverage(t, 1)
292+
// NB: Depending on which version of the test we're running (system tenant
293+
// vs. secondary), we'll get a different size for the export request.
294+
const expectedError = `export size \((11|13) bytes\) exceeds max size \(2 bytes\)`
299295
_, pErr := export(t, res5.end, kvpb.MVCCFilter_Latest, noTargetBytes)
300296
require.Regexp(t, expectedError, pErr)
301297
hints := errors.GetAllHints(pErr.GoError())
@@ -307,7 +303,7 @@ INTO
307303

308304
// Disable the TargetSize and ensure that we don't get any errors
309305
// to the max overage being exceeded.
310-
setExportTargetSize(t, "'0b'")
306+
setExportTargetSize(t, 0)
311307
res6 = exportAndSlurp(t, res5.end, noTargetBytes)
312308
expect(t, res6, 2, 100, 2, 100)
313309
})
@@ -316,6 +312,11 @@ INTO
316312
t.Run("ts7", func(t *testing.T) {
317313
var maxResponseSSTBytes int64
318314
kvByteSize := int64(11)
315+
if !ts.Codec().IsSystem() {
316+
// The kv byte size is different between the system tenant and secondary
317+
// tenants because of the extra tenant prefix.
318+
kvByteSize = 13
319+
}
319320
// Because of the above split, there are going to be two ExportRequests by
320321
// the DistSender. One for the first KV and the next one for the remaining
321322
// KVs.
@@ -337,6 +338,12 @@ INTO
337338
}
338339
expectResponseHeader(t, res7, latestRespHeader, allRespHeader)
339340

341+
var optTenantPrefix string
342+
endKey := "/Max"
343+
if !srv.Codec().IsSystem() {
344+
optTenantPrefix = srv.Codec().TenantPrefix().String()
345+
endKey = srv.Codec().TenantPrefix().PrefixEnd().String()
346+
}
340347
// No TargetSize and TargetBytes is equal to the size of a single KV. The
341348
// first ExportRequest will reduce the limit for the second request to zero
342349
// and so we should only see a single ExportRequest and an accurate
@@ -346,16 +353,16 @@ INTO
346353
expect(t, res7, 1, 1, 1, 1)
347354
latestRespHeader = kvpb.ResponseHeader{
348355
ResumeSpan: &roachpb.Span{
349-
Key: []byte(fmt.Sprintf("/Table/%d/1/2", tableID)),
350-
EndKey: []byte("/Max"),
356+
Key: []byte(fmt.Sprintf("%s/Table/%d/1/2", optTenantPrefix, tableID)),
357+
EndKey: []byte(endKey),
351358
},
352359
ResumeReason: kvpb.RESUME_BYTE_LIMIT,
353360
NumBytes: maxResponseSSTBytes,
354361
}
355362
allRespHeader = kvpb.ResponseHeader{
356363
ResumeSpan: &roachpb.Span{
357-
Key: []byte(fmt.Sprintf("/Table/%d/1/2", tableID)),
358-
EndKey: []byte("/Max"),
364+
Key: []byte(fmt.Sprintf("%s/Table/%d/1/2", optTenantPrefix, tableID)),
365+
EndKey: []byte(endKey),
359366
},
360367
ResumeReason: kvpb.RESUME_BYTE_LIMIT,
361368
NumBytes: maxResponseSSTBytes,
@@ -364,45 +371,45 @@ INTO
364371

365372
// TargetSize to one KV and TargetBytes to two KVs. We should see one KV in
366373
// each ExportRequest SST.
367-
setExportTargetSize(t, "'11b'")
374+
setExportTargetSize(t, 11)
368375
maxResponseSSTBytes = 2 * kvByteSize
369376
res7 = exportAndSlurp(t, res5.end, maxResponseSSTBytes)
370377
expect(t, res7, 2, 2, 2, 2)
371378
latestRespHeader = kvpb.ResponseHeader{
372379
ResumeSpan: &roachpb.Span{
373-
Key: []byte(fmt.Sprintf("/Table/%d/1/3/0", tableID)),
374-
EndKey: []byte("/Max"),
380+
Key: []byte(fmt.Sprintf("%s/Table/%d/1/3/0", optTenantPrefix, tableID)),
381+
EndKey: []byte(endKey),
375382
},
376383
ResumeReason: kvpb.RESUME_BYTE_LIMIT,
377384
NumBytes: maxResponseSSTBytes,
378385
}
379386
allRespHeader = kvpb.ResponseHeader{
380387
ResumeSpan: &roachpb.Span{
381-
Key: []byte(fmt.Sprintf("/Table/%d/1/3/0", tableID)),
382-
EndKey: []byte("/Max"),
388+
Key: []byte(fmt.Sprintf("%s/Table/%d/1/3/0", optTenantPrefix, tableID)),
389+
EndKey: []byte(endKey),
383390
},
384391
ResumeReason: kvpb.RESUME_BYTE_LIMIT,
385392
NumBytes: maxResponseSSTBytes,
386393
}
387394
expectResponseHeader(t, res7, latestRespHeader, allRespHeader)
388395

389396
// TargetSize to one KV and TargetBytes to one less than the total KVs.
390-
setExportTargetSize(t, "'11b'")
397+
setExportTargetSize(t, 11)
391398
maxResponseSSTBytes = 99 * kvByteSize
392399
res7 = exportAndSlurp(t, res5.end, maxResponseSSTBytes)
393400
expect(t, res7, 99, 99, 99, 99)
394401
latestRespHeader = kvpb.ResponseHeader{
395402
ResumeSpan: &roachpb.Span{
396-
Key: []byte(fmt.Sprintf("/Table/%d/1/100/0", tableID)),
397-
EndKey: []byte("/Max"),
403+
Key: []byte(fmt.Sprintf("%s/Table/%d/1/100/0", optTenantPrefix, tableID)),
404+
EndKey: []byte(endKey),
398405
},
399406
ResumeReason: kvpb.RESUME_BYTE_LIMIT,
400407
NumBytes: maxResponseSSTBytes,
401408
}
402409
allRespHeader = kvpb.ResponseHeader{
403410
ResumeSpan: &roachpb.Span{
404-
Key: []byte(fmt.Sprintf("/Table/%d/1/100/0", tableID)),
405-
EndKey: []byte("/Max"),
411+
Key: []byte(fmt.Sprintf("%s/Table/%d/1/100/0", optTenantPrefix, tableID)),
412+
EndKey: []byte(endKey),
406413
},
407414
ResumeReason: kvpb.RESUME_BYTE_LIMIT,
408415
NumBytes: maxResponseSSTBytes,
@@ -412,7 +419,7 @@ INTO
412419
// Target Size to one KV and TargetBytes to greater than all KVs. Checks if
413420
// final NumBytes is accurate.
414421
defer resetExportTargetSize(t)
415-
setExportTargetSize(t, "'11b'")
422+
setExportTargetSize(t, 11)
416423
maxResponseSSTBytes = 101 * kvByteSize
417424
res7 = exportAndSlurp(t, res5.end, maxResponseSSTBytes)
418425
expect(t, res7, 100, 100, 100, 100)

0 commit comments

Comments
 (0)