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