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


Reply via email to