public function orderDeletion($request_servers_ = true, $reason_ = NULL) { Logger::debug('main', 'Starting Session::orderDeletion for \'' . $this->id . '\''); $total = count($this->servers[Server::SERVER_ROLE_APS]); $destroyed = 0; if (!is_null($reason_)) { $report_session = Abstract_ReportSession::load($this->id); if (is_object($report_session)) { $report_session->setStopWhy($reason_); Abstract_ReportSession::update($report_session); } } if ($request_servers_) { foreach ($this->servers[Server::SERVER_ROLE_APS] as $server_id => $data) { $session_server = Abstract_Server::load($server_id); if (!$session_server) { Logger::error('main', 'Session::orderDeletion Unable to load server \'' . $server_id . '\''); return false; } if (is_array($session_server->roles)) { if (array_key_exists(Server::SERVER_ROLE_APS, $session_server->roles)) { $buf = $session_server->orderSessionDeletion($this->id); if (!$buf) { Logger::warning('main', 'Session::orderDeletion Session \'' . $this->id . '\' already destroyed on server \'' . $session_server->fqdn . '\''); $this->setServerStatus($session_server->id, Session::SESSION_STATUS_DESTROYED); $destroyed++; } else { $this->setServerStatus($session_server->id, Session::SESSION_STATUS_DESTROYING); } } } } } else { $destroyed = $total; } if ($destroyed == $total) { $this->setStatus(Session::SESSION_STATUS_DESTROYED, $reason_); } else { $this->setStatus(Session::SESSION_STATUS_DESTROYING, $reason_); } if (array_key_exists(Server::SERVER_ROLE_WEBAPPS, $this->servers)) { foreach ($this->servers[Server::SERVER_ROLE_WEBAPPS] as $server_id => $data) { $session_server = Abstract_Server::load($server_id); if (!$session_server) { Logger::error('main', 'Session::orderDeletion Unable to load server \'' . $server_id . '\''); return false; } if (is_array($session_server->roles)) { if (array_key_exists(Server::SERVER_ROLE_WEBAPPS, $session_server->roles)) { $buf = $session_server->orderSessionDeletion($this->id, 'webapps'); if (!$buf) { Logger::warning('main', 'Session::orderDeletion Session \'' . $this->id . '\' already destroyed on server \'' . $session_server->fqdn . '\''); $this->setServerStatus($session_server->id, Session::SESSION_STATUS_DESTROYED, NULL, Server::SERVER_ROLE_WEBAPPS); $destroyed++; } else { $this->setServerStatus($session_server->id, Session::SESSION_STATUS_DESTROYING, NULL, Server::SERVER_ROLE_WEBAPPS); } } } } } return true; }