Author: toad
Date: 2009-04-09 00:10:10 +0000 (Thu, 09 Apr 2009)
New Revision: 26672

Modified:
   trunk/freenet/src/freenet/clients/http/QueueToadlet.java
   trunk/freenet/src/freenet/node/fcp/FCPServer.java
Log:
Pass in container, run it inline if possible.


Modified: trunk/freenet/src/freenet/clients/http/QueueToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/QueueToadlet.java    2009-04-09 
00:09:28 UTC (rev 26671)
+++ trunk/freenet/src/freenet/clients/http/QueueToadlet.java    2009-04-09 
00:10:10 UTC (rev 26672)
@@ -315,7 +315,7 @@
                                                        clientPut = new 
ClientPut(fcp.getGlobalForeverClient(), insertURI, identifier, 
Integer.MAX_VALUE, RequestStarter.BULK_SPLITFILE_PRIORITY_CLASS, 
ClientRequest.PERSIST_FOREVER, null, false, !compress, -1, 
ClientPutMessage.UPLOAD_FROM_DIRECT, null, file.getContentType(), copiedBucket, 
null, fnam, false, fcp, container);
                                                        if(clientPut != null)
                                                                try {
-                                                                       
fcp.startBlocking(clientPut);
+                                                                       
fcp.startBlocking(clientPut, container, context);
                                                                } catch 
(IdentifierCollisionException e) {
                                                                        
Logger.error(this, "Cannot put same file twice in same millisecond");
                                                                        
writePermanentRedirect(ctx, "Done", "/queue/");
@@ -400,7 +400,7 @@
                                                        
if(Logger.shouldLog(Logger.MINOR, this)) Logger.minor(this, "Started global 
request to insert "+file+" to CHK@ as "+identifier);
                                                        if(clientPut != null)
                                                                try {
-                                                                       
fcp.startBlocking(clientPut);
+                                                                       
fcp.startBlocking(clientPut, container, context);
                                                                } catch 
(IdentifierCollisionException e) {
                                                                        
Logger.error(this, "Cannot put same file twice in same millisecond");
                                                                        
writePermanentRedirect(ctx, "Done", "/queue/");
@@ -478,7 +478,7 @@
                                                        if(logMINOR) 
Logger.minor(this, "Started global request to insert dir "+file+" to "+furi+" 
as "+identifier);
                                                        if(clientPutDir != null)
                                                                try {
-                                                                       
fcp.startBlocking(clientPutDir);
+                                                                       
fcp.startBlocking(clientPutDir, container, context);
                                                                } catch 
(IdentifierCollisionException e) {
                                                                        
Logger.error(this, "Cannot put same file twice in same millisecond");
                                                                        
writePermanentRedirect(ctx, "Done", "/queue/");

Modified: trunk/freenet/src/freenet/node/fcp/FCPServer.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/FCPServer.java   2009-04-09 00:09:28 UTC 
(rev 26671)
+++ trunk/freenet/src/freenet/node/fcp/FCPServer.java   2009-04-09 00:10:10 UTC 
(rev 26672)
@@ -966,7 +966,7 @@
                        Logger.error(this, "Replacing request completion 
callback "+cb, new Exception("error"));
        }
 
-       public void startBlocking(final ClientRequest req) throws 
IdentifierCollisionException {
+       public void startBlocking(final ClientRequest req, ObjectContainer 
container, ClientContext context) throws IdentifierCollisionException {
                if(req.persistenceType == ClientRequest.PERSIST_REBOOT) {
                        req.start(null, core.clientContext);
                } else {
@@ -975,6 +975,21 @@
                                IdentifierCollisionException collided;
                        }
                        final OutputWrapper ow = new OutputWrapper();
+                       if(container != null) {
+                               // Don't activate, it may not be stored yet.
+                               try {
+                                       req.register(container, false, false);
+                                       req.start(container, context);
+                               } catch (IdentifierCollisionException e) {
+                                       ow.collided = e;
+                               } finally {
+                                       synchronized(ow) {
+                                               ow.done = true;
+                                               ow.notifyAll();
+                                       }
+                               }
+                               container.deactivate(req, 1);
+                       } else {
                        core.clientContext.jobRunner.queue(new DBJob() {
                                
                                public void run(ObjectContainer container, 
ClientContext context) {
@@ -1011,6 +1026,7 @@
                                }
                        }
                }
+               }
        }
        
        public boolean restartBlocking(final String identifier) {

_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs

Reply via email to