diff --git a/.github/.OwlBot.lock.yaml b/.github/.OwlBot.lock.yaml
index fa335912b..52eaa54d8 100644
--- a/.github/.OwlBot.lock.yaml
+++ b/.github/.OwlBot.lock.yaml
@@ -13,5 +13,5 @@
# limitations under the License.
docker:
image: gcr.io/cloud-devrel-public-resources/owlbot-java:latest
- digest: sha256:3a95f1b9b1102865ca551b76be51d2bdb850900c4db2f6d79269e7af81ac8f84
-# created: 2023-07-27T18:37:44.251188775Z
+ digest: sha256:88ba8dcc5c2c7792e1c3511381f4ab329002a1c42c512f66ca87ced572dfbf9f
+# created: 2023-09-05T18:54:42.225408832Z
diff --git a/.github/workflows/samples.yaml b/.github/workflows/samples.yaml
index 016279315..f1a27f81c 100644
--- a/.github/workflows/samples.yaml
+++ b/.github/workflows/samples.yaml
@@ -5,7 +5,7 @@ jobs:
checkstyle:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v4
- uses: actions/setup-java@v1
with:
java-version: 8
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b761399ff..03006cb74 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,31 @@
# Changelog
+## [1.125.0](https://github.com/googleapis/java-pubsub/compare/v1.124.2...v1.125.0) (2023-09-12)
+
+
+### Features
+
+* Receipt modack ([#1540](https://github.com/googleapis/java-pubsub/issues/1540)) ([74d8da9](https://github.com/googleapis/java-pubsub/commit/74d8da97c42b672e3f9f26b9a535d6bac948a402))
+
+
+### Bug Fixes
+
+* Make retry policy back off more aggressively for RPCs that retry RESOURCE_EXHAUSTD ([#1704](https://github.com/googleapis/java-pubsub/issues/1704)) ([f61e7e0](https://github.com/googleapis/java-pubsub/commit/f61e7e0e2895a90e30ecf4dcbfa8c70022947d9e))
+
+
+### Dependencies
+
+* Update actions/checkout action to v4 ([#1712](https://github.com/googleapis/java-pubsub/issues/1712)) ([404c492](https://github.com/googleapis/java-pubsub/commit/404c492823306c1448c62383b9ea88cf9e43b970))
+* Update dependency com.google.cloud:google-cloud-bigquery to v2.31.2 ([#1713](https://github.com/googleapis/java-pubsub/issues/1713)) ([32cb43c](https://github.com/googleapis/java-pubsub/commit/32cb43cce40f7a39602eb7d9b39a88eb229fc4ef))
+* Update dependency com.google.cloud:google-cloud-core to v2.23.0 ([#1717](https://github.com/googleapis/java-pubsub/issues/1717)) ([929f778](https://github.com/googleapis/java-pubsub/commit/929f778e341aefe61206e55de828bf5a86e4efd3))
+* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.15.0 ([#1718](https://github.com/googleapis/java-pubsub/issues/1718)) ([0eeaa19](https://github.com/googleapis/java-pubsub/commit/0eeaa19a640513e80d595ca7c4016e26fc30871b))
+* Update dependency com.google.protobuf:protobuf-java-util to v3.24.3 ([#1698](https://github.com/googleapis/java-pubsub/issues/1698)) ([1157fbf](https://github.com/googleapis/java-pubsub/commit/1157fbff92204eae55bb24ad803f0b8e1336ac10))
+* Update dependency org.easymock:easymock to v5.2.0 ([#1711](https://github.com/googleapis/java-pubsub/issues/1711)) ([313f6dd](https://github.com/googleapis/java-pubsub/commit/313f6dd8b82fbc57df066615e285325969b6d2e4))
+* Update dependency org.graalvm.buildtools:junit-platform-native to v0.9.25 ([#1709](https://github.com/googleapis/java-pubsub/issues/1709)) ([1cc8a53](https://github.com/googleapis/java-pubsub/commit/1cc8a53a416acdd5f9cd4fc598f2f5f182a2ad44))
+* Update dependency org.graalvm.buildtools:junit-platform-native to v0.9.26 ([#1715](https://github.com/googleapis/java-pubsub/issues/1715)) ([f2cc75f](https://github.com/googleapis/java-pubsub/commit/f2cc75f960521e8be50cf354e00024d66fb8f7fb))
+* Update dependency org.graalvm.buildtools:native-maven-plugin to v0.9.25 ([#1710](https://github.com/googleapis/java-pubsub/issues/1710)) ([9764c3f](https://github.com/googleapis/java-pubsub/commit/9764c3f740cd726ad09cef82039561bd145fbe0c))
+* Update dependency org.graalvm.buildtools:native-maven-plugin to v0.9.26 ([#1716](https://github.com/googleapis/java-pubsub/issues/1716)) ([6c9e949](https://github.com/googleapis/java-pubsub/commit/6c9e9493ec7aeaa0711ad2155fa6a549937284df))
+
## [1.124.2](https://github.com/googleapis/java-pubsub/compare/v1.124.1...v1.124.2) (2023-08-15)
diff --git a/README.md b/README.md
index 5db40bce5..77bdf25b7 100644
--- a/README.md
+++ b/README.md
@@ -59,13 +59,13 @@ implementation 'com.google.cloud:google-cloud-pubsub'
If you are using Gradle without BOM, add this to your dependencies:
```Groovy
-implementation 'com.google.cloud:google-cloud-pubsub:1.124.1'
+implementation 'com.google.cloud:google-cloud-pubsub:1.124.2'
```
If you are using SBT, add this to your dependencies:
```Scala
-libraryDependencies += "com.google.cloud" % "google-cloud-pubsub" % "1.124.1"
+libraryDependencies += "com.google.cloud" % "google-cloud-pubsub" % "1.124.2"
```
@@ -408,7 +408,7 @@ Java is a registered trademark of Oracle and/or its affiliates.
[kokoro-badge-link-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-pubsub/java11.html
[stability-image]: https://img.shields.io/badge/stability-stable-green
[maven-version-image]: https://img.shields.io/maven-central/v/com.google.cloud/google-cloud-pubsub.svg
-[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-pubsub/1.124.1
+[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-pubsub/1.124.2
[authentication]: https://github.com/googleapis/google-cloud-java#authentication
[auth-scopes]: https://developers.google.com/identity/protocols/oauth2/scopes
[predefined-iam-roles]: https://cloud.google.com/iam/docs/understanding-roles#predefined_roles
diff --git a/google-cloud-pubsub-bom/pom.xml b/google-cloud-pubsub-bom/pom.xml
index 8dd339872..37f5bae47 100644
--- a/google-cloud-pubsub-bom/pom.xml
+++ b/google-cloud-pubsub-bom/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.google.cloud
google-cloud-pubsub-bom
- 1.124.2
+ 1.125.0
pom
com.google.cloud
@@ -52,17 +52,17 @@
com.google.cloud
google-cloud-pubsub
- 1.124.2
+ 1.125.0
com.google.api.grpc
grpc-google-cloud-pubsub-v1
- 1.106.2
+ 1.107.0
com.google.api.grpc
proto-google-cloud-pubsub-v1
- 1.106.2
+ 1.107.0
diff --git a/google-cloud-pubsub/pom.xml b/google-cloud-pubsub/pom.xml
index f1b9a7215..e308f0dfa 100644
--- a/google-cloud-pubsub/pom.xml
+++ b/google-cloud-pubsub/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.google.cloud
google-cloud-pubsub
- 1.124.2
+ 1.125.0
jar
Google Cloud Pub/Sub
https://github.com/googleapis/java-pubsub
@@ -11,7 +11,7 @@
com.google.cloud
google-cloud-pubsub-parent
- 1.124.2
+ 1.125.0
google-cloud-pubsub
diff --git a/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/MessageDispatcher.java b/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/MessageDispatcher.java
index 3c772819a..9556849bb 100644
--- a/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/MessageDispatcher.java
+++ b/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/MessageDispatcher.java
@@ -30,8 +30,11 @@
import com.google.pubsub.v1.ReceivedMessage;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.Executor;
@@ -89,7 +92,8 @@ class MessageDispatcher {
private final LinkedBlockingQueue pendingAcks = new LinkedBlockingQueue<>();
private final LinkedBlockingQueue pendingNacks = new LinkedBlockingQueue<>();
private final LinkedBlockingQueue pendingReceipts = new LinkedBlockingQueue<>();
-
+ private final LinkedHashMap outstandingReceipts =
+ new LinkedHashMap();
private final AtomicInteger messageDeadlineSeconds = new AtomicInteger();
private final AtomicBoolean extendDeadline = new AtomicBoolean(true);
private final Lock jobLock;
@@ -350,6 +354,28 @@ private OutstandingMessage(ReceivedMessage receivedMessage, AckHandler ackHandle
}
}
+ private static class ReceiptCompleteData {
+ private OutstandingMessage outstandingMessage;
+ private Boolean receiptComplete;
+
+ private ReceiptCompleteData(OutstandingMessage outstandingMessage) {
+ this.outstandingMessage = outstandingMessage;
+ this.receiptComplete = false;
+ }
+
+ private OutstandingMessage getOutstandingMessage() {
+ return this.outstandingMessage;
+ }
+
+ private Boolean isReceiptComplete() {
+ return this.receiptComplete;
+ }
+
+ private void notifyReceiptComplete() {
+ this.receiptComplete = true;
+ }
+ }
+
void processReceivedMessages(List messages) {
Instant totalExpiration = now().plus(maxAckExtensionPeriod);
List outstandingBatch = new ArrayList<>(messages.size());
@@ -361,7 +387,13 @@ void processReceivedMessages(List messages) {
AckRequestData ackRequestData = builder.build();
AckHandler ackHandler =
new AckHandler(ackRequestData, message.getMessage().getSerializedSize(), totalExpiration);
- if (pendingMessages.putIfAbsent(message.getAckId(), ackHandler) != null) {
+ OutstandingMessage outstandingMessage = new OutstandingMessage(message, ackHandler);
+
+ if (this.exactlyOnceDeliveryEnabled.get()) {
+ // For exactly once deliveries we don't add to outstanding batch because we first
+ // process the receipt modack. If that is successful then we process the message.
+ outstandingReceipts.put(message.getAckId(), new ReceiptCompleteData(outstandingMessage));
+ } else if (pendingMessages.putIfAbsent(message.getAckId(), ackHandler) != null) {
// putIfAbsent puts ackHandler if ackID isn't previously mapped, then return the
// previously-mapped element.
// If the previous element is not null, we already have the message and the new one is
@@ -371,14 +403,44 @@ void processReceivedMessages(List messages) {
// we want to eventually
// totally expire so that pubsub service sends us the message again.
continue;
+ } else {
+ outstandingBatch.add(outstandingMessage);
}
- outstandingBatch.add(new OutstandingMessage(message, ackHandler));
pendingReceipts.add(ackRequestData);
}
-
processBatch(outstandingBatch);
}
+ synchronized void notifyAckSuccess(AckRequestData ackRequestData) {
+
+ if (outstandingReceipts.containsKey(ackRequestData.getAckId())) {
+ outstandingReceipts.get(ackRequestData.getAckId()).notifyReceiptComplete();
+ List outstandingBatch = new ArrayList<>();
+
+ for (Iterator> it =
+ outstandingReceipts.entrySet().iterator();
+ it.hasNext(); ) {
+ Map.Entry receipt = it.next();
+ // If receipt is complete then add to outstandingBatch to process the batch
+ if (receipt.getValue().isReceiptComplete()) {
+ it.remove();
+ if (pendingMessages.putIfAbsent(
+ receipt.getKey(), receipt.getValue().getOutstandingMessage().ackHandler)
+ == null) {
+ outstandingBatch.add(receipt.getValue().getOutstandingMessage());
+ }
+ } else {
+ break;
+ }
+ }
+ processBatch(outstandingBatch);
+ }
+ }
+
+ synchronized void notifyAckFailed(AckRequestData ackRequestData) {
+ outstandingReceipts.remove(ackRequestData.getAckId());
+ }
+
private void processBatch(List batch) {
messagesWaiter.incrementPendingCount(batch.size());
for (OutstandingMessage message : batch) {
@@ -519,6 +581,7 @@ void extendDeadlines() {
@InternalApi
void processOutstandingOperations() {
+
List modackRequestData = new ArrayList();
// Nacks are modacks with an expiration of 0
diff --git a/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/StreamingSubscriberConnection.java b/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/StreamingSubscriberConnection.java
index 160032c7a..014771f2a 100644
--- a/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/StreamingSubscriberConnection.java
+++ b/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/StreamingSubscriberConnection.java
@@ -527,6 +527,7 @@ public void onSuccess(Empty empty) {
for (AckRequestData ackRequestData : ackRequestDataList) {
// This will check if a response is needed, and if it has already been set
ackRequestData.setResponse(AckResponse.SUCCESSFUL, setResponseOnSuccess);
+ messageDispatcher.notifyAckSuccess(ackRequestData);
// Remove from our pending operations
pendingRequests.remove(ackRequestData);
}
@@ -564,12 +565,15 @@ public void onFailure(Throwable t) {
"Permanent error invalid ack id message, will not resend",
errorMessage);
ackRequestData.setResponse(AckResponse.INVALID, setResponseOnSuccess);
+ messageDispatcher.notifyAckFailed(ackRequestData);
} else {
logger.log(Level.INFO, "Unknown error message, will not resend", errorMessage);
ackRequestData.setResponse(AckResponse.OTHER, setResponseOnSuccess);
+ messageDispatcher.notifyAckFailed(ackRequestData);
}
} else {
ackRequestData.setResponse(AckResponse.SUCCESSFUL, setResponseOnSuccess);
+ messageDispatcher.notifyAckSuccess(ackRequestData);
}
// Remove from our pending
pendingRequests.remove(ackRequestData);
diff --git a/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/PublisherStubSettings.java b/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/PublisherStubSettings.java
index 16cdef839..73510eee0 100644
--- a/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/PublisherStubSettings.java
+++ b/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/PublisherStubSettings.java
@@ -654,7 +654,7 @@ public static class Builder extends StubSettings.Builder {
+
+ private ByteString expectedData;
+
+ public MessageDataMatcher(ByteString expectedData) {
+ this.expectedData = expectedData;
+ }
+
+ @Override
+ public boolean matches(PubsubMessage message2) {
+ return (expectedData.equals(message2.getData()));
+ }
+}
diff --git a/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MessageDispatcherTest.java b/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MessageDispatcherTest.java
index 0b48e0991..9321272b4 100644
--- a/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MessageDispatcherTest.java
+++ b/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MessageDispatcherTest.java
@@ -139,6 +139,100 @@ public void testReceiptMessageReceiver() {
.receiveMessage(eq(TEST_MESSAGE.getMessage()), any(AckReplyConsumer.class));
}
+ @Test
+ public void testReceiptModackWithOrderingForExactlyOnceDelivered() {
+
+ MessageReceiverWithAckResponse mockMessageReceiverWithAckResponse =
+ mock(MessageReceiverWithAckResponse.class);
+ MessageDispatcher messageDispatcher = getMessageDispatcher(mockMessageReceiverWithAckResponse);
+ messageDispatcher.setExactlyOnceDeliveryEnabled(true);
+
+ ReceivedMessage TEST_MESSAGE1 =
+ ReceivedMessage.newBuilder()
+ .setAckId("ACK_ID1")
+ .setMessage(
+ PubsubMessage.newBuilder()
+ .setData(ByteString.copyFromUtf8("message-data1"))
+ .build())
+ .setDeliveryAttempt(DELIVERY_INFO_COUNT)
+ .build();
+ ReceivedMessage TEST_MESSAGE2 =
+ ReceivedMessage.newBuilder()
+ .setAckId("ACK_ID2")
+ .setMessage(
+ PubsubMessage.newBuilder()
+ .setData(ByteString.copyFromUtf8("message-data2"))
+ .build())
+ .setDeliveryAttempt(DELIVERY_INFO_COUNT)
+ .build();
+ ReceivedMessage TEST_MESSAGE3 =
+ ReceivedMessage.newBuilder()
+ .setAckId("ACK_ID3")
+ .setMessage(
+ PubsubMessage.newBuilder()
+ .setData(ByteString.copyFromUtf8("message-data3"))
+ .build())
+ .setDeliveryAttempt(DELIVERY_INFO_COUNT)
+ .build();
+
+ messageDispatcher.processReceivedMessages(
+ Arrays.asList(TEST_MESSAGE3, TEST_MESSAGE2, TEST_MESSAGE1));
+
+ messageDispatcher.processOutstandingOperations();
+ verify(mockMessageReceiverWithAckResponse, never())
+ .receiveMessage(eq(TEST_MESSAGE.getMessage()), any(AckReplyConsumerWithResponse.class));
+
+ AckRequestData ackRequestData1 = AckRequestData.newBuilder(TEST_MESSAGE1.getAckId()).build();
+ AckRequestData ackRequestData2 = AckRequestData.newBuilder(TEST_MESSAGE2.getAckId()).build();
+ AckRequestData ackRequestData3 = AckRequestData.newBuilder(TEST_MESSAGE3.getAckId()).build();
+ messageDispatcher.notifyAckSuccess(ackRequestData2);
+ messageDispatcher.processOutstandingOperations();
+
+ messageDispatcher.notifyAckSuccess(ackRequestData1);
+ messageDispatcher.notifyAckSuccess(ackRequestData3);
+ messageDispatcher.processOutstandingOperations();
+
+ verify(mockMessageReceiverWithAckResponse, times(1))
+ .receiveMessage(
+ argThat(new MessageDataMatcher(TEST_MESSAGE3.getMessage().getData())),
+ any(AckReplyConsumerWithResponse.class));
+ verify(mockMessageReceiverWithAckResponse, times(1))
+ .receiveMessage(
+ argThat(new MessageDataMatcher(TEST_MESSAGE2.getMessage().getData())),
+ any(AckReplyConsumerWithResponse.class));
+ verify(mockMessageReceiverWithAckResponse, times(1))
+ .receiveMessage(
+ argThat(new MessageDataMatcher(TEST_MESSAGE1.getMessage().getData())),
+ any(AckReplyConsumerWithResponse.class));
+ }
+
+ @Test
+ public void testReceiptModackForExactlyOnceDelivered() {
+
+ MessageReceiverWithAckResponse mockMessageReceiverWithAckResponse =
+ mock(MessageReceiverWithAckResponse.class);
+ MessageDispatcher messageDispatcher = getMessageDispatcher(mockMessageReceiverWithAckResponse);
+ messageDispatcher.setExactlyOnceDeliveryEnabled(true);
+
+ messageDispatcher.processReceivedMessages(Collections.singletonList(TEST_MESSAGE));
+
+ messageDispatcher.processOutstandingOperations();
+ verify(mockMessageReceiverWithAckResponse, never())
+ .receiveMessage(eq(TEST_MESSAGE.getMessage()), any(AckReplyConsumerWithResponse.class));
+
+ AckRequestData ackRequestData = AckRequestData.newBuilder(TEST_MESSAGE.getAckId()).build();
+ messageDispatcher.notifyAckSuccess(ackRequestData);
+ messageDispatcher.processOutstandingOperations();
+
+ List modackRequestDataList = new ArrayList();
+ modackRequestDataList.add(new ModackRequestData(MIN_ACK_DEADLINE_SECONDS, ackRequestData));
+
+ verify(mockMessageReceiverWithAckResponse, times(1))
+ .receiveMessage(
+ argThat(new MessageDataMatcher(TEST_MESSAGE.getMessage().getData())),
+ any(AckReplyConsumerWithResponse.class));
+ }
+
@Test
public void testReceiptMessageReceiverWithAckResponse() {
MessageReceiverWithAckResponse mockMessageReceiverWithAckResponse =
diff --git a/grpc-google-cloud-pubsub-v1/pom.xml b/grpc-google-cloud-pubsub-v1/pom.xml
index 5bcd56d0b..ce51936f3 100644
--- a/grpc-google-cloud-pubsub-v1/pom.xml
+++ b/grpc-google-cloud-pubsub-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
grpc-google-cloud-pubsub-v1
- 1.106.2
+ 1.107.0
grpc-google-cloud-pubsub-v1
GRPC library for grpc-google-cloud-pubsub-v1
com.google.cloud
google-cloud-pubsub-parent
- 1.124.2
+ 1.125.0
diff --git a/pom.xml b/pom.xml
index 1ab8bea9a..5c4497186 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
com.google.cloud
google-cloud-pubsub-parent
pom
- 1.124.2
+ 1.125.0
Google Cloud Pub/Sub Parent
https://github.com/googleapis/java-pubsub
@@ -61,7 +61,7 @@
com.google.cloud
google-cloud-shared-dependencies
- 3.14.0
+ 3.15.0
pom
import
@@ -69,17 +69,17 @@
com.google.api.grpc
proto-google-cloud-pubsub-v1
- 1.106.2
+ 1.107.0
com.google.api.grpc
grpc-google-cloud-pubsub-v1
- 1.106.2
+ 1.107.0
com.google.cloud
google-cloud-pubsub
- 1.124.2
+ 1.125.0
@@ -98,7 +98,7 @@
org.easymock
easymock
- 5.1.0
+ 5.2.0
test
diff --git a/proto-google-cloud-pubsub-v1/pom.xml b/proto-google-cloud-pubsub-v1/pom.xml
index 24a5f7485..150aa919a 100644
--- a/proto-google-cloud-pubsub-v1/pom.xml
+++ b/proto-google-cloud-pubsub-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
proto-google-cloud-pubsub-v1
- 1.106.2
+ 1.107.0
proto-google-cloud-pubsub-v1
PROTO library for proto-google-cloud-pubsub-v1
com.google.cloud
google-cloud-pubsub-parent
- 1.124.2
+ 1.125.0
diff --git a/renovate.json b/renovate.json
index 6686189a1..977082821 100644
--- a/renovate.json
+++ b/renovate.json
@@ -10,7 +10,10 @@
":maintainLockFilesDisabled",
":autodetectPinVersions"
],
- "ignorePaths": [".kokoro/requirements.txt"],
+ "ignorePaths": [
+ ".kokoro/requirements.txt",
+ ".github/workflows/**"
+ ],
"packageRules": [
{
"packagePatterns": [
diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml
index 60442f4cf..63512687a 100644
--- a/samples/install-without-bom/pom.xml
+++ b/samples/install-without-bom/pom.xml
@@ -75,18 +75,18 @@
com.google.protobuf
protobuf-java-util
- 3.23.4
+ 3.24.3
com.google.cloud
google-cloud-core
- 2.22.0
+ 2.23.0
tests
com.google.cloud
google-cloud-bigquery
- 2.31.1
+ 2.31.2
diff --git a/samples/native-image-sample/pom.xml b/samples/native-image-sample/pom.xml
index 6b99a122a..2cc0341c2 100644
--- a/samples/native-image-sample/pom.xml
+++ b/samples/native-image-sample/pom.xml
@@ -113,7 +113,7 @@ http://maven.apache.org/xsd/maven-4.0.0.xsd">
org.graalvm.buildtools
junit-platform-native
- 0.9.24
+ 0.9.26
test
@@ -134,7 +134,7 @@ http://maven.apache.org/xsd/maven-4.0.0.xsd">
org.graalvm.buildtools
native-maven-plugin
- 0.9.24
+ 0.9.26
true
pubsub.NativeImagePubSubSample
diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml
index 444548334..1e1b7fc88 100644
--- a/samples/snapshot/pom.xml
+++ b/samples/snapshot/pom.xml
@@ -43,7 +43,7 @@
com.google.cloud
google-cloud-pubsub
- 1.124.2
+ 1.125.0
@@ -61,7 +61,7 @@
com.google.protobuf
protobuf-java-util
- 3.23.4
+ 3.24.3
@@ -79,13 +79,13 @@
com.google.cloud
google-cloud-core
- 2.22.0
+ 2.23.0
tests
com.google.cloud
google-cloud-bigquery
- 2.31.1
+ 2.31.2
diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml
index 5f30768f6..71a0c5880 100644
--- a/samples/snippets/pom.xml
+++ b/samples/snippets/pom.xml
@@ -76,7 +76,7 @@
com.google.protobuf
protobuf-java-util
- 3.23.4
+ 3.24.3
@@ -94,7 +94,7 @@
com.google.cloud
google-cloud-core
- 2.22.0
+ 2.23.0
tests
diff --git a/versions.txt b/versions.txt
index 9aa77eed5..669c03e38 100644
--- a/versions.txt
+++ b/versions.txt
@@ -1,6 +1,6 @@
# Format:
# module:released-version:current-version
-google-cloud-pubsub:1.124.2:1.124.2
-grpc-google-cloud-pubsub-v1:1.106.2:1.106.2
-proto-google-cloud-pubsub-v1:1.106.2:1.106.2
+google-cloud-pubsub:1.125.0:1.125.0
+grpc-google-cloud-pubsub-v1:1.107.0:1.107.0
+proto-google-cloud-pubsub-v1:1.107.0:1.107.0