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());
        }

 }


Reply via email to