Scalr\System\Zmq\Cron\Task\ScalarizrMessaging::onMysql_PromoteToMasterResult PHP Method

onMysql_PromoteToMasterResult() private method

private onMysql_PromoteToMasterResult ( Scalr_Messaging_Msg_Mysql_PromoteToMasterResult $message, DBServer $dbserver )
$message Scalr_Messaging_Msg_Mysql_PromoteToMasterResult
$dbserver DBServer
    private function onMysql_PromoteToMasterResult($message, DBServer $dbserver)
    {
        $logger = \Scalr::getContainer()->logger(__CLASS__);
        $dbserver->GetFarmRoleObject()->SetSetting(Entity\FarmRoleSetting::MYSQL_SLAVE_TO_MASTER, 0, Entity\FarmRoleSetting::TYPE_LCL);
        if ($message->status == Scalr_Messaging_Msg_Mysql_PromoteToMasterResult::STATUS_OK) {
            $dbFarm = $dbserver->GetFarmObject();
            $dbFarmRole = $dbserver->GetFarmRoleObject();
            $oldMaster = $dbFarm->GetMySQLInstances(true);
            if ($dbserver->IsSupported("0.7")) {
                if ($message->volumeConfig) {
                    try {
                        $storageVolume = Scalr_Storage_Volume::init();
                        try {
                            $storageVolume->loadById($message->volumeConfig->id);
                            $storageVolume->setConfig($message->volumeConfig);
                            $storageVolume->save();
                        } catch (Exception $e) {
                            if (strpos($e->getMessage(), 'not found')) {
                                $storageVolume->loadBy(array('id' => $message->volumeConfig->id, 'client_id' => $dbserver->clientId, 'env_id' => $dbserver->envId, 'name' => "MySQL data volume", 'type' => $dbFarmRole->GetSetting(Entity\FarmRoleSetting::MYSQL_DATA_STORAGE_ENGINE), 'platform' => $dbserver->platform, 'size' => $message->volumeConfig->size, 'fstype' => $message->volumeConfig->fstype, 'purpose' => ROLE_BEHAVIORS::MYSQL, 'farm_roleid' => $dbserver->farmRoleId, 'server_index' => $dbserver->index));
                                $storageVolume->setConfig($message->volumeConfig);
                                $storageVolume->save(true);
                            } else {
                                throw $e;
                            }
                        }
                    } catch (Exception $e) {
                        $logger->error(new FarmLogMessage($dbserver, "Cannot save storage volume: {$e->getMessage()}"));
                    }
                }
                if ($message->snapshotConfig) {
                    try {
                        $snapshot = Scalr_Model::init(Scalr_Model::STORAGE_SNAPSHOT);
                        $snapshot->loadBy(array('id' => $message->snapshotConfig->id, 'client_id' => $dbserver->clientId, 'env_id' => $dbserver->envId, 'name' => "Automatical MySQL data bundle", 'type' => $dbFarmRole->GetSetting(Entity\FarmRoleSetting::MYSQL_DATA_STORAGE_ENGINE), 'platform' => $dbserver->platform, 'description' => "MySQL data bundle created automatically by Scalr", 'ismysql' => true));
                        $snapshot->setConfig($message->snapshotConfig);
                        $snapshot->save(true);
                        $dbFarmRole->SetSetting(Entity\FarmRoleSetting::MYSQL_SCALR_SNAPSHOT_ID, $snapshot->id, Entity\FarmRoleSetting::TYPE_LCL);
                        $dbFarmRole->SetSetting(Entity\FarmRoleSetting::MYSQL_LOG_FILE, $message->logFile, Entity\FarmRoleSetting::TYPE_LCL);
                        $dbFarmRole->SetSetting(Entity\FarmRoleSetting::MYSQL_LOG_POS, $message->logPos, Entity\FarmRoleSetting::TYPE_LCL);
                    } catch (Exception $e) {
                        $logger->error(new FarmLogMessage($dbserver, "Cannot save storage snapshot: {$e->getMessage()}"));
                    }
                }
            } else {
                // TODO: delete old slave volume if new one was created
                $dbFarmRole->SetSetting(Entity\FarmRoleSetting::MYSQL_MASTER_EBS_VOLUME_ID, $message->volumeId, Entity\FarmRoleSetting::TYPE_LCL);
            }
            return new NewMysqlMasterUpEvent($dbserver, "", $oldMaster[0]);
        } elseif ($message->status == Scalr_Messaging_Msg_Mysql_PromoteToMasterResult::STATUS_FAILED) {
            $dbserver->SetProperty(SERVER_PROPERTIES::DB_MYSQL_MASTER, 0);
            $dbserver->SetProperty(Scalr_Db_Msr::REPLICATION_MASTER, 0);
            // XXX: Need to do smth
            $logger->error(sprintf("Promote to Master failed for server %s. Last error: %s", $dbserver->serverId, $message->lastError));
        }
    }