Skip to content

Commit ea1ac30

Browse files
committed
Adapt applier ShowStatusVariable to support move tables mode
1 parent bb029da commit ea1ac30

2 files changed

Lines changed: 61 additions & 1 deletion

File tree

go/logic/applier.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1929,8 +1929,12 @@ func (apl *Applier) AtomicCutoverRename(sessionIdChan chan int64, tablesRenamed
19291929
}
19301930

19311931
func (apl *Applier) ShowStatusVariable(variableName string) (result int64, err error) {
1932+
targetDB := apl.db
1933+
if apl.migrationContext.IsMoveTablesMode() {
1934+
targetDB = apl.moveTablesTargetDB
1935+
}
19321936
query := fmt.Sprintf(`show /* gh-ost */ global status like '%s'`, variableName)
1933-
if err := apl.db.QueryRow(query).Scan(&variableName, &result); err != nil {
1937+
if err := targetDB.QueryRow(query).Scan(&variableName, &result); err != nil {
19341938
return 0, err
19351939
}
19361940
return result, nil

go/logic/applier_test.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2072,6 +2072,62 @@ func (suite *ApplierTestSuite) TestApplyIterationMoveTableCopyQueriesNoRows() {
20722072
suite.Require().Equal(0, count)
20732073
}
20742074

2075+
func (suite *ApplierTestSuite) TestShowStatusVariable() {
2076+
ctx := context.Background()
2077+
2078+
_, err := suite.db.ExecContext(ctx, fmt.Sprintf("CREATE TABLE %s (id INT, item_id INT);", getTestTableName()))
2079+
suite.Require().NoError(err)
2080+
2081+
connectionConfig, err := getTestConnectionConfig(ctx, suite.mysqlContainer)
2082+
suite.Require().NoError(err)
2083+
2084+
migrationContext := newTestMigrationContext()
2085+
migrationContext.ApplierConnectionConfig = connectionConfig
2086+
migrationContext.SetConnectionConfig("innodb")
2087+
2088+
applier := NewApplier(migrationContext)
2089+
defer applier.Teardown()
2090+
2091+
suite.Require().NoError(applier.InitDBConnections())
2092+
2093+
// Uptime is always present in `SHOW GLOBAL STATUS` and is non-negative.
2094+
result, err := applier.ShowStatusVariable("Uptime")
2095+
suite.Require().NoError(err)
2096+
suite.Require().GreaterOrEqual(result, int64(0))
2097+
}
2098+
2099+
func (suite *ApplierTestSuite) TestShowStatusVariableMoveTablesMode() {
2100+
ctx := context.Background()
2101+
2102+
_, err := suite.db.ExecContext(ctx, fmt.Sprintf("CREATE TABLE %s (id INT, item_id INT);", getTestTableName()))
2103+
suite.Require().NoError(err)
2104+
2105+
connectionConfig, err := getTestConnectionConfig(ctx, suite.mysqlContainer)
2106+
suite.Require().NoError(err)
2107+
2108+
migrationContext := newTestMigrationContext()
2109+
migrationContext.ApplierConnectionConfig = connectionConfig
2110+
migrationContext.MoveTables.ConnectionConfig = connectionConfig
2111+
migrationContext.SetConnectionConfig("innodb")
2112+
migrationContext.OriginalTableColumns = sql.NewColumnList([]string{"id", "item_id"})
2113+
migrationContext.MoveTables.TableNames = []string{testMysqlTableName}
2114+
migrationContext.MoveTables.TargetDatabase = testMysqlDatabaseOther
2115+
2116+
applier := NewApplier(migrationContext)
2117+
defer applier.Teardown()
2118+
2119+
suite.Require().NoError(applier.InitDBConnections())
2120+
2121+
// In move-tables mode the status variable must be read from the
2122+
// move-tables target DB connection rather than the applier DB.
2123+
suite.Require().True(migrationContext.IsMoveTablesMode())
2124+
suite.Require().NotNil(applier.moveTablesTargetDB)
2125+
2126+
result, err := applier.ShowStatusVariable("Uptime")
2127+
suite.Require().NoError(err)
2128+
suite.Require().GreaterOrEqual(result, int64(0))
2129+
}
2130+
20752131
func TestApplier(t *testing.T) {
20762132
if testing.Short() {
20772133
t.Skip("skipping applier test suite in short mode")

0 commit comments

Comments
 (0)