Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions go/test/endtoend/backup/vtctlbackup/backup_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,7 @@ func LaunchCluster(setupType int, streamMode string, stripes int, cDetails *Comp
mysqlShellArgs := []string{
"--backup_engine_implementation", "mysqlshell",
"--mysql-shell-backup-location", mysqlShellBackupLocation,
"--mysql-shell-speedup-restore=true",
}
commonTabletArg = append(commonTabletArg, mysqlShellArgs...)
}
Expand Down
11 changes: 9 additions & 2 deletions go/vt/mysqlctl/mysqlshellbackupengine.go
Original file line number Diff line number Diff line change
Expand Up @@ -458,14 +458,21 @@ func (be *MySQLShellBackupEngine) restorePreCheck(ctx context.Context, params Re
return false, fmt.Errorf("%w: failed to fetch MySQL version: %v", ErrMySQLShellPreCheck, err)
}

capableOf := mysql.ServerVersionCapableOf(version)
_, sv, err := ParseVersionString(version)
if err != nil {
return false, fmt.Errorf("%w: failed to parse MySQL version (version: %s): %v", ErrMySQLShellPreCheck, version, err)
}

versionStr := fmt.Sprintf("%d.%d.%d", sv.Major, sv.Minor, sv.Patch)

capableOf := mysql.ServerVersionCapableOf(versionStr)
capable, err := capableOf(capabilities.DisableRedoLogFlavorCapability)
if err != nil {
return false, fmt.Errorf("%w: error checking if server supports disabling redo log: %v", ErrMySQLShellPreCheck, err)
}

if !capable {
return false, fmt.Errorf("%w: MySQL version doesn't support disabling the redo log (must be >=8.0.21)", ErrMySQLShellPreCheck)
return false, fmt.Errorf("%w: MySQL version doesn't support disabling the redo log (must be >=8.0.21, current version: %s)", ErrMySQLShellPreCheck, versionStr)
}
}

Expand Down
51 changes: 42 additions & 9 deletions go/vt/mysqlctl/mysqlshellbackupengine_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -159,25 +159,58 @@ func TestMySQLShellBackupRestorePreCheckDisableRedolog(t *testing.T) {
mysqlShellSpeedUpRestore = true
engine := MySQLShellBackupEngine{}

tests := []struct {
version string
err error
}{
{
version: "mysqld Ver 5.7.27-0ubuntu0.19.04.1 for Linux on x86_64 ((Ubuntu))",
err: ErrMySQLShellPreCheck,
},
{
version: "mysqld Ver 5.7.26 for linux-glibc2.12 on x86_64 (MySQL Community Server (GPL))",
err: ErrMySQLShellPreCheck,
},
{
version: "mysqld Ver 5.7.26-29 for Linux on x86_64 (Percona Server (GPL), Release 29, Revision 11ad961)",
err: ErrMySQLShellPreCheck,
},
{
version: "mysqld Ver 8.0.16 for linux-glibc2.12 on x86_64 (MySQL Community Server - GPL)",
err: ErrMySQLShellPreCheck,
},
{
version: "mysqld Ver 8.0.15-6 for Linux on x86_64 (Percona Server (GPL), Release 6, Revision 63abd08)",
err: ErrMySQLShellPreCheck,
},
{
version: "mysqld Ver 8.0.42-0ubuntu0.22.04.1 for Linux on x86_64 ((Ubuntu))",
err: nil,
},
{
version: "mysqld Ver 8.0.42-33 for Linux on x86_64 (Percona Server (GPL), Release '33', Revision '9dc49998')",
err: nil,
},
}

fakedb := fakesqldb.New(t)
defer fakedb.Close()
fakeMysqld := NewFakeMysqlDaemon(fakedb) // defaults to 8.0.32
fakeMysqld := NewFakeMysqlDaemon(fakedb)
defer fakeMysqld.Close()

params := RestoreParams{
Mysqld: fakeMysqld,
}

// this should work as it is supported since 8.0.21
_, err := engine.restorePreCheck(context.Background(), params)
require.NoError(t, err, params)
for _, tt := range tests {
t.Run(tt.version, func(t *testing.T) {
fakeMysqld.Version = tt.version

// it should error out if we change to an older version
fakeMysqld.Version = "8.0.20"
_, err := engine.restorePreCheck(context.Background(), params)
require.ErrorIs(t, err, tt.err)
})
}

_, err = engine.restorePreCheck(context.Background(), params)
require.ErrorIs(t, err, ErrMySQLShellPreCheck)
require.ErrorContains(t, err, "doesn't support disabling the redo log")
}

func TestShouldDrainForBackupMySQLShell(t *testing.T) {
Expand Down
Loading