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

Reply via email to