Author: toad
Date: 2008-02-02 20:45:33 +0000 (Sat, 02 Feb 2008)
New Revision: 17480

Modified:
   trunk/freenet/src/freenet/client/async/BaseSingleFileFetcher.java
   trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java
   trunk/freenet/src/freenet/client/async/SimpleSingleFileFetcher.java
   trunk/freenet/src/freenet/client/async/SingleBlockInserter.java
   trunk/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
   trunk/freenet/src/freenet/client/async/USKChecker.java
   trunk/freenet/src/freenet/node/RequestStarter.java
   trunk/freenet/src/freenet/node/SendableGet.java
   trunk/freenet/src/freenet/node/SendableInsert.java
   trunk/freenet/src/freenet/node/SendableRequest.java
   trunk/freenet/src/freenet/node/SimpleSendableInsert.java
Log:
Refactor: use Object's not int's as tokens in the SendableRequest API.

Modified: trunk/freenet/src/freenet/client/async/BaseSingleFileFetcher.java
===================================================================
--- trunk/freenet/src/freenet/client/async/BaseSingleFileFetcher.java   
2008-02-02 20:05:30 UTC (rev 17479)
+++ trunk/freenet/src/freenet/client/async/BaseSingleFileFetcher.java   
2008-02-02 20:45:33 UTC (rev 17480)
@@ -19,7 +19,7 @@
        final int maxRetries;
        private int retryCount;
        final FetchContext ctx;
-       static final int[] keys = new int[] { 0 };
+       static final Object[] keys = new Object[] { new Integer(0) };

        protected BaseSingleFileFetcher(ClientKey key, int maxRetries, 
FetchContext ctx, ClientRequester parent) {
                super(parent);
@@ -29,15 +29,15 @@
                this.ctx = ctx;
        }

