Author: toad
Date: 2008-06-30 12:21:52 +0000 (Mon, 30 Jun 2008)
New Revision: 20871
Modified:
branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
branches/db4o/freenet/src/freenet/node/RequestScheduler.java
branches/db4o/freenet/src/freenet/node/RequestStarter.java
Log:
Don't query for the PersistentChosenRequest, pass it in and delete it.
Delete it even if there is no key.
Modified:
branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
2008-06-29 17:21:26 UTC (rev 20870)
+++ branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
2008-06-30 12:21:52 UTC (rev 20871)
@@ -752,8 +752,8 @@
return schedCore;
}
- public void removeFetchingKey(Key key) {
- schedCore.removeFetchingKey(key);
+ public void removeFetchingKey(Key key, ChosenRequest req) {
+ schedCore.removeFetchingKey(key, req);
}
public void callFailure(final SendableGet get, final
LowLevelGetException e, final Object keyNum, int prio, final ChosenRequest req)
{
Modified:
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
===================================================================
---
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
2008-06-29 17:21:26 UTC (rev 20870)
+++
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
2008-06-30 12:21:52 UTC (rev 20871)
@@ -568,25 +568,19 @@
}
}
- public void removeFetchingKey(final Key key) {
+ public void removeFetchingKey(final Key key, final ChosenRequest req) {
+ if(key != null) {
synchronized(keysFetching) {
keysFetching.remove(key);
}
+ }
+ if(req != null && req.isPersistent()) {
sched.clientContext.jobRunner.queue(new DBJob() {
public void run(ObjectContainer container,
ClientContext context) {
- ObjectSet results = container.query(new
Predicate() {
- public boolean
match(PersistentChosenRequest req) {
- if(req.core !=
ClientRequestSchedulerCore.this) return false;
- return req.key.equals(key);
- }
- });
- if(results.hasNext()) {
- PersistentChosenRequest req =
(PersistentChosenRequest) results.next();
- container.delete(req);
- container.commit();
- }
+ container.delete(req);
}
- }, NativeThread.NORM_PRIORITY, false);
+ }, NativeThread.NORM_PRIORITY+1, false);
+ }
}
protected Set makeSetForAllRequestsByClientRequest(ObjectContainer
container) {
Modified: branches/db4o/freenet/src/freenet/node/RequestScheduler.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/RequestScheduler.java
2008-06-29 17:21:26 UTC (rev 20870)
+++ branches/db4o/freenet/src/freenet/node/RequestScheduler.java
2008-06-30 12:21:52 UTC (rev 20871)
@@ -55,7 +55,7 @@
public KeysFetchingLocally fetchingKeys();
- public void removeFetchingKey(Key key);
+ public void removeFetchingKey(Key key, ChosenRequest req);
/** Call onFailure() on the database thread, then delete the
PersistentChosenRequest. For a non-persistent request,
* just call onFailure() immediately. */
Modified: branches/db4o/freenet/src/freenet/node/RequestStarter.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/RequestStarter.java 2008-06-29
17:21:26 UTC (rev 20870)
+++ branches/db4o/freenet/src/freenet/node/RequestStarter.java 2008-06-30
12:21:52 UTC (rev 20871)
@@ -231,7 +231,7 @@
private boolean startRequest(ChosenRequest req, boolean logMINOR) {
if((!req.isPersistent()) && req.request.isCancelled(null)) {
- sched.removeFetchingKey(req.key);
+ sched.removeFetchingKey(req.key, req);
return false;
}
if(logMINOR) Logger.minor(this, "Running request "+req+"
priority "+req.prio);
@@ -274,9 +274,7 @@
if(Logger.shouldLog(Logger.MINOR, this))
Logger.minor(this, "Finished "+req);
} finally {
- if(!isInsert) {
- sched.removeFetchingKey(key);
- }
+ sched.removeFetchingKey(key, req);
}
}