private function onHostUp($message, $dbserver, $skipStatusCheck = false)
{
$logger = \Scalr::getContainer()->logger(__CLASS__);
if ($dbserver->status == SERVER_STATUS::INIT || $skipStatusCheck) {
$event = new HostUpEvent($dbserver, "");
$dbFarmRole = $dbserver->GetFarmRoleObject();
foreach (Scalr_Role_Behavior::getListForFarmRole($dbFarmRole) as $behavior) {
$behavior->handleMessage($message, $dbserver);
}
//TODO: Move MySQL to MSR
/****** MOVE TO MSR ******/
//TODO: Legacy MySQL code
if ($dbFarmRole->GetRoleObject()->hasBehavior(ROLE_BEHAVIORS::MYSQL)) {
if (!$message->mysql) {
$logger->error(sprintf("Strange situation. HostUp message from MySQL behavior doesn't contains `mysql` property. Server %s (%s)", $dbserver->serverId, $dbserver->remoteIp));
return;
}
$mysqlData = $message->mysql;
if ($dbserver->GetProperty(SERVER_PROPERTIES::DB_MYSQL_MASTER)) {
if ($mysqlData->rootPassword) {
$dbFarmRole->SetSetting(Entity\FarmRoleSetting::MYSQL_REPL_PASSWORD, $mysqlData->replPassword, Entity\FarmRoleSetting::TYPE_LCL);
$dbFarmRole->SetSetting(Entity\FarmRoleSetting::MYSQL_ROOT_PASSWORD, $mysqlData->rootPassword, Entity\FarmRoleSetting::TYPE_LCL);
$dbFarmRole->SetSetting(Entity\FarmRoleSetting::MYSQL_STAT_PASSWORD, $mysqlData->statPassword, Entity\FarmRoleSetting::TYPE_LCL);
}
$dbFarmRole->SetSetting(Entity\FarmRoleSetting::MYSQL_LOG_FILE, $mysqlData->logFile, Entity\FarmRoleSetting::TYPE_LCL);
$dbFarmRole->SetSetting(Entity\FarmRoleSetting::MYSQL_LOG_POS, $mysqlData->logPos, Entity\FarmRoleSetting::TYPE_LCL);
if ($dbserver->IsSupported("0.7")) {
if ($mysqlData->volumeConfig) {
try {
$storageVolume = Scalr_Storage_Volume::init();
try {
$storageVolume->loadById($mysqlData->volumeConfig->id);
$storageVolume->setConfig($mysqlData->volumeConfig);
$storageVolume->save();
} catch (Exception $e) {
if (strpos($e->getMessage(), 'not found')) {
$storageVolume->loadBy(array('id' => $mysqlData->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' => $mysqlData->volumeConfig->size, 'fstype' => $mysqlData->volumeConfig->fstype, 'purpose' => ROLE_BEHAVIORS::MYSQL, 'farm_roleid' => $dbserver->farmRoleId, 'server_index' => $dbserver->index));
$storageVolume->setConfig($mysqlData->volumeConfig);
$storageVolume->save(true);
} else {
throw $e;
}
}
$dbFarmRole->SetSetting(Entity\FarmRoleSetting::MYSQL_SCALR_VOLUME_ID, $storageVolume->id, Entity\FarmRoleSetting::TYPE_LCL);
} catch (Exception $e) {
$logger->error(new FarmLogMessage($event->DBServer, "Cannot save storage volume: {$e->getMessage()}"));
}
}
if ($mysqlData->snapshotConfig) {
try {
$storageSnapshot = Scalr_Storage_Snapshot::init();
try {
$storageSnapshot->loadById($mysqlData->snapshotConfig->id);
$storageSnapshot->setConfig($mysqlData->snapshotConfig);
$storageSnapshot->save();
} catch (Exception $e) {
if (strpos($e->getMessage(), 'not found')) {
$storageSnapshot->loadBy(array('id' => $mysqlData->snapshotConfig->id, 'client_id' => $dbserver->clientId, 'farm_id' => $dbserver->farmId, 'farm_roleid' => $dbserver->farmRoleId, 'env_id' => $dbserver->envId, 'name' => sprintf(_("MySQL data bundle #%s"), $mysqlData->snapshotConfig->id), 'type' => $dbFarmRole->GetSetting(Entity\FarmRoleSetting::MYSQL_DATA_STORAGE_ENGINE), 'platform' => $dbserver->platform, 'description' => sprintf(_("MySQL data bundle created on Farm '%s' -> Role '%s'"), $dbFarmRole->GetFarmObject()->Name, $dbFarmRole->GetRoleObject()->name), 'ismysql' => true, 'service' => ROLE_BEHAVIORS::MYSQL));
$storageSnapshot->setConfig($mysqlData->snapshotConfig);
$storageSnapshot->save(true);
} else {
throw $e;
}
}
$dbFarmRole->SetSetting(Entity\FarmRoleSetting::MYSQL_SCALR_SNAPSHOT_ID, $storageSnapshot->id, Entity\FarmRoleSetting::TYPE_LCL);
} catch (Exception $e) {
$logger->error(new FarmLogMessage($event->DBServer, "Cannot save storage snapshot: {$e->getMessage()}"));
}
}
} else {
//@deprecated
$dbFarmRole->SetSetting(Entity\FarmRoleSetting::MYSQL_SNAPSHOT_ID, $mysqlData->snapshotId, Entity\FarmRoleSetting::TYPE_LCL);
}
}
}
return $event;
} else {
$logger->info("Strange situation. Received HostUp message" . " from server '{$dbserver->serverId}' ('{$message->remoteIp})" . " with state {$dbserver->status}!");
}
}