Author: toad
Date: 2006-07-20 22:32:52 +0000 (Thu, 20 Jul 2006)
New Revision: 9684

Modified:
   trunk/freenet/src/freenet/client/async/ClientPutter.java
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/Version.java
   trunk/freenet/src/freenet/node/fcp/ClientGet.java
   trunk/freenet/src/freenet/node/fcp/ClientPut.java
   trunk/freenet/src/freenet/node/fcp/ClientPutDir.java
   trunk/freenet/src/freenet/node/fcp/ClientRequest.java
   trunk/freenet/src/freenet/node/fcp/FCPClient.java
   trunk/freenet/src/freenet/node/fcp/FCPServer.java
Log:
886: Delay time consuming startup of persisted requests until after FCP and 
Fproxy are up.

Modified: trunk/freenet/src/freenet/client/async/ClientPutter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/ClientPutter.java    2006-07-20 
22:22:29 UTC (rev 9683)
+++ trunk/freenet/src/freenet/client/async/ClientPutter.java    2006-07-20 
22:32:52 UTC (rev 9684)
@@ -61,6 +61,7 @@
        public void start() throws InserterException {
                try {
                        synchronized(this) {
+                               if(currentState != null) return;
                                currentState =
                                        new SingleFileInserter(this, this, new 
InsertBlock(data, cm, targetURI), isMetadata, ctx, false, getCHKOnly, false, 
null, false);
                        }

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2006-07-20 22:22:29 UTC (rev 
9683)
+++ trunk/freenet/src/freenet/node/Node.java    2006-07-20 22:32:52 UTC (rev 
9684)
@@ -1884,6 +1884,8 @@
                if(NodeStarter.RECOMMENDED_EXT_BUILD_NUMBER > 
NodeStarter.extBuildNumber)
                        this.alerts.register(new ExtOldAgeUserAlert());

+               this.fcpServer.finishStart();
+               
                this.hasStarted = true;
        }


Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-07-20 22:22:29 UTC (rev 
9683)
+++ trunk/freenet/src/freenet/node/Version.java 2006-07-20 22:32:52 UTC (rev 
9684)
@@ -18,7 +18,7 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       private static final int buildNumber = 885;
+       private static final int buildNumber = 886;

        /** Oldest build of Fred we will talk to */
        private static final int oldLastGoodBuild = 870;

Modified: trunk/freenet/src/freenet/node/fcp/ClientGet.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientGet.java   2006-07-20 22:22:29 UTC 
(rev 9683)
+++ trunk/freenet/src/freenet/node/fcp/ClientGet.java   2006-07-20 22:32:52 UTC 
(rev 9684)
@@ -106,15 +106,15 @@
                returnBucket = ret;
                if(persistenceType != PERSIST_CONNECTION)
                        try {
-                               client.register(this);
+                               client.register(this, false);
                        } catch (IdentifierCollisionException e) {
                                ret.free();
                                throw e;
                        }
                getter = new ClientGetter(this, client.node.chkFetchScheduler, 
client.node.sskFetchScheduler, uri, fctx, priorityClass, client, returnBucket);
        }
-                       

