def register(self, namespace, name, locktype): fullName = "%s.%s" % (namespace, name) if fullName in self.resources: raise ValueError( "Owner %s: acquire: resource %s is already acquired" % (str(self), fullName)) manager = ResourceManager.getInstance() self.lock.acquire() try: if fullName in self.requests: raise ValueError("request %s is already requested by %s" % (str(fullName), str(self))) try: request = manager.registerResource(namespace, name, locktype, self._onRequestFinished) except ValueError, ex: self.log.debug( "%s: request for '%s' could not be processed (%s)" % (str(self), fullName, str(ex))) raise se.InvalidResourceName() except KeyError, ex: self.log.debug("%s: resource '%s' does not exist" % (str(self), fullName)) raise se.ResourceDoesNotExist()
def acquire(self, namespace, name, locktype, timeout_ms, raiseonfailure=None): fullName = "%s.%s" % (namespace, name) if raiseonfailure is None: raiseonfailure = self.raiseonfailure manager = ResourceManager.getInstance() if timeout_ms is not None: timeout = timeout_ms / 1000.0 self.lock.acquire() try: try: if fullName in self.resources: raise ValueError( "Owner %s: acquire: resource %s is already acquired" % (str(self), fullName)) try: resource = manager.acquireResource(namespace, name, locktype, timeout) self.resources[resource.fullName] = resource if hasattr(self.ownerobject, "resourceAcquired"): self.ownerobject.resourceAcquired( namespace, name, locktype) except RequestTimedOutError: self.log.debug( "%s: request for '%s' timed out after '%f' seconds" % (str(self), fullName, timeout)) raise se.ResourceTimeout() except ValueError, ex: self.log.debug( "%s: request for '%s' could not be proccessed (%s)" % (str(self), fullName, str(ex))) raise se.InvalidResourceName() except KeyError, ex: self.log.debug("%s: resource '%s' does not exist" % (str(self), fullName)) except Exception, ex: self.log.warn( "Unexpected exception caught while owner '%s' tried to acquire '%s'" % (str(self), fullName), exc_info=True) raise se.ResourceException()
def register(self, namespace, name, locktype): fullName = "%s.%s" % (namespace, name) if fullName in self.resources: raise ValueError("Owner %s: acquire: resource %s is already " "acquired" % (self, fullName)) manager = ResourceManager.getInstance() self.lock.acquire() try: if fullName in self.requests: raise ValueError("request %s is already requested by %s" % (fullName, self)) try: request = manager.registerResource(namespace, name, locktype, self._onRequestFinished) except ValueError as ex: self.log.debug( "%s: request for '%s' could not be processed " "(%s)", self, fullName, ex) raise se.InvalidResourceName() except KeyError: self.log.debug("%s: resource '%s' does not exist", self, fullName) raise se.ResourceDoesNotExist() except Exception: self.log.warn( "Unexpected exception caught while owner '%s' " "tried to acquire '%s'", self, fullName, exc_info=True) raise se.ResourceException() if hasattr(self.ownerobject, "resourceRegistered"): self.ownerobject.resourceRegistered(namespace, name, locktype) self.requests[fullName] = request finally: self.lock.release() self.log.debug("%s: request registered %s", self, request)