Author: toad
Date: 2005-11-11 15:11:15 +0000 (Fri, 11 Nov 2005)
New Revision: 7523

Modified:
   trunk/freenet/src/freenet/client/BlockFetcher.java
   trunk/freenet/src/freenet/client/BlockInserter.java
   trunk/freenet/src/freenet/client/DefaultMIMETypes.java
   trunk/freenet/src/freenet/client/InsertSegment.java
   trunk/freenet/src/freenet/client/RetryTracker.java
   trunk/freenet/src/freenet/client/SplitInserter.java
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/TextModeClientInterface.java
   trunk/freenet/src/freenet/node/Version.java
Log:
159:
Lots of bug fixes, lots of new debugging code.
May still deadlock during inserts; this may be a problem with USM.

Modified: trunk/freenet/src/freenet/client/BlockFetcher.java
===================================================================
--- trunk/freenet/src/freenet/client/BlockFetcher.java  2005-11-11 00:20:30 UTC 
(rev 7522)
+++ trunk/freenet/src/freenet/client/BlockFetcher.java  2005-11-11 15:11:15 UTC 
(rev 7523)
@@ -33,6 +33,8 @@
                        realRun();
                } catch (Throwable t) {
                        fatalError(t, FetchException.INTERNAL_ERROR);
+               } finally {
+                       completedTries++;
                }
        }


