Author: toad
Date: 2006-07-21 17:14:51 +0000 (Fri, 21 Jul 2006)
New Revision: 9696
Modified:
trunk/freenet/src/freenet/client/async/ClientPutter.java
trunk/freenet/src/freenet/node/Version.java
trunk/freenet/src/freenet/node/fcp/ClientPut.java
trunk/freenet/src/freenet/node/fcp/ClientRequest.java
trunk/freenet/src/freenet/node/fcp/FCPServer.java
trunk/freenet/src/freenet/node/fcp/PersistentPut.java
trunk/freenet/src/freenet/support/PaddedEphemerallyEncryptedBucket.java
trunk/freenet/src/freenet/support/io/FileBucket.java
Log:
888:
Include DataLength on inserts (unless they don't have data e.g. are redirects).
More persistence fixes; if we lose a bucket, start again.
Modified: trunk/freenet/src/freenet/client/async/ClientPutter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/ClientPutter.java 2006-07-21
16:57:55 UTC (rev 9695)
+++ trunk/freenet/src/freenet/client/async/ClientPutter.java 2006-07-21
17:14:51 UTC (rev 9696)
@@ -59,6 +59,7 @@
}
public void start() throws InserterException {
+ Logger.minor(this, "Starting "+this);
try {
synchronized(this) {
if(currentState != null) return;
@@ -76,6 +77,7 @@
this.client.onFailure(e, this);
}
}
+ Logger.minor(this, "Started "+this);
}
public void onSuccess(ClientPutState state) {
@@ -118,6 +120,7 @@
}
public synchronized void onTransition(ClientPutState oldState,
ClientPutState newState) {
+ if(newState == null) throw new NullPointerException();
if(currentState == oldState)
currentState = newState;
else
@@ -138,6 +141,10 @@
}
public SimpleFieldSet getProgressFieldset() {
+ if(currentState == null) {
+ Logger.error(this, "getProgressFieldset() called on
"+this+" but no current progress");
+ throw new NullPointerException();
+ }
return currentState.getProgressFieldset();
}
Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-07-21 16:57:55 UTC (rev
9695)
+++ trunk/freenet/src/freenet/node/Version.java 2006-07-21 17:14:51 UTC (rev
9696)
@@ -18,7 +18,7 @@
public static final String protocolVersion = "1.0";
/** The build number of the current revision */
- private static final int buildNumber = 887;
+ private static final int buildNumber = 888;
/** Oldest build of Fred we will talk to */
private static final int oldLastGoodBuild = 870;
Modified: trunk/freenet/src/freenet/node/fcp/ClientPut.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientPut.java 2006-07-21 16:57:55 UTC
(rev 9695)
+++ trunk/freenet/src/freenet/node/fcp/ClientPut.java 2006-07-21 17:14:51 UTC
(rev 9696)
@@ -119,9 +119,13 @@
byte[] key =
HexUtil.hexToBytes(fs.get("TempBucket.DecryptKey"));
String fnam = fs.get("TempBucket.Filename");
long sz =
Long.parseLong(fs.get("TempBucket.Size"));
- data =
client.server.node.persistentTempBucketFactory.registerEncryptedBucket(fnam,
key, sz);
- if(data.size() != sz)
- throw new
PersistenceParseException("Size of bucket is wrong: "+data.size()+" should be
"+sz);
+ try {
+ data =
client.server.node.persistentTempBucketFactory.registerEncryptedBucket(fnam,
key, sz);
+ if(data.size() != sz)
+ throw new
PersistenceParseException("Size of bucket is wrong: "+data.size()+" should be
"+sz);
+ } catch (IOException e) {
+ throw new
PersistenceParseException("Could not read old bucket (should be "+sz+" bytes)
for "+identifier);
+ }
} else data = null;
targetURI = null;
} else if(uploadFrom == ClientPutMessage.UPLOAD_FROM_REDIRECT) {
@@ -195,7 +199,8 @@
protected FCPMessage persistentTagMessage() {
return new PersistentPut(identifier, uri, verbosity,
priorityClass, uploadFrom, targetURI,
- persistenceType, origFilename,
clientMetadata.getMIMEType(), client.isGlobalQueue);
+ persistenceType, origFilename,
clientMetadata.getMIMEType(), client.isGlobalQueue,
+ data == null ? -1 : data.size());
}
protected String getTypeName() {
Modified: trunk/freenet/src/freenet/node/fcp/ClientRequest.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientRequest.java 2006-07-21
16:57:55 UTC (rev 9695)
+++ trunk/freenet/src/freenet/node/fcp/ClientRequest.java 2006-07-21
17:14:51 UTC (rev 9696)
@@ -164,6 +164,9 @@
Logger.error(ClientRequest.class, "Unrecognized
type: "+type);
return null;
}
+ } catch (PersistenceParseException e) {
+ Logger.error(ClientRequest.class, "Failed to parse
request: "+e, e);
+ return null;
} catch (Throwable t) {
Logger.error(ClientRequest.class, "Failed to parse:
"+t, t);
return null;
Modified: trunk/freenet/src/freenet/node/fcp/FCPServer.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/FCPServer.java 2006-07-21 16:57:55 UTC
(rev 9695)
+++ trunk/freenet/src/freenet/node/fcp/FCPServer.java 2006-07-21 17:14:51 UTC
(rev 9696)
@@ -459,10 +459,12 @@
public void forceStorePersistentRequests() {
Logger.minor(this, "Forcing store persistent requests");
+ if(!enablePersistentDownloads) return;
if(persister != null) {
persister.force();
} else {
- Logger.error(this, "Persister not running, cannot store
persistent requests");
+ if(canStartPersister)
+ Logger.error(this, "Persister not running,
cannot store persistent requests");
}
}
Modified: trunk/freenet/src/freenet/node/fcp/PersistentPut.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/PersistentPut.java 2006-07-21
16:57:55 UTC (rev 9695)
+++ trunk/freenet/src/freenet/node/fcp/PersistentPut.java 2006-07-21
17:14:51 UTC (rev 9696)
@@ -20,11 +20,12 @@
final String mimeType;
final boolean global;
final FreenetURI targetURI;
+ final long size;
public PersistentPut(String identifier, FreenetURI uri, int verbosity,
short priorityClass, short uploadFrom, FreenetURI
targetURI,
short persistenceType, File origFilename, String
mimeType,
- boolean global) {
+ boolean global, long size) {
this.identifier = identifier;
this.uri = uri;
this.verbosity = verbosity;
@@ -35,14 +36,15 @@
this.origFilename = origFilename;
this.mimeType = mimeType;
this.global = global;
+ this.size = size;
}
public SimpleFieldSet getFieldSet() {
SimpleFieldSet fs = new SimpleFieldSet(false);
fs.put("Identifier", identifier);
fs.put("URI", uri.toString(false));
- fs.put("Verbosity", Integer.toString(verbosity));
- fs.put("PriorityClass", Short.toString(priorityClass));
+ fs.put("Verbosity", verbosity);
+ fs.put("PriorityClass", priorityClass);
fs.put("UploadFrom",
ClientPutMessage.uploadFromString(uploadFrom));
fs.put("Persistence",
ClientRequest.persistenceTypeString(persistenceType));
if(origFilename != null)
@@ -52,6 +54,8 @@
if(mimeType != null)
fs.put("Metadata.ContentType", mimeType);
fs.put("Global", Boolean.toString(global));
+ if(size != -1)
+ fs.put("DataLength", size);
return fs;
}
Modified:
trunk/freenet/src/freenet/support/PaddedEphemerallyEncryptedBucket.java
===================================================================
--- trunk/freenet/src/freenet/support/PaddedEphemerallyEncryptedBucket.java
2006-07-21 16:57:55 UTC (rev 9695)
+++ trunk/freenet/src/freenet/support/PaddedEphemerallyEncryptedBucket.java
2006-07-21 17:14:51 UTC (rev 9696)
@@ -127,6 +127,8 @@
throw new
CannotCreateFromFieldSetException("Corrupt dataLength: "+tmp, e);
}
}
+ if(dataLength > bucket.size())
+ throw new CannotCreateFromFieldSetException("Underlying
bucket is too small: should be "+dataLength+" actually "+bucket.size());
}
public OutputStream getOutputStream() throws IOException {
Modified: trunk/freenet/src/freenet/support/io/FileBucket.java
===================================================================
--- trunk/freenet/src/freenet/support/io/FileBucket.java 2006-07-21
16:57:55 UTC (rev 9695)
+++ trunk/freenet/src/freenet/support/io/FileBucket.java 2006-07-21
17:14:51 UTC (rev 9696)
@@ -90,6 +90,8 @@
if(tmp == null) throw new CannotCreateFromFieldSetException("No
length");
try {
length = Long.parseLong(tmp);
+ if(length != file.length())
+ throw new
CannotCreateFromFieldSetException("Invalid length: should be "+length+"
actually "+file.length()+" on "+file);
} catch (NumberFormatException e) {
throw new CannotCreateFromFieldSetException("Corrupt
length "+tmp, e);
}