def acquire(self, namespace, name, locktype, timeout_ms, raiseonfailure=None): fullName = "%s.%s" % (namespace, name) if raiseonfailure is None: raiseonfailure = self.raiseonfailure 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" % (self, fullName)) try: resource = 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", self, fullName, timeout) raise se.ResourceTimeout() 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) except Exception: self.log.warn( "Unexpected exception caught while owner " "'%s' tried to acquire '%s'", self, fullName, exc_info=True) raise se.ResourceException(fullName) except: if raiseonfailure: raise return False return True finally: self.lock.release()
def acquire(self, namespace, name, locktype, timeout_ms, raiseonfailure=None): full_name = "%s.%s" % (namespace, name) if raiseonfailure is None: raiseonfailure = self.raiseonfailure if timeout_ms is not None: timeout = timeout_ms / 1000.0 with self.lock: try: if full_name in self.resources: raise ResourceAlreadyAcquired( "%s is already acquired by %s", full_name, self.ownerobject.getID()) try: resource = acquireResource(namespace, name, locktype, timeout) self.resources[resource.full_name] = resource if hasattr(self.ownerobject, "resourceAcquired"): self.ownerobject.resourceAcquired( namespace, name, locktype) except RequestTimedOutError: log.debug( "%s: request for '%s' timed out after '%f' seconds", self, full_name, timeout) raise se.ResourceTimeout() except ValueError as ex: log.debug( "%s: request for '%s' could not be processed (%s)", self, full_name, ex) raise se.InvalidResourceName(name) except KeyError: log.debug("%s: resource '%s' does not exist", self, full_name) raise ResourceDoesNotExist("Resource %s does not exist" % full_name) except Exception: log.warning( "Unexpected exception caught while owner '%s' tried " "to acquire '%s'", self, full_name, exc_info=True) raise se.ResourceException(full_name) except: if raiseonfailure: raise return False return True