This is an automated email from the ASF dual-hosted git repository.
penghui 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 9a454a65d07 [improve][txn] Avoid txn id primitive auto boxing (#18270)
9a454a65d07 is described below
commit 9a454a65d07cf716e2c23a90fb32ca7a88e92bf8
Author: WJL3333 <[email protected]>
AuthorDate: Tue Nov 1 12:49:06 2022 +0800
[improve][txn] Avoid txn id primitive auto boxing (#18270)
---
.../transaction/buffer/metadata/v2/TxnIDData.java | 4 ++--
.../pulsar/client/api/transaction/TxnID.java | 23 ++++++++++++++++++----
.../client/impl/transaction/TransactionImpl.java | 15 ++++++++------
3 files changed, 30 insertions(+), 12 deletions(-)
diff --git
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/buffer/metadata/v2/TxnIDData.java
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/buffer/metadata/v2/TxnIDData.java
index bc19f46f252..a3bff6dffd3 100644
---
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/buffer/metadata/v2/TxnIDData.java
+++
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/buffer/metadata/v2/TxnIDData.java
@@ -54,8 +54,8 @@ public class TxnIDData {
@Override
public boolean equals(Object obj) {
if (obj instanceof TxnIDData other) {
- return Objects.equals(mostSigBits, other.mostSigBits)
- && Objects.equals(leastSigBits, other.leastSigBits);
+ return mostSigBits == other.mostSigBits
+ && leastSigBits == other.leastSigBits;
}
return false;
diff --git
a/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/transaction/TxnID.java
b/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/transaction/TxnID.java
index c6729140dd0..772c709bfc0 100644
---
a/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/transaction/TxnID.java
+++
b/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/transaction/TxnID.java
@@ -20,7 +20,9 @@ package org.apache.pulsar.client.api.transaction;
import java.io.Serializable;
import java.util.Objects;
+import lombok.AccessLevel;
import lombok.Data;
+import lombok.Getter;
import org.apache.pulsar.common.classification.InterfaceAudience;
import org.apache.pulsar.common.classification.InterfaceStability;
@@ -48,22 +50,35 @@ public class TxnID implements Serializable {
*/
private final long leastSigBits;
+ @Getter(AccessLevel.NONE)
+ private final transient int hashCode;
+
+ @Getter(AccessLevel.NONE)
+ private final transient String txnStr;
+
+ public TxnID(long mostSigBits, long leastSigBits) {
+ this.mostSigBits = mostSigBits;
+ this.leastSigBits = leastSigBits;
+ this.hashCode = Objects.hash(mostSigBits, leastSigBits);
+ this.txnStr = "(" + mostSigBits + "," + leastSigBits + ")";
+ }
+
@Override
public String toString() {
- return "(" + mostSigBits + "," + leastSigBits + ")";
+ return txnStr;
}
@Override
public int hashCode() {
- return Objects.hash(mostSigBits, leastSigBits);
+ return hashCode;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof TxnID) {
TxnID other = (TxnID) obj;
- return Objects.equals(mostSigBits, other.mostSigBits)
- && Objects.equals(leastSigBits, other.leastSigBits);
+ return mostSigBits == other.mostSigBits
+ && leastSigBits == other.leastSigBits;
}
return false;
diff --git
a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/transaction/TransactionImpl.java
b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/transaction/TransactionImpl.java
index c7ec884a51d..b7e085ed82a 100644
---
a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/transaction/TransactionImpl.java
+++
b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/transaction/TransactionImpl.java
@@ -57,6 +57,8 @@ public class TransactionImpl implements Transaction ,
TimerTask {
private final long txnIdLeastBits;
private final long txnIdMostBits;
+ private final TxnID txnId;
+
private final Map<String, CompletableFuture<Void>> registerPartitionMap;
private final Map<Pair<String, String>, CompletableFuture<Void>>
registerSubscriptionMap;
private final TransactionCoordinatorClientImpl tcClient;
@@ -89,6 +91,7 @@ public class TransactionImpl implements Transaction ,
TimerTask {
this.transactionTimeoutMs = transactionTimeoutMs;
this.txnIdLeastBits = txnIdLeastBits;
this.txnIdMostBits = txnIdMostBits;
+ this.txnId = new TxnID(this.txnIdMostBits, this.txnIdLeastBits);
this.registerPartitionMap = new ConcurrentHashMap<>();
this.registerSubscriptionMap = new ConcurrentHashMap<>();
@@ -109,7 +112,7 @@ public class TransactionImpl implements Transaction ,
TimerTask {
return future.thenCompose(ignored ->
CompletableFuture.completedFuture(null));
} else {
return tcClient.addPublishPartitionToTxnAsync(
- new TxnID(txnIdMostBits, txnIdLeastBits),
Lists.newArrayList(topic))
+ txnId, Lists.newArrayList(topic))
.thenCompose(ignored ->
CompletableFuture.completedFuture(null));
}
});
@@ -150,7 +153,7 @@ public class TransactionImpl implements Transaction ,
TimerTask {
return future.thenCompose(ignored ->
CompletableFuture.completedFuture(null));
} else {
return tcClient.addSubscriptionToTxnAsync(
- new TxnID(txnIdMostBits, txnIdLeastBits),
topic, subscription)
+ txnId, topic, subscription)
.thenCompose(ignored ->
CompletableFuture.completedFuture(null));
}
});
@@ -191,7 +194,7 @@ public class TransactionImpl implements Transaction ,
TimerTask {
abort().whenComplete((vx, ex) ->
commitFuture.completeExceptionally(new PulsarClientException
.TransactionHasOperationFailedException()));
} else {
- tcClient.commitAsync(new TxnID(txnIdMostBits,
txnIdLeastBits))
+ tcClient.commitAsync(txnId)
.whenComplete((vx, ex) -> {
if (ex != null) {
if (ex instanceof
TransactionNotFoundException
@@ -217,7 +220,7 @@ public class TransactionImpl implements Transaction ,
TimerTask {
CompletableFuture<Void> abortFuture = new CompletableFuture<>();
this.state = State.ABORTING;
opFuture.whenComplete((v, e) -> {
- tcClient.abortAsync(new TxnID(txnIdMostBits,
txnIdLeastBits)).whenComplete((vx, ex) -> {
+ tcClient.abortAsync(txnId).whenComplete((vx, ex) -> {
if (ex != null) {
if (ex instanceof TransactionNotFoundException
@@ -239,7 +242,7 @@ public class TransactionImpl implements Transaction ,
TimerTask {
@Override
public TxnID getTxnID() {
- return new TxnID(txnIdMostBits, txnIdLeastBits);
+ return this.txnId;
}
@Override
@@ -253,7 +256,7 @@ public class TransactionImpl implements Transaction ,
TimerTask {
} else {
completableFuture
.completeExceptionally(new InvalidTxnStatusException(
- new TxnID(txnIdMostBits,
txnIdLeastBits).toString(), state.name(), State.OPEN.name()));
+ txnId.toString(), state.name(),
State.OPEN.name()));
return false;
}
}