Author: toad
Date: 2008-07-21 19:37:06 +0000 (Mon, 21 Jul 2008)
New Revision: 21296
Modified:
branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
Log:
Optimise slightly, make sure we don't add a job if we don't need to.
Modified:
branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
2008-07-21 19:24:06 UTC (rev 21295)
+++ branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
2008-07-21 19:37:06 UTC (rev 21296)
@@ -929,7 +929,8 @@
/**
* Map from SendableGet implementing SupportsBulkCallFailure to
BulkCallFailureItem[].
*/
- private transient HashMap bulkFailureLookup = new HashMap();
+ private transient HashMap bulkFailureLookupItems = new HashMap();
+ private transient HashMap bulkFailureLookupJob = new HashMap();
private class BulkCaller implements DBJob {
@@ -942,8 +943,9 @@
public void run(ObjectContainer container, ClientContext
context) {
BulkCallFailureItem[] items;
synchronized(ClientRequestScheduler.this) {
- items = (BulkCallFailureItem[])
bulkFailureLookup.get(getter);
- bulkFailureLookup.remove(getter);
+ items = (BulkCallFailureItem[])
bulkFailureLookupItems.get(getter);
+ bulkFailureLookupItems.remove(getter);
+ bulkFailureLookupJob.remove(getter);
}
if(items != null && items.length > 0) {
if(logMINOR) Logger.minor(this, "Calling
non-fatal failure in bulk for "+items.length+" items");
@@ -970,18 +972,27 @@
if(get instanceof SupportsBulkCallFailure) {
SupportsBulkCallFailure getter =
(SupportsBulkCallFailure) get;
BulkCallFailureItem item = new BulkCallFailureItem(e,
keyNum, (PersistentChosenRequest) req);
+ BulkCaller caller = null;
synchronized(this) {
- BulkCallFailureItem[] items =
(BulkCallFailureItem[]) bulkFailureLookup.get(get);
+ BulkCallFailureItem[] items =
(BulkCallFailureItem[]) bulkFailureLookupItems.get(get);
if(items == null) {
- bulkFailureLookup.put(getter, new
BulkCallFailureItem[] { item } );
+ bulkFailureLookupItems.put(getter, new
BulkCallFailureItem[] { item } );
} else {
BulkCallFailureItem[] newItems = new
BulkCallFailureItem[items.length+1];
System.arraycopy(items, 0, newItems, 0,
items.length);
newItems[items.length] = item;
- bulkFailureLookup.put(getter, newItems);
+ bulkFailureLookupItems.put(getter,
newItems);
}
+ caller = (BulkCaller)
bulkFailureLookupJob.get(getter);
+ if(caller == null) {
+ caller = new BulkCaller(getter);
+ bulkFailureLookupJob.put(getter,
caller);
+ } else
+ caller = null;
+
}
- jobRunner.queue(new BulkCaller(getter), prio, true);
+ if(caller != null)
+ jobRunner.queue(caller, prio, true);
return;
}
jobRunner.queue(new DBJob() {