From 034cb248097b7db3aa57af3be6f91a984815ad4b Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Tue, 21 May 2013 13:35:48 +0200 Subject: Collect stale job IDs when refreshing joblist. Remove them after to avoid concurrent mod, as we don't want to preload all the values. Fixes #112 --- src/main/java/com/c2kernel/entity/agent/JobList.java | 16 ++++++++++++---- src/main/java/com/c2kernel/persistency/RemoteMap.java | 4 +++- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/c2kernel/entity/agent/JobList.java b/src/main/java/com/c2kernel/entity/agent/JobList.java index f8a88ee..3772c22 100644 --- a/src/main/java/com/c2kernel/entity/agent/JobList.java +++ b/src/main/java/com/c2kernel/entity/agent/JobList.java @@ -1,5 +1,6 @@ package com.c2kernel.entity.agent; +import java.util.ArrayList; import java.util.Iterator; import java.util.Vector; @@ -72,14 +73,21 @@ public class JobList extends RemoteMap public void removeJobsForStep( int sysKey, String stepPath ) { - Iterator currentMembers = values().iterator(); - while( currentMembers.hasNext() ) + ArrayList staleJobs = new ArrayList(); + Iterator jobIter = keySet().iterator(); + while( jobIter.hasNext() ) { - Job j = currentMembers.next(); + String jid = jobIter.next(); + Job j = get(jid); if( j.getItemSysKey() == sysKey && j.getStepPath().equals(stepPath)) - remove( String.valueOf(j.getID()) ); + staleJobs.add(jid); } + + Logger.msg(3, "JobList.removeJobsForStep() - removing "+staleJobs.size()); + for (String jid : staleJobs) { + remove(jid); + } Logger.msg(5, "JobList::removeJobsForStep() - " + sysKey + " DONE." ); } /** diff --git a/src/main/java/com/c2kernel/persistency/RemoteMap.java b/src/main/java/com/c2kernel/persistency/RemoteMap.java index 2147047..b36648f 100644 --- a/src/main/java/com/c2kernel/persistency/RemoteMap.java +++ b/src/main/java/com/c2kernel/persistency/RemoteMap.java @@ -345,6 +345,7 @@ public class RemoteMap extends TreeMap impl private class RemoteIterator implements Iterator { RemoteMap mParent; Iterator iter; + String currentKey; public RemoteIterator(RemoteMap parent) { mParent = parent; @@ -358,7 +359,8 @@ public class RemoteMap extends TreeMap impl @Override public C next() { - return mParent.get(iter.next()); + currentKey = iter.next(); + return mParent.get(currentKey); } @Override -- cgit v1.2.3