Author: toad
Date: 2008-06-14 14:32:03 +0000 (Sat, 14 Jun 2008)
New Revision: 20346

Modified:
   branches/db4o/freenet/src/freenet/node/fcp/FCPClient.java
   branches/db4o/freenet/src/freenet/node/fcp/FCPServer.java
Log:
Remove some old persistence code - we don't need to write downloads.dat.gz, we 
only need to read it.

Modified: branches/db4o/freenet/src/freenet/node/fcp/FCPClient.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/fcp/FCPClient.java   2008-06-14 
14:23:39 UTC (rev 20345)
+++ branches/db4o/freenet/src/freenet/node/fcp/FCPClient.java   2008-06-14 
14:32:03 UTC (rev 20346)
@@ -38,9 +38,10 @@
                        }
                };
                completionCallback = cb;
-               if(persistenceType == ClientRequest.PERSIST_FOREVER)
+               if(persistenceType == ClientRequest.PERSIST_FOREVER) {
+                       assert(root != null);
                        this.root = root;
-               else
+               } else
                        this.root = null;
        }

@@ -96,9 +97,6 @@
                                completedUnackedRequests.add(get);
                        }       
                }
-               if(get.isPersistentForever()) {
-                       server.forceStorePersistentRequests();
-               }
        }

        /**
@@ -165,7 +163,6 @@
                }
                if(completionCallback != null)
                        completionCallback.onRemove(req);
-               server.forceStorePersistentRequests();
        }

        public boolean hasPersistentRequests() {

Modified: branches/db4o/freenet/src/freenet/node/fcp/FCPServer.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/fcp/FCPServer.java   2008-06-14 
14:23:39 UTC (rev 20345)
+++ branches/db4o/freenet/src/freenet/node/fcp/FCPServer.java   2008-06-14 
14:32:03 UTC (rev 20346)
@@ -80,32 +80,19 @@
         * MUST ALWAYS BE THE OUTERMOST LOCK.
         */
        private final Object persistenceSync = new Object();
-       private FCPServerPersister persister;
        private boolean haveLoadedPersistentRequests;
-       private long persistenceInterval;
        final FetchContext defaultFetchContext;
        public InsertContext defaultInsertContext;
        public static final int QUEUE_MAX_RETRIES = -1;
        public static final long QUEUE_MAX_DATA_SIZE = Long.MAX_VALUE;
-       private boolean canStartPersister = false;
        private boolean assumeDownloadDDAIsAllowed;
        private boolean assumeUploadDDAIsAllowed;
        private boolean hasFinishedStart;

-       private void startPersister() {
-               node.executor.execute(persister = new FCPServerPersister(), 
"FCP request persister");
-       }
-
-       private void killPersister() {
-               persister.kill();
-               persister = null;
-       }
-
-       public FCPServer(String ipToBindTo, String allowedHosts, String 
allowedHostsFullAccess, int port, Node node, NodeClientCore core, boolean 
persistentDownloadsEnabled, String persistentDownloadsDir, long 
persistenceInterval, boolean isEnabled, boolean assumeDDADownloadAllowed, 
boolean assumeDDAUploadAllowed, ObjectContainer container) throws IOException, 
InvalidConfigValueException {
+       public FCPServer(String ipToBindTo, String allowedHosts, String 
allowedHostsFullAccess, int port, Node node, NodeClientCore core, boolean 
persistentDownloadsEnabled, String persistentDownloadsDir, boolean isEnabled, 
boolean assumeDDADownloadAllowed, boolean assumeDDAUploadAllowed, 
ObjectContainer container) throws IOException, InvalidConfigValueException {
                this.bindTo = ipToBindTo;
                this.allowedHosts=allowedHosts;
                this.allowedHostsFullAccess = new 
AllowedHosts(allowedHostsFullAccess);
-               this.persistenceInterval = persistenceInterval;
                this.port = port;
                this.enabled = isEnabled;
                this.enablePersistentDownloads = persistentDownloadsEnabled;
@@ -326,21 +313,6 @@

        }

-       static class PersistentDownloadsEnabledCallback implements 
BooleanCallback {
-               
-               FCPServer server;
-               
-               public boolean get() {
-                       return server.persistentDownloadsEnabled();
-               }
-               
-               public void set(boolean set) {
-                       if(server.persistentDownloadsEnabled() != set)
-                               server.setPersistentDownloadsEnabled(set);
-               }
-               
-       }
-
        static class PersistentDownloadsFileCallback implements StringCallback {

                FCPServer server;
@@ -356,25 +328,6 @@
                }
        }

