예제 #1
0
 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;
 }