[ASTERIXDB-3343][API] Return new list when getting completed requests
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
Completed requests collection has been changed to LinkedHashMap
recently which is not synchronized. ConcurrentModificationException can
happen when traversing the returned values and the map gets updated.
Return a new list of the values instead of returning the values view
directly.
Change-Id: Ic5a8c12e3feaddeea6882c34fba3c12dc22452c3
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18306
Integration-Tests: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Ali Alsuliman <ali.al.solaiman@gmail.com>
Reviewed-by: Murtadha Hubail <mhubail@apache.org>
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/RequestTracker.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/RequestTracker.java
index 9875651..ef9154d 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/RequestTracker.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/RequestTracker.java
@@ -18,6 +18,7 @@
*/
package org.apache.asterix.runtime.utils;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
@@ -109,7 +110,7 @@
@Override
public synchronized Collection<IClientRequest> getCompletedRequests() {
- return Collections.unmodifiableCollection(completedRequests.values());
+ return Collections.unmodifiableCollection(new ArrayList<>(completedRequests.values()));
}
private void cancel(IClientRequest request) throws HyracksDataException {