def _lease(self, ttl) -> str: """ This method requests a Lease for the TTL specified :param ttl: Lease TTL :return: lease id """ logger.debug(f"Calling lease for ttl {ttl}...") # create request lease_grant_request = etcdrpc.LeaseGrantRequest(TTL=ttl, ID=None) # make the call try_again = True while try_again: try: try_again = False res = self._server.leasestub.LeaseGrant( lease_grant_request, self._server.timeout, credentials=self._server.call_credentials, metadata=self._server.metadata) except grpc._channel._InactiveRpcError as e: if e._state.code.name == "UNAUTHENTICATED": # it seems that sometimes the token expires, so re-init the server and try again try_again = True logger.debug(f"Error {e}, trying again", exc_info=True) self._initialise_server() else: raise e if res: logger.debug(f"Lease {res.ID} acquired") return res.ID else: raise EngineException(f"Not able to acquire lease")
def lease(self, ttl, lease_id=None): """ Create a new lease. All keys attached to this lease will be expired and deleted if the lease expires. A lease can be sent keep alive messages to refresh the ttl. :param ttl: Requested time to live :param lease_id: Requested ID for the lease :returns: new lease :rtype: :class:`.Lease` """ lease_grant_request = etcdrpc.LeaseGrantRequest(TTL=ttl, ID=lease_id) lease_grant_response = self.leasestub.LeaseGrant(lease_grant_request) return leases.Lease(lease_id=lease_grant_response.ID, ttl=lease_grant_response.TTL, etcd_client=self)