Modified: trunk/freenet/src/freenet/client/BlockInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/BlockInserter.java 2005-11-11 00:20:30 UTC 
(rev 7522)
+++ trunk/freenet/src/freenet/client/BlockInserter.java 2005-11-11 15:11:15 UTC 
(rev 7523)
@@ -53,6 +53,7 @@
                try {
                        realRun();
                } catch (Throwable t) {
+                       Logger.error(this, "Caught "+t, t);
                        fatalError(t, InserterException.INTERNAL_ERROR);
                } finally {
                        completedTries++;

Modified: trunk/freenet/src/freenet/client/DefaultMIMETypes.java
===================================================================
--- trunk/freenet/src/freenet/client/DefaultMIMETypes.java      2005-11-11 
00:20:30 UTC (rev 7522)
+++ trunk/freenet/src/freenet/client/DefaultMIMETypes.java      2005-11-11 
15:11:15 UTC (rev 7523)
@@ -57,7 +57,9 @@
                        for(int i=0;i<extensions.length;i++) {
                                String ext = extensions[i].toLowerCase();
                                if(mimeTypesByExtension.containsKey(ext)) {
-                                       Logger.error(DefaultMIMETypes.class, 
"Extension already registered to number "+mimeTypesByExtension.get(ext));
+                                       // No big deal
+                                       Short s = (Short) 
mimeTypesByExtension.get(ext);
+                                       Logger.normal(DefaultMIMETypes.class, 
"Extension "+ext+" assigned to "+byNumber(s.shortValue())+" in preference to 
"+number+":"+type);
                                } else
                                        mimeTypesByExtension.put(ext, t);
                        }

Modified: trunk/freenet/src/freenet/client/InsertSegment.java
===================================================================
--- trunk/freenet/src/freenet/client/InsertSegment.java 2005-11-11 00:20:30 UTC 
(rev 7522)
+++ trunk/freenet/src/freenet/client/InsertSegment.java 2005-11-11 15:11:15 UTC 
(rev 7523)
@@ -33,8 +33,10 @@
         */
        public FreenetURI[] getCheckURIs() {
                FreenetURI[] uris = new FreenetURI[checkBlocks.length];
-               for(int i=0;i<uris.length;i++)
-                       uris[i] = checkBlocks[i].getURI();
+               for(int i=0;i<uris.length;i++) {
+                       FreenetURI uri = checkBlocks[i].getURI();
+                       uris[i] = uri;
+               }
                return uris;
        }

@@ -48,6 +50,8 @@
                for(int i=0;i<checkBlocks.length;i++)
                        checkBlocks[i] = new BlockInserter(null, offset + i, 
tracker, ctx, getCHKOnly);
                codec.encode(origDataBlocks, checkBlocks, blockLength, bf);
+               for(int i=0;i<checkBlocks.length;i++)
+                       tracker.addBlock(checkBlocks[i]);
                return checkBlocks.length;
        }


Modified: trunk/freenet/src/freenet/client/RetryTracker.java
===================================================================
--- trunk/freenet/src/freenet/client/RetryTracker.java  2005-11-11 00:20:30 UTC 
(rev 7522)
+++ trunk/freenet/src/freenet/client/RetryTracker.java  2005-11-11 15:11:15 UTC 
(rev 7523)
@@ -12,14 +12,12 @@
  */
 public class RetryTracker {

-       static class Level {
+       class Level {
                final int level;
                final Vector blocks;
-               final RetryTracker tracker;

-               Level(RetryTracker tracker, int l) {
+               Level(int l) {
                        level = l;
-                       this.tracker = tracker;
                        blocks = new Vector();
                }

@@ -29,10 +27,10 @@
                 */
                SplitfileBlock getBlock() {
                        int len = blocks.size();
-                       int x = tracker.random.nextInt(len);
+                       int x = random.nextInt(len);
                        SplitfileBlock block = (SplitfileBlock) 
blocks.remove(x);
                        if(blocks.isEmpty())
-                               tracker.removeLevel(level);
+                               removeLevel(level);
                        return block;
                }

@@ -48,7 +46,7 @@
                void remove(SplitfileBlock block) {
                        blocks.remove(block);
                        if(blocks.isEmpty())
-                               tracker.removeLevel(level);
+                               removeLevel(level);
                }
        }

@@ -140,7 +138,7 @@
        /** Add a level */
        private synchronized Level addLevel(int level, Integer x) {
                if(level < 0) throw new IllegalArgumentException();
-               Level l = new Level(this, level);
+               Level l = new Level(level);
                levels.put(x, l);
                if(level > curMaxLevel) curMaxLevel = level;
                if(level < curMinLevel) curMinLevel = level;
@@ -174,10 +172,7 @@
        public synchronized void nonfatalError(SplitfileBlock block, int 
reasonCode) {
                nonfatalErrors.inc(reasonCode);
                runningBlocks.remove(block);
-               Level l = makeLevel(block.getRetryCount());
-               if(l == null) throw new IllegalArgumentException();
-               int levelNumber = l.level;
-               l.remove(block);
+               int levelNumber = block.getRetryCount();
                levelNumber++;
                if(levelNumber > maxLevel) {
                        failedBlocksTooManyRetries.add(block);
@@ -197,10 +192,6 @@
        public synchronized void fatalError(SplitfileBlock block, int 
reasonCode) {
                fatalErrors.inc(reasonCode);
                runningBlocks.remove(block);
-               Level l = makeLevel(block.getRetryCount());
-               if(l == null) throw new IllegalArgumentException();
-               if(l.tracker != this) throw new 
IllegalArgumentException("Belongs to wrong tracker");
-               l.remove(block);
                failedBlocksFatalErrors.add(block);
                maybeStart(false);
        }
@@ -212,6 +203,8 @@
        public synchronized void maybeStart(boolean cantCallFinished) {
                Logger.minor(this, "succeeded: "+succeededBlocks.size()+", 
target: "+targetSuccesses+
                                ", running: "+runningBlocks.size()+", levels: 
"+levels.size()+", finishOnEmpty: "+finishOnEmpty);
+               if(runningBlocks.size() == 1)
+                       Logger.minor(this, "Only block running: 
"+runningBlocks.toArray()[0]);
                if((succeededBlocks.size() >= targetSuccesses)
                                || (runningBlocks.isEmpty() && levels.isEmpty() 
&& finishOnEmpty)) {
                        Logger.minor(this, "Finishing");
@@ -250,7 +243,16 @@
         */
        public synchronized SplitfileBlock getBlock() {
                Level l = (Level) levels.get(new Integer(curMinLevel));
-               if(l == null) return null;
+               if(l == null) {
+                       if(!levels.isEmpty()) {
+                               Integer x = (Integer) 
levels.keySet().toArray()[0];
+                               Logger.error(this, "Inconsistent: min level = 
"+curMinLevel+", max level = "+curMaxLevel+" but level exists: "+x, new 
Exception("error"));
+                               curMinLevel = x.intValue();
+                               curMaxLevel = x.intValue();
+                               return getBlock();
+                       }
+                       return null;
+               }
                return l.getBlock();
        }


Modified: trunk/freenet/src/freenet/client/SplitInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/SplitInserter.java 2005-11-11 00:20:30 UTC 
(rev 7522)
+++ trunk/freenet/src/freenet/client/SplitInserter.java 2005-11-11 15:11:15 UTC 
(rev 7523)
@@ -28,7 +28,7 @@
        InsertSegment encodingSegment;
        InsertSegment[] segments;
        final Vector unstartedSegments = new Vector();
-       private boolean allSegmentsFinished = false;
+       private boolean finishedInserting = false;
        private boolean getCHKOnly;
        private int succeeded;
        private int failed;
@@ -83,7 +83,7 @@
        private FreenetURI waitForCompletion() throws InserterException {
                tracker.setFinishOnEmpty();
                synchronized(this) {
-                       while(!allSegmentsFinished) {
+                       while(!finishedInserting) {
                                try {
                                        wait(10*1000);
                                } catch (InterruptedException e) {
@@ -102,24 +102,29 @@
                if(missingURIs && fatalErrors == 0 && failed == 0)
                        throw new IllegalStateException();

-               Metadata metadata = new Metadata(splitfileAlgorithm, dataURIs, 
checkURIs, clientMetadata, dataLength, compressionCodec);
+               FreenetURI uri = null;

-               Bucket mbucket;
-               try {
-                       mbucket = BucketTools.makeImmutableBucket(ctx.bf, 
metadata.writeToByteArray());
-               } catch (IOException e) {
-                       throw new 
InserterException(InserterException.BUCKET_ERROR);
+               if(!missingURIs) {
+               
+                       Metadata metadata = new Metadata(splitfileAlgorithm, 
dataURIs, checkURIs, clientMetadata, dataLength, compressionCodec);
+                       
+                       Bucket mbucket;
+                       try {
+                               mbucket = 
BucketTools.makeImmutableBucket(ctx.bf, metadata.writeToByteArray());
+                       } catch (IOException e) {
+                               throw new 
InserterException(InserterException.BUCKET_ERROR);
+                       }
+                       
+                       if(inserter == null)
+                               inserter = new FileInserter(ctx);
+                       
+                       InsertBlock mblock = new InsertBlock(mbucket, 
clientMetadata, FreenetURI.EMPTY_CHK_URI);
+                       
+                       // FIXME probably should uncomment below so it doesn't 
get inserted at all?
+                       // FIXME this is a hack for small network support... 
but we will need that IRL... hmmm
+                       uri = inserter.run(mblock, true, getCHKOnly/* || 
(fatalErrors > 0 || failed > 0)*/);
+                       
                }
-
-               if(inserter == null)
-                       inserter = new FileInserter(ctx);
-               
-               InsertBlock mblock = new InsertBlock(mbucket, clientMetadata, 
FreenetURI.EMPTY_CHK_URI);
-
-               // FIXME probably should uncomment below so it doesn't get 
inserted at all?
-               // FIXME this is a hack for small network support... but we 
will need that IRL... hmmm
-               FreenetURI uri = inserter.run(mblock, true, getCHKOnly/* || 
(fatalErrors > 0 || failed > 0)*/);
-               
                // Did we succeed?

                if(fatalErrors > 0) {
@@ -218,7 +223,7 @@

        public void finished(SplitfileBlock[] succeeded, SplitfileBlock[] 
failed, SplitfileBlock[] fatalErrors) {
                synchronized(this) {
-                       allSegmentsFinished = true;
+                       finishedInserting = true;
                        this.succeeded = succeeded.length;
                        this.failed = failed.length;
                        this.fatalErrorBlocks = fatalErrors;

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2005-11-11 00:20:30 UTC (rev 
7522)
+++ trunk/freenet/src/freenet/node/Node.java    2005-11-11 15:11:15 UTC (rev 
7523)
@@ -425,7 +425,10 @@
             String msg = "Failed inserting "+block+" : "+is.getStatusString();
             if(status == InsertSender.ROUTE_NOT_FOUND)
                 msg += " - this is normal on small networks; the data will 
still be propagated, but it can't find the 20+ nodes needed for full success";
-            Logger.error(this, msg);
+            if(is.getStatus() != InsertSender.ROUTE_NOT_FOUND)
+               Logger.error(this, msg);
+            else
+               Logger.normal(this, msg);
             switch(is.getStatus()) {
             case InsertSender.NOT_FINISHED:
                        Logger.error(this, "IS still running in putCHK!: "+is);
@@ -437,7 +440,6 @@
             default:
                        Logger.error(this, "Unknown InsertSender code in 
putCHK: "+is.getStatus()+" on "+is);
                        throw new 
LowLevelPutException(LowLevelPutException.INTERNAL_ERROR);
-                       
             }
         }
     }

Modified: trunk/freenet/src/freenet/node/TextModeClientInterface.java
===================================================================
--- trunk/freenet/src/freenet/node/TextModeClientInterface.java 2005-11-11 
00:20:30 UTC (rev 7522)
+++ trunk/freenet/src/freenet/node/TextModeClientInterface.java 2005-11-11 
15:11:15 UTC (rev 7523)
@@ -77,8 +77,8 @@
         System.out.println("CONNECT:<filename> - connect to a node from its 
ref in a file.");
         System.out.println("CONNECT:\n<noderef including an End on a line by 
itself> - enter a noderef directly.");
         System.out.println("NAME:<new node name> - change the node's name.");
-        System.out.println("SUBFILE:<filename> - append all data received from 
subscriptions to a file, rather than sending it to stdout.");
-        System.out.println("SAY:<text> - send text to the last created/pushed 
stream");
+//        System.out.println("SUBFILE:<filename> - append all data received 
from subscriptions to a file, rather than sending it to stdout.");
+//        System.out.println("SAY:<text> - send text to the last 
created/pushed stream");
         System.out.println("STATUS - display some status information on the 
node including its reference and connections.");
         System.out.println("QUIT - exit the program");
         // Read command, and data

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2005-11-11 00:20:30 UTC (rev 
7522)
+++ trunk/freenet/src/freenet/node/Version.java 2005-11-11 15:11:15 UTC (rev 
7523)
@@ -20,10 +20,10 @@
        public static final String protocolVersion = "1.0";

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

        /** Oldest build of Fred we will talk to */
-       public static final int lastGoodBuild = 153;
+       public static final int lastGoodBuild = 159;

        /** The highest reported build of fred */
        public static int highestSeenBuild = buildNumber;


Reply via email to