From f42be39d6db92221cb3d8163337ccf7c75e25926 Mon Sep 17 00:00:00 2001 From: sk020734 <37541292+sk020734@users.noreply.github.com> Date: Fri, 24 Jan 2025 01:49:25 +0530 Subject: [PATCH] Added synchronized block for Scan Query Result List. When executing scan in parallel with scanPolicy.concurrentNodes = true, the results were inconsistent due to add method of ArrayList not being thread safe. Added synchronized keyword to prevent race condition --- src/main/java/com/aerospike/mapper/tools/AeroMapper.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/aerospike/mapper/tools/AeroMapper.java b/src/main/java/com/aerospike/mapper/tools/AeroMapper.java index 7900761..3d570d2 100644 --- a/src/main/java/com/aerospike/mapper/tools/AeroMapper.java +++ b/src/main/java/com/aerospike/mapper/tools/AeroMapper.java @@ -398,7 +398,9 @@ public List scan(@NotNull Class clazz) { public List scan(ScanPolicy policy, @NotNull Class clazz) { List result = new ArrayList<>(); Processor resultProcessor = record -> { - result.add(record); + synchronized(result) { + result.add(record); + } return true; }; scan(policy, clazz, resultProcessor);