From 792aeca2006bedc442f8bf97f4b135bba562b4b1 Mon Sep 17 00:00:00 2001 From: Min Zhu Date: Tue, 19 Aug 2025 09:38:53 -0400 Subject: [PATCH] fix(spanner): check for empty before delete (#4047) spanner IT fails for `deleteAllById_doesNothingOnEmptyIds` test with error from Spanner: `INVALID_ARGUMENT: Failed to initialize transaction due to invalid mutation key.` **Trigger of this behavior change:** spanner activated multiplexed sessions by default in [googleapis/java-spanner#3996](https://github.com/googleapis/java-spanner/pull/3996), which triggers this error. When issuing a write() with a Mutation that has an empty KeySet produces an exception in Multiplexed clients (see [pr](https://github.com/googleapis/java-spanner/pull/4023)), but does a no-op in non-multiplexed ones. Unlike Regular session, multiplex session needs a valid mutation to generate a precommit token. Fixes #4046 --- .../spanner/repository/support/SimpleSpannerRepository.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/support/SimpleSpannerRepository.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/support/SimpleSpannerRepository.java index 2afca9c3773..c6396428fb1 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/support/SimpleSpannerRepository.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/support/SimpleSpannerRepository.java @@ -176,6 +176,9 @@ public Page findAll(Pageable pageable) { @Override public void deleteAllById(Iterable ids) { Assert.notNull(ids, "IDs must not be null"); + if (!ids.iterator().hasNext()) { + return; + } KeySet.Builder builder = KeySet.newBuilder(); for (Object id : ids) { builder.addKey(toKey(id));