-       static class PersistentDownloadsIntervalCallback implements 
LongCallback {
-               
-               FCPServer server;
-               
-               public long get() {
-                       return server.persistenceInterval;
-               }
-               
-               public void set(long value) {
-                       server.persistenceInterval = value;
-                       FCPServerPersister p = server.persister;
-                       if(p != null) {
-                               synchronized(p) {
-                                       p.notifyAll();
-                               }
-                       }
-               }
-       }
-       
        static class AssumeDDADownloadIsAllowedCallback implements 
BooleanCallback{
                FCPServer server;

@@ -402,7 +355,7 @@
        }


-       public static FCPServer maybeCreate(Node node, NodeClientCore core, 
Config config) throws IOException, InvalidConfigValueException {
+       public static FCPServer maybeCreate(Node node, NodeClientCore core, 
Config config, ObjectContainer container) throws IOException, 
InvalidConfigValueException {
                SubConfig fcpConfig = new SubConfig("fcp", config);
                short sortOrder = 0;
                fcpConfig.register("enabled", true, sortOrder++, true, false, 
"FcpServer.isEnabled", "FcpServer.isEnabledLong", new FCPEnabledCallback(core));
@@ -411,15 +364,12 @@
                fcpConfig.register("bindTo", NetworkInterface.DEFAULT_BIND_TO, 
sortOrder++, true, true, "FcpServer.bindTo", "FcpServer.bindToLong", new 
FCPBindtoCallback(core));
                fcpConfig.register("allowedHosts", 
NetworkInterface.DEFAULT_BIND_TO, sortOrder++, true, true, 
"FcpServer.allowedHosts", "FcpServer.allowedHostsLong", new 
FCPAllowedHostsCallback(core));
                fcpConfig.register("allowedHostsFullAccess", 
NetworkInterface.DEFAULT_BIND_TO, sortOrder++, true, true, 
"FcpServer.allowedHostsFullAccess", "FcpServer.allowedHostsFullAccessLong", new 
FCPAllowedHostsFullAccessCallback(core));
-               PersistentDownloadsEnabledCallback cb1;
                PersistentDownloadsFileCallback cb2;
-               PersistentDownloadsIntervalCallback cb3;
-               fcpConfig.register("persistentDownloadsEnabled", true, 
sortOrder++, true, true, "FcpServer.enablePersistentDownload", 
"FcpServer.enablePersistentDownloadLong", cb1 = new 
PersistentDownloadsEnabledCallback());
+               fcpConfig.register("persistentDownloadsEnabled", true, 
sortOrder++, true, true, "FcpServer.enablePersistentDownload", 
"FcpServer.enablePersistentDownloadLong", (BooleanCallback) null);
                fcpConfig.register("persistentDownloadsFile", "downloads.dat", 
sortOrder++, true, false, "FcpServer.filenameToStorePData", 
"FcpServer.filenameToStorePDataLong", cb2 = new 
PersistentDownloadsFileCallback());
-               fcpConfig.register("persistentDownloadsInterval", (5*60*1000), 
sortOrder++, true, false, "FcpServer.intervalBetweenWrites", 
"FcpServer.intervalBetweenWritesLong", cb3 = new 
PersistentDownloadsIntervalCallback());
+               fcpConfig.register("persistentDownloadsInterval", (5*60*1000), 
sortOrder++, true, false, "FcpServer.intervalBetweenWrites", 
"FcpServer.intervalBetweenWritesLong", (IntCallback) null);
                String persistentDownloadsDir = 
fcpConfig.getString("persistentDownloadsFile");
                boolean persistentDownloadsEnabled = 
fcpConfig.getBoolean("persistentDownloadsEnabled");                
-               long persistentDownloadsInterval = 
fcpConfig.getLong("persistentDownloadsInterval");

                AssumeDDADownloadIsAllowedCallback cb4;
                AssumeDDAUploadIsAllowedCallback cb5;
@@ -430,12 +380,10 @@
                        ssl = fcpConfig.getBoolean("ssl");
                }

-               FCPServer fcp = new FCPServer(fcpConfig.getString("bindTo"), 
fcpConfig.getString("allowedHosts"), 
fcpConfig.getString("allowedHostsFullAccess"), fcpConfig.getInt("port"), node, 
core, persistentDownloadsEnabled, persistentDownloadsDir, 
persistentDownloadsInterval, fcpConfig.getBoolean("enabled"), 
fcpConfig.getBoolean("assumeDownloadDDAIsAllowed"), 
fcpConfig.getBoolean("assumeUploadDDAIsAllowed"));
+               FCPServer fcp = new FCPServer(fcpConfig.getString("bindTo"), 
fcpConfig.getString("allowedHosts"), 
fcpConfig.getString("allowedHostsFullAccess"), fcpConfig.getInt("port"), node, 
core, persistentDownloadsEnabled, persistentDownloadsDir, 
fcpConfig.getBoolean("enabled"), 
fcpConfig.getBoolean("assumeDownloadDDAIsAllowed"), 
fcpConfig.getBoolean("assumeUploadDDAIsAllowed"), container);

                if(fcp != null) {
-                       cb1.server = fcp;
                        cb2.server = fcp;
-                       cb3.server = fcp;
                        cb4.server = fcp;
                        cb5.server = fcp;
                }
@@ -495,34 +443,13 @@
                return L10n.getString("FcpServer."+key, pattern, value);
        }

