I don't understand this commit. You never create a new BandwidthStatsContainer 
(apart from in restore), so why do you delete it and then store it?

Author: Artefact2 <artefact2 at gmail.com>  2009-08-23 20:51:48
Committer: Artefact2 <artefact2 at gmail.com>  2009-08-23 20:51:48
Parent: 3995d18cbda6151ab4033644f5158dfa54a9aa5c (Implement compatibility 
infobox functions (for plugins).)
Child:  dfcfab2677ea2b6b60aba45d97ed432ba844d675 (Implement total uptime (see 
bug #0002292).)
Branch: remotes/origin/master
Follows: build01232
Precedes: 

    Remove delay in stats page for persistant statistics.

------------- src/freenet/client/async/PersistentStatsPutter.java -------------
similarity index 70%
rename from src/freenet/client/async/BandwidthStatsPutter.java
rename to src/freenet/client/async/PersistentStatsPutter.java
index 464ffe9..4f359f3 100644
@@ -1,91 +1,99 @@
 /* This code is part of Freenet. It is distributed under the GNU General
  * Public License, version 2 (or at your option any later version). See
  * http://www.gnu.org/ for further details of the GPL. */
 package freenet.client.async;

 import com.db4o.ObjectContainer;
 import com.db4o.ObjectSet;
 import freenet.node.Node;
 import freenet.support.BandwidthStatsContainer;

 /**
- * Add/alter the BandwidthStatsContainer contained in the database, so that
+ * Add/alter the containers contained in the database, so that
  * the upload/download statistics persist.
  * 
  * @author Artefact2
  */
-public class BandwidthStatsPutter implements DBJob {
+public class PersistentStatsPutter implements DBJob {
        public static final int OFFSET = 60000;

        private Node n;
        private long latestNodeBytesOut = 0;
        private long latestNodeBytesIn = 0;
-       private BandwidthStatsContainer latest = new BandwidthStatsContainer();
+       private BandwidthStatsContainer latestBW = new 
BandwidthStatsContainer();
+       private BandwidthStatsContainer latestBWStored = new 
BandwidthStatsContainer();

-       public BandwidthStatsPutter(Node n) {
+       public PersistentStatsPutter(Node n) {
                this.n = n;
        }

        /**
         * Initiates that putter by fetching the latest container stored.
         * This should be called only once.
         *
         * @param container Database to use.
         */
        public void restorePreviousData(ObjectContainer container) {
                BandwidthStatsContainer highestBSC = null;

                ObjectSet<BandwidthStatsContainer> result = 
container.query(BandwidthStatsContainer.class);

                // Fetch the latest BSC
                for(BandwidthStatsContainer bsc : result) {
                        if(highestBSC == null) {
                                highestBSC = bsc;
                                continue;
                        }

                        if(highestBSC.creationTime < bsc.creationTime) {
                                highestBSC = bsc;
                        }
                }

                if(highestBSC == null) {
                        highestBSC = new BandwidthStatsContainer();
                }

                // Cleanup old stored items
                // BUT we keep our last BSC in case of a node crash before a 
new one
                // gets written.
                for(BandwidthStatsContainer bsc : result) {
                        if(!bsc.equals(highestBSC)) {
                                container.delete(bsc);
                        }
                }

-               this.latest = highestBSC;
+               this.latestBWStored = highestBSC;
+               this.latestBW = this.latestBWStored;

                container.commit();
        }

        public BandwidthStatsContainer getLatestData() {
-               return this.latest;
+               return this.latestBW;
        }

-       public boolean run(ObjectContainer container, ClientContext context) {
-               container.delete(this.latest);
-
-               // Update our BW values
+       public void updateData() {
+               // Update our values
                // 0 : total bytes out, 1 : total bytes in
                long[] nodeBW = this.n.collector.getTotalIO();
-               this.latest.totalBytesOut += nodeBW[0] - 
this.latestNodeBytesOut;
-               this.latest.totalBytesIn += nodeBW[1] - this.latestNodeBytesIn;
-               this.latest.creationTime = System.currentTimeMillis();
+               this.latestBW.totalBytesOut += nodeBW[0] - 
this.latestNodeBytesOut;
+               this.latestBW.totalBytesIn += nodeBW[1] - 
this.latestNodeBytesIn;
+               this.latestBW.creationTime = System.currentTimeMillis();
                this.latestNodeBytesOut = nodeBW[0];
                this.latestNodeBytesIn = nodeBW[1];
+       }

-               container.store(this.latest);
+       public boolean run(ObjectContainer container, ClientContext context) {
+               container.delete(this.latestBWStored);
+
+               this.updateData();
+
+               container.store(this.latestBW);
                container.commit();

+               this.latestBWStored = this.latestBW;
+
                return false;
        }
 }

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 835 bytes
Desc: This is a digitally signed message part.
URL: 
<https://emu.freenetproject.org/pipermail/devl/attachments/20090824/fde3164e/attachment.pgp>

Reply via email to