Do not remove the hash map entries while iterating.
diff --git a/hyracks/hyracks-control/hyracks-control-nc/src/main/java/edu/uci/ics/hyracks/control/nc/dataset/DatasetPartitionManager.java b/hyracks/hyracks-control/hyracks-control-nc/src/main/java/edu/uci/ics/hyracks/control/nc/dataset/DatasetPartitionManager.java
index 1299593..32b310b 100644
--- a/hyracks/hyracks-control/hyracks-control-nc/src/main/java/edu/uci/ics/hyracks/control/nc/dataset/DatasetPartitionManager.java
+++ b/hyracks/hyracks-control/hyracks-control-nc/src/main/java/edu/uci/ics/hyracks/control/nc/dataset/DatasetPartitionManager.java
@@ -205,7 +205,7 @@
@Override
public synchronized void close() {
for (Entry<JobId, IDatasetStateRecord> entry : partitionResultStateMap.entrySet()) {
- deinitState(entry.getKey());
+ deinit(entry.getKey());
}
deallocatableRegistry.close();
}
@@ -217,7 +217,12 @@
@Override
public void deinitState(JobId jobId) {
- ResultSetMap rsIdMap = (ResultSetMap) partitionResultStateMap.remove(jobId);
+ deinit(jobId);
+ partitionResultStateMap.remove(jobId);
+ }
+
+ private void deinit(JobId jobId) {
+ ResultSetMap rsIdMap = (ResultSetMap) partitionResultStateMap.get(jobId);
if (rsIdMap != null) {
for (ResultSetId rsId : rsIdMap.keySet()) {
ResultState[] resultStates = rsIdMap.get(rsId);