[freenet-cvs] r20967 - in branches/db4o/freenet/src/freenet: client/async node
toad at freenetproject.org
toad at freenetproject.org
Fri Jul 4 13:00:10 UTC 2008
Author: toad
Date: 2008-07-04 13:00:10 +0000 (Fri, 04 Jul 2008)
New Revision: 20967
Modified:
branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
branches/db4o/freenet/src/freenet/client/async/OfferedKeysList.java
branches/db4o/freenet/src/freenet/client/async/SingleBlockInserter.java
branches/db4o/freenet/src/freenet/node/RequestScheduler.java
branches/db4o/freenet/src/freenet/node/SendableGet.java
branches/db4o/freenet/src/freenet/node/SendableInsert.java
branches/db4o/freenet/src/freenet/node/SendableRequest.java
branches/db4o/freenet/src/freenet/node/SimpleSendableInsert.java
Log:
Run callbacks for non-persistent requests inline rather than on the database thread.
Add ,boolean persistent to call* and internalError to enable this.
Modified: branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java 2008-07-04 12:49:09 UTC (rev 20966)
+++ branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java 2008-07-04 13:00:10 UTC (rev 20967)
@@ -797,7 +797,11 @@
schedCore.removeFetchingKey(key, req);
}
- public void callFailure(final SendableGet get, final LowLevelGetException e, final Object keyNum, int prio, final ChosenRequest req) {
+ public void callFailure(final SendableGet get, final LowLevelGetException e, final Object keyNum, int prio, final ChosenRequest req, boolean persistent) {
+ if(!persistent) {
+ get.onFailure(e, keyNum, null, clientContext);
+ return;
+ }
jobRunner.queue(new DBJob() {
public void run(ObjectContainer container, ClientContext context) {
@@ -813,7 +817,11 @@
}, NativeThread.NORM_PRIORITY, false);
}
- public void callFailure(final SendableInsert put, final LowLevelPutException e, final Object keyNum, int prio, final ChosenRequest req) {
+ public void callFailure(final SendableInsert put, final LowLevelPutException e, final Object keyNum, int prio, final ChosenRequest req, boolean persistent) {
+ if(!persistent) {
+ put.onFailure(e, keyNum, null, clientContext);
+ return;
+ }
jobRunner.queue(new DBJob() {
public void run(ObjectContainer container, ClientContext context) {
@@ -829,7 +837,11 @@
}, NativeThread.NORM_PRIORITY, false);
}
- public void callSuccess(final SendableInsert put, final Object keyNum, int prio, final ChosenRequest req) {
+ public void callSuccess(final SendableInsert put, final Object keyNum, int prio, final ChosenRequest req, boolean persistent) {
+ if(!persistent) {
+ put.onSuccess(keyNum, null, clientContext);
+ return;
+ }
jobRunner.queue(new DBJob() {
public void run(ObjectContainer container, ClientContext context) {
Modified: branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java 2008-07-04 12:49:09 UTC (rev 20966)
+++ branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerCore.java 2008-07-04 13:00:10 UTC (rev 20967)
@@ -543,7 +543,7 @@
} catch (Throwable t) {
Logger.error(this, "Caught "+t+" running RegisterMeRunner", t);
// Cancel the request, and commit so it isn't tried again.
- reg.getter.internalError(null, t, sched, container, context);
+ reg.getter.internalError(null, t, sched, container, context, true);
}
if(System.currentTimeMillis() > deadline) break;
}
Modified: branches/db4o/freenet/src/freenet/client/async/OfferedKeysList.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/OfferedKeysList.java 2008-07-04 12:49:09 UTC (rev 20966)
+++ branches/db4o/freenet/src/freenet/client/async/OfferedKeysList.java 2008-07-04 13:00:10 UTC (rev 20967)
@@ -138,7 +138,7 @@
return 0; // All keys have equal chance even if they've been tried before.
}
- public void internalError(Object keyNum, Throwable t, RequestScheduler sched, ObjectContainer container, ClientContext context) {
+ public void internalError(Object keyNum, Throwable t, RequestScheduler sched, ObjectContainer container, ClientContext context, boolean persistent) {
Logger.error(this, "Internal error: "+t, t);
}
Modified: branches/db4o/freenet/src/freenet/client/async/SingleBlockInserter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SingleBlockInserter.java 2008-07-04 12:49:09 UTC (rev 20966)
+++ branches/db4o/freenet/src/freenet/client/async/SingleBlockInserter.java 2008-07-04 13:00:10 UTC (rev 20967)
@@ -353,12 +353,12 @@
return false;
}
} catch (LowLevelPutException e) {
- sched.callFailure((SendableInsert) this, e, req.token, NativeThread.NORM_PRIORITY, req);
+ sched.callFailure((SendableInsert) this, e, req.token, NativeThread.NORM_PRIORITY, req, req.isPersistent());
if(logMINOR) Logger.minor(this, "Request failed: "+this+" for "+e);
return true;
}
if(logMINOR) Logger.minor(this, "Request succeeded: "+this);
- sched.callSuccess(this, req.token, NativeThread.NORM_PRIORITY, req);
+ sched.callSuccess(this, req.token, NativeThread.NORM_PRIORITY, req, req.isPersistent());
return true;
}
Modified: branches/db4o/freenet/src/freenet/node/RequestScheduler.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/RequestScheduler.java 2008-07-04 12:49:09 UTC (rev 20966)
+++ branches/db4o/freenet/src/freenet/node/RequestScheduler.java 2008-07-04 13:00:10 UTC (rev 20967)
@@ -58,15 +58,15 @@
/** Call onFailure() on the database thread, then delete the PersistentChosenRequest. For a non-persistent request,
* just call onFailure() immediately. */
- public void callFailure(final SendableGet get, final LowLevelGetException e, final Object keyNum, int prio, ChosenRequest req);
+ public void callFailure(final SendableGet get, final LowLevelGetException e, final Object keyNum, int prio, ChosenRequest req, boolean persistent);
/** Call onFailure() on the database thread, then delete the PersistentChosenRequest. For a non-persistent request,
* just call onFailure() immediately. */
- public void callFailure(final SendableInsert put, final LowLevelPutException e, final Object keyNum, int prio, ChosenRequest req);
+ public void callFailure(final SendableInsert put, final LowLevelPutException e, final Object keyNum, int prio, ChosenRequest req, boolean persistent);
/** Call onSuccess() on the database thread, then delete the PersistentChosenRequest. For a non-persistent request,
* just call onFailure() immediately. */
- public void callSuccess(final SendableInsert put, final Object keyNum, int prio, ChosenRequest req);
+ public void callSuccess(final SendableInsert put, final Object keyNum, int prio, ChosenRequest req, boolean persistent);
public FECQueue getFECQueue();
Modified: branches/db4o/freenet/src/freenet/node/SendableGet.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/SendableGet.java 2008-07-04 12:49:09 UTC (rev 20966)
+++ branches/db4o/freenet/src/freenet/node/SendableGet.java 2008-07-04 13:00:10 UTC (rev 20967)
@@ -75,25 +75,25 @@
if((!req.isPersistent()) && isCancelled(null)) {
if(logMINOR) Logger.minor(this, "Cancelled: "+this);
// callbacks must initially run at HIGH_PRIORITY so they are executed before we remove the key from the currently running list
- sched.callFailure(this, new LowLevelGetException(LowLevelGetException.CANCELLED), keyNum, NativeThread.HIGH_PRIORITY, req);
+ sched.callFailure(this, new LowLevelGetException(LowLevelGetException.CANCELLED), keyNum, NativeThread.HIGH_PRIORITY, req, req.isPersistent());
return false;
}
try {
try {
core.realGetKey(key, req.localRequestOnly, req.cacheLocalRequests, req.ignoreStore);
} catch (final LowLevelGetException e) {
- sched.callFailure(this, e, keyNum, NativeThread.HIGH_PRIORITY, req);
+ sched.callFailure(this, e, keyNum, NativeThread.HIGH_PRIORITY, req, req.isPersistent());
return true;
} catch (Throwable t) {
Logger.error(this, "Caught "+t, t);
- sched.callFailure(this, new LowLevelGetException(LowLevelGetException.INTERNAL_ERROR), keyNum, NativeThread.HIGH_PRIORITY, req);
+ sched.callFailure(this, new LowLevelGetException(LowLevelGetException.INTERNAL_ERROR), keyNum, NativeThread.HIGH_PRIORITY, req, req.isPersistent());
return true;
}
// Don't call onSuccess(), it will be called for us by backdoor coalescing.
sched.succeeded(this, req);
} catch (Throwable t) {
Logger.error(this, "Caught "+t, t);
- sched.callFailure(this, new LowLevelGetException(LowLevelGetException.INTERNAL_ERROR), keyNum, NativeThread.HIGH_PRIORITY, req);
+ sched.callFailure(this, new LowLevelGetException(LowLevelGetException.INTERNAL_ERROR), keyNum, NativeThread.HIGH_PRIORITY, req, req.isPersistent());
return true;
}
return true;
@@ -143,8 +143,8 @@
getScheduler(context).removePendingKey(this, false, key, container);
}
- public void internalError(final Object keyNum, final Throwable t, final RequestScheduler sched, ObjectContainer container, ClientContext context) {
- sched.callFailure(this, new LowLevelGetException(LowLevelGetException.INTERNAL_ERROR, t.getMessage(), t), keyNum, NativeThread.MAX_PRIORITY, null);
+ public void internalError(final Object keyNum, final Throwable t, final RequestScheduler sched, ObjectContainer container, ClientContext context, boolean persistent) {
+ sched.callFailure(this, new LowLevelGetException(LowLevelGetException.INTERNAL_ERROR, t.getMessage(), t), keyNum, NativeThread.MAX_PRIORITY, null, persistent);
}
/**
Modified: branches/db4o/freenet/src/freenet/node/SendableInsert.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/SendableInsert.java 2008-07-04 12:49:09 UTC (rev 20966)
+++ branches/db4o/freenet/src/freenet/node/SendableInsert.java 2008-07-04 13:00:10 UTC (rev 20967)
@@ -25,7 +25,7 @@
/** Called when we don't! */
public abstract void onFailure(LowLevelPutException e, Object keyNum, ObjectContainer container, ClientContext context);
- public void internalError(Object keyNum, Throwable t, RequestScheduler sched, ObjectContainer container, ClientContext context) {
+ public void internalError(Object keyNum, Throwable t, RequestScheduler sched, ObjectContainer container, ClientContext context, boolean persistent) {
onFailure(new LowLevelPutException(LowLevelPutException.INTERNAL_ERROR, t.getMessage(), t), keyNum, container, context);
}
Modified: branches/db4o/freenet/src/freenet/node/SendableRequest.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/SendableRequest.java 2008-07-04 12:49:09 UTC (rev 20966)
+++ branches/db4o/freenet/src/freenet/node/SendableRequest.java 2008-07-04 13:00:10 UTC (rev 20967)
@@ -110,6 +110,6 @@
}
/** Requeue after an internal error */
- public abstract void internalError(Object keyNum, Throwable t, RequestScheduler sched, ObjectContainer container, ClientContext context);
+ public abstract void internalError(Object keyNum, Throwable t, RequestScheduler sched, ObjectContainer container, ClientContext context, boolean persistent);
}
Modified: branches/db4o/freenet/src/freenet/node/SimpleSendableInsert.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/SimpleSendableInsert.java 2008-07-04 12:49:09 UTC (rev 20966)
+++ branches/db4o/freenet/src/freenet/node/SimpleSendableInsert.java 2008-07-04 13:00:10 UTC (rev 20967)
@@ -77,14 +77,14 @@
if(logMINOR) Logger.minor(this, "Starting request: "+this);
core.realPut(block, shouldCache());
} catch (LowLevelPutException e) {
- sched.callFailure(this, e, req.token, NativeThread.NORM_PRIORITY, req);
+ sched.callFailure(this, e, req.token, NativeThread.NORM_PRIORITY, req, false);
if(logMINOR) Logger.minor(this, "Request failed: "+this+" for "+e);
return true;
} finally {
finished = true;
}
if(logMINOR) Logger.minor(this, "Request succeeded: "+this);
- sched.callSuccess(this, req.token, NativeThread.NORM_PRIORITY, req);
+ sched.callSuccess(this, req.token, NativeThread.NORM_PRIORITY, req, false);
return true;
}
More information about the cvs
mailing list