+       
        public ClientGet(FCPConnectionHandler handler, ClientGetMessage 
message) throws IdentifierCollisionException {
                super(message.uri, message.identifier, message.verbosity, 
handler, message.priorityClass,
                                message.persistenceType, message.clientToken, 
message.global);
@@ -156,7 +156,7 @@
                returnBucket = ret;
                if(persistenceType != PERSIST_CONNECTION)
                        try {
-                               client.register(this);
+                               client.register(this, false);
                        } catch (IdentifierCollisionException e) {
                                ret.free();
                                throw e;
@@ -223,11 +223,9 @@
                returnBucket = ret;

                getter = new ClientGetter(this, client.node.chkFetchScheduler, 
client.node.sskFetchScheduler, uri, fctx, priorityClass, client, returnBucket);
-               if(!finished)
-                       start();
        }

-       void start() {
+       public void start() {
                try {
                        getter.start();
                } catch (FetchException e) {

Modified: trunk/freenet/src/freenet/node/fcp/ClientPut.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientPut.java   2006-07-20 22:22:29 UTC 
(rev 9683)
+++ trunk/freenet/src/freenet/node/fcp/ClientPut.java   2006-07-20 22:32:52 UTC 
(rev 9684)
@@ -40,7 +40,7 @@
                String mimeType = message.contentType;
                clientToken = message.clientToken;
                if(persistenceType != PERSIST_CONNECTION)
-                       client.register(this);
+                       client.register(this, false);
                Bucket tempData = message.bucket;
                ClientMetadata cm = new ClientMetadata(mimeType);
                boolean isMetadata = false;
@@ -151,11 +151,10 @@
                this.clientMetadata = cm;
                inserter = new ClientPutter(this, data, uri, cm, ctx, 
client.node.chkPutScheduler, 
                                client.node.sskPutScheduler, priorityClass, 
getCHKOnly, isMetadata, client, fs.subset("progress"));
-               if(!finished)
-                       start();
        }

-       void start() {
+       public void start() {
+               if(finished) return;
                try {
                        inserter.start();
                } catch (InserterException e) {

Modified: trunk/freenet/src/freenet/node/fcp/ClientPutDir.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientPutDir.java        2006-07-20 
22:22:29 UTC (rev 9683)
+++ trunk/freenet/src/freenet/node/fcp/ClientPutDir.java        2006-07-20 
22:32:52 UTC (rev 9684)
@@ -52,7 +52,7 @@
                }
                putter = p;
                if(persistenceType != PERSIST_CONNECTION)
-                       client.register(this);
+                       client.register(this, false);
        }

        public ClientPutDir(SimpleFieldSet fs, FCPClient client) throws 
PersistenceParseException, IOException {

Modified: trunk/freenet/src/freenet/node/fcp/ClientRequest.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientRequest.java       2006-07-20 
22:22:29 UTC (rev 9683)
+++ trunk/freenet/src/freenet/node/fcp/ClientRequest.java       2006-07-20 
22:32:52 UTC (rev 9684)
@@ -150,15 +150,16 @@
                        String type = fs.get("Type");
                        if(type.equals("GET")) {
                                ClientGet cg = new ClientGet(fs, client);
-                               client.register(cg);
+                               client.register(cg, true);
                                return cg;
                        } else if(type.equals("PUT")) {
                                ClientPut cp = new ClientPut(fs, client);
-                               client.register(cp);
+                               client.register(cp, true);
                                return cp;
                        } else if(type.equals("PUTDIR")) {
                                ClientPutDir cp = new ClientPutDir(fs, client);
-                               client.register(cp);
+                               // FIXME ,true when it doesn't self-start and 
supports resuming.
+                               client.register(cp, false);
                                return cp;
                        } else {
                                Logger.error(ClientRequest.class, "Unrecognized 
type: "+type);
@@ -269,4 +270,7 @@
                }
        }

+       /** Start the request, if it has not already been started. */
+       public abstract void start();
+
 }

Modified: trunk/freenet/src/freenet/node/fcp/FCPClient.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/FCPClient.java   2006-07-20 22:22:29 UTC 
(rev 9683)
+++ trunk/freenet/src/freenet/node/fcp/FCPClient.java   2006-07-20 22:32:52 UTC 
(rev 9684)
@@ -36,6 +36,7 @@
                defaultInsertContext = client.getInserterContext(false);
                clientsWatching = new LinkedList();
                watchGlobalVerbosityMask = Integer.MAX_VALUE;
+               toStart = new LinkedList();
        }

        /** The client's Name sent in the ClientHello message */
@@ -64,6 +65,7 @@
        // FIXME how do we lazily init this without synchronization problems?
        // We obviously can't synchronize on it when it hasn't been constructed 
yet...
        final LinkedList clientsWatching;
+       private final LinkedList toStart;

        public synchronized FCPConnectionHandler getConnection() {
                return currentConnection;
@@ -127,7 +129,7 @@
                        
((ClientRequest)reqs[i]).sendPendingMessages(outputHandler, true, false, false);
        }

-       public void register(ClientRequest cg) throws 
IdentifierCollisionException {
+       public void register(ClientRequest cg, boolean startLater) throws 
IdentifierCollisionException {
                synchronized(this) {
                        String ident = cg.getIdentifier();
                        ClientRequest old = (ClientRequest) 
clientRequestsByIdentifier.get(ident);
@@ -138,6 +140,8 @@
                        else
                                runningPersistentRequests.add(cg);
                        clientRequestsByIdentifier.put(ident, cg);
+                       if(startLater)
+                               toStart.add(cg);
                }
        }

@@ -238,4 +242,16 @@
                return (ClientRequest) 
clientRequestsByIdentifier.get(identifier);
        }

+       /**
+        * Start all delayed-start requests.
+        */
+       public void finishStart() {
+               ClientRequest[] reqs;
+               synchronized(this) {
+                       reqs = (ClientRequest[]) toStart.toArray(new 
ClientRequest[toStart.size()]);
+               }
+               for(int i=0;i<reqs.length;i++)
+                       reqs[i].start();
+       }
+       
 }

Modified: trunk/freenet/src/freenet/node/fcp/FCPServer.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/FCPServer.java   2006-07-20 22:22:29 UTC 
(rev 9683)
+++ trunk/freenet/src/freenet/node/fcp/FCPServer.java   2006-07-20 22:32:52 UTC 
(rev 9684)
@@ -663,4 +663,12 @@
                cg.start();
        }

+       /**
+        * Start requests which were not started immediately because it might 
have taken
+        * some time to start them.
+        */
+       public void finishStart() {
+               this.globalClient.finishStart();
+       }
+       
 }


Reply via email to