Interface PendingAckHandle

    • Method Summary

      All Methods Instance Methods Abstract Methods 
      Modifier and Type Method Description
      java.util.concurrent.CompletableFuture<java.lang.Void> abortTxn​(org.apache.pulsar.client.api.transaction.TxnID txnId, Consumer consumer, long lowWaterMark)
      Abort a transaction.
      boolean checkIfPendingAckStoreInit()
      Check if the PendingAckStore is init.
      boolean checkIsCanDeleteConsumerPendingAck​(org.apache.bookkeeper.mledger.impl.PositionImpl position)
      Judge the all ack set point have acked by normal ack and transaction pending ack.
      void clearIndividualPosition​(org.apache.bookkeeper.mledger.Position position)
      When the position is actually deleted, we can use this method to clear the cache for individual ack messages.
      java.util.concurrent.CompletableFuture<java.lang.Void> closeAsync()
      Close the pending ack handle.
      java.util.concurrent.CompletableFuture<java.lang.Void> commitTxn​(org.apache.pulsar.client.api.transaction.TxnID txnID, java.util.Map<java.lang.String,​java.lang.Long> properties, long lowWaterMark)
      Commit a transaction.
      java.util.concurrent.CompletableFuture<java.lang.Void> cumulativeAcknowledgeMessage​(org.apache.pulsar.client.api.transaction.TxnID txnID, java.util.List<org.apache.bookkeeper.mledger.impl.PositionImpl> positions)
      Acknowledge message(s) for an ongoing transaction.
      org.apache.bookkeeper.mledger.impl.PositionImpl getPositionInPendingAck​(org.apache.bookkeeper.mledger.impl.PositionImpl position)
      If it returns null, it means this Position is not in pendingAck.
      org.apache.pulsar.common.policies.data.TransactionPendingAckStats getStats()
      Get pending ack handle stats.
      org.apache.pulsar.common.policies.data.TransactionInPendingAckStats getTransactionInPendingAckStats​(org.apache.pulsar.client.api.transaction.TxnID txnID)
      Get transaction in pending ack stats.
      java.util.concurrent.CompletableFuture<java.lang.Void> individualAcknowledgeMessage​(org.apache.pulsar.client.api.transaction.TxnID txnID, java.util.List<org.apache.commons.lang3.tuple.MutablePair<org.apache.bookkeeper.mledger.impl.PositionImpl,​java.lang.Integer>> positions)
      Acknowledge message(s) for an ongoing transaction.
      java.util.concurrent.CompletableFuture<PendingAckHandle> pendingAckHandleFuture()
      Pending ack recover whether ready future.
      void syncBatchPositionAckSetForTransaction​(org.apache.bookkeeper.mledger.impl.PositionImpl position)
      Sync the position ack set, in order to clean up the cache of this position for pending ack handle.
    • Method Detail

      • individualAcknowledgeMessage

        java.util.concurrent.CompletableFuture<java.lang.Void> individualAcknowledgeMessage​(org.apache.pulsar.client.api.transaction.TxnID txnID,
                                                                                            java.util.List<org.apache.commons.lang3.tuple.MutablePair<org.apache.bookkeeper.mledger.impl.PositionImpl,​java.lang.Integer>> positions)
        Acknowledge message(s) for an ongoing transaction.

        It can be of CommandAck.AckType.Individual. Single messages acked by ongoing transaction will be put in pending_ack state and only marked as deleted after transaction is committed.

        If transaction is aborted all messages acked by it will be put back to pending state.

        Client will not send batch size to server, we get the batch size from consumer pending ack. When we get the Batch size, we can accurate batch ack of this position.

        Parameters:
        txnID - TxnID TransactionID of an ongoing transaction trying to sck message.
        positions - MutablePair the pair of positions and these batch size.
        Returns:
        the future of this operation.
        Throws:
        org.apache.pulsar.transaction.common.exception.TransactionConflictException - if the ack with transaction is conflict with pending ack.
        BrokerServiceException.NotAllowedException - if Use this method incorrectly eg. not use PositionImpl or cumulative ack with a list of positions.
      • cumulativeAcknowledgeMessage

        java.util.concurrent.CompletableFuture<java.lang.Void> cumulativeAcknowledgeMessage​(org.apache.pulsar.client.api.transaction.TxnID txnID,
                                                                                            java.util.List<org.apache.bookkeeper.mledger.impl.PositionImpl> positions)
        Acknowledge message(s) for an ongoing transaction.

        It can be of CommandAck.AckType.Cumulative. Single messages acked by ongoing transaction will be put in pending_ack state and only marked as deleted after transaction is committed.

        For a moment, we only allow one transaction cumulative ack multiple times when the position is greater than the old one.

        We have a transaction with cumulative ack, if other transaction want to cumulative ack, we will return TransactionConflictException.

        If an ongoing transaction cumulative acked a message and then try to ack single message which is greater than that one it cumulative acked, it'll succeed.

        Parameters:
        txnID - TxnID TransactionID of an ongoing transaction trying to sck message.
        positions - MutablePair the pair of positions and these batch size.
        Returns:
        the future of this operation.
        Throws:
        org.apache.pulsar.transaction.common.exception.TransactionConflictException - if the ack with transaction is conflict with pending ack.
        BrokerServiceException.NotAllowedException - if Use this method incorrectly eg. not use PositionImpl or cumulative ack with a list of positions.
      • commitTxn

        java.util.concurrent.CompletableFuture<java.lang.Void> commitTxn​(org.apache.pulsar.client.api.transaction.TxnID txnID,
                                                                         java.util.Map<java.lang.String,​java.lang.Long> properties,
                                                                         long lowWaterMark)
        Commit a transaction.
        Parameters:
        txnID - TxnID to identify the transaction.
        properties - Additional user-defined properties that can be associated with a particular cursor position.
        lowWaterMark - the low water mark of this transaction
        Returns:
        the future of this operation.
      • abortTxn

        java.util.concurrent.CompletableFuture<java.lang.Void> abortTxn​(org.apache.pulsar.client.api.transaction.TxnID txnId,
                                                                        Consumer consumer,
                                                                        long lowWaterMark)
        Abort a transaction.
        Parameters:
        txnId - TxnID to identify the transaction.
        consumer - Consumer which aborting transaction.
        lowWaterMark - the low water mark of this transaction
        Returns:
        the future of this operation.
      • syncBatchPositionAckSetForTransaction

        void syncBatchPositionAckSetForTransaction​(org.apache.bookkeeper.mledger.impl.PositionImpl position)
        Sync the position ack set, in order to clean up the cache of this position for pending ack handle.
        Parameters:
        position - Position which position need to sync and carry it batch size
      • checkIsCanDeleteConsumerPendingAck

        boolean checkIsCanDeleteConsumerPendingAck​(org.apache.bookkeeper.mledger.impl.PositionImpl position)
        Judge the all ack set point have acked by normal ack and transaction pending ack.
        Parameters:
        position - Position which position need to check
      • clearIndividualPosition

        void clearIndividualPosition​(org.apache.bookkeeper.mledger.Position position)
        When the position is actually deleted, we can use this method to clear the cache for individual ack messages.
        Parameters:
        position - Position which position need to clear
      • pendingAckHandleFuture

        java.util.concurrent.CompletableFuture<PendingAckHandle> pendingAckHandleFuture()
        Pending ack recover whether ready future.
        Returns:
        the future of result.
      • getTransactionInPendingAckStats

        org.apache.pulsar.common.policies.data.TransactionInPendingAckStats getTransactionInPendingAckStats​(org.apache.pulsar.client.api.transaction.TxnID txnID)
        Get transaction in pending ack stats.
        Parameters:
        txnID - the txnID
        Returns:
        the stats of this transaction in pending ack.
      • getStats

        org.apache.pulsar.common.policies.data.TransactionPendingAckStats getStats()
        Get pending ack handle stats.
        Returns:
        the stats of this pending ack handle.
      • closeAsync

        java.util.concurrent.CompletableFuture<java.lang.Void> closeAsync()
        Close the pending ack handle.
        Returns:
        the future of this operation.
      • checkIfPendingAckStoreInit

        boolean checkIfPendingAckStoreInit()
        Check if the PendingAckStore is init.
        Returns:
        if the PendingAckStore is init.
      • getPositionInPendingAck

        org.apache.bookkeeper.mledger.impl.PositionImpl getPositionInPendingAck​(org.apache.bookkeeper.mledger.impl.PositionImpl position)
        If it returns null, it means this Position is not in pendingAck.

        If it does not return null, it means this Position is in pendingAck and if it is batch Position, it will return the corresponding ackSet in pendingAck

        Parameters:
        position - Position witch need to get in pendingAck
        Returns:
        Position return the position in pendingAck