Author: toad
Date: 2008-06-28 18:37:28 +0000 (Sat, 28 Jun 2008)
New Revision: 20856
Modified:
branches/db4o/freenet/src/freenet/client/async/MultiPutCompletionCallback.java
branches/db4o/freenet/src/freenet/client/async/SimpleManifestPutter.java
branches/db4o/freenet/src/freenet/client/async/SingleFileFetcher.java
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java
branches/db4o/freenet/src/freenet/keys/FreenetURI.java
Log:
Eliminate LinkedList from any class that might be persisted.
We don't want it, it will cause problems with activation.
Modified:
branches/db4o/freenet/src/freenet/client/async/MultiPutCompletionCallback.java
===================================================================
---
branches/db4o/freenet/src/freenet/client/async/MultiPutCompletionCallback.java
2008-06-28 18:18:05 UTC (rev 20855)
+++
branches/db4o/freenet/src/freenet/client/async/MultiPutCompletionCallback.java
2008-06-28 18:37:28 UTC (rev 20856)
@@ -12,7 +12,7 @@
public class MultiPutCompletionCallback implements PutCompletionCallback,
ClientPutState {
- // LinkedList's rather than HashSet's for memory reasons.
+ // Vector's rather than HashSet's for memory reasons.
// This class will not be used with large sets, so O(n) is cheaper than
O(1) -
// at least it is on memory!
private final Vector waitingFor;
Modified:
branches/db4o/freenet/src/freenet/client/async/SimpleManifestPutter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SimpleManifestPutter.java
2008-06-28 18:18:05 UTC (rev 20855)
+++ branches/db4o/freenet/src/freenet/client/async/SimpleManifestPutter.java
2008-06-28 18:37:28 UTC (rev 20856)
@@ -6,7 +6,6 @@
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
-import java.util.LinkedList;
import java.util.Vector;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
@@ -257,7 +256,7 @@
private final static String[] defaultDefaultNames =
new String[] { "index.html", "index.htm", "default.html",
"default.htm" };
private int bytesOnZip;
- private LinkedList elementsToPutInZip;
+ private Vector elementsToPutInZip;
private boolean fetchable;
private final boolean earlyEncode;
@@ -279,7 +278,7 @@
waitingForBlockSets = new HashSet();
metadataPuttersByMetadata = new HashMap();
metadataPuttersUnfetchable = new HashMap();
- elementsToPutInZip = new LinkedList();
+ elementsToPutInZip = new Vector();
makePutHandlers(manifestElements, putHandlersByName);
checkZips();
}
@@ -364,7 +363,7 @@
bytesOnZip += sz;
// Put it in the zip.
ph = new PutHandler(this, name,
ZipPrefix+element.fullName, cm, data);
- elementsToPutInZip.addLast(ph);
+ elementsToPutInZip.add(ph);
numberOfFiles++;
totalSize += data.size();
} else {
Modified: branches/db4o/freenet/src/freenet/client/async/SingleFileFetcher.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SingleFileFetcher.java
2008-06-28 18:18:05 UTC (rev 20855)
+++ branches/db4o/freenet/src/freenet/client/async/SingleFileFetcher.java
2008-06-28 18:37:28 UTC (rev 20856)
@@ -5,7 +5,9 @@
import java.io.IOException;
import java.net.MalformedURLException;
+import java.util.ArrayList;
import java.util.LinkedList;
+import java.util.List;
import com.db4o.ObjectContainer;
@@ -40,7 +42,7 @@
/** Original URI */
final FreenetURI uri;
/** Meta-strings. (Path elements that aren't part of a key type) */
- final LinkedList metaStrings;
+ private final ArrayList metaStrings;
/** Number of metaStrings which were added by redirects etc. They are
added to the start, so this is decremented
* when we consume one. */
private int addedMetaStrings;
@@ -53,7 +55,7 @@
private int recursionLevel;
/** The URI of the currently-being-processed data, for archives etc. */
private FreenetURI thisKey;
- private final LinkedList decompressors;
+ private final ArrayList decompressors;
private final boolean dontTellClientGet;
private final Bucket returnBucket;
/** If true, success/failure is immediately reported to the client, and
therefore we can check TOO_MANY_PATH_COMPONENTS. */
@@ -64,7 +66,7 @@
* FIXME: Many times where this is called internally we might be better
off using a copy constructor?
*/
public SingleFileFetcher(ClientRequester parent, GetCompletionCallback
cb, ClientMetadata metadata,
- ClientKey key, LinkedList metaStrings, FreenetURI
origURI, int addedMetaStrings, FetchContext ctx,
+ ClientKey key, List metaStrings, FreenetURI origURI,
int addedMetaStrings, FetchContext ctx,
ArchiveContext actx, ArchiveHandler ah, Metadata
archiveMetadata, int maxRetries, int recursionLevel,
boolean dontTellClientGet, long l, boolean isEssential,
Bucket returnBucket, boolean isFinal, ObjectContainer
container, ClientContext context) throws FetchException {
@@ -80,7 +82,10 @@
//this.uri = uri;
//this.key = ClientKey.getBaseKey(uri);
//metaStrings = uri.listMetaStrings();
- this.metaStrings = metaStrings;
+ if(metaStrings instanceof ArrayList)
+ this.metaStrings = (ArrayList)metaStrings;
+ else
+ this.metaStrings = new ArrayList(metaStrings);
this.addedMetaStrings = addedMetaStrings;
this.clientMetadata = metadata;
thisKey = key.getURI();
@@ -89,7 +94,7 @@
this.recursionLevel = recursionLevel + 1;
if(recursionLevel > ctx.maxRecursionLevel)
throw new
FetchException(FetchException.TOO_MUCH_RECURSION, "Too much recursion:
"+recursionLevel+" > "+ctx.maxRecursionLevel);
- this.decompressors = new LinkedList();
+ this.decompressors = new ArrayList();
}
/** Copy constructor, modifies a few given fields, don't call
schedule().
@@ -109,7 +114,7 @@
this.archiveMetadata = fetcher.archiveMetadata;
this.clientMetadata = (ClientMetadata)
fetcher.clientMetadata.clone();
this.metadata = newMeta;
- this.metaStrings = new LinkedList();
+ this.metaStrings = new ArrayList();
this.addedMetaStrings = 0;
this.recursionLevel = fetcher.recursionLevel + 1;
if(recursionLevel > ctx.maxRecursionLevel)
@@ -194,7 +199,7 @@
if(!decompressors.isEmpty()) {
Bucket data = result.asBucket();
while(!decompressors.isEmpty()) {
- Compressor c = (Compressor)
decompressors.removeLast();
+ Compressor c = (Compressor)
decompressors.remove(decompressors.size()-1);
try {
long maxLen =
Math.max(ctx.maxTempLength, ctx.maxOutputLength);
data = c.decompress(data,
context.getBucketFactory(parent.persistent()), maxLen, maxLen * 4,
decompressors.isEmpty() ? returnBucket : null);
@@ -491,12 +496,12 @@
} catch (MalformedURLException e) {
throw new
FetchException(FetchException.INVALID_URI, e);
}
- LinkedList newMetaStrings =
newURI.listMetaStrings();
+ ArrayList newMetaStrings =
newURI.listMetaStrings();
// Move any new meta strings to beginning of
our list of remaining meta strings
while(!newMetaStrings.isEmpty()) {
- Object o = newMetaStrings.removeLast();
- metaStrings.addFirst(o);
+ Object o =
newMetaStrings.remove(newMetaStrings.size()-1);
+ metaStrings.add(0, o);
addedMetaStrings++;
}
@@ -604,13 +609,13 @@
}
private String removeMetaString() {
- String name = (String) metaStrings.removeFirst();
+ String name = (String) metaStrings.remove(0);
if(addedMetaStrings > 0) addedMetaStrings--;
return name;
}
private void addDecompressor(Compressor codec) {
- decompressors.addLast(codec);
+ decompressors.add(codec);
}
private void fetchArchive(boolean forData, Metadata meta, String
element, ArchiveExtractCallback callback, final ObjectContainer container,
ClientContext context) throws FetchException, MetadataParseException,
ArchiveFailureException, ArchiveRestartException {
@@ -824,13 +829,13 @@
returnBucket == null && key instanceof
ClientKey)
return new SimpleSingleFileFetcher((ClientKey)key,
maxRetries, ctx, requester, cb, isEssential, false, l, container, context);
if(key instanceof ClientKey)
- return new SingleFileFetcher(requester, cb,
clientMetadata, (ClientKey)key, uri.listMetaStrings(), uri, 0, ctx, actx, null,
null, maxRetries, recursionLevel, dontTellClientGet, l, isEssential,
returnBucket, isFinal, container, context);
+ return new SingleFileFetcher(requester, cb,
clientMetadata, (ClientKey)key, new ArrayList(uri.listMetaStrings()), uri, 0,
ctx, actx, null, null, maxRetries, recursionLevel, dontTellClientGet, l,
isEssential, returnBucket, isFinal, container, context);
else {
- return uskCreate(requester, cb, clientMetadata,
(USK)key, uri.listMetaStrings(), ctx, actx, maxRetries, recursionLevel,
dontTellClientGet, l, isEssential, returnBucket, isFinal, container, context);
+ return uskCreate(requester, cb, clientMetadata,
(USK)key, new ArrayList(uri.listMetaStrings()), ctx, actx, maxRetries,
recursionLevel, dontTellClientGet, l, isEssential, returnBucket, isFinal,
container, context);
}
}
- private static ClientGetState uskCreate(ClientRequester requester,
GetCompletionCallback cb, ClientMetadata clientMetadata, USK usk, LinkedList
metaStrings, FetchContext ctx, ArchiveContext actx, int maxRetries, int
recursionLevel, boolean dontTellClientGet, long l, boolean isEssential, Bucket
returnBucket, boolean isFinal, ObjectContainer container, ClientContext
context) throws FetchException {
+ private static ClientGetState uskCreate(ClientRequester requester,
GetCompletionCallback cb, ClientMetadata clientMetadata, USK usk, ArrayList
metaStrings, FetchContext ctx, ArchiveContext actx, int maxRetries, int
recursionLevel, boolean dontTellClientGet, long l, boolean isEssential, Bucket
returnBucket, boolean isFinal, ObjectContainer container, ClientContext
context) throws FetchException {
if(usk.suggestedEdition >= 0) {
// Return the latest known version but at least
suggestedEdition.
long edition = context.uskManager.lookup(usk);
@@ -874,7 +879,7 @@
final GetCompletionCallback cb;
final ClientMetadata clientMetadata;
final USK usk;
- final LinkedList metaStrings;
+ final ArrayList metaStrings;
final FetchContext ctx;
final ArchiveContext actx;
final int maxRetries;
@@ -884,7 +889,7 @@
final Bucket returnBucket;
final boolean persistent;
- public MyUSKFetcherCallback(ClientRequester requester,
GetCompletionCallback cb, ClientMetadata clientMetadata, USK usk, LinkedList
metaStrings, FetchContext ctx, ArchiveContext actx, int maxRetries, int
recursionLevel, boolean dontTellClientGet, long l, Bucket returnBucket, boolean
persistent) {
+ public MyUSKFetcherCallback(ClientRequester requester,
GetCompletionCallback cb, ClientMetadata clientMetadata, USK usk, ArrayList
metaStrings, FetchContext ctx, ArchiveContext actx, int maxRetries, int
recursionLevel, boolean dontTellClientGet, long l, Bucket returnBucket, boolean
persistent) {
this.parent = requester;
this.cb = cb;
this.clientMetadata = clientMetadata;
Modified: branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java
2008-06-28 18:18:05 UTC (rev 20855)
+++ branches/db4o/freenet/src/freenet/client/async/SplitFileFetcher.java
2008-06-28 18:37:28 UTC (rev 20856)
@@ -5,7 +5,7 @@
import java.io.IOException;
import java.io.OutputStream;
-import java.util.LinkedList;
+import java.util.ArrayList;
import com.db4o.ObjectContainer;
@@ -34,7 +34,7 @@
final FetchContext fetchContext;
final ArchiveContext archiveContext;
- final LinkedList decompressors;
+ final ArrayList decompressors;
final ClientMetadata clientMetadata;
final ClientRequester parent;
final GetCompletionCallback cb;
@@ -62,14 +62,14 @@
final boolean persistent;
public SplitFileFetcher(Metadata metadata, GetCompletionCallback rcb,
ClientRequester parent2,
- FetchContext newCtx, LinkedList decompressors,
ClientMetadata clientMetadata,
+ FetchContext newCtx, ArrayList decompressors2,
ClientMetadata clientMetadata,
ArchiveContext actx, int recursionLevel, Bucket
returnBucket, long token2, ObjectContainer container) throws FetchException,
MetadataParseException {
this.persistent = parent2.persistent();
this.finished = false;
this.returnBucket = returnBucket;
this.fetchContext = newCtx;
this.archiveContext = actx;
- this.decompressors = decompressors;
+ this.decompressors = decompressors2;
this.clientMetadata = clientMetadata;
this.cb = rcb;
this.recursionLevel = recursionLevel + 1;
@@ -297,7 +297,7 @@
container.activate(fetchContext, 1);
}
while(!decompressors.isEmpty()) {
- Compressor c = (Compressor)
decompressors.removeLast();
+ Compressor c = (Compressor)
decompressors.remove(decompressors.size()-1);
long maxLen =
Math.max(fetchContext.maxTempLength, fetchContext.maxOutputLength);
try {
Bucket out = returnBucket;
Modified: branches/db4o/freenet/src/freenet/keys/FreenetURI.java
===================================================================
--- branches/db4o/freenet/src/freenet/keys/FreenetURI.java 2008-06-28
18:18:05 UTC (rev 20855)
+++ branches/db4o/freenet/src/freenet/keys/FreenetURI.java 2008-06-28
18:37:28 UTC (rev 20856)
@@ -11,8 +11,10 @@
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
+import java.util.List;
import java.util.StringTokenizer;
import java.util.Vector;
@@ -501,7 +503,7 @@
}
}
- public FreenetURI addMetaStrings(LinkedList metaStrings) {
+ public FreenetURI addMetaStrings(List metaStrings) {
return addMetaStrings((String[]) metaStrings.toArray(new
String[metaStrings.size()]));
}
@@ -608,11 +610,11 @@
return extra;
}
- public LinkedList listMetaStrings() {
- LinkedList l = new LinkedList();
+ public ArrayList listMetaStrings() {
+ ArrayList l = new ArrayList(metaStr.length);
if(metaStr != null)
for(int i = 0; i < metaStr.length; i++)
- l.addLast(metaStr[i]);
+ l.add(metaStr[i]);
return l;
}
static final byte CHK = 1;