in Configurator/UI/Wizards/ServerConfigPages/ServerConfigServerInstallationsPage.cs [373:517]
private void UpdateExistingServerInstallationInstance()
{
if (_existingServerInstallationInstance == null)
{
throw new ArgumentNullException(nameof(_existingServerInstallationInstance));
}
if (_existingServerInstallationInstance.Controller == null)
{
throw new ArgumentNullException(nameof(_existingServerInstallationInstance.Controller));
}
// Determine if the upgrade is supported.
VersionTextBox.Text = _existingServerInstallationInstance.ServerVersion?.ToString();
string versionErrorMessage = null;
var newVersion = _controller.ServerInstallation.Version;
var oldVersion = _existingServerInstallationInstance.ServerVersion;
var upgradeViability = newVersion.ServerSupportsInPlaceUpgrades(oldVersion);
switch (upgradeViability)
{
case UpgradeViability.UnsupportedWithWarning:
versionErrorMessage = string.Format(Resources.UpgradeNotSupportedWithWarningError, oldVersion, newVersion);
break;
case UpgradeViability.Unsupported:
if (oldVersion.Major < 8)
{
versionErrorMessage = Resources.UpgradeOldServerNotSupportedError;
}
else if (oldVersion == newVersion)
{
versionErrorMessage = Resources.SameVersionError;
}
else
{
versionErrorMessage = string.Format(Resources.UpgradeNotSupportedError, oldVersion, newVersion);
}
break;
}
var errorInVersionTextbox = _existingServerInstallationInstance.ServerVersion == null;
ValidationsErrorProvider.SetProperties(VersionTextBox, new ErrorProviderProperties(errorInVersionTextbox
? Resources.ServerInstanceGetServerVersionError
: string.Empty));
if (!errorInVersionTextbox
&& !string.IsNullOrEmpty(versionErrorMessage))
{
if (upgradeViability != UpgradeViability.Unsupported
&& !versionErrorMessage.Equals(Resources.UpgradeHigherVersionError, StringComparison.InvariantCultureIgnoreCase)
&& !versionErrorMessage.Equals(Resources.SameVersionError, StringComparison.InvariantCultureIgnoreCase))
{
VersionWarningProvider.SetProperties(VersionTextBox, new ErrorProviderProperties(versionErrorMessage, Resources.warning_sign_icon));
VersionErrorProvider.Clear();
}
else
{
VersionErrorProvider.SetProperties(VersionTextBox, new ErrorProviderProperties(versionErrorMessage, Resources.Config_ErrorIcon));
VersionWarningProvider.Clear();
}
}
else
{
VersionErrorProvider.Clear();
VersionWarningProvider.Clear();
}
// Populate server details.
InstallDirectoryTextBox.Text = _existingServerInstallationInstance.BaseDir;
ExistingDataDirectoryTextBox.Text = _existingServerInstallationInstance.DataDir;
DataDirectoryRenameWarningProvider.SetProperties(ExistingDataDirectoryTextBox, new ErrorProviderProperties(_existingServerInstallationInstance.IsDataDirNameDefault(_controller.ServerVersion)
? string.Format(Resources.ExistingDataDirectoryIsDefaultAndWillBeRenamed, $"MySQL Server {_controller.ServerVersion.ToString(2)}")
: string.Empty, Resources.warning_sign_icon));
ValidationsErrorProvider.SetProperties(ExistingDataDirectoryTextBox, new ErrorProviderProperties(string.IsNullOrEmpty(_existingServerInstallationInstance.DataDir)
? Resources.ServerInstanceFailedToRetrieveDataDir :
string.Empty));
var configFileIsValid = false;
if (!string.IsNullOrEmpty(_existingServerInstallationInstance.DataDir))
{
string dataDirectory = null;
if (!Directory.Exists(_existingServerInstallationInstance.DataDir))
{
return;
}
dataDirectory = new DirectoryInfo(_existingServerInstallationInstance.DataDir).Parent.FullName;
var defaultConfigFile = Path.Combine(dataDirectory, MySqlServerSettings.DEFAULT_CONFIG_FILE_NAME);
var alternateConfigFile = Path.Combine(dataDirectory, MySqlServerSettings.ALTERNATE_CONFIG_FILE_NAME);
var configFile = File.Exists(defaultConfigFile)
? defaultConfigFile
: File.Exists(alternateConfigFile)
? alternateConfigFile
: null;
configFileIsValid = configFile != null
? ValidateExistingServerInstallationInstanceConfigurationFile(configFile)
: false;
if (!configFileIsValid)
{
ValidationsErrorProvider.SetProperties(ExistingConfigFileBrowseButton, new ErrorProviderProperties(Resources.ServerConfigConfigurationFileNotValid));
}
ExistingConfigFilePathTextBox.Text = configFile;
}
else
{
ExistingConfigFilePathTextBox.Text = string.Empty;
}
// Get authentication plugin.
_controller.RootUserAuthenticationPlugin = _existingServerInstallationInstance.GetUserAuthenticationPlugin(MySqlServerUser.ROOT_USERNAME);
if (_controller.RootUserAuthenticationPlugin == MySqlAuthenticationPluginType.MysqlNativePassword)
{
UserWarningProvider.SetProperties(RootPasswordTextBox, new ErrorProviderProperties(Resources.ServerConfigInvalidAuthenticationPlugin, Resources.warning_sign_icon));
}
// Set existing instance relevant properties for rollback.
if (!errorInVersionTextbox)
{
_existingServerInstallationInstance.Controller.ServerVersion = _existingServerInstallationInstance.ServerVersion;
_existingServerInstallationInstance.Controller.ServerInstallation.VersionString = _existingServerInstallationInstance.Controller.ServerVersion.ToString();
}
if (!string.IsNullOrEmpty(_existingServerInstallationInstance.BaseDir))
{
var serviceNames = MySqlServiceControlManager.FindServiceNamesWithBaseDirectory(_existingServerInstallationInstance.BaseDir);
if (serviceNames.Length > 0)
{
_existingServerInstallationInstance.Controller.Settings.ServiceName = serviceNames[0];
_existingServerInstallationInstance.Controller.Settings.ConfigureAsService = true;
}
if (!string.IsNullOrEmpty(ExistingConfigFilePathTextBox.Text)
&& configFileIsValid)
{
var iniFile = new IniFileEngine(ExistingConfigFilePathTextBox.Text).Load();
_existingServerInstallationInstance.Controller.Settings.DataDirectory = new DirectoryInfo(iniFile.FindValue("mysqld", "datadir", false)).Parent.FullName;
_existingServerInstallationInstance.Controller.Settings.ErrorLogFileName = iniFile.FindValue("mysqld", "log-error", false);
}
else
{
ValidationsErrorProvider.SetProperties(ExistingConfigFileBrowseButton, new ErrorProviderProperties(Resources.ServerConfigConfigurationFileNotFound));
}
}
}