From 54af08b8dde113af2aea47d27543758c26809487 Mon Sep 17 00:00:00 2001 From: "maarten.vercruysse" Date: Wed, 8 Jan 2025 22:57:18 +0100 Subject: [PATCH] fix(perf regression): TopicName parsing per publish --- .../google/cloud/pubsub/v1/AckRequestData.java | 2 +- .../com/google/cloud/pubsub/v1/Publisher.java | 16 +++++++++------- .../cloud/pubsub/v1/PubsubMessageWrapper.java | 9 +++++++++ 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/AckRequestData.java b/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/AckRequestData.java index 5cab83f49..3b7d260a0 100644 --- a/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/AckRequestData.java +++ b/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/AckRequestData.java @@ -44,7 +44,7 @@ public SettableApiFuture getMessageFutureIfExists() { */ public PubsubMessageWrapper getMessageWrapper() { if (this.messageWrapper == null) { - return PubsubMessageWrapper.newBuilder(null, null).build(); + return PubsubMessageWrapper.newBuilder(null, (String) null).build(); } return messageWrapper; } diff --git a/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/Publisher.java b/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/Publisher.java index af7a57471..dcab7330b 100644 --- a/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/Publisher.java +++ b/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/Publisher.java @@ -99,7 +99,8 @@ public class Publisher implements PublisherInterface { private static final String OPEN_TELEMETRY_TRACER_NAME = "com.google.cloud.pubsub.v1"; - private final String topicName; + private final String topicNameString; + private final TopicName topicName; private final int topicNameSize; private final BatchingSettings batchingSettings; @@ -146,9 +147,10 @@ public static long getApiMaxRequestBytes() { } private Publisher(Builder builder) throws IOException { - topicName = builder.topicName; + topicNameString = builder.topicName; + topicName = TopicName.parse(this.topicNameString); topicNameSize = - CodedOutputStream.computeStringSize(PublishRequest.TOPIC_FIELD_NUMBER, this.topicName); + CodedOutputStream.computeStringSize(PublishRequest.TOPIC_FIELD_NUMBER, this.topicNameString); this.batchingSettings = builder.batchingSettings; FlowControlSettings flowControl = this.batchingSettings.getFlowControlSettings(); @@ -234,12 +236,12 @@ private Publisher(Builder builder) throws IOException { /** Topic which the publisher publishes to. */ public TopicName getTopicName() { - return TopicNames.parse(topicName); + return TopicNames.parse(topicNameString); } /** Topic which the publisher publishes to. */ public String getTopicNameString() { - return topicName; + return topicNameString; } /** @@ -490,13 +492,13 @@ private ApiFuture publishCall(OutstandingBatch outstandingBatch pubsubMessagesList.add(messageWrapper.getPubsubMessage()); } - outstandingBatch.publishRpcSpan = tracer.startPublishRpcSpan(topicName, messageWrappers); + outstandingBatch.publishRpcSpan = tracer.startPublishRpcSpan(topicNameString, messageWrappers); return publisherStub .publishCallable() .futureCall( PublishRequest.newBuilder() - .setTopic(topicName) + .setTopic(topicNameString) .addAllMessages(pubsubMessagesList) .build(), context); diff --git a/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/PubsubMessageWrapper.java b/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/PubsubMessageWrapper.java index 94fd13085..fc4d1f737 100644 --- a/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/PubsubMessageWrapper.java +++ b/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/PubsubMessageWrapper.java @@ -77,6 +77,10 @@ static Builder newBuilder(PubsubMessage message, String topicName) { return new Builder(message, topicName); } + static Builder newBuilder(PubsubMessage message, TopicName topicName) { + return new Builder(message, topicName); + } + static Builder newBuilder( PubsubMessage message, String subscriptionName, String ackId, int deliveryAttempt) { return new Builder(message, subscriptionName, ackId, deliveryAttempt); @@ -402,6 +406,11 @@ public Builder(PubsubMessage message, String topicName) { } } + public Builder(PubsubMessage message, TopicName topicName) { + this.message = message; + this.topicName = topicName; + } + public Builder( PubsubMessage message, String subscriptionName, String ackId, int deliveryAttempt) { this.message = message;