-       public void setPersistentDownloadsEnabled(boolean set) {
-               synchronized(this) {
-                       if(enablePersistentDownloads == set) return;
-                       enablePersistentDownloads = set;
-               }
-               synchronized(persistenceSync) {
-                       if(set) {
-                               if(!haveLoadedPersistentRequests)
-                                       loadPersistentRequests();
-                               if(canStartPersister)
-                                       startPersister();
-                       } else {
-                               killPersister();
-                       }
-               }
-       }
-
-       public synchronized boolean persistentDownloadsEnabled() {
-               return enablePersistentDownloads;
-       }
-
        public FCPClient registerRebootClient(String name, NodeClientCore core, 
FCPConnectionHandler handler) {
                FCPClient oldClient;
                synchronized(this) {
                        oldClient = (FCPClient) clientsByName.get(name);
                        if(oldClient == null) {
                                // Create new client
-                               FCPClient client = new FCPClient(name, handler, 
false, null, ClientRequest.PERSIST_REBOOT);
+                               FCPClient client = new FCPClient(name, handler, 
false, null, ClientRequest.PERSIST_REBOOT, null);
                                clientsByName.put(name, client);
                                return client;
                        } else {
@@ -545,8 +472,8 @@
                return oldClient;
        }

-       public FCPClient registerForeverClient(String name, NodeClientCore 
core, FCPConnectionHandler handler) {
-               return persistentRoot.registerForeverClient(name, core, 
handler, this);
+       public FCPClient registerForeverClient(String name, NodeClientCore 
core, FCPConnectionHandler handler, ObjectContainer container) {
+               return persistentRoot.registerForeverClient(name, core, 
handler, this, container);
        }

        public void unregisterClient(FCPClient client) {
@@ -556,138 +483,6 @@
                }
        }

-       class FCPServerPersister implements Runnable {
-
-               private boolean killed;
-               private boolean storeNow;
-               
-               public void force() {
-                       synchronized(this) {
-                               storeNow = true;
-                               notifyAll();
-                       }
-               }
-               
-               void kill() {
-                       synchronized(this) {
-                               killed = true;
-                               notifyAll();
-                       }
-               }
-               
-               public void run() {
-                   freenet.support.Logger.OSThread.logPID(this);
-                       while(true) {
-                               long startTime = System.currentTimeMillis();
-                               try {
-                                       storePersistentRequests();
-                               } catch (Throwable t) {
-                                       Logger.error(this, "Caught "+t, t);
-                               }
-                               long delta = System.currentTimeMillis() - 
startTime;
-                               synchronized(this) {
-                                       long delay = 
Math.max(persistenceInterval, delta * 20);
-                                       if(killed) return;
-                                       startTime = System.currentTimeMillis();
-                                       long now;
-                                       while(((now = 
System.currentTimeMillis()) < startTime + delay) && !storeNow) {
-                                               try {
-                                                       long wait = 
Math.max((startTime + delay) - now, Integer.MAX_VALUE);
-                                                       if(wait > 0)
-                                                               
wait(Math.min(wait, 5000));
-                                               } catch (InterruptedException 
e) {
-                                                       // Ignore
-                                               }
-                                               if(killed) return;
-                                       }
-                                       storeNow = false;
-                               }
-                       }
-               }
-               
-       }
-
-       public void forceStorePersistentRequests() {
-               if(logMINOR) Logger.minor(this, "Forcing store persistent 
requests");
-               if(!enablePersistentDownloads) return;
-               if(persister != null) {
-                       persister.force();
-               } else {
-                       if(canStartPersister)
-                               Logger.error(this, "Persister not running, 
cannot store persistent requests");
-               }
-       }
-       
-       /** Store all persistent requests to disk */
-       private void storePersistentRequests() {
-               logMINOR = Logger.shouldLog(Logger.MINOR, this);
-               if(logMINOR) Logger.minor(this, "Storing persistent requests");
-               ClientRequest[] persistentRequests = getPersistentRequests();
-               if(logMINOR) Logger.minor(this, "Persistent requests count: 
"+persistentRequests.length);
-               LinkedList toFree = null;
-               try {
-                       synchronized(persistenceSync) {
-                               toFree = 
core.persistentTempBucketFactory.grabBucketsToFree();
-                                
-                               File compressedTemp = new 
File(persistentDownloadsTempFile+".gz");
-                               File compressedFinal = new 
File(persistentDownloadsFile.toString()+".gz");
-                               compressedTemp.delete();
-                
-                               FileOutputStream fos = null;
-                               BufferedOutputStream bos = null;
-                               GZIPOutputStream gos = null;
-                               OutputStreamWriter osw = null;
-                               BufferedWriter w = null;
-                               
-                               try {
-                                       fos = new 
FileOutputStream(compressedTemp);
-                                       bos = new BufferedOutputStream(fos);
-                                       gos = new GZIPOutputStream(bos);
-                                       osw = new OutputStreamWriter(gos, 
"UTF-8");
-                                       w = new BufferedWriter(osw);
-                                       
w.write(Integer.toString(persistentRequests.length)+ '\n');
-                                       for(int 
i=0;i<persistentRequests.length;i++)
-                                               persistentRequests[i].write(w);
-                                       
-                                       w.flush();
-                                       w.close();
-                                       FileUtil.renameTo(compressedTemp, 
compressedFinal);
-                               } catch (IOException e) {
-                                       Logger.error(this, "Cannot write 
persistent requests to disk: "+e);
-                               } finally {
-                                       Closer.close(w);
-                                       Closer.close(osw);
-                                       Closer.close(gos);
-                                       Closer.close(bos);
-                                       Closer.close(fos);
-                               }
-                       }
-                       if(logMINOR) Logger.minor(this, "Stored persistent 
requests");
-               } finally {
-                       if(toFree != null) {
-                               long freedBuckets = 0;
-                               Iterator it = toFree.iterator();
-                               while(it.hasNext()) {
-                                       Bucket current = (Bucket) it.next();
-                                       try {
-                                               current.free();
-                                               freedBuckets++;
-                                       } catch(Throwable t) {
-                                               try {
-                                                       
System.err.println("Caught " + t + " trying to free bucket " + current);
-                                                       t.printStackTrace();
-                                               } catch(Throwable t1) { /* 
ignore */ }
-                                       }
-                               }
-                               // Help it to be collected
-                               toFree.clear();
-                               toFree = null;
-                               if(logMINOR)
-                                       Logger.minor(this, "We have freed 
"+freedBuckets+" persistent buckets");
-                       }
-               }
-       }
-
        private void loadPersistentRequests() {
                Logger.normal(this, "Loading persistent requests...");
                FileInputStream fis = null;
@@ -754,19 +549,6 @@
                }
        }

-       private ClientRequest[] getPersistentRequests() {
-               Vector v = new Vector();
-               synchronized(this) {
-                       Iterator i = clientsByName.values().iterator();
-                       while(i.hasNext()) {
-                               FCPClient client = (FCPClient) (i.next());
-                               client.addPersistentRequests(v, true);
-                       }
-                       globalClient.addPersistentRequests(v, true);
-               }
-               return (ClientRequest[]) v.toArray(new ClientRequest[v.size()]);
-       }
-
        public ClientRequest[] getGlobalRequests() {
                Vector v = new Vector();
                globalClient.addPersistentRequests(v, false);


Reply via email to