Example #1
0
    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")
Example #2
0
    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)