Author: toad
Date: 2008-06-25 20:01:00 +0000 (Wed, 25 Jun 2008)
New Revision: 20713

Modified:
   branches/db4o/freenet/src/freenet/client/async/SplitFileInserter.java
Log:
Activation and database updating

Modified: branches/db4o/freenet/src/freenet/client/async/SplitFileInserter.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SplitFileInserter.java       
2008-06-25 19:59:58 UTC (rev 20712)
+++ branches/db4o/freenet/src/freenet/client/async/SplitFileInserter.java       
2008-06-25 20:01:00 UTC (rev 20713)
@@ -243,6 +243,8 @@
                                container.activate(segments[i], 2);
                        segments[i].start(container, context);
                }
+               if(persistent)
+                       container.activate(parent, 1);

                if(countDataBlocks > 32)
                        parent.onMajorProgress();
@@ -268,9 +270,14 @@
                }
                if(encode) segment.forceEncode(container, context);
                if(ret) return;
+               if(persistent)
+                       container.activate(cb, 1);
                cb.onBlockSetFinished(this, container, context);
-               if(countDataBlocks > 32)
+               if(countDataBlocks > 32) {
+                       if(persistent)
+                               container.activate(parent, 1);
                        parent.onMajorProgress();
+               }
        }

        public void segmentHasURIs(SplitFileInserterSegment segment, 
ObjectContainer container, ClientContext context) {
@@ -283,6 +290,8 @@
                        }

                        for(int i=0;i<segments.length;i++) {
+                               if(persistent)
+                                       container.activate(segments[i], 1);
                                if(!segments[i].hasURIs()) {
                                        if(logMINOR) Logger.minor(this, 
"Segment does not have URIs: "+segments[i]);
                                        return;
@@ -318,8 +327,11 @@
                        // Error
                        fail(new 
InsertException(InsertException.INTERNAL_ERROR, "Missing URIs after encoding", 
null), container, context);
                        return;
-               } else
+               } else {
+                       if(persistent)
+                               container.activate(cb, 1);
                        cb.onMetadata(m, this, container, context);
+               }
        }

        private void fail(InsertException e, ObjectContainer container, 
ClientContext context) {
@@ -327,6 +339,10 @@
                        if(finished) return;
                        finished = true;
                }
+               if(persistent) {
+                       container.set(this);
+                       container.activate(cb, 1);
+               }
                cb.onFailure(e, this, container, context);
        }

@@ -378,11 +394,15 @@
        }

        public void segmentFinished(SplitFileInserterSegment segment, 
ObjectContainer container, ClientContext context) {
-               container.activate(this, 1);
+               if(persistent)
+                       container.activate(this, 1);
                if(logMINOR) Logger.minor(this, "Segment finished: "+segment, 
new Exception("debug"));
                boolean allGone = true;
-               if(countDataBlocks > 32)
+               if(countDataBlocks > 32) {
+                       if(persistent)
+                               container.activate(this, 1);
                        parent.onMajorProgress();
+               }
                synchronized(this) {
                        if(finished) {
                                if(logMINOR) Logger.minor(this, "Finished 
already");
@@ -404,11 +424,14 @@
                        }
                        finished = true;
                }
+               if(persistent)
+                       container.set(this);
                onAllFinished(container, context);
        }

        public void segmentFetchable(SplitFileInserterSegment segment, 
ObjectContainer container) {
-               container.activate(this, 1);
+               if(persistent)
+                       container.activate(this, 1);
                if(logMINOR) Logger.minor(this, "Segment fetchable: "+segment);
                synchronized(this) {
                        if(finished) return;
@@ -421,18 +444,24 @@
                        }
                        fetchable = true;
                }
+               if(persistent) {
+                       container.activate(cb, 1);
+                       container.set(this);
+               }
                cb.onFetchable(this, container);
        }

        private void onAllFinished(ObjectContainer container, ClientContext 
context) {
-               container.activate(this, 1);
+               if(persistent)
+                       container.activate(this, 1);
                if(logMINOR) Logger.minor(this, "All finished");
                try {
                        // Finished !!
                        FailureCodeTracker tracker = new 
FailureCodeTracker(true);
                        boolean allSucceeded = true;
                        for(int i=0;i<segments.length;i++) {
-                               container.activate(segments[i], 1);
+                               if(persistent)
+                                       container.activate(segments[i], 1);
                                InsertException e = segments[i].getException();
                                if(e == null) continue;
                                if(logMINOR) Logger.minor(this, "Failure on 
segment "+i+" : "+segments[i]+" : "+e, e);
@@ -441,6 +470,8 @@
                                        tracker.merge(e.errorCodes);
                                tracker.inc(e.getMode());
                        }
+                       if(persistent)
+                               container.activate(cb, 1);
                        if(allSucceeded)
                                cb.onSuccess(this, container, context);
                        else {
@@ -454,13 +485,19 @@
        }

        public void cancel(ObjectContainer container, ClientContext context) {
-               container.activate(this, 1);
+               if(persistent)
+                       container.activate(this, 1);
                synchronized(this) {
                        if(finished) return;
                        finished = true;
                }
-               for(int i=0;i<segments.length;i++)
+               if(persistent)
+                       container.set(this);
+               for(int i=0;i<segments.length;i++) {
+                       if(persistent)
+                               container.activate(segments[i], 1);
                        segments[i].cancel(container, context);
+               }
        }

        public void schedule(ObjectContainer container, ClientContext context) 
throws InsertException {
@@ -477,13 +514,15 @@

        /** Force the remaining blocks which haven't been encoded so far to be 
encoded ASAP. */
        public void forceEncode(ObjectContainer container, ClientContext 
context) {
-               container.activate(this, 1);
+               if(persistent)
+                       container.activate(this, 1);
                Logger.minor(this, "Forcing encode on "+this);
                synchronized(this) {
                        forceEncode = true;
                }
                for(int i=0;i<segments.length;i++) {
-                       container.activate(segments[i], 1);
+                       if(persistent)
+                               container.activate(segments[i], 1);
                        segments[i].forceEncode(container, context);
                }
        }


Reply via email to