Author: toad
Date: 2005-11-16 15:23:44 +0000 (Wed, 16 Nov 2005)
New Revision: 7545

Added:
   trunk/freenet/src/freenet/client/events/GeneratedURIEvent.java
Modified:
   trunk/freenet/src/freenet/client/BlockInserter.java
   trunk/freenet/src/freenet/client/FileInserter.java
   trunk/freenet/src/freenet/client/InserterException.java
   trunk/freenet/src/freenet/client/SplitInserter.java
   trunk/freenet/src/freenet/node/TextModeClientInterface.java
   trunk/freenet/src/freenet/node/Version.java
Log:
182:
Make TMCI return the URI generated even if it RNFs.

Modified: trunk/freenet/src/freenet/client/BlockInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/BlockInserter.java 2005-11-16 14:46:11 UTC 
(rev 7544)
+++ trunk/freenet/src/freenet/client/BlockInserter.java 2005-11-16 15:23:44 UTC 
(rev 7545)
@@ -108,7 +108,8 @@
        }

        private void fatalError(Throwable t, int code) {
-               fatalError(new InserterException(code, t), code);
+               // Don't need to include uri
+               fatalError(new InserterException(code, t, null), code);
        }

        private void nonfatalError(InserterException e, int code) {

Modified: trunk/freenet/src/freenet/client/FileInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/FileInserter.java  2005-11-16 14:46:11 UTC 
(rev 7544)
+++ trunk/freenet/src/freenet/client/FileInserter.java  2005-11-16 15:23:44 UTC 
(rev 7545)
@@ -2,6 +2,7 @@

 import java.io.IOException;

+import freenet.client.events.GeneratedURIEvent;
 import freenet.client.events.SimpleBlockPutEvent;
 import freenet.keys.CHKEncodeException;
 import freenet.keys.ClientCHKBlock;
@@ -36,7 +37,7 @@
                if(block.data == null)
                        throw new NullPointerException();
                if(!block.desiredURI.toString(false).equals("CHK@"))
-                       throw new 
InserterException(InserterException.INVALID_URI);
+                       throw new 
InserterException(InserterException.INVALID_URI, null);

                // Insert the content.
                // If we have reason to create a metadata document, include the 
client metadata.
@@ -78,7 +79,7 @@
                                        }
                                }
                        } catch (IOException e) {
-                               throw new 
InserterException(InserterException.BUCKET_ERROR, e);
+                               throw new 
InserterException(InserterException.BUCKET_ERROR, e, null);
                        } catch (CompressionOutputSizeException e) {
                                // Impossible
                                throw new Error(e);
@@ -95,10 +96,10 @@
                                        chk = ClientCHKBlock.encode(data, 
metadata, false, bestCodec.codecNumberForMetadata(), (int)origSize);
                                }
                        } catch (IOException e) {
-                               throw new 
InserterException(InserterException.BUCKET_ERROR, e);
+                               throw new 
InserterException(InserterException.BUCKET_ERROR, e, null);
                        } catch (CHKEncodeException e) {
                                Logger.error(this, "Unexpected error: "+e, e);
-                               throw new 
InserterException(InserterException.INTERNAL_ERROR);
+                               throw new 
InserterException(InserterException.INTERNAL_ERROR, null);
                        }
                        return simplePutCHK(chk, block.clientMetadata, 
getCHKOnly);
                }
@@ -138,22 +139,22 @@
                }

                if(le != null)
-                       translateException(le);
+                       translateException(le, uri);

                return uri;
        }

