Author: toad
Date: 2008-06-16 16:48:16 +0000 (Mon, 16 Jun 2008)
New Revision: 20369
Modified:
branches/db4o/freenet/src/freenet/node/fcp/FCPConnectionHandler.java
branches/db4o/freenet/src/freenet/node/fcp/GetRequestStatusMessage.java
branches/db4o/freenet/src/freenet/node/fcp/ModifyPersistentRequest.java
Log:
Run GetRequestStatus and ModifyRequest on the database thread
Modified: branches/db4o/freenet/src/freenet/node/fcp/FCPConnectionHandler.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/fcp/FCPConnectionHandler.java
2008-06-16 16:38:11 UTC (rev 20368)
+++ branches/db4o/freenet/src/freenet/node/fcp/FCPConnectionHandler.java
2008-06-16 16:48:16 UTC (rev 20369)
@@ -520,21 +520,20 @@
return req;
}
- ClientRequest getRequest(boolean global, FCPConnectionHandler handler,
String identifier) {
- ClientRequest req = getRequest(global, handler, identifier,
true);
- if(req == null)
- req = getRequest(global, handler, identifier, false);
- return req;
+ ClientRequest getRebootRequest(boolean global, FCPConnectionHandler
handler, String identifier) {
+ if(global)
+ return
handler.server.globalRebootClient.getRequest(identifier, null);
+ else
+ return handler.getRebootClient().getRequest(identifier,
null);
}
- private ClientRequest getRequest(boolean global, FCPConnectionHandler
handler, String identifier, boolean rebootOnly) {
- FCPClient client =
- global ? (rebootOnly ?
handler.server.globalRebootClient : handler.server.globalForeverClient) :
- (rebootOnly ? handler.getRebootClient() :
handler.getForeverClient());
- ClientRequest req = client.getRequest(identifier);
- return req;
+ ClientRequest getForeverRequest(boolean global, FCPConnectionHandler
handler, String identifier, ObjectContainer container) {
+ if(global)
+ return
handler.server.globalForeverClient.getRequest(identifier, container);
+ else
+ return
handler.getForeverClient().getRequest(identifier, container);
}
-
+
ClientRequest removePersistentRequest(boolean global, String
identifier) throws MessageInvalidException {
ClientRequest req = removePersistentRequest(global, identifier,
true);
if(req == null)
Modified:
branches/db4o/freenet/src/freenet/node/fcp/GetRequestStatusMessage.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/fcp/GetRequestStatusMessage.java
2008-06-16 16:38:11 UTC (rev 20368)
+++ branches/db4o/freenet/src/freenet/node/fcp/GetRequestStatusMessage.java
2008-06-16 16:48:16 UTC (rev 20369)
@@ -3,9 +3,14 @@
* http://www.gnu.org/ for further details of the GPL. */
package freenet.node.fcp;
+import com.db4o.ObjectContainer;
+
+import freenet.client.async.ClientContext;
+import freenet.client.async.DBJob;
import freenet.node.Node;
import freenet.support.Fields;
import freenet.support.SimpleFieldSet;
+import freenet.support.io.NativeThread;
public class GetRequestStatusMessage extends FCPMessage {
@@ -30,12 +35,23 @@
return NAME;
}
- public void run(FCPConnectionHandler handler, Node node)
+ public void run(final FCPConnectionHandler handler, Node node)
throws MessageInvalidException {
- ClientRequest req = handler.getRequest(global, handler,
identifier);
+ ClientRequest req = handler.getRebootRequest(global, handler,
identifier);
if(req == null) {
- ProtocolErrorMessage msg = new
ProtocolErrorMessage(ProtocolErrorMessage.NO_SUCH_IDENTIFIER, false, null,
identifier, global);
- handler.outputHandler.queue(msg);
+ node.clientCore.clientContext.jobRunner.queue(new
DBJob() {
+
+ public void run(ObjectContainer container,
ClientContext context) {
+ ClientRequest req =
handler.getForeverRequest(global, handler, identifier, container);
+ if(req == null) {
+ ProtocolErrorMessage msg = new
ProtocolErrorMessage(ProtocolErrorMessage.NO_SUCH_IDENTIFIER, false, null,
identifier, global);
+
handler.outputHandler.queue(msg);
+ } else {
+
req.sendPendingMessages(handler.outputHandler, true, true, onlyData);
+ }
+ }
+
+ }, NativeThread.NORM_PRIORITY, false);
} else {
req.sendPendingMessages(handler.outputHandler, true,
true, onlyData);
}
Modified:
branches/db4o/freenet/src/freenet/node/fcp/ModifyPersistentRequest.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/fcp/ModifyPersistentRequest.java
2008-06-16 16:38:11 UTC (rev 20368)
+++ branches/db4o/freenet/src/freenet/node/fcp/ModifyPersistentRequest.java
2008-06-16 16:48:16 UTC (rev 20369)
@@ -3,11 +3,16 @@
* http://www.gnu.org/ for further details of the GPL. */
package freenet.node.fcp;
+import com.db4o.ObjectContainer;
+
+import freenet.client.async.ClientContext;
+import freenet.client.async.DBJob;
import freenet.node.Node;
import freenet.node.RequestStarter;
import freenet.support.Fields;
import freenet.support.Logger;
import freenet.support.SimpleFieldSet;
+import freenet.support.io.NativeThread;
/**
* FCP message: Modify a persistent request.
@@ -64,17 +69,29 @@
return NAME;
}
- public void run(FCPConnectionHandler handler, Node node)
+ public void run(final FCPConnectionHandler handler, Node node)
throws MessageInvalidException {
- ClientRequest req = handler.getRequest(global, handler,
identifier);
- if(req==null){
- Logger.error(this, "Huh ? the request is null!");
- ProtocolErrorMessage msg = new
ProtocolErrorMessage(ProtocolErrorMessage.NO_SUCH_IDENTIFIER, false, null,
identifier, global);
- handler.outputHandler.queue(msg);
- return;
+
+ ClientRequest req = handler.getRebootRequest(global, handler,
identifier);
+ if(req == null) {
+ node.clientCore.clientContext.jobRunner.queue(new
DBJob() {
+
+ public void run(ObjectContainer container,
ClientContext context) {
+ ClientRequest req =
handler.getForeverRequest(global, handler, identifier, container);
+ if(req==null){
+ Logger.error(this, "Huh ? the
request is null!");
+ ProtocolErrorMessage msg = new
ProtocolErrorMessage(ProtocolErrorMessage.NO_SUCH_IDENTIFIER, false, null,
identifier, global);
+
handler.outputHandler.queue(msg);
+ return;
+ } else {
+ req.modifyRequest(clientToken,
priorityClass, handler.server);
+ }
+ }
+
+ }, NativeThread.NORM_PRIORITY, false);
+ } else {
+ req.modifyRequest(clientToken, priorityClass,
node.clientCore.getFCPServer());
}
-
- req.modifyRequest(clientToken, priorityClass,
node.clientCore.getFCPServer());
}
}