@@ -7,6 +7,7 @@ package tests
7
7
8
8
import (
9
9
"context"
10
+ gosql "database/sql"
10
11
"fmt"
11
12
"net/url"
12
13
"path"
@@ -25,6 +26,7 @@ import (
25
26
"github.com/cockroachdb/cockroach/pkg/roachprod"
26
27
"github.com/cockroachdb/cockroach/pkg/roachprod/blobfixture"
27
28
"github.com/cockroachdb/cockroach/pkg/roachprod/install"
29
+ "github.com/cockroachdb/cockroach/pkg/roachprod/logger"
28
30
"github.com/cockroachdb/cockroach/pkg/roachprod/vm"
29
31
"github.com/cockroachdb/cockroach/pkg/testutils/sqlutils"
30
32
"github.com/cockroachdb/cockroach/pkg/util/syncutil"
@@ -412,20 +414,52 @@ func (bd *backupDriver) queryJobStates(
412
414
func (bd * backupDriver ) fingerprintFixture (ctx context.Context ) map [string ]string {
413
415
conn := bd .c .Conn (ctx , bd .t .L (), 1 )
414
416
defer conn .Close ()
415
- sql := sqlutils .MakeSQLRunner (conn )
416
- aost := bd .getLatestAOST (ctx , sql )
417
- tables := getDatabaseTables (ctx , bd .t , sql , bd .sp .fixture .DatabaseName ())
417
+ return fingerprintDatabase (
418
+ ctx , bd .t , conn ,
419
+ bd .sp .fixture .DatabaseName (), bd .getLatestAOST (sqlutils .MakeSQLRunner (conn )),
420
+ )
421
+ }
418
422
419
- m := bd .c .NewDeprecatedMonitor (ctx )
423
+ // getLatestAOST returns the end time as seen in SHOW BACKUP of the latest
424
+ // backup in the fixture.
425
+ func (bd * backupDriver ) getLatestAOST (sql * sqlutils.SQLRunner ) string {
426
+ uri := bd .registry .URI (bd .fixture .DataPath )
427
+ query := fmt .Sprintf (
428
+ `SELECT end_time FROM
429
+ [SHOW BACKUP FROM LATEST IN '%s']
430
+ ORDER BY end_time DESC
431
+ LIMIT 1` ,
432
+ uri .String (),
433
+ )
434
+ var endTime string
435
+ sql .QueryRow (bd .t , query ).Scan (& endTime )
436
+ return endTime
437
+ }
438
+
439
+ // fingerprintDatabase fingerprints all of the tables in the provided database
440
+ // and returns a map of fully qualified table names to their fingerprints.
441
+ // If AOST is not provided, the current time is used as the AOST.
442
+ func fingerprintDatabase (
443
+ ctx context.Context , t test.Test , conn * gosql.DB , dbName string , aost string ,
444
+ ) map [string ]string {
445
+ sql := sqlutils .MakeSQLRunner (conn )
446
+ tables := getDatabaseTables (ctx , t , sql , dbName )
447
+ if len (tables ) == 0 {
448
+ t .L ().Printf ("no tables found in database %s" , dbName )
449
+ return nil
450
+ }
451
+ t .L ().Printf ("fingerprinting %d tables in database %s" , len (tables ), dbName )
420
452
421
- bd .t .L ().Printf ("fingerprinting %d tables in %s" , len (tables ), bd .sp .fixture .DatabaseName ())
422
453
fingerprints := make (map [string ]string )
423
454
var mu syncutil.Mutex
424
455
start := timeutil .Now ()
456
+ group := t .NewErrorGroup ()
425
457
for _ , table := range tables {
426
- m .Go (func (ctx context.Context ) error {
458
+ group .Go (func (ctx context.Context , log * logger. Logger ) error {
427
459
fpContents := newFingerprintContents (conn , table )
428
- if err := fpContents .Load (ctx , bd .t .L (), aost , nil /* tableContents */ ); err != nil {
460
+ if err := fpContents .Load (
461
+ ctx , log , aost , nil , /* tableContents */
462
+ ); err != nil {
429
463
return err
430
464
}
431
465
mu .Lock ()
@@ -434,31 +468,14 @@ func (bd *backupDriver) fingerprintFixture(ctx context.Context) map[string]strin
434
468
return nil
435
469
})
436
470
}
437
- m . Wait ( )
438
- bd . t .L ().Printf (
471
+ require . NoError ( t , group . WaitE (), "error fingerprinting tables in database %s" , dbName )
472
+ t .L ().Printf (
439
473
"fingerprinted %d tables in %s in %s" ,
440
- len (tables ), bd . sp . fixture . DatabaseName () , timeutil .Since (start ),
474
+ len (tables ), dbName , timeutil .Since (start ),
441
475
)
442
-
443
476
return fingerprints
444
477
}
445
478
446
- // getLatestAOST returns the end time as seen in SHOW BACKUP of the latest
447
- // backup in the fixture.
448
- func (bd * backupDriver ) getLatestAOST (ctx context.Context , sql * sqlutils.SQLRunner ) string {
449
- uri := bd .registry .URI (bd .fixture .DataPath )
450
- query := fmt .Sprintf (
451
- `SELECT end_time FROM
452
- [SHOW BACKUP FROM LATEST IN '%s']
453
- ORDER BY end_time DESC
454
- LIMIT 1` ,
455
- uri .String (),
456
- )
457
- var endTime string
458
- sql .QueryRow (bd .t , query ).Scan (& endTime )
459
- return endTime
460
- }
461
-
462
479
// getDatabaseTables returns the fully qualified name of every table in the
463
480
// fixture.
464
481
// Note: This assumes there aren't any funky characters in the identifiers, so
0 commit comments