-       public int[] allKeys() {
+       public Object[] allKeys() {
                return keys;
        }

-       public int chooseKey() {
-               return 0;
+       public Object chooseKey() {
+               return keys[0];
        }

-       public ClientKey getKey(int token) {
+       public ClientKey getKey(Object token) {
                return key;
        }

@@ -111,7 +111,7 @@
                        }
                }
                try {
-                       onSuccess(Key.createKeyBlock(this.key, block), false, 
0);
+                       onSuccess(Key.createKeyBlock(this.key, block), false, 
null);
                } catch (KeyVerifyException e) {
                        Logger.error(this, "onGotKey("+key+","+block+") got 
"+e+" for "+this, e);
                        // FIXME if we get rid of the direct route this must 
call onFailure()

Modified: trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java
===================================================================
--- trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2008-02-02 20:05:30 UTC (rev 17479)
+++ trunk/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2008-02-02 20:45:33 UTC (rev 17480)
@@ -198,9 +198,9 @@
                        SendableGet getter = (SendableGet)req;
                        if(!getter.ignoreStore()) {
                                boolean anyValid = false;
-                               int[] keyTokens = getter.allKeys();
+                               Object[] keyTokens = getter.allKeys();
                                for(int i=0;i<keyTokens.length;i++) {
-                                       int tok = keyTokens[i];
+                                       Object tok = keyTokens[i];
                                        ClientKeyBlock block = null;
                                        try {
                                                ClientKey key = 
getter.getKey(tok);
@@ -513,9 +513,9 @@
         * @param complain
         */
        public void removePendingKeys(SendableGet getter, boolean complain) {
-               int[] keyTokens = getter.allKeys();
+               Object[] keyTokens = getter.allKeys();
                for(int i=0;i<keyTokens.length;i++) {
-                       int tok = keyTokens[i];
+                       Object tok = keyTokens[i];
                        ClientKey ckey = getter.getKey(tok);
                        if(ckey == null) {
                                if(complain)

Modified: trunk/freenet/src/freenet/client/async/SimpleSingleFileFetcher.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SimpleSingleFileFetcher.java 
2008-02-02 20:05:30 UTC (rev 17479)
+++ trunk/freenet/src/freenet/client/async/SimpleSingleFileFetcher.java 
2008-02-02 20:45:33 UTC (rev 17480)
@@ -39,7 +39,7 @@
        final long token;

        // Translate it, then call the real onFailure
-       public void onFailure(LowLevelGetException e, int reqTokenIgnored) {
+       public void onFailure(LowLevelGetException e, Object reqTokenIgnored) {
                switch(e.code) {
                case LowLevelGetException.DATA_NOT_FOUND:
                        onFailure(new 
FetchException(FetchException.DATA_NOT_FOUND));
@@ -117,7 +117,7 @@
                rcb.onSuccess(data, this);
        }

-       public void onSuccess(ClientKeyBlock block, boolean fromStore, int 
reqTokenIgnored) {
+       public void onSuccess(ClientKeyBlock block, boolean fromStore, Object 
reqTokenIgnored) {
                if(parent instanceof ClientGetter)
                        ((ClientGetter)parent).addKeyToBinaryBlob(block);
                Bucket data = extract(block);

Modified: trunk/freenet/src/freenet/client/async/SingleBlockInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SingleBlockInserter.java     
2008-02-02 20:05:30 UTC (rev 17479)
+++ trunk/freenet/src/freenet/client/async/SingleBlockInserter.java     
2008-02-02 20:45:33 UTC (rev 17480)
@@ -136,7 +136,7 @@
                return retries;
        }

-       public void onFailure(LowLevelPutException e, int keyNum) {
+       public void onFailure(LowLevelPutException e, Object keyNum) {
                if(parent.isCancelled()) {
                        fail(new InsertException(InsertException.CANCELLED));
                        return;
@@ -253,7 +253,7 @@
                return resultingURI;
        }

-       public void onSuccess(int keyNum) {
+       public void onSuccess(Object keyNum) {
                if(logMINOR) Logger.minor(this, "Succeeded ("+this+"): "+token);
                if(parent.isCancelled()) {
                        fail(new InsertException(InsertException.CANCELLED));
@@ -283,7 +283,7 @@
                return finished;
        }

-       public boolean send(NodeClientCore core, RequestScheduler sched, int 
keyNum) {
+       public boolean send(NodeClientCore core, RequestScheduler sched, Object 
keyNum) {
                // Ignore keyNum, key, since we're only sending one block.
                try {
                        if(logMINOR) Logger.minor(this, "Starting request: 
"+this);
@@ -346,16 +346,16 @@
                return true;
        }

-       public synchronized int[] allKeys() {
+       public synchronized Object[] allKeys() {
                if(finished)
-                       return new int[] {};
+                       return new Object[] {};
                else
-                       return new int[] { 0 };
+                       return new Object[] { new Integer(0) };
        }

-       public synchronized int chooseKey() {
-               if(finished) return -1;
-               else return 0;
+       public synchronized Object chooseKey() {
+               if(finished) return null;
+               else return new Integer(0);
        }

 }

Modified: trunk/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java      
2008-02-02 20:05:30 UTC (rev 17479)
+++ trunk/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java      
2008-02-02 20:45:33 UTC (rev 17480)
@@ -49,36 +49,33 @@
                return ctx;
        }

-       public int chooseKey() {
-               if(cancelled) return -1;
+       public Object chooseKey() {
+               if(cancelled) return null;
                return removeRandomBlockNum();
        }

-       public ClientKey getKey(int token) {
+       public ClientKey getKey(Object token) {
                if(cancelled) {
                        if(logMINOR)
                                Logger.minor(this, "Segment is finishing when 
getting key "+token+" on "+this);
                        return null;
                }
-               return segment.getBlockKey(token);
+               return segment.getBlockKey(((Integer)token).intValue());
        }

-       public synchronized int[] allKeys() {
-               int[] nums = new int[blockNums.size()];
-               for(int i=0;i<nums.length;i++)
-                       nums[i] = ((Integer) blockNums.get(i)).intValue();
-               return nums;
+       public synchronized Object[] allKeys() {
+               return blockNums.toArray();
        }

-       private synchronized int removeRandomBlockNum() {
+       private synchronized Object removeRandomBlockNum() {
                logMINOR = Logger.shouldLog(Logger.MINOR, this);
                if(blockNums.isEmpty()) {
                        if(logMINOR)
                                Logger.minor(this, "No blocks to remove");
-                       return -1;
+                       return null;
                }
                int x = ctx.random.nextInt(blockNums.size());
-               int ret = ((Integer) blockNums.remove(x)).intValue();
+               Object ret = (Integer) blockNums.remove(x);
                if(logMINOR)
                        Logger.minor(this, "Removing block "+x+" of 
"+(blockNums.size()+1)+ " : "+ret+ " on "+this);
                return ret;
@@ -90,7 +87,7 @@

        // Translate it, then call the real onFailure
        // FIXME refactor this out to a common method; see 
SimpleSingleFileFetcher
-       public void onFailure(LowLevelGetException e, int token) {
+       public void onFailure(LowLevelGetException e, Object token) {
                if(logMINOR)
                        Logger.minor(this, "onFailure("+e+" , "+token);
                switch(e.code) {
@@ -132,7 +129,7 @@
        }

        // Real onFailure
-       protected void onFailure(FetchException e, int token) {
+       protected void onFailure(FetchException e, Object token) {
                boolean forceFatal = false;
                if(parent.isCancelled()) {
                        if(Logger.shouldLog(Logger.MINOR, this)) 
@@ -142,13 +139,13 @@
                }
                segment.errors.inc(e.getMode());
                if(e.isFatal() || forceFatal) {
-                       segment.onFatalFailure(e, token, this);
+                       segment.onFatalFailure(e, ((Integer)token).intValue(), 
this);
                } else {
-                       segment.onNonFatalFailure(e, token, this);
+                       segment.onNonFatalFailure(e, 
((Integer)token).intValue(), this);
                }
        }

-       public void onSuccess(ClientKeyBlock block, boolean fromStore, int 
token) {
+       public void onSuccess(ClientKeyBlock block, boolean fromStore, Object 
token) {
                Bucket data = extract(block, token);
                if(fromStore) {
                        // Normally when this method is called the block number 
has already
@@ -157,7 +154,7 @@
                        synchronized(this) {
                                for(int i=0;i<blockNums.size();i++) {
                                        Integer x = (Integer) blockNums.get(i);
-                                       if(x.intValue() == token) {
+                                       if(x == token) {
                                                blockNums.remove(i);
                                                i--;
                                        }
@@ -165,16 +162,16 @@
                        }
                }
                if(!block.isMetadata()) {
-                       onSuccess(data, fromStore, token, block);
+                       onSuccess(data, fromStore, (Integer)token, 
((Integer)token).intValue(), block);
                } else {
                        onFailure(new 
FetchException(FetchException.INVALID_METADATA, "Metadata where expected 
data"), token);
                }
        }

-       protected void onSuccess(Bucket data, boolean fromStore, int blockNo, 
ClientKeyBlock block) {
+       protected void onSuccess(Bucket data, boolean fromStore, Integer token, 
int blockNo, ClientKeyBlock block) {
                if(parent.isCancelled()) {
                        data.free();
-                       onFailure(new FetchException(FetchException.CANCELLED), 
blockNo);
+                       onFailure(new FetchException(FetchException.CANCELLED), 
token);
                        return;
                }
                segment.onSuccess(data, blockNo, fromStore, this, block);
@@ -183,7 +180,7 @@
        /** Convert a ClientKeyBlock to a Bucket. If an error occurs, report it 
via onFailure
         * and return null.
         */
-       protected Bucket extract(ClientKeyBlock block, int token) {
+       protected Bucket extract(ClientKeyBlock block, Object token) {
                Bucket data;
                try {
                        data = block.decode(ctx.bucketFactory, 
(int)(Math.min(ctx.maxOutputLength, Integer.MAX_VALUE)), false);
@@ -290,10 +287,12 @@

        public void onGotKey(Key key, KeyBlock block) {
                int blockNum = -1;
+               Object token = null;
                ClientKey ckey = null;
                synchronized(this) {
                        for(int i=0;i<blockNums.size();i++) {
-                               int num = 
((Integer)blockNums.get(i)).intValue();
+                               token = blockNums.get(i);
+                               int num = ((Integer)token).intValue();
                                ckey = segment.getBlockKey(num);
                                if(ckey == null) return; // Already got this key
                                Key k = ckey.getNodeKey();
@@ -306,7 +305,7 @@
                }
                if(blockNum == -1) return;
                try {
-                       onSuccess(Key.createKeyBlock(ckey, block), false, 
blockNum);
+                       onSuccess(Key.createKeyBlock(ckey, block), false, 
token);
                } catch (KeyVerifyException e) {
                        // FIXME if we ever abolish the direct route, this must 
be turned into an onFailure().
                        Logger.error(this, "Failed to parse in 
onGotKey("+key+","+block+") - believed to be "+ckey+" (block #"+blockNum+")");

Modified: trunk/freenet/src/freenet/client/async/USKChecker.java
===================================================================
--- trunk/freenet/src/freenet/client/async/USKChecker.java      2008-02-02 
20:05:30 UTC (rev 17479)
+++ trunk/freenet/src/freenet/client/async/USKChecker.java      2008-02-02 
20:45:33 UTC (rev 17480)
@@ -25,12 +25,12 @@
                this.cb = cb;
        }

-       public void onSuccess(ClientKeyBlock block, boolean fromStore, int 
token) {
+       public void onSuccess(ClientKeyBlock block, boolean fromStore, Object 
token) {
                unregister();
                cb.onSuccess((ClientSSKBlock)block);
        }

-       public void onFailure(LowLevelGetException e, int token) {
+       public void onFailure(LowLevelGetException e, Object token) {
         if(Logger.shouldLog(Logger.MINOR, this))
                Logger.minor(this, "onFailure: "+e+" for "+this);
                // Firstly, can we retry?

Modified: trunk/freenet/src/freenet/node/RequestStarter.java
===================================================================
--- trunk/freenet/src/freenet/node/RequestStarter.java  2008-02-02 20:05:30 UTC 
(rev 17479)
+++ trunk/freenet/src/freenet/node/RequestStarter.java  2008-02-02 20:45:33 UTC 
(rev 17480)
@@ -153,11 +153,11 @@

        private boolean startRequest(SendableRequest req, boolean logMINOR) {
                // Create a thread to handle starting the request, and the 
resulting feedback
-               int keyNum = -1;
+               Object keyNum = null;
                while(true) {
                        try {
                                keyNum = req.chooseKey();
-                               if(keyNum == -1) return false;
+                               if(keyNum == null) return false;
                                core.getExecutor().execute(new 
SenderThread(req, keyNum), "RequestStarter$SenderThread for "+req);
                                if(logMINOR) Logger.minor(this, "Started "+req);
                                return true;
@@ -171,7 +171,7 @@
                                        // Ignore
                                }
                        } catch (Throwable t) {
-                               if(keyNum != -1) {
+                               if(keyNum != null) {
                                        // Re-queue
                                        req.internalError(keyNum, t);
                                        Logger.error(this, "Caught "+t+" while 
trying to start request");
@@ -197,9 +197,9 @@
        private class SenderThread implements Runnable {

                private final SendableRequest req;
-               private final int keyNum;
+               private final Object keyNum;

-               public SenderThread(SendableRequest req, int keyNum) {
+               public SenderThread(SendableRequest req, Object keyNum) {
                        this.req = req;
                        this.keyNum = keyNum;
                }

Modified: trunk/freenet/src/freenet/node/SendableGet.java
===================================================================
--- trunk/freenet/src/freenet/node/SendableGet.java     2008-02-02 20:05:30 UTC 
(rev 17479)
+++ trunk/freenet/src/freenet/node/SendableGet.java     2008-02-02 20:45:33 UTC 
(rev 17480)
@@ -24,16 +24,16 @@
        public final ClientRequester parent;

        /** Get a numbered key to fetch. */
-       public abstract ClientKey getKey(int token);
+       public abstract ClientKey getKey(Object token);

        /** Get the fetch context (settings) object. */
        public abstract FetchContext getContext();

        /** Called when/if the low-level request succeeds. */
-       public abstract void onSuccess(ClientKeyBlock block, boolean fromStore, 
int token);
+       public abstract void onSuccess(ClientKeyBlock block, boolean fromStore, 
Object token);

        /** Called when/if the low-level request fails. */
-       public abstract void onFailure(LowLevelGetException e, int token);
+       public abstract void onFailure(LowLevelGetException e, Object token);

        /** Should the request ignore the datastore? */
        public abstract boolean ignoreStore();
@@ -50,7 +50,7 @@
        /** Do the request, blocking. Called by RequestStarter. 
         * @return True if a request was executed. False if caller should try 
to find another request, and remove
         * this one from the queue. */
-       public boolean send(NodeClientCore core, RequestScheduler sched, int 
keyNum) {
+       public boolean send(NodeClientCore core, RequestScheduler sched, Object 
keyNum) {
                ClientKey key = getKey(keyNum);
                if(Logger.shouldLog(Logger.MINOR, this))
                        Logger.minor(this, "Sending get for key "+keyNum+" : 
"+key);
@@ -59,7 +59,7 @@
                        synchronized (this) {
                                if(isCancelled()) {
                                        if(logMINOR) Logger.minor(this, 
"Cancelled: "+this);
-                                       onFailure(new 
LowLevelGetException(LowLevelGetException.CANCELLED), -1);
+                                       onFailure(new 
LowLevelGetException(LowLevelGetException.CANCELLED), null);
                                        return false;
                                }       
                        }
@@ -115,7 +115,7 @@
                getScheduler().removePendingKey(this, false, key);
        }

-       public void internalError(int keyNum, Throwable t) {
+       public void internalError(Object keyNum, Throwable t) {
                onFailure(new 
LowLevelGetException(LowLevelGetException.INTERNAL_ERROR, t.getMessage(), t), 
keyNum);
        }


Modified: trunk/freenet/src/freenet/node/SendableInsert.java
===================================================================
--- trunk/freenet/src/freenet/node/SendableInsert.java  2008-02-02 20:05:30 UTC 
(rev 17479)
+++ trunk/freenet/src/freenet/node/SendableInsert.java  2008-02-02 20:45:33 UTC 
(rev 17480)
@@ -12,12 +12,12 @@
 public abstract class SendableInsert extends SendableRequest {

        /** Called when we successfully insert the data */
-       public abstract void onSuccess(int keyNum);
+       public abstract void onSuccess(Object keyNum);

        /** Called when we don't! */
-       public abstract void onFailure(LowLevelPutException e, int keyNum);
+       public abstract void onFailure(LowLevelPutException e, Object keyNum);

-       public void internalError(int keyNum, Throwable t) {
+       public void internalError(Object keyNum, Throwable t) {
                onFailure(new 
LowLevelPutException(LowLevelPutException.INTERNAL_ERROR, t.getMessage(), t), 
keyNum);
        }


Modified: trunk/freenet/src/freenet/node/SendableRequest.java
===================================================================
--- trunk/freenet/src/freenet/node/SendableRequest.java 2008-02-02 20:05:30 UTC 
(rev 17479)
+++ trunk/freenet/src/freenet/node/SendableRequest.java 2008-02-02 20:45:33 UTC 
(rev 17480)
@@ -21,11 +21,11 @@
        /** Choose a key to fetch. Removes the block number from any internal 
queues 
         * (but not the key itself, implementors must have a separate queue of 
block 
         * numbers and mapping of block numbers to keys).
-        * @return An integer identifying a specific key. -1 indicates no keys 
available. */
-       public abstract int chooseKey();
+        * @return An object identifying a specific key. -1 indicates no keys 
available. */
+       public abstract Object chooseKey();

        /** All key identifiers */
-       public abstract int[] allKeys();
+       public abstract Object[] allKeys();

        /** ONLY called by RequestStarter. Start the actual request using the 
NodeClientCore
         * provided, and the key and key number earlier got from chooseKey(). 
@@ -35,7 +35,7 @@
         * @param key The key returned from grabKey().
         * @return True if a request was sent, false otherwise (in which case 
the request will
         * be removed if it hasn't already been). */
-       public abstract boolean send(NodeClientCore node, RequestScheduler 
sched, int keyNum);
+       public abstract boolean send(NodeClientCore node, RequestScheduler 
sched, Object keyNum);

        /** Get client context object */
        public abstract Object getClient();
@@ -67,6 +67,6 @@
        }

        /** Requeue after an internal error */
-       public abstract void internalError(int keyNum, Throwable t);
+       public abstract void internalError(Object keyNum, Throwable t);

 }

Modified: trunk/freenet/src/freenet/node/SimpleSendableInsert.java
===================================================================
--- trunk/freenet/src/freenet/node/SimpleSendableInsert.java    2008-02-02 
20:05:30 UTC (rev 17479)
+++ trunk/freenet/src/freenet/node/SimpleSendableInsert.java    2008-02-02 
20:45:33 UTC (rev 17480)
@@ -42,13 +42,13 @@
                this.scheduler = scheduler;
        }

-       public void onSuccess(int keyNum) {
+       public void onSuccess(Object keyNum) {
                // Yay!
                if(Logger.shouldLog(Logger.MINOR, this))
                        Logger.minor(this, "Finished insert of "+block);
        }

-       public void onFailure(LowLevelPutException e, int keyNum) {
+       public void onFailure(LowLevelPutException e, Object keyNum) {
                if(Logger.shouldLog(Logger.MINOR, this))
                        Logger.minor(this, "Failed insert of "+block+": "+e);
        }
@@ -62,7 +62,7 @@
                return 0;
        }

-       public boolean send(NodeClientCore core, RequestScheduler sched, int 
keyNum) {
+       public boolean send(NodeClientCore core, RequestScheduler sched, Object 
keyNum) {
                // Ignore keyNum, key, since this is a single block
                boolean logMINOR = Logger.shouldLog(Logger.MINOR, this);
                try {
@@ -114,13 +114,13 @@
                return false;
        }

-       public synchronized int[] allKeys() {
-               if(finished) return new int[] {};
-               return new int[] { 0 };
+       public synchronized Object[] allKeys() {
+               if(finished) return new Object[] {};
+               return new Object[] { new Integer(0) };
        }

-       public synchronized int chooseKey() {
-               if(finished) return -1;
-               else return 0;
+       public synchronized Object chooseKey() {
+               if(finished) return null;
+               else return new Integer(0);
        }
 }


Reply via email to