public function createDataBundle(DBFarmRole $dbFarmRole, array $params = array())
{
if (!$params['dataBundleType']) {
$params['dataBundleType'] = 'full';
}
if ($params['compressor'] === null) {
$params['compressor'] = 'gzip';
}
//$params['useSlave']
if ($dbFarmRole->GetSetting(Scalr_Db_Msr::DATA_BUNDLE_IS_RUNNING) == 1) {
throw new Exception("Data bundle already in progress");
}
$currentServer = $this->getServerForDataBundle($dbFarmRole, $params['useSlave']);
if (!$currentServer) {
throw new Exception("No suitable server for data bundle");
}
$message = new Scalr_Messaging_Msg_DbMsr_CreateDataBundle();
$storageType = $dbFarmRole->GetSetting(Scalr_Db_Msr::DATA_STORAGE_ENGINE);
$storageGeneration = $storageType == 'lvm' ? 2 : 1;
if ($dbFarmRole->isOpenstack()) {
$driver = 'swift';
} else {
switch ($dbFarmRole->Platform) {
case SERVER_PLATFORMS::EC2:
$driver = 's3';
break;
case SERVER_PLATFORMS::GCE:
$driver = 'gcs';
break;
}
}
if ($storageGeneration == 2) {
$behavior = $dbFarmRole->GetRoleObject()->getDbMsrBehavior();
if (!isset($message->{$behavior})) {
$message->{$behavior} = new stdClass();
}
$message->{$behavior}->backup = new stdClass();
$message->{$behavior}->backup->type = 'xtrabackup';
$message->{$behavior}->backup->compressor = $params['compressor'];
$message->{$behavior}->backup->backupType = $params['dataBundleType'];
$message->{$behavior}->backup->cloudfsTarget = sprintf("%s://scalr-%s-%s-%s/data-bundles/%s/%s/", $driver, SCALR_ID, $dbFarmRole->GetFarmObject()->EnvID, $dbFarmRole->CloudLocation, $dbFarmRole->FarmID, $behavior);
if ($params['dataBundleType'] == 'incremental') {
$previousManifest = $this->db->GetOne("SELECT manifest FROM storage_restore_configs WHERE farm_roleid = ? ORDER BY id DESC LIMIT 1", array($dbFarmRole->ID));
$message->{$behavior}->backup->prevCloudfsSource = $previousManifest;
}
}
$message->storageType = $storageType;
$currentServer->SendMessage($message);
$dbFarmRole->SetSetting(Scalr_Db_Msr::getConstant("DATA_BUNDLE_IS_RUNNING"), 1, DBFarmRole::TYPE_LCL);
$dbFarmRole->SetSetting(Scalr_Db_Msr::getConstant("DATA_BUNDLE_RUNNING_TS"), time(), DBFarmRole::TYPE_LCL);
$dbFarmRole->SetSetting(Scalr_Db_Msr::getConstant("DATA_BUNDLE_SERVER_ID"), $currentServer->serverId, DBFarmRole::TYPE_LCL);
}