This is an automated email from the ASF dual-hosted git repository.

technoboy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git


The following commit(s) were added to refs/heads/master by this push:
     new cfd2c474da9 [improve][pip] PIP-325: Add command to abort transaction 
(#21731)
cfd2c474da9 is described below

commit cfd2c474da999ee41187cfc07ddc608d93c4e8b8
Author: hrzzzz <[email protected]>
AuthorDate: Mon Jan 15 18:16:57 2024 +0800

    [improve][pip] PIP-325: Add command to abort transaction (#21731)
---
 pip/pip-325.md | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 94 insertions(+)

diff --git a/pip/pip-325.md b/pip/pip-325.md
new file mode 100644
index 00000000000..44d1aebc6a4
--- /dev/null
+++ b/pip/pip-325.md
@@ -0,0 +1,94 @@
+# Background knowledge
+
+In the current implementation of Pulsar Transaction, Topics ensure that 
consumers do not read messages belonging 
+to uncommitted transactions through the Transaction Buffer. Within the 
Transaction Buffer, a Position (`maxReadPosition`) 
+is maintained, as well as a set of aborted transactions (`aborts`). The 
`maxReadPosition` controls the maximum message 
+position that the broker can read, and it is adjusted to the position just 
before the first message of the first ongoing
+transaction when a transaction is committed or aborted. Before distributing 
messages to consumers, the broker filters out 
+messages that belong to already aborted transactions using the `aborts` set.
+
+# Motivation
+If we have a stuck transaction, then the transactions after this one cannot be 
consumed by the consumer 
+even if they have been committed. The consumer will be stuck until the stuck 
transaction is aborted due to timeout, 
+and then it will continue to consume messages. Therefore, we need to add a 
command to allow cluster administrators 
+to proactively abort transaction.
+
+# Goals
+
+## In Scope
+
+Introduce a new API for aborting transactions, allowing administrators to 
proactively abort transaction.
+
+## Out of Scope
+
+None.
+
+
+# High Level Design
+
+Introduce a new API for aborting transactions, allowing administrators to 
proactively abort transaction.
+
+# Detailed Design
+
+## Design & Implementation Details
+
+Introduce a new API for aborting transactions, allowing administrators to 
proactively abort transaction.
+
+## Public-facing Changes
+
+### Public API
+Add a new API to abort transaction:
+```
+    /**
+     * Abort a transaction.
+     *
+     * @param txnID the txnId
+     */
+    void abortTransaction(TxnID txnID) throws PulsarAdminException;
+
+    /**
+     * Asynchronously Abort a transaction.
+     *
+     * @param txnID the txnId
+     */
+    CompletableFuture<Void> abortTransactionAsync(TxnID txnID);
+```
+```
+admin.transactions().abortTransaction(txnID);
+```
+
+### Binary protocol
+
+### Configuration
+
+### CLI
+Add a command to abort transaction:
+```
+pulsar-admin transactions abort-transaction --most-sig-bits 1 --least-sig-bits 
2
+```
+### Metrics
+None.
+
+# Monitoring
+None.
+
+# Security Considerations
+The transaction owner and super user can access the admin API to abort the 
transaction.
+
+# Backward & Forward Compatibility
+
+## Revert
+
+## Upgrade
+
+# Alternatives
+
+# General Notes
+
+# Links
+
+<!--
+Updated afterwards
+-->
+* Mailing List discussion thread: 
https://lists.apache.org/thread/ssgngyrlgx36zvygvsd5b2dm5q6krn0f
+* Mailing List voting thread: 
https://lists.apache.org/thread/kp9w4d8drngomx1mdof0203ybgfmvtty

Reply via email to