Scalr\System\Zmq\Cron\Task\DbMsrMaintenance::performDbMsrAction PHP Method

performDbMsrAction() public method

Action on DB data
public performDbMsrAction ( string $action, DBFarmRole $dbFarmRole, string $tz )
$action string The action to do
$dbFarmRole DBFarmRole DBFarmRole object to do
$tz string Timezone
    public function performDbMsrAction($action, DBFarmRole $dbFarmRole, $tz)
    {
        $timeouted = false;
        if ($dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_ENABLED")) && $dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_EVERY")) != 0) {
            if ($dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_IS_RUNNING")) == 1) {
                // Wait for timeout time * 2 (Example: NIVs problem with big mysql snapshots)
                // We must wait for running bundle process.
                $timeout = $dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_EVERY")) * (3600 * 2);
                $lastTs = $dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_RUNNING_TS"));
                if ($lastTs + $timeout < time()) {
                    $timeouted = true;
                }
                if ($timeouted) {
                    $dbFarmRole->SetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_IS_RUNNING"), 0, Entity\FarmRoleSetting::TYPE_LCL);
                }
            } else {
                //Check bundle window
                $period = $dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_EVERY"));
                $timeout = $period * 3600;
                $lastActionTime = $dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_LAST_TS"));
                $performAction = false;
                if ($period % 24 == 0) {
                    if ($lastActionTime) {
                        $days = $period / 24;
                        $dateTime = new DateTime(null, new DateTimeZone($tz));
                        $currentDate = (int) $dateTime->format("Ymd");
                        $dateTime->setTimestamp(strtotime("+{$days} day", $lastActionTime));
                        $nextDate = (int) $dateTime->format("Ymd");
                        if ($nextDate > $currentDate) {
                            return;
                        }
                    }
                    $pbwFrom = (int) ($dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_TIMEFRAME_START_HH")) . $dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_TIMEFRAME_START_MM")));
                    $pbwTo = (int) ($dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_TIMEFRAME_END_HH")) . $dbFarmRole->GetSetting(Scalr_Db_Msr::getConstant("DATA_{$action}_TIMEFRAME_END_MM")));
                    if ($pbwFrom && $pbwTo) {
                        $dateTime = new DateTime(null, new DateTimeZone($tz));
                        $currentTime = (int) $dateTime->format("Hi");
                        if ($pbwFrom <= $currentTime && $pbwTo >= $currentTime) {
                            $performAction = true;
                        }
                    } else {
                        $performAction = true;
                    }
                } else {
                    //Check timeout
                    if ($lastActionTime + $timeout < time()) {
                        $performAction = true;
                    }
                }
                try {
                    if ($performAction) {
                        $behavior = Scalr_Role_Behavior::loadByName($dbFarmRole->GetRoleObject()->getDbMsrBehavior());
                        if ($action == 'BUNDLE') {
                            $behavior->createDataBundle($dbFarmRole, array('compressor' => $dbFarmRole->GetSetting(Scalr_Role_DbMsrBehavior::ROLE_DATA_BUNDLE_COMPRESSION), 'useSlave' => $dbFarmRole->GetSetting(Scalr_Role_DbMsrBehavior::ROLE_DATA_BUNDLE_USE_SLAVE)));
                        }
                        if ($action == 'BACKUP') {
                            $behavior->createBackup($dbFarmRole);
                        }
                    }
                } catch (NotApplicableException $e) {
                    //No suitable server
                }
            }
        }
    }