From d4ad799fbcd9cf4fdc306e84702a831a59d9e015 Mon Sep 17 00:00:00 2001 From: Ohad Shai Date: Sun, 10 Apr 2022 17:11:47 +0300 Subject: [PATCH 1/2] replace HashMap with ConcurrentHashMap to avoid ConcurrentModificationException avoids this exception: ``` Caused by: java.lang.RuntimeException: java.util.ConcurrentModificationException with message: null at java.util.HashMap$HashIterator.nextNode(HashMap.java:1511) at java.util.HashMap$ValueIterator.next(HashMap.java:1539) at com.google.cloud.storage.contrib.nio.testing.FakeStorageRpc.list(FakeStorageRpc.java:153) at com.google.cloud.storage.StorageImpl.lambda$listBlobs$11(StorageImpl.java:391) at com.google.api.gax.retrying.DirectRetryingExecutor.submit(DirectRetryingExecutor.java:105) at com.google.cloud.RetryHelper.run(RetryHelper.java:76) at com.google.cloud.RetryHelper.runWithRetries(RetryHelper.java:50) at com.google.cloud.storage.Retrying.run(Retrying.java:51) ``` --- .../storage/contrib/nio/testing/FakeStorageRpc.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/testing/FakeStorageRpc.java b/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/testing/FakeStorageRpc.java index b0449889..00efb778 100644 --- a/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/testing/FakeStorageRpc.java +++ b/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/testing/FakeStorageRpc.java @@ -37,6 +37,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import javax.annotation.concurrent.NotThreadSafe; /** @@ -77,11 +78,11 @@ class FakeStorageRpc extends StorageRpcTestBase { new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX"); // fullname -> metadata - Map metadata = new HashMap<>(); + Map metadata = new ConcurrentHashMap<>(); // fullname -> contents - Map contents = new HashMap<>(); + Map contents = new ConcurrentHashMap<>(); // fullname -> future contents that will be visible on close. - Map futureContents = new HashMap<>(); + Map futureContents = new ConcurrentHashMap<>(); private final boolean throwIfOption; @@ -92,8 +93,8 @@ public FakeStorageRpc(boolean throwIfOption) { // remove all files void reset() { - metadata = new HashMap<>(); - contents = new HashMap<>(); + metadata = new ConcurrentHashMap<>(); + contents = new ConcurrentHashMap<>(); } @Override @@ -149,7 +150,7 @@ public Tuple> list(String bucket, Map final String prefix = preprefix; List values = new ArrayList<>(); - Map folders = new HashMap<>(); + Map folders = new ConcurrentHashMap<>(); for (StorageObject so : metadata.values()) { if (!so.getBucket().equals(bucket) || !so.getName().startsWith(prefix)) { continue; From 2d0951ad9b301679726a9cd470219e992dd0657a Mon Sep 17 00:00:00 2001 From: Owl Bot Date: Mon, 11 Apr 2022 15:53:00 +0000 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=A6=89=20Updates=20from=20OwlBot=20po?= =?UTF-8?q?st-processor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --- .../google/cloud/storage/contrib/nio/testing/FakeStorageRpc.java | 1 - 1 file changed, 1 deletion(-) diff --git a/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/testing/FakeStorageRpc.java b/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/testing/FakeStorageRpc.java index 00efb778..03d1e38d 100644 --- a/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/testing/FakeStorageRpc.java +++ b/google-cloud-nio/src/main/java/com/google/cloud/storage/contrib/nio/testing/FakeStorageRpc.java @@ -34,7 +34,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Date; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap;