diff -r cda1bdc3652e -r 684215aca046 server/repository.py --- a/server/repository.py Mon Dec 01 11:52:58 2014 +0100 +++ b/server/repository.py Tue Mar 03 14:57:34 2015 +0100 @@ -24,7 +24,6 @@ * brings these classes all together to provide a single access point to a cubicweb instance. * handles session management -* provides method for pyro registration, to call if pyro is enabled """ __docformat__ = "restructuredtext en" @@ -151,8 +150,6 @@ class Repository(object): """a repository provides access to a set of persistent storages for entities and relations - - XXX protect pyro access """ def __init__(self, config, tasks_manager=None, vreg=None): @@ -162,17 +159,11 @@ self.vreg = vreg self._tasks_manager = tasks_manager - self.pyro_registered = False - self.pyro_uri = None - # every pyro client is handled in its own thread; map these threads to - # the session we opened for them so we can clean up when they go away - self._pyro_sessions = {} self.app_instances_bus = NullEventBus() self.info('starting repository from %s', self.config.apphome) # dictionary of opened sessions self._sessions = {} - # list of functions to be called at regular interval # list of running threads self._running_threads = [] @@ -435,10 +426,6 @@ except Exception: self.exception('error while closing %s' % cnxset) continue - if self.pyro_registered: - if self._use_pyrons(): - pyro_unregister(self.config) - self.pyro_uri = None hits, misses = self.querier.cache_hit, self.querier.cache_miss try: self.info('rql st cache hit/miss: %s/%s (%s%% hits)', hits, misses, @@ -662,12 +649,6 @@ # try to get a user object user = self.authenticate_user(cnx, login, **kwargs) session = Session(user, self, cnxprops) - if threading.currentThread() in self._pyro_sessions: - # assume no pyro client does one get_repository followed by - # multiple repo.connect - assert self._pyro_sessions[threading.currentThread()] == None - self.debug('record session %s', session) - self._pyro_sessions[threading.currentThread()] = session user._cw = user.cw_rset.req = session user.cw_clear_relation_cache() self._sessions[session.sessionid] = session @@ -697,10 +678,6 @@ try: rset = self.querier.execute(session, rqlstring, args, build_descr) - # NOTE: the web front will (re)build it when needed - # e.g in facets - # Zeroed to avoid useless overhead with pyro - rset._rqlst = None return rset except (ValidationError, Unauthorized, RQLSyntaxError): raise @@ -810,8 +787,6 @@ # done during `session_close` hooks cnx.commit() session.close() - if threading.currentThread() in self._pyro_sessions: - self._pyro_sessions[threading.currentThread()] = None del self._sessions[sessionid] self.info('closed session %s for user %s', sessionid, session.user.login) @@ -1349,79 +1324,12 @@ eidfrom=subject, rtype=rtype, eidto=object) - # pyro handling ########################################################### - - @property - @cached - def pyro_appid(self): - from logilab.common import pyro_ext as pyro - config = self.config - appid = '%s.%s' % pyro.ns_group_and_id( - config['pyro-instance-id'] or config.appid, - config['pyro-ns-group']) - # ensure config['pyro-instance-id'] is a full qualified pyro name - config['pyro-instance-id'] = appid - return appid - - def _use_pyrons(self): - """return True if the pyro-ns-host is set to something else - than NO_PYRONS, meaning we want to go through a pyro - nameserver""" - return self.config['pyro-ns-host'] != 'NO_PYRONS' - - def pyro_register(self, host=''): - """register the repository as a pyro object""" - from logilab.common import pyro_ext as pyro - daemon = pyro.register_object(self, self.pyro_appid, - daemonhost=self.config['pyro-host'], - nshost=self.config['pyro-ns-host'], - use_pyrons=self._use_pyrons()) - self.info('repository registered as a pyro object %s', self.pyro_appid) - self.pyro_uri = pyro.get_object_uri(self.pyro_appid) - self.info('pyro uri is: %s', self.pyro_uri) - self.pyro_registered = True - # register a looping task to regularly ensure we're still registered - # into the pyro name server - if self._use_pyrons(): - self.looping_task(60*10, self._ensure_pyro_ns) - pyro_sessions = self._pyro_sessions - # install hacky function to free cnxset - def handleConnection(conn, tcpserver, sessions=pyro_sessions): - sessions[threading.currentThread()] = None - return tcpserver.getAdapter().__class__.handleConnection(tcpserver.getAdapter(), conn, tcpserver) - daemon.getAdapter().handleConnection = handleConnection - def removeConnection(conn, sessions=pyro_sessions): - daemon.__class__.removeConnection(daemon, conn) - session = sessions.pop(threading.currentThread(), None) - if session is None: - # client was not yet connected to the repo - return - if not session.closed: - self.close(session.sessionid) - daemon.removeConnection = removeConnection - return daemon - - def _ensure_pyro_ns(self): - if not self._use_pyrons(): - return - from logilab.common import pyro_ext as pyro - pyro.ns_reregister(self.pyro_appid, nshost=self.config['pyro-ns-host']) - self.info('repository re-registered as a pyro object %s', - self.pyro_appid) # these are overridden by set_log_methods below # only defining here to prevent pylint from complaining info = warning = error = critical = exception = debug = lambda msg, *a, **kw: None - -def pyro_unregister(config): - """unregister the repository from the pyro name server""" - from logilab.common.pyro_ext import ns_unregister - appid = config['pyro-instance-id'] or config.appid - ns_unregister(appid, config['pyro-ns-group'], config['pyro-ns-host']) - - from logging import getLogger from cubicweb import set_log_methods set_log_methods(Repository, getLogger('cubicweb.repository'))