Signed-off-by: Morgan Tocker <tocker@gmail.com>
This commit is contained in:
Morgan Tocker 2019-08-16 09:52:21 -06:00
Родитель 2113547dff
Коммит d2e0312d0e
3 изменённых файлов: 33 добавлений и 31 удалений

Просмотреть файл

@ -37,3 +37,5 @@ if [[ "$VTTOP" == "${VTTOP/\/src\/vitess.io\/vitess/}" ]]; then
echo "WARNING: VTTOP($VTTOP) does not contain src/vitess.io/vitess"
fi
# For Legacy scripts
export MYSQL_FLAVOR=MySQL56

Просмотреть файл

@ -29,51 +29,51 @@ const (
)
// Mysqld is the object that represents a mysqld daemon running on this server.
type CapabilitySet struct {
type capabilitySet struct {
flavor mysqlFlavor
version serverVersion
}
func NewCapabilitySet(f mysqlFlavor, v serverVersion) (c CapabilitySet) {
func newCapabilitySet(f mysqlFlavor, v serverVersion) (c capabilitySet) {
c.flavor = f
c.version = v
return
}
func (c *CapabilitySet) HasMySQLUpgradeInServer() bool {
return c.IsMySQLLike() && c.version.atLeast(serverVersion{Major: 8, Minor: 0, Patch: 16})
func (c *capabilitySet) hasMySQLUpgradeInServer() bool {
return c.isMySQLLike() && c.version.atLeast(serverVersion{Major: 8, Minor: 0, Patch: 16})
}
func (c *CapabilitySet) HasInitializeInServer() bool {
return c.IsMySQLLike() && c.version.atLeast(serverVersion{Major: 5, Minor: 7, Patch: 0})
func (c *capabilitySet) hasInitializeInServer() bool {
return c.isMySQLLike() && c.version.atLeast(serverVersion{Major: 5, Minor: 7, Patch: 0})
}
func (c *CapabilitySet) HasMySQLxEnabledByDefault() bool {
return c.IsMySQLLike() && c.version.atLeast(serverVersion{Major: 8, Minor: 0, Patch: 11})
func (c *capabilitySet) hasMySQLxEnabledByDefault() bool {
return c.isMySQLLike() && c.version.atLeast(serverVersion{Major: 8, Minor: 0, Patch: 11})
}
func (c *CapabilitySet) HasPersistConfig() bool {
return c.IsMySQLLike() && c.version.atLeast(serverVersion{Major: 8, Minor: 0, Patch: 0})
func (c *capabilitySet) hasPersistConfig() bool {
return c.isMySQLLike() && c.version.atLeast(serverVersion{Major: 8, Minor: 0, Patch: 0})
}
func (c *CapabilitySet) HasShutdownCommand() bool {
return (c.IsMySQLLike() && c.version.atLeast(serverVersion{Major: 5, Minor: 7, Patch: 9})) || (c.IsMariaDB() && c.version.atLeast(serverVersion{Major: 10, Minor: 0, Patch: 4}))
func (c *capabilitySet) hasShutdownCommand() bool {
return (c.isMySQLLike() && c.version.atLeast(serverVersion{Major: 5, Minor: 7, Patch: 9})) || (c.isMariaDB() && c.version.atLeast(serverVersion{Major: 10, Minor: 0, Patch: 4}))
}
func (c *CapabilitySet) HasBackupLocks() bool {
return c.IsMySQLLike() && c.version.atLeast(serverVersion{Major: 8, Minor: 0, Patch: 0})
func (c *capabilitySet) hasBackupLocks() bool {
return c.isMySQLLike() && c.version.atLeast(serverVersion{Major: 8, Minor: 0, Patch: 0})
}
func (c *CapabilitySet) HasDefaultUft8mb4() bool {
return c.IsMySQLLike() && c.version.atLeast(serverVersion{Major: 8, Minor: 0, Patch: 0})
func (c *capabilitySet) hasDefaultUft8mb4() bool {
return c.isMySQLLike() && c.version.atLeast(serverVersion{Major: 8, Minor: 0, Patch: 0})
}
func (c *CapabilitySet) HasSemiSyncEnabledByDefault() bool {
return c.IsMariaDB() && c.version.atLeast(serverVersion{Major: 10, Minor: 3, Patch: 3})
func (c *capabilitySet) hasSemiSyncEnabledByDefault() bool {
return c.isMariaDB() && c.version.atLeast(serverVersion{Major: 10, Minor: 3, Patch: 3})
}
// IsMySQLLike tests if the server is either MySQL
// or Percona Server. At least currently, Vitess doesn't
// make use of any specific Percona Server features.
func (c *CapabilitySet) IsMySQLLike() bool {
func (c *capabilitySet) isMySQLLike() bool {
return c.flavor == flavorMySQL || c.flavor == flavorPercona
}
// IsMariaDB tests if the server is MariaDB.
// IsMySQLLike() and IsMariaDB() are mutually exclusive
func (c *CapabilitySet) IsMariaDB() bool {
func (c *capabilitySet) isMariaDB() bool {
return c.flavor == flavorMariaDB
}

Просмотреть файл

@ -89,7 +89,7 @@ type Mysqld struct {
dbaPool *dbconnpool.ConnectionPool
appPool *dbconnpool.ConnectionPool
capabilities CapabilitySet
capabilities capabilitySet
// mutex protects the fields below.
mutex sync.Mutex
@ -119,13 +119,13 @@ func NewMysqld(dbcfgs *dbconfigs.DBConfigs) *Mysqld {
if getErr != nil || err != nil {
f, v, err = getVersionFromEnv()
if err != nil {
panic("Could not detect version from mysqld --version or MYSQL_FLAVOR")
panic("could not detect version from mysqld --version or MYSQL_FLAVOR")
}
}
log.Infof("Using flavor: %v, version: %v", f, v)
result.capabilities = NewCapabilitySet(f, v)
result.capabilities = newCapabilitySet(f, v)
return result
}
@ -151,7 +151,7 @@ func getVersionFromEnv() (flavor mysqlFlavor, ver serverVersion, err error) {
case "MySQL56":
return flavorMySQL, serverVersion{5, 7, 10}, nil
}
return flavor, ver, fmt.Errorf("Could not determine version from MYSQL_FLAVOR: %s", env)
return flavor, ver, fmt.Errorf("could not determine version from MYSQL_FLAVOR: %s", env)
}
func getVersionString() (string, error) {
@ -183,19 +183,19 @@ func parseVersionString(version string) (flavor mysqlFlavor, ver serverVersion,
}
v := versionRegex.FindStringSubmatch(version)
if len(v) != 4 {
return flavor, ver, fmt.Errorf("Could not parse server version from: %s", version)
return flavor, ver, fmt.Errorf("could not parse server version from: %s", version)
}
ver.Major, err = strconv.Atoi(string(v[1]))
if err != nil {
return flavor, ver, fmt.Errorf("Could not parse server version from: %s", version)
return flavor, ver, fmt.Errorf("could not parse server version from: %s", version)
}
ver.Minor, err = strconv.Atoi(string(v[2]))
if err != nil {
return flavor, ver, fmt.Errorf("Could not parse server version from: %s", version)
return flavor, ver, fmt.Errorf("could not parse server version from: %s", version)
}
ver.Patch, err = strconv.Atoi(string(v[3]))
if err != nil {
return flavor, ver, fmt.Errorf("Could not parse server version from: %s", version)
return flavor, ver, fmt.Errorf("could not parse server version from: %s", version)
}
return
@ -216,7 +216,7 @@ func (mysqld *Mysqld) RunMysqlUpgrade() error {
return client.RunMysqlUpgrade(context.TODO())
}
if mysqld.capabilities.HasMySQLUpgradeInServer() {
if mysqld.capabilities.hasMySQLUpgradeInServer() {
log.Warningf("MySQL version has built-in upgrade, skipping RunMySQLUpgrade")
return nil
}
@ -650,7 +650,7 @@ func (mysqld *Mysqld) installDataDir(cnf *Mycnf) error {
if err != nil {
return err
}
if mysqld.capabilities.HasInitializeInServer() {
if mysqld.capabilities.hasInitializeInServer() {
log.Infof("Installing data dir with mysqld --initialize-insecure")
args := []string{
"--defaults-file=" + cnf.path,
@ -736,7 +736,7 @@ func (mysqld *Mysqld) getMycnfTemplates(root string) []string {
// Percona Server == MySQL in this context
f := flavorMariaDB
if mysqld.capabilities.IsMySQLLike() {
if mysqld.capabilities.isMySQLLike() {
f = flavorMySQL
}