Author: toad
Date: 2008-05-20 22:54:15 +0000 (Tue, 20 May 2008)
New Revision: 19989

Added:
   
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerNonPersistent.java
Modified:
   branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
Log:
Create a class to put non-persistent request queue etc in.

Modified: 
branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2008-05-20 22:45:59 UTC (rev 19988)
+++ branches/db4o/freenet/src/freenet/client/async/ClientRequestScheduler.java  
2008-05-20 22:54:15 UTC (rev 19989)
@@ -34,6 +34,7 @@
 public class ClientRequestScheduler implements RequestScheduler {

        private final ClientRequestSchedulerCore schedCore;
+       private final ClientRequestSchedulerNonPersistent schedTransient;

        private static boolean logMINOR;

@@ -99,6 +100,7 @@
        public ClientRequestScheduler(boolean forInserts, boolean forSSKs, 
RandomSource random, RequestStarter starter, Node node, NodeClientCore core, 
SubConfig sc, String name) {
                this.selectorContainer = node.dbServer.openClient();
                schedCore = ClientRequestSchedulerCore.create(node, forInserts, 
forSSKs, selectorContainer);
+               schedTransient = new ClientRequestSchedulerNonPersistent(this);
                this.starter = starter;
                this.random = random;
                this.node = node;

Added: 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerNonPersistent.java
===================================================================
--- 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerNonPersistent.java
                             (rev 0)
+++ 
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerNonPersistent.java
     2008-05-20 22:54:15 UTC (rev 19989)
@@ -0,0 +1,47 @@
+/* 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 java.util.HashMap;
+import java.util.LinkedList;
+
+import freenet.node.RequestStarter;
+import freenet.support.SortedVectorByNumber;
+
+/**
+ * Parallel scheduler structures for non-persistent requests.
+ * @author toad
+ */
+class ClientRequestSchedulerNonPersistent {
+       
+       // These are package-visible so that ClientRequestSchedulerCore can 
conveniently access them.
+       // THEY SHOULD NOT BE ACCESSED DIRECTLY BY ANY OTHER CLASS!
+       
+       final HashMap allRequestsByClientRequest;
+       /**
+        * Structure:
+        * array (by priority) -> // one element per possible priority
+        * SortedVectorByNumber (by # retries) -> // contains each current 
#retries
+        * RandomGrabArray // contains each element, allows fast 
fetch-and-drop-a-random-element
+        * 
+        * To speed up fetching, a RGA or SVBN must only exist if it is 
non-empty.
+        */
+       final SortedVectorByNumber[] priorities;
+       /** All pending gets by key. Used to automatically satisfy pending 
requests when either the key is fetched by
+        * an overlapping request, or it is fetched by a request from another 
node. Operations on this are synchronized on
+        * itself. */
+       final HashMap /* <Key, SendableGet[]> */ pendingKeys;
+       final LinkedList /* <BaseSendableGet> */ recentSuccesses;
+       
+       ClientRequestSchedulerNonPersistent(ClientRequestScheduler sched) {
+               allRequestsByClientRequest = new HashMap();
+               priorities = new 
SortedVectorByNumber[RequestStarter.NUMBER_OF_PRIORITY_CLASSES];
+               if(!sched.isInsertScheduler)
+                       pendingKeys = new HashMap();
+               else
+                       pendingKeys = null;
+               recentSuccesses = new LinkedList();
+       }
+
+}


Reply via email to