Newer
Older
Thibault VINCENT
committed
from threading import Timer, Lock, Event
from sjrpc.client import SimpleRpcClient
from sjrpc.utils import ConnectionProxy
from sjrpc.core import RpcError
import handlers
Handle node initialization, connection to server, and authentication
def __init__(self, server, port, hypervisor, exec_cmd, force_xen=False,
cert=None):
Thibault VINCENT
committed
self._scheduler_stopped = Event()
self._handler = handlers.NodeHandler(self, hypervisor, exec_cmd,
force_xen)
self._manager = SimpleRpcClient.from_addr(server, port, enable_ssl=True,
default_handler=self._handler)
self._server = ConnectionProxy(self._manager)
Thibault VINCENT
committed
try:
self._manager.run()
except:
pass # FIXME
finally:
self._scheduler_stopped.set()
logging.debug('Authenticating user `%s` on connection `%i`' % (login,
id(self._server)))
if err.exception == 'AuthenticationError':
logging.warning('Authentication error')
else:
logging.warning('Unknown error while authenticating: %s' % err)
return False
except Exception as err:
logging.debug('Unhandled exception: `%s`' % err)
logging.warning('Bad role affected by server: %s' % role)
raise Exception()
# FIXME this will not cause a server restart, node stays dead
self._scheduler_rearm()
self._scheduler_timer = Timer(5, self._scheduler_run)
def _scheduler_run(self):
'''
'''
with self._scheduler_mutex:
Thibault VINCENT
committed
if not self._scheduler_stopped.is_set():
self._handler.scheduler_run()
sleep(0.1)
self._scheduler_rearm()
def get_server(self):
'''
'''
return self._server
def get_manager(self):
def get_handler(self):
'''
'''
return self._handler