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();
+ }
+
+}