-       private void translateException(LowLevelPutException e) throws 
InserterException {
+       private void translateException(LowLevelPutException e, FreenetURI uri) 
throws InserterException {
                switch(e.code) {
                case LowLevelPutException.INTERNAL_ERROR:
-                       throw new 
InserterException(InserterException.INTERNAL_ERROR, e);
+                       throw new 
InserterException(InserterException.INTERNAL_ERROR, e, null);
                case LowLevelPutException.REJECTED_OVERLOAD:
-                       throw new 
InserterException(InserterException.REJECTED_OVERLOAD);
+                       throw new 
InserterException(InserterException.REJECTED_OVERLOAD, uri);
                case LowLevelPutException.ROUTE_NOT_FOUND:
-                       throw new 
InserterException(InserterException.ROUTE_NOT_FOUND);
+                       throw new 
InserterException(InserterException.ROUTE_NOT_FOUND, uri);
                default:
                        Logger.error(this, "Unknown LowLevelPutException code: 
"+e.code+" on "+this);
-                       throw new 
InserterException(InserterException.INTERNAL_ERROR, e);
+                       throw new 
InserterException(InserterException.INTERNAL_ERROR, e, null);
                }
        }

@@ -166,7 +167,7 @@
                try {
                        bucket = BucketTools.makeImmutableBucket(ctx.bf, data);
                } catch (IOException e) {
-                       throw new 
InserterException(InserterException.BUCKET_ERROR);
+                       throw new 
InserterException(InserterException.BUCKET_ERROR, null);
                }
                InsertBlock block = new InsertBlock(bucket, null, 
FreenetURI.EMPTY_CHK_URI);
                return run(block, true, getCHKOnly);

Modified: trunk/freenet/src/freenet/client/InserterException.java
===================================================================
--- trunk/freenet/src/freenet/client/InserterException.java     2005-11-16 
14:46:11 UTC (rev 7544)
+++ trunk/freenet/src/freenet/client/InserterException.java     2005-11-16 
15:23:44 UTC (rev 7545)
@@ -2,6 +2,7 @@

 import java.io.IOException;

+import freenet.keys.FreenetURI;
 import freenet.node.LowLevelPutException;
 import freenet.support.Logger;

@@ -11,39 +12,45 @@
        final int mode;
        /** For collection errors */
        final FailureCodeTracker errorCodes;
+       /** If a non-serious error, the URI */
+       public final FreenetURI uri;

        /** Get the failure mode. */
        public int getMode() {
                return mode;
        }

-       public InserterException(int m, String msg) {
+       public InserterException(int m, String msg, FreenetURI expectedURI) {
                super(getMessage(m)+": "+msg);
                mode = m;
                Logger.minor(this, "Creating InserterException: 
"+getMessage(mode)+": "+msg, this);
                errorCodes = null;
+               this.uri = expectedURI;
        }

-       public InserterException(int m) {
+       public InserterException(int m, FreenetURI expectedURI) {
                super(getMessage(m));
                mode = m;
                Logger.minor(this, "Creating InserterException: 
"+getMessage(mode), this);
                errorCodes = null;
+               this.uri = expectedURI;
        }

-       public InserterException(int mode, Throwable e) {
+       public InserterException(int mode, Throwable e, FreenetURI expectedURI) 
{
                super(getMessage(mode)+": "+e.getMessage());
                Logger.minor(this, "Creating InserterException: 
"+getMessage(mode)+": "+e, e);
                this.mode = mode;
                errorCodes = null;
                initCause(e);
+               this.uri = expectedURI;
        }

-       public InserterException(int mode, FailureCodeTracker errorCodes) {
+       public InserterException(int mode, FailureCodeTracker errorCodes, 
FreenetURI expectedURI) {
                super(getMessage(mode));
                this.mode = mode;
                Logger.minor(this, "Creating InserterException: 
"+getMessage(mode), this);
                this.errorCodes = errorCodes;
+               this.uri = expectedURI;
        }

        /** Caller supplied a URI we cannot use */

Modified: trunk/freenet/src/freenet/client/SplitInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/SplitInserter.java 2005-11-16 14:46:11 UTC 
(rev 7544)
+++ trunk/freenet/src/freenet/client/SplitInserter.java 2005-11-16 15:23:44 UTC 
(rev 7545)
@@ -3,6 +3,7 @@
 import java.io.IOException;
 import java.util.Vector;

+import freenet.client.events.GeneratedURIEvent;
 import freenet.keys.FreenetURI;
 import freenet.keys.NodeCHK;
 import freenet.support.Bucket;
@@ -55,7 +56,7 @@
                try {
                        splitIntoBlocks();
                } catch (IOException e) {
-                       throw new 
InserterException(InserterException.BUCKET_ERROR, e);
+                       throw new 
InserterException(InserterException.BUCKET_ERROR, e, null);
                }
                this.inserter = inserter;
        }
@@ -76,7 +77,7 @@
                                        Logger.minor(this, "Encoded segment 
"+i+" of "+segments.length);
                                }
                        } catch (IOException e) {
-                               throw new 
InserterException(InserterException.BUCKET_ERROR, e);
+                               throw new 
InserterException(InserterException.BUCKET_ERROR, e, null);
                        }
                        // Wait for the insertion thread to finish
                        return waitForCompletion();
@@ -84,7 +85,7 @@
                        Logger.error(this, "Caught "+t, t);
                        tracker.kill();
                        if(t instanceof InserterException) throw 
(InserterException)t;
-                       throw new 
InserterException(InserterException.INTERNAL_ERROR, t);
+                       throw new 
InserterException(InserterException.INTERNAL_ERROR, t, null);
                }
        }

@@ -120,7 +121,7 @@
                        try {
                                mbucket = 
BucketTools.makeImmutableBucket(ctx.bf, metadata.writeToByteArray());
                        } catch (IOException e) {
-                               throw new 
InserterException(InserterException.BUCKET_ERROR);
+                               throw new 
InserterException(InserterException.BUCKET_ERROR, null);
                        }

                        if(inserter == null)
@@ -135,12 +136,14 @@
                }
                // Did we succeed?

+               ctx.eventProducer.produceEvent(new GeneratedURIEvent(uri));
+               
                if(fatalErrors > 0) {
-                       throw new 
InserterException(InserterException.FATAL_ERRORS_IN_BLOCKS, 
tracker.getAccumulatedFatalErrorCodes());
+                       throw new 
InserterException(InserterException.FATAL_ERRORS_IN_BLOCKS, 
tracker.getAccumulatedFatalErrorCodes(), uri);
                }

                if(failed > 0) {
-                       throw new 
InserterException(InserterException.TOO_MANY_RETRIES_IN_BLOCKS, 
tracker.getAccumulatedNonFatalErrorCodes());
+                       throw new 
InserterException(InserterException.TOO_MANY_RETRIES_IN_BLOCKS, 
tracker.getAccumulatedNonFatalErrorCodes(), uri);
                }

                return uri;

Added: trunk/freenet/src/freenet/client/events/GeneratedURIEvent.java
===================================================================
--- trunk/freenet/src/freenet/client/events/GeneratedURIEvent.java      
2005-11-16 14:46:11 UTC (rev 7544)
+++ trunk/freenet/src/freenet/client/events/GeneratedURIEvent.java      
2005-11-16 15:23:44 UTC (rev 7545)
@@ -0,0 +1,21 @@
+package freenet.client.events;
+
+import freenet.keys.FreenetURI;
+
+public class GeneratedURIEvent implements ClientEvent {
+
+       public static final int code = 0x06;
+       public final FreenetURI uri;
+
+       public GeneratedURIEvent(FreenetURI uri) {
+               this.uri = uri;
+       }
+       
+       public String getDescription() {
+               return "Generated URI on insert: "+uri;
+       }
+
+       public int getCode() {
+               return code;
+       }
+}

Modified: trunk/freenet/src/freenet/node/TextModeClientInterface.java
===================================================================
--- trunk/freenet/src/freenet/node/TextModeClientInterface.java 2005-11-16 
14:46:11 UTC (rev 7544)
+++ trunk/freenet/src/freenet/node/TextModeClientInterface.java 2005-11-16 
15:23:44 UTC (rev 7545)
@@ -219,6 +219,8 @@
                uri = client.insert(block, getCHKOnly);
             } catch (InserterException e) {
                System.out.println("Error: "+e.getMessage());
+               if(e.uri != null)
+                       System.out.println("URI would have been: "+e.uri);
                return;
             }

@@ -254,6 +256,8 @@
                 System.out.println("File not found");
             } catch (InserterException e) {
                System.out.println("Finished insert but: "+e.getMessage());
+               if(e.uri != null)
+                       System.out.println("URI would have been: "+e.uri);
             } catch (Throwable t) {
                 System.out.println("Insert threw: "+t);
                 t.printStackTrace();

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2005-11-16 14:46:11 UTC (rev 
7544)
+++ trunk/freenet/src/freenet/node/Version.java 2005-11-16 15:23:44 UTC (rev 
7545)
@@ -20,7 +20,7 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       public static final int buildNumber = 181;
+       public static final int buildNumber = 182;

        /** Oldest build of Fred we will talk to */
        public static final int lastGoodBuild = 181;


Reply via email to