private bool UpdateConfigFile()

in Configurator/Core/Server/ServerConfigurationController.cs [3487:3584]


    private bool UpdateConfigFile()
    {
      CancellationToken.ThrowIfCancellationRequested();
      ReportStatus(string.Format(Resources.SavingConfigurationFile, Settings.ConfigFile));
      try
      {
        if (!Directory.Exists(Settings.IniDirectory))
        {
          Directory.CreateDirectory(Settings.IniDirectory);
        }

        IniTemplate t = null;

        // If this is an upgrade, we want to load the existing ini template, this to ensure that the values
        // already configured by the user persist in the new ini file.
        if (ConfigurationType == ConfigurationType.Upgrade)
        {
          t = Settings.GetExistingIniFileTemplate();

          // Verify that the Windows service does exist
          if (OldSettings.ConfigureAsService
              && !MySqlServiceControlManager.ServiceExists(ExistingServerInstallationInstance.ServiceName)
              && IsThereServerDataFiles
              && !IsServiceRenameNeeded)
          {
            Settings.ConfigureAsService = false;
          }
        }

        CancellationToken.ThrowIfCancellationRequested();
        if (t == null)
        {
          t = LoadTemplate();
        }

        if (!Directory.Exists(Settings.SecureFilePrivFolder))
        {
          Directory.CreateDirectory(Settings.SecureFilePrivFolder);
        }

        var settings = ConfigurationType == ConfigurationType.Upgrade
          ? OldSettings
          : Settings;
        if (ConfigurationType == ConfigurationType.Upgrade
            && IsDataDirectoryRenameNeeded)
        {
          settings.SecureFilePrivFolder = Settings.SecureFilePrivFolder;
          settings.IniDirectory = Settings.IniDirectory;
          settings.InstallDirectory = Settings.InstallDirectory;
        }

        //Set the Query Cache settings if Enterprise Firewall is enabled.
        if (settings.Plugins.IsEnabled("mysql_firewall"))
        {
          settings.EnableQueryCacheType = false;
          settings.EnableQueryCacheSize = false;
        }

        CancellationToken.ThrowIfCancellationRequested();
        settings.Save(t);

        // If this is an upgrade, we need to run a second pass at updating the ini file but this time comparing
        // it against the corresponding template. This to determine if there are new sections, deprecated or new
        // variables that need to be added. During this second pass we ignore updating existing values since we
        // don't want to override the values defined by the user.
        if (ConfigurationType == ConfigurationType.Upgrade)
        {
          t = LoadTemplate();
          settings.Save(t);
        }

        ReportStatus(string.Format(Resources.SavedConfigurationFile, settings.ConfigFile));
        if (!ServerVersion.ServerSupportsRegeneratingRedoLogFiles())
        {
          return true;
        }

        //we need to delete
        for (int i = 0; i < 2; i++)
        {
          CancellationToken.ThrowIfCancellationRequested();
          string datetime = DateTime.Now.GetDateTimeFormats('s')[0].Replace(':', '-');
          string logFile = Path.Combine(DataDirectory, "data", string.Format("ib_logfile{0}", i));
          string backupLogFile = Path.Combine(DataDirectory, string.Format("ib_logfile{0}_{1}", i, datetime));
          if (File.Exists(logFile))
          {
            File.Move(logFile, backupLogFile);
          }
        }

        return true;
      }
      catch (Exception ex)
      {
        Logger.LogException(ex);
        return false;
      }
    }