Skip to content

Commit 07b1350

Browse files
authored
fix: Prevent excessive string parsing when publishing and receiving messages to improve performance (#2317)
* docs: Add samples and tests for ingestion from Kafka sources * docs: Styles fixes for samples/tests * fix: Prevent excessive string parsing when publishing and receiving messages to improve performance * test: Fix test to use proper subscription name * test: Fix MessageDispatcherTest * test: Add subscription name to all required builders in MessageDispatcherTest * fix: Fix formatting of test files * fix: Use TopicName instead of String for startPublishRpcSpan * fix: Use SubscriptionName instead of String for startSubscriberRpcSpan * fix: Removed unused subscriptionName string
1 parent 7d3d2e4 commit 07b1350

File tree

8 files changed

+45
-51
lines changed

8 files changed

+45
-51
lines changed

google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/MessageDispatcher.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import com.google.common.util.concurrent.MoreExecutors;
2929
import com.google.pubsub.v1.PubsubMessage;
3030
import com.google.pubsub.v1.ReceivedMessage;
31+
import com.google.pubsub.v1.SubscriptionName;
3132
import java.time.Duration;
3233
import java.time.Instant;
3334
import java.time.temporal.ChronoUnit;
@@ -104,7 +105,7 @@ class MessageDispatcher {
104105
// To keep track of number of seconds the receiver takes to process messages.
105106
private final Distribution ackLatencyDistribution;
106107

107-
private final String subscriptionName;
108+
private final SubscriptionName subscriptionNameObject;
108109
private final boolean enableOpenTelemetryTracing;
109110
private OpenTelemetryPubsubTracer tracer = new OpenTelemetryPubsubTracer(null, false);
110111

@@ -225,7 +226,7 @@ private MessageDispatcher(Builder builder) {
225226
messagesWaiter = new Waiter();
226227
sequentialExecutor = new SequentialExecutorService.AutoExecutor(builder.executor);
227228

228-
subscriptionName = builder.subscriptionName;
229+
subscriptionNameObject = SubscriptionName.parse(builder.subscriptionName);
229230
enableOpenTelemetryTracing = builder.enableOpenTelemetryTracing;
230231
if (builder.tracer != null) {
231232
tracer = builder.tracer;
@@ -408,7 +409,7 @@ void processReceivedMessages(List<ReceivedMessage> messages) {
408409
PubsubMessageWrapper messageWrapper =
409410
PubsubMessageWrapper.newBuilder(
410411
message.getMessage(),
411-
subscriptionName,
412+
subscriptionNameObject,
412413
message.getAckId(),
413414
message.getDeliveryAttempt())
414415
.build();

google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/OpenTelemetryPubsubTracer.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -172,11 +172,10 @@ void endPublishBatchingSpan(PubsubMessageWrapper message) {
172172
* Creates, starts, and returns a publish RPC span for the given message batch. Bi-directional
173173
* links with the publisher parent span are created for sampled messages in the batch.
174174
*/
175-
Span startPublishRpcSpan(String topic, List<PubsubMessageWrapper> messages) {
175+
Span startPublishRpcSpan(TopicName topicName, List<PubsubMessageWrapper> messages) {
176176
if (!enabled) {
177177
return null;
178178
}
179-
TopicName topicName = TopicName.parse(topic);
180179
Attributes attributes =
181180
createCommonSpanAttributesBuilder(
182181
topicName.getTopic(), topicName.getProject(), "publishCall", "publish")
@@ -359,7 +358,7 @@ void endSubscribeProcessSpan(PubsubMessageWrapper message, String action) {
359358
* to parent subscribe span for sampled messages are added.
360359
*/
361360
Span startSubscribeRpcSpan(
362-
String subscription,
361+
SubscriptionName subscriptionName,
363362
String rpcOperation,
364363
List<PubsubMessageWrapper> messages,
365364
int ackDeadline,
@@ -368,7 +367,6 @@ Span startSubscribeRpcSpan(
368367
return null;
369368
}
370369
String codeFunction = rpcOperation == "ack" ? "sendAckOperations" : "sendModAckOperations";
371-
SubscriptionName subscriptionName = SubscriptionName.parse(subscription);
372370
AttributesBuilder attributesBuilder =
373371
createCommonSpanAttributesBuilder(
374372
subscriptionName.getSubscription(),

google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/Publisher.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ public class Publisher implements PublisherInterface {
101101

102102
private final String topicName;
103103
private final int topicNameSize;
104+
private final TopicName topicNameObject;
104105

105106
private final BatchingSettings batchingSettings;
106107
private final boolean enableMessageOrdering;
@@ -149,6 +150,7 @@ private Publisher(Builder builder) throws IOException {
149150
topicName = builder.topicName;
150151
topicNameSize =
151152
CodedOutputStream.computeStringSize(PublishRequest.TOPIC_FIELD_NUMBER, this.topicName);
153+
topicNameObject = TopicName.parse(this.topicName);
152154

153155
this.batchingSettings = builder.batchingSettings;
154156
FlowControlSettings flowControl = this.batchingSettings.getFlowControlSettings();
@@ -282,7 +284,7 @@ public ApiFuture<String> publish(PubsubMessage message) {
282284
+ "setEnableMessageOrdering(true) in the builder.");
283285

284286
PubsubMessageWrapper messageWrapper =
285-
PubsubMessageWrapper.newBuilder(messageTransform.apply(message), topicName).build();
287+
PubsubMessageWrapper.newBuilder(messageTransform.apply(message), topicNameObject).build();
286288
tracer.startPublisherSpan(messageWrapper);
287289

288290
final OutstandingPublish outstandingPublish = new OutstandingPublish(messageWrapper);
@@ -490,7 +492,7 @@ private ApiFuture<PublishResponse> publishCall(OutstandingBatch outstandingBatch
490492
pubsubMessagesList.add(messageWrapper.getPubsubMessage());
491493
}
492494

493-
outstandingBatch.publishRpcSpan = tracer.startPublishRpcSpan(topicName, messageWrappers);
495+
outstandingBatch.publishRpcSpan = tracer.startPublishRpcSpan(topicNameObject, messageWrappers);
494496

495497
return publisherStub
496498
.publishCallable()

google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/PubsubMessageWrapper.java

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,12 @@ private PubsubMessageWrapper(Builder builder) {
7373
this.deliveryAttempt = builder.deliveryAttempt;
7474
}
7575

76-
static Builder newBuilder(PubsubMessage message, String topicName) {
76+
static Builder newBuilder(PubsubMessage message, TopicName topicName) {
7777
return new Builder(message, topicName);
7878
}
7979

8080
static Builder newBuilder(
81-
PubsubMessage message, String subscriptionName, String ackId, int deliveryAttempt) {
81+
PubsubMessage message, SubscriptionName subscriptionName, String ackId, int deliveryAttempt) {
8282
return new Builder(message, subscriptionName, ackId, deliveryAttempt);
8383
}
8484

@@ -395,21 +395,9 @@ static final class Builder {
395395
private String ackId = null;
396396
private int deliveryAttempt = 0;
397397

398-
public Builder(PubsubMessage message, String topicName) {
398+
public Builder(PubsubMessage message, TopicName topicName) {
399399
this.message = message;
400-
if (topicName != null) {
401-
this.topicName = TopicName.parse(topicName);
402-
}
403-
}
404-
405-
public Builder(
406-
PubsubMessage message, String subscriptionName, String ackId, int deliveryAttempt) {
407-
this.message = message;
408-
if (subscriptionName != null) {
409-
this.subscriptionName = SubscriptionName.parse(subscriptionName);
410-
}
411-
this.ackId = ackId;
412-
this.deliveryAttempt = deliveryAttempt;
400+
this.topicName = topicName;
413401
}
414402

415403
public Builder(

google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/StreamingSubscriberConnection.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import com.google.pubsub.v1.ModifyAckDeadlineRequest;
4848
import com.google.pubsub.v1.StreamingPullRequest;
4949
import com.google.pubsub.v1.StreamingPullResponse;
50+
import com.google.pubsub.v1.SubscriptionName;
5051
import com.google.rpc.ErrorInfo;
5152
import io.grpc.Status;
5253
import io.grpc.protobuf.StatusProto;
@@ -94,6 +95,7 @@ final class StreamingSubscriberConnection extends AbstractApiService implements
9495
private final SubscriberStub subscriberStub;
9596
private final int channelAffinity;
9697
private final String subscription;
98+
private final SubscriptionName subscriptionNameObject;
9799
private final ScheduledExecutorService systemExecutor;
98100
private final MessageDispatcher messageDispatcher;
99101

@@ -124,6 +126,7 @@ final class StreamingSubscriberConnection extends AbstractApiService implements
124126

125127
private StreamingSubscriberConnection(Builder builder) {
126128
subscription = builder.subscription;
129+
subscriptionNameObject = SubscriptionName.parse(builder.subscription);
127130
systemExecutor = builder.systemExecutor;
128131

129132
// We need to set the default stream ack deadline on the initial request, this will be
@@ -454,7 +457,8 @@ private void sendAckOperations(
454457
}
455458
}
456459
// Creates an Ack span to be passed to the callback
457-
Span rpcSpan = tracer.startSubscribeRpcSpan(subscription, "ack", messagesInRequest, 0, false);
460+
Span rpcSpan =
461+
tracer.startSubscribeRpcSpan(subscriptionNameObject, "ack", messagesInRequest, 0, false);
458462
ApiFutureCallback<Empty> callback =
459463
getCallback(ackRequestDataInRequestList, 0, false, currentBackoffMillis, rpcSpan);
460464
ApiFuture<Empty> ackFuture =
@@ -493,7 +497,7 @@ private void sendModackOperations(
493497
// Creates either a ModAck span or a Nack span depending on the given ack deadline
494498
Span rpcSpan =
495499
tracer.startSubscribeRpcSpan(
496-
subscription,
500+
subscriptionNameObject,
497501
rpcOperation,
498502
messagesInRequest,
499503
deadlineExtensionSeconds,

google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MessageDispatcherTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
import org.mockito.stubbing.Answer;
3636

3737
public class MessageDispatcherTest {
38+
private static final String MOCK_SUBSCRIPTION_NAME =
39+
"projects/MOCK-PROJECT/subscriptions/MOCK-SUBSCRIPTION";
3840
private static final ByteString MESSAGE_DATA = ByteString.copyFromUtf8("message-data");
3941
private static final int DELIVERY_INFO_COUNT = 3;
4042
private static final String ACK_ID = "ACK-ID";
@@ -462,6 +464,7 @@ public void testAckExtensionDefaultsExactlyOnceDeliveryDisabledThenEnabled() {
462464
.setMinDurationPerAckExtensionDefaultUsed(true)
463465
.setMaxDurationPerAckExtension(Subscriber.DEFAULT_MAX_ACK_DEADLINE_EXTENSION)
464466
.setMaxDurationPerAckExtensionDefaultUsed(true)
467+
.setSubscriptionName(MOCK_SUBSCRIPTION_NAME)
465468
.build();
466469

467470
// ExactlyOnceDeliveryEnabled is turned off by default
@@ -494,6 +497,7 @@ public void testAckExtensionDefaultsExactlyOnceDeliveryEnabledThenDisabled() {
494497
.setMinDurationPerAckExtensionDefaultUsed(true)
495498
.setMaxDurationPerAckExtension(Subscriber.DEFAULT_MIN_ACK_DEADLINE_EXTENSION)
496499
.setMaxDurationPerAckExtensionDefaultUsed(true)
500+
.setSubscriptionName(MOCK_SUBSCRIPTION_NAME)
497501
.build();
498502

499503
// This would normally be set from the streaming pull response in the
@@ -605,6 +609,7 @@ public void testAckExtensionCustomMinExactlyOnceDeliveryDisabledThenEnabled() {
605609
.setMinDurationPerAckExtensionDefaultUsed(false)
606610
.setMaxDurationPerAckExtension(Subscriber.DEFAULT_MIN_ACK_DEADLINE_EXTENSION)
607611
.setMaxDurationPerAckExtensionDefaultUsed(true)
612+
.setSubscriptionName(MOCK_SUBSCRIPTION_NAME)
608613
.build();
609614

610615
// ExactlyOnceDeliveryEnabled is turned off by default
@@ -634,6 +639,7 @@ public void testAckExtensionCustomMaxExactlyOnceDeliveryDisabledThenEnabled() {
634639
.setMinDurationPerAckExtensionDefaultUsed(true)
635640
.setMaxDurationPerAckExtension(Duration.ofSeconds(customMaxSeconds))
636641
.setMaxDurationPerAckExtensionDefaultUsed(false)
642+
.setSubscriptionName(MOCK_SUBSCRIPTION_NAME)
637643
.build();
638644

639645
// ExactlyOnceDeliveryEnabled is turned off by default
@@ -704,6 +710,7 @@ private MessageDispatcher getMessageDispatcherFromBuilder(
704710
.setAckLatencyDistribution(mock(Distribution.class))
705711
.setFlowController(mock(FlowController.class))
706712
.setExecutor(executor)
713+
.setSubscriptionName(MOCK_SUBSCRIPTION_NAME)
707714
.setSystemExecutor(systemExecutor)
708715
.setApiClock(clock)
709716
.build();

google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/OpenTelemetryTest.java

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ public void testPublishSpansSuccess() {
104104
openTelemetryTesting.clearSpans();
105105

106106
PubsubMessageWrapper messageWrapper =
107-
PubsubMessageWrapper.newBuilder(getPubsubMessage(), FULL_TOPIC_NAME.toString()).build();
107+
PubsubMessageWrapper.newBuilder(getPubsubMessage(), FULL_TOPIC_NAME).build();
108108
List<PubsubMessageWrapper> messageWrappers = Arrays.asList(messageWrapper);
109109

110110
long messageSize = messageWrapper.getPubsubMessage().getData().size();
@@ -117,7 +117,7 @@ public void testPublishSpansSuccess() {
117117
tracer.endPublishFlowControlSpan(messageWrapper);
118118
tracer.startPublishBatchingSpan(messageWrapper);
119119
tracer.endPublishBatchingSpan(messageWrapper);
120-
Span publishRpcSpan = tracer.startPublishRpcSpan(FULL_TOPIC_NAME.toString(), messageWrappers);
120+
Span publishRpcSpan = tracer.startPublishRpcSpan(FULL_TOPIC_NAME, messageWrappers);
121121
tracer.endPublishRpcSpan(publishRpcSpan);
122122
tracer.setPublisherMessageIdSpanAttribute(messageWrapper, MESSAGE_ID);
123123
tracer.endPublisherSpan(messageWrapper);
@@ -218,7 +218,7 @@ public void testPublishFlowControlSpanFailure() {
218218
openTelemetryTesting.clearSpans();
219219

220220
PubsubMessageWrapper messageWrapper =
221-
PubsubMessageWrapper.newBuilder(getPubsubMessage(), FULL_TOPIC_NAME.toString()).build();
221+
PubsubMessageWrapper.newBuilder(getPubsubMessage(), FULL_TOPIC_NAME).build();
222222

223223
Tracer openTelemetryTracer = openTelemetryTesting.getOpenTelemetry().getTracer("test");
224224
OpenTelemetryPubsubTracer tracer = new OpenTelemetryPubsubTracer(openTelemetryTracer, true);
@@ -258,14 +258,14 @@ public void testPublishRpcSpanFailure() {
258258
openTelemetryTesting.clearSpans();
259259

260260
PubsubMessageWrapper messageWrapper =
261-
PubsubMessageWrapper.newBuilder(getPubsubMessage(), FULL_TOPIC_NAME.toString()).build();
261+
PubsubMessageWrapper.newBuilder(getPubsubMessage(), FULL_TOPIC_NAME).build();
262262

263263
List<PubsubMessageWrapper> messageWrappers = Arrays.asList(messageWrapper);
264264
Tracer openTelemetryTracer = openTelemetryTesting.getOpenTelemetry().getTracer("test");
265265
OpenTelemetryPubsubTracer tracer = new OpenTelemetryPubsubTracer(openTelemetryTracer, true);
266266

267267
tracer.startPublisherSpan(messageWrapper);
268-
Span publishRpcSpan = tracer.startPublishRpcSpan(FULL_TOPIC_NAME.toString(), messageWrappers);
268+
Span publishRpcSpan = tracer.startPublishRpcSpan(FULL_TOPIC_NAME, messageWrappers);
269269

270270
Exception e = new Exception("test-exception");
271271
tracer.setPublishRpcSpanException(publishRpcSpan, e);
@@ -302,16 +302,15 @@ public void testSubscribeSpansSuccess() {
302302
OpenTelemetryPubsubTracer tracer = new OpenTelemetryPubsubTracer(openTelemetryTracer, true);
303303

304304
PubsubMessageWrapper publishMessageWrapper =
305-
PubsubMessageWrapper.newBuilder(getPubsubMessage(), FULL_TOPIC_NAME.toString()).build();
305+
PubsubMessageWrapper.newBuilder(getPubsubMessage(), FULL_TOPIC_NAME).build();
306306
// Initialize the Publisher span to inject the context in the message
307307
tracer.startPublisherSpan(publishMessageWrapper);
308308
tracer.endPublisherSpan(publishMessageWrapper);
309309

310310
PubsubMessage publishedMessage =
311311
publishMessageWrapper.getPubsubMessage().toBuilder().setMessageId(MESSAGE_ID).build();
312312
PubsubMessageWrapper subscribeMessageWrapper =
313-
PubsubMessageWrapper.newBuilder(
314-
publishedMessage, FULL_SUBSCRIPTION_NAME.toString(), ACK_ID, 1)
313+
PubsubMessageWrapper.newBuilder(publishedMessage, FULL_SUBSCRIPTION_NAME, ACK_ID, 1)
315314
.build();
316315
List<PubsubMessageWrapper> subscribeMessageWrappers = Arrays.asList(subscribeMessageWrapper);
317316

@@ -327,21 +326,17 @@ public void testSubscribeSpansSuccess() {
327326
tracer.endSubscribeProcessSpan(subscribeMessageWrapper, PROCESS_ACTION);
328327
Span subscribeModackRpcSpan =
329328
tracer.startSubscribeRpcSpan(
330-
FULL_SUBSCRIPTION_NAME.toString(),
331-
"modack",
332-
subscribeMessageWrappers,
333-
ACK_DEADLINE,
334-
true);
329+
FULL_SUBSCRIPTION_NAME, "modack", subscribeMessageWrappers, ACK_DEADLINE, true);
335330
tracer.endSubscribeRpcSpan(subscribeModackRpcSpan);
336331
tracer.addEndRpcEvent(subscribeMessageWrapper, true, true, ACK_DEADLINE);
337332
Span subscribeAckRpcSpan =
338333
tracer.startSubscribeRpcSpan(
339-
FULL_SUBSCRIPTION_NAME.toString(), "ack", subscribeMessageWrappers, 0, false);
334+
FULL_SUBSCRIPTION_NAME, "ack", subscribeMessageWrappers, 0, false);
340335
tracer.endSubscribeRpcSpan(subscribeAckRpcSpan);
341336
tracer.addEndRpcEvent(subscribeMessageWrapper, true, false, 0);
342337
Span subscribeNackRpcSpan =
343338
tracer.startSubscribeRpcSpan(
344-
FULL_SUBSCRIPTION_NAME.toString(), "nack", subscribeMessageWrappers, 0, false);
339+
FULL_SUBSCRIPTION_NAME, "nack", subscribeMessageWrappers, 0, false);
345340
tracer.endSubscribeRpcSpan(subscribeNackRpcSpan);
346341
tracer.addEndRpcEvent(subscribeMessageWrapper, true, true, 0);
347342
tracer.endSubscriberSpan(subscribeMessageWrapper);
@@ -518,7 +513,7 @@ public void testSubscribeConcurrencyControlSpanFailure() {
518513

519514
PubsubMessageWrapper messageWrapper =
520515
PubsubMessageWrapper.newBuilder(
521-
getPubsubMessage(), FULL_SUBSCRIPTION_NAME.toString(), ACK_ID, DELIVERY_ATTEMPT)
516+
getPubsubMessage(), FULL_SUBSCRIPTION_NAME, ACK_ID, DELIVERY_ATTEMPT)
522517
.build();
523518

524519
Tracer openTelemetryTracer = openTelemetryTesting.getOpenTelemetry().getTracer("test");
@@ -562,7 +557,7 @@ public void testSubscriberSpanFailure() {
562557

563558
PubsubMessageWrapper messageWrapper =
564559
PubsubMessageWrapper.newBuilder(
565-
getPubsubMessage(), FULL_SUBSCRIPTION_NAME.toString(), ACK_ID, DELIVERY_ATTEMPT)
560+
getPubsubMessage(), FULL_SUBSCRIPTION_NAME, ACK_ID, DELIVERY_ATTEMPT)
566561
.build();
567562

568563
Tracer openTelemetryTracer = openTelemetryTesting.getOpenTelemetry().getTracer("test");
@@ -595,7 +590,7 @@ public void testSubscribeRpcSpanFailures() {
595590

596591
PubsubMessageWrapper messageWrapper =
597592
PubsubMessageWrapper.newBuilder(
598-
getPubsubMessage(), FULL_SUBSCRIPTION_NAME.toString(), ACK_ID, DELIVERY_ATTEMPT)
593+
getPubsubMessage(), FULL_SUBSCRIPTION_NAME, ACK_ID, DELIVERY_ATTEMPT)
599594
.build();
600595
List<PubsubMessageWrapper> messageWrappers = Arrays.asList(messageWrapper);
601596

@@ -605,13 +600,11 @@ public void testSubscribeRpcSpanFailures() {
605600
tracer.startSubscriberSpan(messageWrapper, EXACTLY_ONCE_ENABLED);
606601
Span subscribeModackRpcSpan =
607602
tracer.startSubscribeRpcSpan(
608-
FULL_SUBSCRIPTION_NAME.toString(), "modack", messageWrappers, ACK_DEADLINE, true);
603+
FULL_SUBSCRIPTION_NAME, "modack", messageWrappers, ACK_DEADLINE, true);
609604
Span subscribeAckRpcSpan =
610-
tracer.startSubscribeRpcSpan(
611-
FULL_SUBSCRIPTION_NAME.toString(), "ack", messageWrappers, 0, false);
605+
tracer.startSubscribeRpcSpan(FULL_SUBSCRIPTION_NAME, "ack", messageWrappers, 0, false);
612606
Span subscribeNackRpcSpan =
613-
tracer.startSubscribeRpcSpan(
614-
FULL_SUBSCRIPTION_NAME.toString(), "nack", messageWrappers, 0, false);
607+
tracer.startSubscribeRpcSpan(FULL_SUBSCRIPTION_NAME, "nack", messageWrappers, 0, false);
615608

616609
Exception e = new Exception("test-exception");
617610
tracer.setSubscribeRpcSpanException(subscribeModackRpcSpan, true, ACK_DEADLINE, e);

google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/StreamingSubscriberConnectionTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ public class StreamingSubscriberConnectionTest {
5252
private FakeClock clock;
5353
private SubscriberStub mockSubscriberStub;
5454

55-
private static final String MOCK_SUBSCRIPTION_NAME = "MOCK-SUBSCRIPTION";
55+
private static final String MOCK_SUBSCRIPTION_NAME =
56+
"projects/MOCK-PROJECT/subscriptions/MOCK-SUBSCRIPTION";
5657
private static final String MOCK_ACK_ID_SUCCESS = "MOCK-ACK-ID-SUCCESS";
5758
private static final String MOCK_ACK_ID_SUCCESS_2 = "MOCK-ACK-ID-SUCCESS-2";
5859
private static final String MOCK_ACK_ID_NACK_SUCCESS = "MOCK-ACK-ID-NACK-SUCCESS";

0 commit comments

Comments
 (0)