mirror of
https://github.com/internetarchive/heritrix3.git
synced 2026-09-20 04:36:01 +00:00
[HER-1850] IllegalStateException from WorkQueueFrontier.wakeQueues in BlockIterator
* WorkQueueFrontier.java
double in-memory snoozedClassQueues size
protect all adds/removes to snoozedOverflow in synchronized blocks
This commit is contained in:
@@ -201,7 +201,7 @@ implements Closeable,
|
||||
transient protected DelayQueue<DelayedWorkQueue> snoozedClassQueues;
|
||||
protected StoredSortedMap<Long,DelayedWorkQueue> snoozedOverflow;
|
||||
protected AtomicInteger snoozedOverflowCount = new AtomicInteger(0);
|
||||
protected static int MAX_SNOOZED_IN_MEMORY = 5000;
|
||||
protected static int MAX_SNOOZED_IN_MEMORY = 10000;
|
||||
|
||||
/** URIs scheduled to be re-enqueued at future date */
|
||||
protected StoredSortedMap<Long, CrawlURI> futureUris;
|
||||
@@ -844,6 +844,7 @@ implements Closeable,
|
||||
queue.setWakeTime(0);
|
||||
reenqueueQueue(queue);
|
||||
iterOverflow.remove();
|
||||
snoozedOverflowCount.decrementAndGet();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -858,15 +859,19 @@ implements Closeable,
|
||||
reenqueueQueue(queue);
|
||||
}
|
||||
// also consider overflow (usually empty)
|
||||
Iterator<DelayedWorkQueue> iter =
|
||||
snoozedOverflow.headMap(System.currentTimeMillis()).values().iterator();
|
||||
while(iter.hasNext()) {
|
||||
DelayedWorkQueue dq = iter.next();
|
||||
iter.remove();
|
||||
snoozedOverflowCount.decrementAndGet();
|
||||
WorkQueue queue = dq.getWorkQueue(this);
|
||||
queue.setWakeTime(0);
|
||||
reenqueueQueue(queue);
|
||||
if(!snoozedOverflow.isEmpty()) {
|
||||
synchronized(snoozedOverflow) {
|
||||
Iterator<DelayedWorkQueue> iter =
|
||||
snoozedOverflow.headMap(System.currentTimeMillis()).values().iterator();
|
||||
while(iter.hasNext()) {
|
||||
DelayedWorkQueue dq = iter.next();
|
||||
iter.remove();
|
||||
snoozedOverflowCount.decrementAndGet();
|
||||
WorkQueue queue = dq.getWorkQueue(this);
|
||||
queue.setWakeTime(0);
|
||||
reenqueueQueue(queue);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1012,8 +1017,10 @@ implements Closeable,
|
||||
if(snoozedClassQueues.size()<MAX_SNOOZED_IN_MEMORY) {
|
||||
snoozedClassQueues.add(dq);
|
||||
} else {
|
||||
snoozedOverflow.put(nextTime, dq);
|
||||
snoozedOverflowCount.incrementAndGet();
|
||||
synchronized(snoozedOverflow) {
|
||||
snoozedOverflow.put(nextTime, dq);
|
||||
snoozedOverflowCount.incrementAndGet();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user