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;
         }
     }

Reply via email to