r26849 - in trunk/freenet/src/freenet: client/async clients/http/bookmark node/fcp node/updater
[email protected] Wed, 15 Apr 2009 17:06:14 +0000
| Newsgroups | gmane.network.freenet.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: toad
Date: 2009-04-15 17:06:14 +0000 (Wed, 15 Apr 2009)
New Revision: 26849
Modified:
trunk/freenet/src/freenet/client/async/SingleFileFetcher.java
trunk/freenet/src/freenet/client/async/USKCallback.java
trunk/freenet/src/freenet/client/async/USKFetcher.java
trunk/freenet/src/freenet/client/async/USKFetcherCallback.java
trunk/freenet/src/freenet/client/async/USKFetcherTag.java
trunk/freenet/src/freenet/client/async/USKInserter.java
trunk/freenet/src/freenet/client/async/USKManager.java
trunk/freenet/src/freenet/client/async/USKProxyCompletionCallback.java
trunk/freenet/src/freenet/client/async/USKRetriever.java
trunk/freenet/src/freenet/clients/http/bookmark/BookmarkManager.java
trunk/freenet/src/freenet/node/fcp/SubscribeUSK.java
trunk/freenet/src/freenet/node/updater/NodeUpdater.java
Log:
USKs: Track last known slot and last known good version separately. USKFetcher starts at the last known slot, but what we display in fproxy is the last known good version.
Modified: trunk/freenet/src/freenet/client/async/SingleFileFetcher.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SingleFileFetcher.java 2009-04-15 17:04:38 UTC (rev 26848)
+++ trunk/freenet/src/freenet/client/async/SingleFileFetcher.java 2009-04-15 17:06:14 UTC (rev 26849)
@@ -1075,11 +1075,11 @@
private static ClientGetState uskCreate(ClientRequester requester, GetCompletionCallback cb, USK usk, ArrayList<String> 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);
+ long edition = context.uskManager.lookupKnownGood(usk);
if(edition <= usk.suggestedEdition) {
// Background fetch - start background fetch first so can pick up updates in the datastore during registration.
context.uskManager.startTemporaryBackgroundFetcher(usk, context);
- edition = context.uskManager.lookup(usk);
+ edition = context.uskManager.lookupKnownGood(usk);
if(edition > usk.suggestedEdition) {
if(logMINOR) Logger.minor(SingleFileFetcher.class, "Redirecting to edition "+edition);
cb.onFailure(new FetchException(FetchException.PERMANENT_REDIRECT, usk.copy(edition).getURI().addMetaStrings(metaStrings)), null, container, context);
@@ -1140,7 +1140,7 @@
this.persistent = persistent;
}
- public void onFoundEdition(long l, USK newUSK, ObjectContainer container, ClientContext context, boolean metadata, short codec, byte[] data) {
+ public void onFoundEdition(long l, USK newUSK, ObjectContainer container, ClientContext context, boolean metadata, short codec, byte[] data, boolean newKnownGood, boolean newSlotToo) {
if(persistent)
container.activate(this, 2);
ClientSSK key = usk.getSSK(l);
Modified: trunk/freenet/src/freenet/client/async/USKCallback.java
===================================================================
--- trunk/freenet/src/freenet/client/async/USKCallback.java 2009-04-15 17:04:38 UTC (rev 26848)
+++ trunk/freenet/src/freenet/client/async/USKCallback.java 2009-04-15 17:06:14 UTC (rev 26849)
@@ -20,8 +20,15 @@
* The edition number.
* @param key
* A copy of the key with new edition set
+ * @param newKnownGood If the highest known good edition (which has actually been
+ * fetched with what it pointed to) has increased. Otherwise, the highest known
+ * SSK slot has been increased, from which searches will start, but we do not
+ * know whether it can actually be fetched successfully.
+ * @param newSlotToo If newKnownGood is set, this indicates whether it is also a
+ * new highest known SSK slot. If newKnownGood is not set, there is always a new
+ * highest known SSK slot.
*/
- void onFoundEdition(long l, USK key, ObjectContainer container, ClientContext context, boolean metadata, short codec, byte[] data);
+ void onFoundEdition(long l, USK key, ObjectContainer container, ClientContext context, boolean metadata, short codec, byte[] data, boolean newKnownGood, boolean newSlotToo);
/**
* Priority at which the polling should run normally.
Modified: trunk/freenet/src/freenet/client/async/USKFetcher.java
===================================================================
--- trunk/freenet/src/freenet/client/async/USKFetcher.java 2009-04-15 17:04:38 UTC (rev 26848)
+++ trunk/freenet/src/freenet/client/async/USKFetcher.java 2009-04-15 17:06:14 UTC (rev 26849)
@@ -251,7 +251,7 @@
void onDNF(USKAttempt att, ClientContext context) {
if(logMINOR) Logger.minor(this, "DNF: "+att);
boolean finished = false;
- long curLatest = uskManager.lookup(origUSK);
+ long curLatest = uskManager.lookupLatestSlot(origUSK);
synchronized(this) {
if(completed || cancelled) return;
lastFetchedEdition = Math.max(lastFetchedEdition, att.number);
@@ -270,7 +270,7 @@
private void finishSuccess(ClientContext context) {
if(backgroundPoll) {
- long valAtEnd = uskManager.lookup(origUSK);
+ long valAtEnd = uskManager.lookupLatestSlot(origUSK);
long end;
long now = System.currentTimeMillis();
synchronized(this) {
@@ -301,7 +301,7 @@
schedule(end-now, null, context);
} else {
uskManager.unsubscribe(origUSK, this, false);
- long ed = uskManager.lookup(origUSK);
+ long ed = uskManager.lookupLatestSlot(origUSK);
USKFetcherCallback[] cb;
synchronized(this) {
completed = true;
@@ -320,7 +320,7 @@
}
for(int i=0;i<cb.length;i++) {
try {
- cb[i].onFoundEdition(ed, origUSK.copy(ed), null, context, lastWasMetadata, lastCompressionCodec, data);
+ cb[i].onFoundEdition(ed, origUSK.copy(ed), null, context, lastWasMetadata, lastCompressionCodec, data, false, false);
} catch (Exception e) {
Logger.error(this, "An exception occured while dealing with a callback:"+cb[i].toString()+"\n"+e.getMessage(),e);
}
@@ -330,7 +330,7 @@
void onSuccess(USKAttempt att, boolean dontUpdate, ClientSSKBlock block, final ClientContext context) {
LinkedList<USKAttempt> l = null;
- final long lastEd = uskManager.lookup(origUSK);
+ final long lastEd = uskManager.lookupLatestSlot(origUSK);
long curLatest;
boolean decode = false;
synchronized(this) {
@@ -376,7 +376,7 @@
}
}
if(!dontUpdate)
- uskManager.update(origUSK, curLatest, context);
+ uskManager.updateSlot(origUSK, curLatest, context);
if(l == null) return;
final LinkedList<USKAttempt> toSched = l;
// If we schedule them here, we don't get icky recursion problems.
@@ -388,7 +388,7 @@
// We may be called recursively through onSuccess().
// So don't start obsolete requests.
USKAttempt a = i.next();
- last = uskManager.lookup(origUSK);
+ last = uskManager.lookupLatestSlot(origUSK);
if((last <= a.number) && !a.cancelled)
a.schedule(null, context);
else {
@@ -503,7 +503,7 @@
public void schedule(ObjectContainer container, ClientContext context) {
uskManager.subscribe(origUSK, this, false, parent.getClient());
USKAttempt[] attempts;
- long lookedUp = uskManager.lookup(origUSK);
+ long lookedUp = uskManager.lookupLatestSlot(origUSK);
synchronized(this) {
valueAtSchedule = Math.max(lookedUp, valueAtSchedule);
if(cancelled) return;
@@ -516,7 +516,7 @@
if(!cancelled) {
for(int i=0;i<attempts.length;i++) {
// Race conditions happen here and waste a lot more time than this simple check.
- long lastEd = uskManager.lookup(origUSK);
+ long lastEd = uskManager.lookupLatestSlot(origUSK);
if(keepLastData && lastEd == lookedUp)
lastEd--; // If we want the data, then get it for the known edition, so we always get the data, so USKInserter can compare it and return the old edition if it is identical.
if(attempts[i].number > lastEd)
@@ -647,9 +647,10 @@
throw new UnsupportedOperationException();
}
- public void onFoundEdition(long ed, USK key, ObjectContainer container, final ClientContext context, boolean metadata, short codec, byte[] data) {
+ public void onFoundEdition(long ed, USK key, ObjectContainer container, final ClientContext context, boolean metadata, short codec, byte[] data, boolean newKnownGood, boolean newSlotToo) {
+ if(newKnownGood && !newSlotToo) return; // Only interested in slots
LinkedList<USKAttempt> l = null;
- final long lastEd = uskManager.lookup(origUSK);
+ final long lastEd = uskManager.lookupLatestSlot(origUSK);
boolean decode = false;
synchronized(this) {
if(completed || cancelled) return;
@@ -695,7 +696,7 @@
// We may be called recursively through onSuccess().
// So don't start obsolete requests.
USKAttempt a = i.next();
- last = uskManager.lookup(origUSK);
+ last = uskManager.lookupLatestSlot(origUSK);
if((last <= a.number) && !a.cancelled)
a.schedule(null, context);
else {
Modified: trunk/freenet/src/freenet/client/async/USKFetcherCallback.java
===================================================================
--- trunk/freenet/src/freenet/client/async/USKFetcherCallback.java 2009-04-15 17:04:38 UTC (rev 26848)
+++ trunk/freenet/src/freenet/client/async/USKFetcherCallback.java 2009-04-15 17:06:14 UTC (rev 26849)
@@ -22,6 +22,6 @@
/** Found the latest edition. **This is terminal for a USKFetcherCallback**. It isn't for a USKCallback subscription.
* @param l The edition number.
* @param key The key. */
- void onFoundEdition(long l, USK key, ObjectContainer container, ClientContext context, boolean metadata, short codec, byte[] data);
+ void onFoundEdition(long l, USK key, ObjectContainer container, ClientContext context, boolean metadata, short codec, byte[] data, boolean newKnownGood, boolean newSlotToo);
}
Modified: trunk/freenet/src/freenet/client/async/USKFetcherTag.java
===================================================================
--- trunk/freenet/src/freenet/client/async/USKFetcherTag.java 2009-04-15 17:04:38 UTC (rev 26848)
+++ trunk/freenet/src/freenet/client/async/USKFetcherTag.java 2009-04-15 17:06:14 UTC (rev 26849)
@@ -179,7 +179,7 @@
return pollingPriorityProgress;
}
- public void onFoundEdition(final long l, final USK key, ObjectContainer container, ClientContext context, final boolean metadata, final short codec, final byte[] data) {
+ public void onFoundEdition(final long l, final USK key, ObjectContainer container, ClientContext context, final boolean metadata, final short codec, final byte[] data, final boolean newKnownGood, final boolean newSlotToo) {
synchronized(this) {
if(fetcher == null) {
Logger.error(this, "onFoundEdition but fetcher is null - isn't onFoundEdition() terminal for USKFetcherCallback's??", new Exception("debug"));
@@ -190,7 +190,7 @@
if(persistent) {
if(container != null) {
container.activate(callback, 1);
- callback.onFoundEdition(l, key, container, context, metadata, codec, data);
+ callback.onFoundEdition(l, key, container, context, metadata, codec, data, newKnownGood, newSlotToo);
container.deactivate(callback, 1);
removeFrom(container, context);
} else {
@@ -198,7 +198,7 @@
public void run(ObjectContainer container, ClientContext context) {
container.activate(callback, 1);
- callback.onFoundEdition(l, key, container, context, metadata, codec, data);
+ callback.onFoundEdition(l, key, container, context, metadata, codec, data, newKnownGood, newSlotToo);
container.deactivate(callback, 1);
removeFrom(container, context);
}
@@ -206,7 +206,7 @@
}, NativeThread.HIGH_PRIORITY, false);
}
} else {
- callback.onFoundEdition(l, key, container, context, metadata, codec, data);
+ callback.onFoundEdition(l, key, container, context, metadata, codec, data, newKnownGood, newSlotToo);
}
}
Modified: trunk/freenet/src/freenet/client/async/USKInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/USKInserter.java 2009-04-15 17:04:38 UTC (rev 26848)
+++ trunk/freenet/src/freenet/client/async/USKInserter.java 2009-04-15 17:06:14 UTC (rev 26849)
@@ -92,7 +92,7 @@
fetcher.schedule(container, context);
}
- public void onFoundEdition(long l, USK key, ObjectContainer container, ClientContext context, boolean lastContentWasMetadata, short codec, byte[] hisData) {
+ public void onFoundEdition(long l, USK key, ObjectContainer container, ClientContext context, boolean lastContentWasMetadata, short codec, byte[] hisData, boolean newKnownGood, boolean newSlotToo) {
boolean alreadyInserted = false;
synchronized(this) {
edition = Math.max(l, edition);
@@ -142,7 +142,7 @@
}
private void scheduleInsert(ObjectContainer container, ClientContext context) {
- long edNo = Math.max(edition, context.uskManager.lookup(pubUSK)+1);
+ long edNo = Math.max(edition, context.uskManager.lookupLatestSlot(pubUSK)+1);
if(persistent) {
container.activate(privUSK, 5);
container.activate(pubUSK, 5);
@@ -187,7 +187,7 @@
else {
if(Logger.shouldLog(Logger.MINOR, this))
Logger.minor(this, "URI should be "+targetURI+" actually is "+realURI);
- context.uskManager.update(pubUSK, edition, context);
+ context.uskManager.updateKnownGood(pubUSK, edition, context);
}
if(persistent) state.removeFrom(container, context);
if(freeData) {
Modified: trunk/freenet/src/freenet/client/async/USKManager.java
===================================================================
--- trunk/freenet/src/freenet/client/async/USKManager.java 2009-04-15 17:04:38 UTC (rev 26848)
+++ trunk/freenet/src/freenet/client/async/USKManager.java 2009-04-15 17:06:14 UTC (rev 26849)
@@ -25,9 +25,12 @@
*/
public class USKManager implements RequestClient {
- /** Latest version by blanked-edition-number USK */
- final HashMap<USK, Long> latestVersionByClearUSK;
+ /** Latest version successfully fetched by blanked-edition-number USK */
+ final HashMap<USK, Long> latestKnownGoodByClearUSK;
+ /** Latest SSK slot known to be by the author by blanked-edition-number USK */
+ final HashMap<USK, Long> latestSlotByClearUSK;
+
/** Subscribers by clear USK */
final HashMap<USK, USKCallback[]> subscribersByClearUSK;
@@ -49,7 +52,8 @@
public USKManager(NodeClientCore core) {
backgroundFetchContext = core.makeClient(RequestStarter.UPDATE_PRIORITY_CLASS).getFetchContext();
backgroundFetchContext.followRedirects = false;
- latestVersionByClearUSK = new HashMap<USK, Long>();
+ latestKnownGoodByClearUSK = new HashMap<USK, Long>();
+ latestSlotByClearUSK = new HashMap<USK, Long>();
subscribersByClearUSK = new HashMap<USK, USKCallback[]>();
fetchersByUSK = new HashMap<USK, USKFetcher>();
backgroundFetchersByClearUSK = new HashMap<USK, USKFetcher>();
@@ -63,16 +67,28 @@
}
/**
- * Look up the latest known version of the given USK.
+ * Look up the latest known working version of the given USK.
* @return The latest known edition number, or -1.
*/
- public synchronized long lookup(USK usk) {
- Long l = latestVersionByClearUSK.get(usk.clearCopy());
+ public synchronized long lookupKnownGood(USK usk) {
+ Long l = latestKnownGoodByClearUSK.get(usk.clearCopy());
if(l != null)
return l.longValue();
else return -1;
}
+ /**
+ * Look up the latest SSK slot, whether the data it links to has been successfully
+ * fetched or not, of the given USK.
+ * @return The latest known edition number, or -1.
+ */
+ public synchronized long lookupLatestSlot(USK usk) {
+ Long l = latestSlotByClearUSK.get(usk.clearCopy());
+ if(l != null)
+ return l.longValue();
+ else return -1;
+ }
+
public USKFetcherTag getFetcher(USK usk, FetchContext ctx, boolean keepLast, boolean persistent,
USKFetcherCallback callback, boolean ownFetchContext, ObjectContainer container, ClientContext context) {
return USKFetcherTag.create(usk, callback, context.nodeDBHandle, persistent, container, ctx, keepLast, 0, ownFetchContext);
@@ -139,34 +155,77 @@
if(sched != null) sched.schedule(null, context);
}
- void update(final USK origUSK, final long number, final ClientContext context) {
+ void updateKnownGood(final USK origUSK, final long number, final ClientContext context) {
boolean logMINOR = Logger.shouldLog(Logger.MINOR, this);
if(logMINOR) Logger.minor(this, "Updating "+origUSK.getURI()+" : "+number);
USK clear = origUSK.clearCopy();
final USKCallback[] callbacks;
+ boolean newSlot = false;
synchronized(this) {
- Long l = latestVersionByClearUSK.get(clear);
- if(logMINOR) Logger.minor(this, "Old value: "+l);
+ Long l = latestKnownGoodByClearUSK.get(clear);
+ if(logMINOR) Logger.minor(this, "Old known good: "+l);
if((l == null) || (number > l.longValue())) {
l = Long.valueOf(number);
- latestVersionByClearUSK.put(clear, l);
+ latestKnownGoodByClearUSK.put(clear, l);
if(logMINOR) Logger.minor(this, "Put "+number);
- } else return;
+ } else
+ return; // If it's in KnownGood, it will also be in Slot
+
+ l = latestSlotByClearUSK.get(clear);
+ if(logMINOR) Logger.minor(this, "Old slot: "+l);
+ if((l == null) || (number > l.longValue())) {
+ l = Long.valueOf(number);
+ latestSlotByClearUSK.put(clear, l);
+ if(logMINOR) Logger.minor(this, "Put "+number);
+ newSlot = true;
+ }
+
callbacks = subscribersByClearUSK.get(clear);
}
if(callbacks != null) {
// Run off-thread, because of locking, and because client callbacks may take some time
final USK usk = origUSK.copy(number);
+ final boolean newSlotToo = newSlot;
for(final USKCallback callback : callbacks)
context.mainExecutor.execute(new Runnable() {
public void run() {
callback.onFoundEdition(number, usk, null, // non-persistent
- context, false, (short)-1, null);
+ context, false, (short)-1, null, true, newSlotToo);
}
}, "USKManager callback executor for " +callback);
}
}
+ void updateSlot(final USK origUSK, final long number, final ClientContext context) {
+ boolean logMINOR = Logger.shouldLog(Logger.MINOR, this);
+ if(logMINOR) Logger.minor(this, "Updating "+origUSK.getURI()+" : "+number);
+ USK clear = origUSK.clearCopy();
+ final USKCallback[] callbacks;
+ synchronized(this) {
+ Long l = latestSlotByClearUSK.get(clear);
+ if(logMINOR) Logger.minor(this, "Old slot: "+l);
+ if((l == null) || (number > l.longValue())) {
+ l = Long.valueOf(number);
+ latestSlotByClearUSK.put(clear, l);
+ if(logMINOR) Logger.minor(this, "Put "+number);
+ } else
+ return;
+
+ callbacks = subscribersByClearUSK.get(clear);
+ }
+ if(callbacks != null) {
+ // Run off-thread, because of locking, and because client callbacks may take some time
+ final USK usk = origUSK.copy(number);
+ for(final USKCallback callback : callbacks)
+ context.mainExecutor.execute(new Runnable() {
+ public void run() {
+ callback.onFoundEdition(number, usk, null, // non-persistent
+ context, false, (short)-1, null, false, false);
+ }
+ }, "USKManager callback executor for " +callback);
+ }
+ }
+
/**
* Subscribe to a given USK. Callback will be notified when it is
* updated. Note that this does not imply that the USK will be
@@ -181,7 +240,9 @@
ed = -ed;
}
long curEd;
- curEd = lookup(origUSK);
+ curEd = lookupLatestSlot(origUSK);
+ long goodEd;
+ goodEd = lookupKnownGood(origUSK);
synchronized(this) {
USK clear = origUSK.clearCopy();
USKCallback[] callbacks = subscribersByClearUSK.get(clear);
@@ -206,8 +267,10 @@
f.addSubscriber(cb);
}
}
- if(curEd > ed)
- cb.onFoundEdition(curEd, origUSK.copy(curEd), null, context, false, (short)-1, null);
+ if(goodEd > ed)
+ cb.onFoundEdition(goodEd, origUSK.copy(curEd), null, context, false, (short)-1, null, true, curEd > ed);
+ else if(curEd > ed)
+ cb.onFoundEdition(curEd, origUSK.copy(curEd), null, context, false, (short)-1, null, false, false);
final USKFetcher fetcher = sched;
if(fetcher != null) {
executor.execute(new Runnable() {
Modified: trunk/freenet/src/freenet/client/async/USKProxyCompletionCallback.java
===================================================================
--- trunk/freenet/src/freenet/client/async/USKProxyCompletionCallback.java 2009-04-15 17:04:38 UTC (rev 26848)
+++ trunk/freenet/src/freenet/client/async/USKProxyCompletionCallback.java 2009-04-15 17:06:14 UTC (rev 26849)
@@ -27,7 +27,7 @@
container.activate(cb, 1);
container.activate(usk, 5);
}
- context.uskManager.update(usk, usk.suggestedEdition, context);
+ context.uskManager.updateKnownGood(usk, usk.suggestedEdition, context);
cb.onSuccess(result, state, container, context);
if(persistent) removeFrom(container);
}
Modified: trunk/freenet/src/freenet/client/async/USKRetriever.java
===================================================================
--- trunk/freenet/src/freenet/client/async/USKRetriever.java 2009-04-15 17:04:38 UTC (rev 26848)
+++ trunk/freenet/src/freenet/client/async/USKRetriever.java 2009-04-15 17:06:14 UTC (rev 26849)
@@ -34,7 +34,7 @@
this.cb = cb;
}
- public void onFoundEdition(long l, USK key, ObjectContainer container, ClientContext context, boolean metadata, short codec, byte[] data) {
+ public void onFoundEdition(long l, USK key, ObjectContainer container, ClientContext context, boolean metadata, short codec, byte[] data, boolean newKnownGood, boolean newSlotToo) {
if(l < 0) {
Logger.error(this, "Found negative edition: "+l+" for "+key+" !!!");
return;
Modified: trunk/freenet/src/freenet/clients/http/bookmark/BookmarkManager.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/bookmark/BookmarkManager.java 2009-04-15 17:04:38 UTC (rev 26848)
+++ trunk/freenet/src/freenet/clients/http/bookmark/BookmarkManager.java 2009-04-15 17:06:14 UTC (rev 26849)
@@ -97,7 +97,7 @@
private class USKUpdatedCallback implements USKCallback {
- public void onFoundEdition(long edition, USK key, ObjectContainer container, ClientContext context, boolean wasMetadata, short codec, byte[] data) {
+ public void onFoundEdition(long edition, USK key, ObjectContainer container, ClientContext context, boolean wasMetadata, short codec, byte[] data, boolean newKnownGood, boolean newSlotToo) {
List<BookmarkItem> items = MAIN_CATEGORY.getAllItems();
for(int i = 0; i < items.size(); i++) {
if(!"USK".equals(items.get(i).getKeyType()))
Modified: trunk/freenet/src/freenet/node/fcp/SubscribeUSK.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/SubscribeUSK.java 2009-04-15 17:04:38 UTC (rev 26848)
+++ trunk/freenet/src/freenet/node/fcp/SubscribeUSK.java 2009-04-15 17:06:14 UTC (rev 26849)
@@ -31,11 +31,12 @@
core.uskManager.subscribe(message.key, this, !message.dontPoll, handler.getRebootClient().lowLevelClient);
}
- public void onFoundEdition(long l, USK key, ObjectContainer container, ClientContext context, boolean wasMetadata, short codec, byte[] data) {
+ public void onFoundEdition(long l, USK key, ObjectContainer container, ClientContext context, boolean wasMetadata, short codec, byte[] data, boolean newKnownGood, boolean newSlotToo) {
if(handler.isClosed()) {
core.uskManager.unsubscribe(key, this, !dontPoll);
return;
}
+ if(newKnownGood && !newSlotToo) return;
FCPMessage msg = new SubscribedUSKUpdate(identifier, l, key);
handler.outputHandler.queue(msg);
}
Modified: trunk/freenet/src/freenet/node/updater/NodeUpdater.java
===================================================================
--- trunk/freenet/src/freenet/node/updater/NodeUpdater.java 2009-04-15 17:04:38 UTC (rev 26848)
+++ trunk/freenet/src/freenet/node/updater/NodeUpdater.java 2009-04-15 17:06:14 UTC (rev 26849)
@@ -97,7 +97,8 @@
}
}
- public void onFoundEdition(long l, USK key, ObjectContainer container, ClientContext context, boolean wasMetadata, short codec, byte[] data) {
+ public void onFoundEdition(long l, USK key, ObjectContainer container, ClientContext context, boolean wasMetadata, short codec, byte[] data, boolean newKnownGood, boolean newSlotToo) {
+ if(newKnownGood && !newSlotToo) return;
logMINOR = Logger.shouldLog(Logger.MINOR, this);
if(logMINOR)
Logger.minor(this, "Found edition " + l);