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