Author: toad
Date: 2009-04-20 23:08:21 +0000 (Mon, 20 Apr 2009)
New Revision: 27126
Added:
trunk/freenet/src/freenet/client/events/SendingToNetworkEvent.java
trunk/freenet/src/freenet/node/fcp/SendingToNetworkMessage.java
Modified:
trunk/freenet/src/freenet/client/async/BaseManifestPutter.java
trunk/freenet/src/freenet/client/async/BaseSingleFileFetcher.java
trunk/freenet/src/freenet/client/async/ClientGetter.java
trunk/freenet/src/freenet/client/async/ClientPutter.java
trunk/freenet/src/freenet/client/async/ClientRequester.java
trunk/freenet/src/freenet/client/async/SimpleHealingQueue.java
trunk/freenet/src/freenet/client/async/SimpleManifestPutter.java
trunk/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
trunk/freenet/src/freenet/client/async/USKFetcher.java
trunk/freenet/src/freenet/client/async/USKFetcherWrapper.java
trunk/freenet/src/freenet/client/async/USKRetriever.java
trunk/freenet/src/freenet/node/fcp/ClientGet.java
Log:
New progress event/message: SendingToNetworkEvent, SendingToNetworkMessage
Sent when we realise that we won't be able to fetch every block from the
datastore.
Modified: trunk/freenet/src/freenet/client/async/BaseManifestPutter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/BaseManifestPutter.java
2009-04-20 22:31:47 UTC (rev 27125)
+++ trunk/freenet/src/freenet/client/async/BaseManifestPutter.java
2009-04-20 23:08:21 UTC (rev 27126)
@@ -611,6 +611,11 @@
return super.toString();
}
+ @Override
+ protected void innerToNetwork(ObjectContainer container,
ClientContext context) {
+ // Ignore
+ }
+
}
// if true top level metadata is a container
@@ -1863,5 +1868,11 @@
currentDir = dirStack.pop();
}
}
+
+ @Override
+ protected void innerToNetwork(ObjectContainer container, ClientContext
context) {
+ // Ignore
+ }
+
}
Modified: trunk/freenet/src/freenet/client/async/BaseSingleFileFetcher.java
===================================================================
--- trunk/freenet/src/freenet/client/async/BaseSingleFileFetcher.java
2009-04-20 22:31:47 UTC (rev 27125)
+++ trunk/freenet/src/freenet/client/async/BaseSingleFileFetcher.java
2009-04-20 23:08:21 UTC (rev 27126)
@@ -354,7 +354,13 @@
@Override
public void preRegister(ObjectContainer container, ClientContext
context, boolean toNetwork) {
- // Ignore
+ boolean deactivate = false;
+ if(persistent) {
+ deactivate = !container.ext().isActive(parent);
+ container.activate(parent, 1);
+ }
+ parent.toNetwork(container, context);
+ if(deactivate) container.deactivate(parent, 1);
}
}
Modified: trunk/freenet/src/freenet/client/async/ClientGetter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/ClientGetter.java 2009-04-20
22:31:47 UTC (rev 27125)
+++ trunk/freenet/src/freenet/client/async/ClientGetter.java 2009-04-20
23:08:21 UTC (rev 27126)
@@ -15,6 +15,7 @@
import freenet.client.FetchContext;
import freenet.client.FetchException;
import freenet.client.FetchResult;
+import freenet.client.events.SendingToNetworkEvent;
import freenet.client.events.SplitfileProgressEvent;
import freenet.keys.ClientKeyBlock;
import freenet.keys.FreenetURI;
@@ -311,6 +312,15 @@
}
ctx.eventProducer.produceEvent(new
SplitfileProgressEvent(this.totalBlocks, this.successfulBlocks,
this.failedBlocks, this.fatallyFailedBlocks, this.minSuccessBlocks,
this.blockSetFinalized), container, context);
}
+
+ @Override
+ protected void innerToNetwork(ObjectContainer container, ClientContext
context) {
+ if(persistent()) {
+ container.activate(ctx, 1);
+ container.activate(ctx.eventProducer, 1);
+ }
+ ctx.eventProducer.produceEvent(new SendingToNetworkEvent(),
container, context);
+ }
public void onBlockSetFinished(ClientGetState state, ObjectContainer
container, ClientContext context) {
if(logMINOR)
Modified: trunk/freenet/src/freenet/client/async/ClientPutter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/ClientPutter.java 2009-04-20
22:31:47 UTC (rev 27125)
+++ trunk/freenet/src/freenet/client/async/ClientPutter.java 2009-04-20
23:08:21 UTC (rev 27126)
@@ -12,6 +12,7 @@
import freenet.client.InsertContext;
import freenet.client.InsertException;
import freenet.client.Metadata;
+import freenet.client.events.SendingToNetworkEvent;
import freenet.client.events.SplitfileProgressEvent;
import freenet.keys.BaseClientKey;
import freenet.keys.FreenetURI;
@@ -318,6 +319,15 @@
ctx.eventProducer.produceEvent(new
SplitfileProgressEvent(this.totalBlocks, this.successfulBlocks,
this.failedBlocks, this.fatallyFailedBlocks, this.minSuccessBlocks,
this.blockSetFinalized), container, context);
}
+ @Override
+ protected void innerToNetwork(ObjectContainer container, ClientContext
context) {
+ if(persistent()) {
+ container.activate(ctx, 1);
+ container.activate(ctx.eventProducer, 1);
+ }
+ ctx.eventProducer.produceEvent(new SendingToNetworkEvent(),
container, context);
+ }
+
public void onBlockSetFinished(ClientPutState state, ObjectContainer
container, ClientContext context) {
if(Logger.shouldLog(Logger.MINOR, this))
Logger.minor(this, "Set finished", new
Exception("debug"));
Modified: trunk/freenet/src/freenet/client/async/ClientRequester.java
===================================================================
--- trunk/freenet/src/freenet/client/async/ClientRequester.java 2009-04-20
22:31:47 UTC (rev 27125)
+++ trunk/freenet/src/freenet/client/async/ClientRequester.java 2009-04-20
23:08:21 UTC (rev 27126)
@@ -87,6 +87,7 @@
protected int minSuccessBlocks;
/** Has totalBlocks stopped growing? */
protected boolean blockSetFinalized;
+ protected boolean sentToNetwork;
public void blockSetFinalized(ObjectContainer container, ClientContext
context) {
synchronized(this) {
@@ -171,6 +172,17 @@
}
public abstract void notifyClients(ObjectContainer container,
ClientContext context);
+
+ public void toNetwork(ObjectContainer container, ClientContext context)
{
+ synchronized(this) {
+ if(sentToNetwork) return;
+ sentToNetwork = true;
+ if(persistent()) container.store(this);
+ }
+ innerToNetwork(container, context);
+ }
+
+ protected abstract void innerToNetwork(ObjectContainer container,
ClientContext context);
/** Get client context object */
public RequestClient getClient() {
Modified: trunk/freenet/src/freenet/client/async/SimpleHealingQueue.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SimpleHealingQueue.java
2009-04-20 22:31:47 UTC (rev 27125)
+++ trunk/freenet/src/freenet/client/async/SimpleHealingQueue.java
2009-04-20 23:08:21 UTC (rev 27126)
@@ -137,6 +137,11 @@
public void onTransition(ClientGetState oldState, ClientGetState
newState, ObjectContainer container) {
// Ignore
}
+
+ @Override
+ protected void innerToNetwork(ObjectContainer container, ClientContext
context) {
+ // Ignore
+ }
@Override
public void cancel(ObjectContainer container, ClientContext context) {
Modified: trunk/freenet/src/freenet/client/async/SimpleManifestPutter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SimpleManifestPutter.java
2009-04-20 22:31:47 UTC (rev 27125)
+++ trunk/freenet/src/freenet/client/async/SimpleManifestPutter.java
2009-04-20 23:08:21 UTC (rev 27126)
@@ -507,6 +507,11 @@
return true;
}
+ @Override
+ protected void innerToNetwork(ObjectContainer container,
ClientContext context) {
+ // Ignore
+ }
+
}
private HashMap<String,Object> putHandlersByName;
@@ -1771,5 +1776,11 @@
}
putHandlersByName2.put(name, ph);
}
+
+ @Override
+ protected void innerToNetwork(ObjectContainer container, ClientContext
context) {
+ // Ignore
+ }
+
}
Modified: trunk/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
2009-04-20 22:31:47 UTC (rev 27125)
+++ trunk/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
2009-04-20 23:08:21 UTC (rev 27126)
@@ -866,7 +866,13 @@
@Override
public void preRegister(ObjectContainer container, ClientContext
context, boolean toNetwork) {
- // Ignore
+ boolean deactivate = false;
+ if(persistent) {
+ deactivate = !container.ext().isActive(parent);
+ container.activate(parent, 1);
+ }
+ parent.toNetwork(container, context);
+ if(deactivate) container.deactivate(parent, 1);
}
}
Modified: trunk/freenet/src/freenet/client/async/USKFetcher.java
===================================================================
--- trunk/freenet/src/freenet/client/async/USKFetcher.java 2009-04-20
22:31:47 UTC (rev 27125)
+++ trunk/freenet/src/freenet/client/async/USKFetcher.java 2009-04-20
23:08:21 UTC (rev 27126)
@@ -819,6 +819,8 @@
checkedDatastoreUpTo = lastCheck;
}
if(logMINOR) Logger.minor(this, "Checked
datastore, finishing registration for "+attempts.length+" checkers for
"+USKFetcher.this+" for "+origUSK);
+ if(attempts.length > 0)
+ parent.toNetwork(container, context);
for(int i=0;i<attempts.length;i++) {
long lastEd =
uskManager.lookupLatestSlot(origUSK);
// FIXME not sure this condition works,
test it!
Modified: trunk/freenet/src/freenet/client/async/USKFetcherWrapper.java
===================================================================
--- trunk/freenet/src/freenet/client/async/USKFetcherWrapper.java
2009-04-20 22:31:47 UTC (rev 27125)
+++ trunk/freenet/src/freenet/client/async/USKFetcherWrapper.java
2009-04-20 23:08:21 UTC (rev 27126)
@@ -76,4 +76,9 @@
public void cancel(ObjectContainer container, ClientContext context) {
super.cancel();
}
+
+ @Override
+ protected void innerToNetwork(ObjectContainer container, ClientContext
context) {
+ // Ignore
+ }
}
Modified: trunk/freenet/src/freenet/client/async/USKRetriever.java
===================================================================
--- trunk/freenet/src/freenet/client/async/USKRetriever.java 2009-04-20
22:31:47 UTC (rev 27125)
+++ trunk/freenet/src/freenet/client/async/USKRetriever.java 2009-04-20
23:08:21 UTC (rev 27126)
@@ -123,4 +123,9 @@
super.cancel();
}
+ @Override
+ protected void innerToNetwork(ObjectContainer container, ClientContext
context) {
+ // Ignore
+ }
+
}
Added: trunk/freenet/src/freenet/client/events/SendingToNetworkEvent.java
===================================================================
--- trunk/freenet/src/freenet/client/events/SendingToNetworkEvent.java
(rev 0)
+++ trunk/freenet/src/freenet/client/events/SendingToNetworkEvent.java
2009-04-20 23:08:21 UTC (rev 27126)
@@ -0,0 +1,15 @@
+package freenet.client.events;
+
+public class SendingToNetworkEvent implements ClientEvent {
+
+ final static int CODE = 0x0A;
+
+ public int getCode() {
+ return CODE;
+ }
+
+ public String getDescription() {
+ return "Sending to network";
+ }
+
+}
Modified: trunk/freenet/src/freenet/node/fcp/ClientGet.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientGet.java 2009-04-20 22:31:47 UTC
(rev 27125)
+++ trunk/freenet/src/freenet/node/fcp/ClientGet.java 2009-04-20 23:08:21 UTC
(rev 27126)
@@ -22,6 +22,7 @@
import freenet.client.async.DBJob;
import freenet.client.events.ClientEvent;
import freenet.client.events.ClientEventListener;
+import freenet.client.events.SendingToNetworkEvent;
import freenet.client.events.SplitfileProgressEvent;
import freenet.keys.FreenetURI;
import freenet.support.Fields;
@@ -54,6 +55,7 @@
// Verbosity bitmasks
private int VERBOSITY_SPLITFILE_PROGRESS = 1;
+ private int VERBOSITY_SENT_TO_NETWORK = 2;
// Stuff waiting for reconnection
/** Did the request succeed? Valid if finished. */
@@ -72,6 +74,8 @@
/** Last progress message. Not persistent - FIXME this will be made
persistent
* when we have proper persistence at the ClientGetter level. */
private SimpleProgressMessage progressPending;
+ /** Have we received a SendingToNetworkEvent? */
+ private boolean sentToNetwork;
/**
* Create one for a global-queued request not made by FCP.
@@ -499,10 +503,13 @@
handler.queue(msg);
}
- private void trySendProgress(SimpleProgressMessage msg,
FCPConnectionOutputHandler handler, ObjectContainer container) {
+ private void trySendProgress(FCPMessage msg, FCPConnectionOutputHandler
handler, ObjectContainer container) {
if(persistenceType != ClientRequest.PERSIST_CONNECTION) {
FCPMessage oldProgress = progressPending;
- progressPending = msg;
+ if(msg instanceof SimpleProgressMessage)
+ progressPending = (SimpleProgressMessage)msg;
+ else if(msg instanceof SendingToNetworkMessage)
+ sentToNetwork = true;
if(persistenceType == ClientRequest.PERSIST_FOREVER) {
container.store(this);
if(oldProgress != null) {
@@ -539,6 +546,8 @@
container.activate(progressPending, 5);
handler.queue(progressPending);
}
+ if(sentToNetwork)
+ handler.queue(new
SendingToNetworkMessage(identifier, global));
if(finished)
trySendDataFoundOrGetFailed(handler, container);
}
@@ -659,11 +668,18 @@
public void receive(ClientEvent ce, ObjectContainer container,
ClientContext context) {
// Don't need to lock, verbosity is final and finished is never
unset.
if(finished) return;
- if(!(((verbosity & VERBOSITY_SPLITFILE_PROGRESS) ==
VERBOSITY_SPLITFILE_PROGRESS) &&
- (ce instanceof SplitfileProgressEvent)))
- return;
- final SimpleProgressMessage progress =
- new SimpleProgressMessage(identifier, global,
(SplitfileProgressEvent)ce);
+ final FCPMessage progress;
+ if(ce instanceof SplitfileProgressEvent) {
+ if(!((verbosity & VERBOSITY_SPLITFILE_PROGRESS) ==
VERBOSITY_SPLITFILE_PROGRESS))
+ return;
+ progress =
+ new SimpleProgressMessage(identifier, global,
(SplitfileProgressEvent)ce);
+ } else if(ce instanceof SendingToNetworkEvent) {
+ if(!((verbosity & VERBOSITY_SENT_TO_NETWORK) ==
VERBOSITY_SENT_TO_NETWORK))
+ return;
+ progress = new SendingToNetworkMessage(identifier,
global);
+ }
+ else return; // Don't know what to do with event
// container may be null...
if(persistenceType == PERSIST_FOREVER && container == null) {
context.jobRunner.queue(new DBJob() {
Added: trunk/freenet/src/freenet/node/fcp/SendingToNetworkMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/SendingToNetworkMessage.java
(rev 0)
+++ trunk/freenet/src/freenet/node/fcp/SendingToNetworkMessage.java
2009-04-20 23:08:21 UTC (rev 27126)
@@ -0,0 +1,43 @@
+package freenet.node.fcp;
+
+import com.db4o.ObjectContainer;
+
+import freenet.node.Node;
+import freenet.support.SimpleFieldSet;
+
+public class SendingToNetworkMessage extends FCPMessage {
+
+ public static String NAME = "SendingToNetwork";
+ final String identifier;
+ final boolean global;
+
+ public SendingToNetworkMessage(String id, boolean global2) {
+ this.identifier = id;
+ this.global = global2;
+ }
+
+ @Override
+ public SimpleFieldSet getFieldSet() {
+ SimpleFieldSet fs = new SimpleFieldSet(true);
+ fs.putSingle("Identifier", identifier);
+ fs.put("Global", global);
+ return fs;
+ }
+
+ @Override
+ public String getName() {
+ return NAME;
+ }
+
+ @Override
+ public void removeFrom(ObjectContainer container) {
+ container.delete(this);
+ }
+
+ @Override
+ public void run(FCPConnectionHandler handler, Node node)
+ throws MessageInvalidException {
+ // Not possible
+ }
+
+}
_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs