diff options
| author | Andrew Branson <andrew.branson@cern.ch> | 2013-05-21 13:35:48 +0200 |
|---|---|---|
| committer | Andrew Branson <andrew.branson@cern.ch> | 2013-05-21 13:35:48 +0200 |
| commit | 034cb248097b7db3aa57af3be6f91a984815ad4b (patch) | |
| tree | 89ae7c18ebcc853a0885baa3333e8b66ba73e98c | |
| parent | 67c0a6473884c7cde27c64e194a474d124cfd4f3 (diff) | |
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
| -rw-r--r-- | src/main/java/com/c2kernel/entity/agent/JobList.java | 16 | ||||
| -rw-r--r-- | 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<Job> public void removeJobsForStep( int sysKey, String stepPath )
{
- Iterator<Job> currentMembers = values().iterator();
- while( currentMembers.hasNext() )
+ ArrayList<String> staleJobs = new ArrayList<String>();
+ Iterator<String> 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<V extends C2KLocalObject> extends TreeMap<String, V> impl private class RemoteIterator<C extends C2KLocalObject> implements Iterator<C> {
RemoteMap<C> mParent;
Iterator<String> iter;
+ String currentKey;
public RemoteIterator(RemoteMap<C> parent) {
mParent = parent;
@@ -358,7 +359,8 @@ public class RemoteMap<V extends C2KLocalObject> extends TreeMap<String, V> impl @Override
public C next() {
- return mParent.get(iter.next());
+ currentKey = iter.next();
+ return mParent.get(currentKey);
}
@Override
|
