Author: toad
Date: 2007-08-11 14:32:37 +0000 (Sat, 11 Aug 2007)
New Revision: 14604
Modified:
trunk/freenet/src/freenet/client/FetchContext.java
trunk/freenet/src/freenet/client/HighLevelSimpleClientImpl.java
trunk/freenet/src/freenet/client/InsertContext.java
trunk/freenet/src/freenet/node/LoggingConfigHandler.java
trunk/freenet/src/freenet/node/Node.java
trunk/freenet/src/freenet/node/NodeClientCore.java
trunk/freenet/src/freenet/node/NodeStarter.java
trunk/freenet/src/freenet/node/simulator/RealNodePingTest.java
trunk/freenet/src/freenet/node/simulator/RealNodeRequestInsertTest.java
trunk/freenet/src/freenet/node/simulator/RealNodeRoutingTest.java
Log:
Infrastructure to use Executor's
Modified: trunk/freenet/src/freenet/client/FetchContext.java
===================================================================
--- trunk/freenet/src/freenet/client/FetchContext.java 2007-08-11 14:22:55 UTC
(rev 14603)
+++ trunk/freenet/src/freenet/client/FetchContext.java 2007-08-11 14:32:37 UTC
(rev 14604)
@@ -12,6 +12,7 @@
import freenet.client.events.SimpleEventProducer;
import freenet.crypt.RandomSource;
import freenet.node.Ticker;
+import freenet.support.Executor;
import freenet.support.api.BucketFactory;
/** Context for a Fetcher. Contains all the settings a Fetcher needs to know
about. */
@@ -53,6 +54,7 @@
public BlockSet blocks;
public Set allowedMIMETypes;
public final Ticker ticker;
+ public final Executor executor;
public FetchContext(long curMaxLength,
long curMaxTempLength, int maxMetadataSize, int
maxRecursionLevel, int maxArchiveRestarts, int maxArchiveLevels,
@@ -61,8 +63,10 @@
boolean allowSplitfiles, boolean followRedirects,
boolean localRequestOnly,
int maxDataBlocksPerSegment, int
maxCheckBlocksPerSegment,
RandomSource random, ArchiveManager archiveManager,
BucketFactory bucketFactory,
- ClientEventProducer producer, boolean
cacheLocalRequests, USKManager uskManager, HealingQueue hq, boolean
ignoreTooManyPathComponents, Ticker ticker) {
+ ClientEventProducer producer, boolean
cacheLocalRequests, USKManager uskManager,
+ HealingQueue hq, boolean ignoreTooManyPathComponents,
Ticker ticker, Executor executor) {
this.ticker = ticker;
+ this.executor = executor;
this.maxOutputLength = curMaxLength;
this.uskManager = uskManager;
this.maxTempLength = curMaxTempLength;
@@ -95,6 +99,7 @@
else
this.eventProducer = new SimpleEventProducer();
this.ticker = ctx.ticker;
+ this.executor = ctx.executor;
this.uskManager = ctx.uskManager;
this.ignoreTooManyPathComponents =
ctx.ignoreTooManyPathComponents;
this.blocks = ctx.blocks;
Modified: trunk/freenet/src/freenet/client/HighLevelSimpleClientImpl.java
===================================================================
--- trunk/freenet/src/freenet/client/HighLevelSimpleClientImpl.java
2007-08-11 14:22:55 UTC (rev 14603)
+++ trunk/freenet/src/freenet/client/HighLevelSimpleClientImpl.java
2007-08-11 14:32:37 UTC (rev 14604)
@@ -191,7 +191,7 @@
MAX_SPLITFILE_BLOCKS_PER_SEGMENT,
MAX_SPLITFILE_CHECK_BLOCKS_PER_SEGMENT,
random, archiveManager, bucketFactory,
globalEventProducer,
cacheLocalRequests, core.uskManager,
healingQueue,
- forceDontIgnoreTooManyPathComponents ? false :
core.ignoreTooManyPathComponents, core.getTicker());
+ forceDontIgnoreTooManyPathComponents ? false :
core.ignoreTooManyPathComponents, core.getTicker(), core.getExecutor());
}
public InsertContext getInsertContext(boolean forceNonPersistent) {
@@ -199,6 +199,6 @@
forceNonPersistent ? new
NullPersistentFileTracker() : persistentFileTracker,
random, INSERT_RETRIES,
CONSECUTIVE_RNFS_ASSUME_SUCCESS,
SPLITFILE_INSERT_THREADS,
SPLITFILE_BLOCKS_PER_SEGMENT, SPLITFILE_CHECK_BLOCKS_PER_SEGMENT,
- globalEventProducer, cacheLocalRequests,
core.uskManager, blockEncoder);
+ globalEventProducer, cacheLocalRequests,
core.uskManager, blockEncoder, core.getExecutor());
}
}
Modified: trunk/freenet/src/freenet/client/InsertContext.java
===================================================================
--- trunk/freenet/src/freenet/client/InsertContext.java 2007-08-11 14:22:55 UTC
(rev 14603)
+++ trunk/freenet/src/freenet/client/InsertContext.java 2007-08-11 14:32:37 UTC
(rev 14604)
@@ -8,6 +8,7 @@
import freenet.client.events.ClientEventProducer;
import freenet.client.events.SimpleEventProducer;
import freenet.crypt.RandomSource;
+import freenet.support.Executor;
import freenet.support.api.BucketFactory;
import freenet.support.io.NullPersistentFileTracker;
import freenet.support.io.PersistentFileTracker;
@@ -32,10 +33,11 @@
public final boolean cacheLocalRequests;
public final USKManager uskManager;
public final BackgroundBlockEncoder backgroundBlockEncoder;
+ public final Executor executor;
public InsertContext(BucketFactory bf, BucketFactory persistentBF,
PersistentFileTracker tracker, RandomSource random,
int maxRetries, int rnfsToSuccess, int maxThreads, int
splitfileSegmentDataBlocks, int splitfileSegmentCheckBlocks,
- ClientEventProducer eventProducer, boolean
cacheLocalRequests, USKManager uskManager, BackgroundBlockEncoder blockEncoder)
{
+ ClientEventProducer eventProducer, boolean
cacheLocalRequests, USKManager uskManager, BackgroundBlockEncoder blockEncoder,
Executor executor) {
this.bf = bf;
this.persistentFileTracker = tracker;
this.persistentBucketFactory = persistentBF;
@@ -51,6 +53,7 @@
this.splitfileSegmentCheckBlocks = splitfileSegmentCheckBlocks;
this.cacheLocalRequests = cacheLocalRequests;
this.backgroundBlockEncoder = blockEncoder;
+ this.executor = executor;
}
public InsertContext(InsertContext ctx, SimpleEventProducer producer,
boolean forceNonPersistent) {
@@ -69,6 +72,7 @@
this.splitfileSegmentCheckBlocks =
ctx.splitfileSegmentCheckBlocks;
this.cacheLocalRequests = ctx.cacheLocalRequests;
this.backgroundBlockEncoder = ctx.backgroundBlockEncoder;
+ this.executor = ctx.executor;
}
public InsertContext(InsertContext ctx, SimpleEventProducer producer) {
@@ -87,6 +91,7 @@
this.splitfileSegmentCheckBlocks =
ctx.splitfileSegmentCheckBlocks;
this.cacheLocalRequests = ctx.cacheLocalRequests;
this.backgroundBlockEncoder = ctx.backgroundBlockEncoder;
+ this.executor = ctx.executor;
}
}
Modified: trunk/freenet/src/freenet/node/LoggingConfigHandler.java
===================================================================
--- trunk/freenet/src/freenet/node/LoggingConfigHandler.java 2007-08-11
14:22:55 UTC (rev 14603)
+++ trunk/freenet/src/freenet/node/LoggingConfigHandler.java 2007-08-11
14:32:37 UTC (rev 14604)
@@ -10,6 +10,7 @@
import freenet.config.InvalidConfigValueException;
import freenet.config.OptionFormatException;
import freenet.config.SubConfig;
+import freenet.support.Executor;
import freenet.support.FileLoggerHook;
import freenet.support.Logger;
import freenet.support.LoggerHook;
@@ -55,9 +56,11 @@
private String logRotateInterval;
private long maxCachedLogBytes;
private int maxCachedLogLines;
+ private final Executor executor;
- public LoggingConfigHandler(SubConfig loggingConfig) throws
InvalidConfigValueException {
+ public LoggingConfigHandler(SubConfig loggingConfig, Executor executor)
throws InvalidConfigValueException {
this.config = loggingConfig;
+ this.executor = executor;
loggingConfig.register("enabled", true, 1, true, false,
"LogConfigHandler.enabled", "LogConfigHandler.enabledLong",
new BooleanCallback() {
Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java 2007-08-11 14:22:55 UTC (rev
14603)
+++ trunk/freenet/src/freenet/node/Node.java 2007-08-11 14:32:37 UTC (rev
14604)
@@ -85,6 +85,7 @@
import freenet.store.FreenetStore;
import freenet.store.KeyCollisionException;
import freenet.support.DoubleTokenBucket;
+import freenet.support.Executor;
import freenet.support.Fields;
import freenet.support.FileLoggerHook;
import freenet.support.HTMLEncoder;
@@ -324,6 +325,7 @@
// General stuff
+ public final Executor executor;
public final PacketSender ps;
final DNSRequester dnsr;
final NodeDispatcher dispatcher;
@@ -519,12 +521,13 @@
* @param the loggingHandler
* @throws NodeInitException If the node initialization fails.
*/
- Node(PersistentConfig config, RandomSource random,
LoggingConfigHandler lc, NodeStarter ns) throws NodeInitException {
+ Node(PersistentConfig config, RandomSource random,
LoggingConfigHandler lc, NodeStarter ns, Executor executor) throws
NodeInitException {
// Easy stuff
logMINOR = Logger.shouldLog(Logger.MINOR, this);
String tmp = "Initializing Node using Freenet Build
#"+Version.buildNumber()+" r"+Version.cvsRevision+" and freenet-ext Build
#"+NodeStarter.extBuildNumber+" r"+NodeStarter.extRevisionNumber+" with
"+System.getProperty("java.vm.vendor")+" JVM version
"+System.getProperty("java.vm.version")+" running on
"+System.getProperty("os.arch")+' '+System.getProperty("os.name")+'
'+System.getProperty("os.version");
Logger.normal(this, tmp);
System.out.println(tmp);
+ this.executor = executor;
nodeStarter=ns;
if(logConfigHandler != lc)
logConfigHandler=lc;
Modified: trunk/freenet/src/freenet/node/NodeClientCore.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeClientCore.java 2007-08-11 14:22:55 UTC
(rev 14603)
+++ trunk/freenet/src/freenet/node/NodeClientCore.java 2007-08-11 14:32:37 UTC
(rev 14604)
@@ -44,6 +44,7 @@
import freenet.node.useralerts.UserAlertManager;
import freenet.store.KeyCollisionException;
import freenet.support.Base64;
+import freenet.support.Executor;
import freenet.support.Logger;
import freenet.support.SimpleFieldSet;
import freenet.support.api.BooleanCallback;
@@ -273,7 +274,7 @@
healingQueue = new
SimpleHealingQueue(requestStarters.chkPutScheduler,
new InsertContext(tempBucketFactory,
tempBucketFactory, persistentTempBucketFactory,
random, 0, 2, 1, 0, 0, new
SimpleEventProducer(),
-
!Node.DONT_CACHE_LOCAL_REQUESTS, uskManager, backgroundBlockEncoder),
RequestStarter.PREFETCH_PRIORITY_CLASS, 512 /* FIXME make configurable */);
+
!Node.DONT_CACHE_LOCAL_REQUESTS, uskManager, backgroundBlockEncoder,
node.executor), RequestStarter.PREFETCH_PRIORITY_CLASS, 512 /* FIXME make
configurable */);
// FIXME remove this code, the new behaviour should be handled
by all clients
@@ -1063,6 +1064,10 @@
public Ticker getTicker() {
return node.ps;
}
+
+ public Executor getExecutor() {
+ return node.executor;
+ }
public File getPersistentTempDir() {
return persistentTempBucketFactory.getDir();
Modified: trunk/freenet/src/freenet/node/NodeStarter.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeStarter.java 2007-08-11 14:22:55 UTC
(rev 14603)
+++ trunk/freenet/src/freenet/node/NodeStarter.java 2007-08-11 14:32:37 UTC
(rev 14604)
@@ -16,7 +16,9 @@
import freenet.crypt.DiffieHellman;
import freenet.crypt.RandomSource;
import freenet.crypt.Yarrow;
+import freenet.support.Executor;
import freenet.support.Logger;
+import freenet.support.PooledExecutor;
import freenet.support.SimpleFieldSet;
import freenet.support.LoggerHook.InvalidThresholdException;
@@ -74,7 +76,7 @@
System.out.println("Usage: $ java freenet.node.Node
<configFile>");
return new Integer(-1);
}
-
+
File configFilename;
if(args.length == 0) {
System.out.println("Using default config filename freenet.ini");
@@ -86,7 +88,9 @@
// use dyndns hostnames
java.security.Security.setProperty("networkaddress.cache.ttl" , "0");
java.security.Security.setProperty("networkaddress.cache.negative.ttl"
, "0");
-
+
+ Executor executor = new PooledExecutor();
+
try{
cfg =
FreenetFilePersistentConfig.constructFreenetFilePersistentConfig(configFilename);
}catch(IOException e){
@@ -99,7 +103,7 @@
SubConfig loggingConfig = new SubConfig("logger", cfg);
try {
- logConfigHandler = new LoggingConfigHandler(loggingConfig);
+ logConfigHandler = new LoggingConfigHandler(loggingConfig,
executor);
} catch (InvalidConfigValueException e) {
System.err.println("Error: could not set up logging:
"+e.getMessage());
e.printStackTrace();
@@ -144,7 +148,7 @@
WrapperManager.signalStarting(500000);
try {
- node = new Node(cfg, random, logConfigHandler,this);
+ node = new Node(cfg, random, logConfigHandler,this, executor);
node.start(false);
System.out.println("Node initialization completed.");
} catch (NodeInitException e) {
@@ -325,7 +329,7 @@
*/
public static Node createTestNode(int port, String testName, boolean
doClient,
boolean doSwapping, boolean disableProbabilisticHTLs,
short maxHTL,
- int dropProb, int swapInterval, RandomSource random)
throws NodeInitException {
+ int dropProb, int swapInterval, RandomSource random,
Executor executor) throws NodeInitException {
File baseDir = new File(testName);
File portDir = new File(baseDir, Integer.toString(port));
@@ -354,7 +358,7 @@
PersistentConfig config = new PersistentConfig(configFS);
- return new Node(config, random, null, null);
+ return new Node(config, random, null, null, executor);
}
}
Modified: trunk/freenet/src/freenet/node/simulator/RealNodePingTest.java
===================================================================
--- trunk/freenet/src/freenet/node/simulator/RealNodePingTest.java
2007-08-11 14:22:55 UTC (rev 14603)
+++ trunk/freenet/src/freenet/node/simulator/RealNodePingTest.java
2007-08-11 14:32:37 UTC (rev 14604)
@@ -12,7 +12,9 @@
import freenet.node.NodeInitException;
import freenet.node.NodeStarter;
import freenet.node.PeerNode;
+import freenet.support.Executor;
import freenet.support.Logger;
+import freenet.support.PooledExecutor;
import freenet.support.LoggerHook.InvalidThresholdException;
/**
@@ -30,8 +32,9 @@
public static void main(String[] args) throws FSParseException,
PeerParseException, InterruptedException,
ReferenceSignatureVerificationException, NodeInitException,
InvalidThresholdException {
RandomSource random = NodeStarter.globalTestInit("pingtest");
// Create 2 nodes
- Node node1 = NodeStarter.createTestNode(5001, "pingtest", false,
false, true, Node.DEFAULT_MAX_HTL, 0, Node.DEFAULT_SWAP_INTERVAL, random);
- Node node2 = NodeStarter.createTestNode(5002, "pingtest", false,
false, true, Node.DEFAULT_MAX_HTL, 0, Node.DEFAULT_SWAP_INTERVAL, random);
+ Executor executor = new PooledExecutor();
+ Node node1 = NodeStarter.createTestNode(5001, "pingtest", false,
false, true, Node.DEFAULT_MAX_HTL, 0, Node.DEFAULT_SWAP_INTERVAL, random,
executor);
+ Node node2 = NodeStarter.createTestNode(5002, "pingtest", false,
false, true, Node.DEFAULT_MAX_HTL, 0, Node.DEFAULT_SWAP_INTERVAL, random,
executor);
// Connect
node1.connect(node2);
node2.connect(node1);
Modified:
trunk/freenet/src/freenet/node/simulator/RealNodeRequestInsertTest.java
===================================================================
--- trunk/freenet/src/freenet/node/simulator/RealNodeRequestInsertTest.java
2007-08-11 14:22:55 UTC (rev 14603)
+++ trunk/freenet/src/freenet/node/simulator/RealNodeRequestInsertTest.java
2007-08-11 14:32:37 UTC (rev 14604)
@@ -19,9 +19,11 @@
import freenet.node.Node;
import freenet.node.NodeInitException;
import freenet.node.NodeStarter;
+import freenet.support.Executor;
import freenet.support.Fields;
import freenet.support.HexUtil;
import freenet.support.Logger;
+import freenet.support.PooledExecutor;
import freenet.support.SimpleFieldSet;
import freenet.support.LoggerHook.InvalidThresholdException;
import freenet.support.math.BootstrappingDecayingRunningAverage;
@@ -49,9 +51,10 @@
DiffieHellman.init(random);
Node[] nodes = new Node[NUMBER_OF_NODES];
Logger.normal(RealNodeRoutingTest.class, "Creating nodes...");
+ Executor executor = new PooledExecutor();
for(int i=0;i<NUMBER_OF_NODES;i++) {
nodes[i] =
- NodeStarter.createTestNode(5001+i, wd, false, true, true,
MAX_HTL, 20 /* 5% */, Node.DEFAULT_SWAP_INTERVAL, random);
+ NodeStarter.createTestNode(5001+i, wd, false, true, true,
MAX_HTL, 20 /* 5% */, Node.DEFAULT_SWAP_INTERVAL, random, executor);
Logger.normal(RealNodeRoutingTest.class, "Created node "+i);
}
SimpleFieldSet refs[] = new SimpleFieldSet[NUMBER_OF_NODES];
Modified: trunk/freenet/src/freenet/node/simulator/RealNodeRoutingTest.java
===================================================================
--- trunk/freenet/src/freenet/node/simulator/RealNodeRoutingTest.java
2007-08-11 14:22:55 UTC (rev 14603)
+++ trunk/freenet/src/freenet/node/simulator/RealNodeRoutingTest.java
2007-08-11 14:32:37 UTC (rev 14604)
@@ -14,7 +14,9 @@
import freenet.node.Node;
import freenet.node.NodeInitException;
import freenet.node.NodeStarter;
+import freenet.support.Executor;
import freenet.support.Logger;
+import freenet.support.PooledExecutor;
import freenet.support.LoggerHook.InvalidThresholdException;
import freenet.support.math.BootstrappingDecayingRunningAverage;
import freenet.support.math.RunningAverage;
@@ -43,9 +45,10 @@
DiffieHellman.init(random);
Node[] nodes = new Node[NUMBER_OF_NODES];
Logger.normal(RealNodeRoutingTest.class, "Creating nodes...");
+ Executor executor = new PooledExecutor();
for(int i=0;i<NUMBER_OF_NODES;i++) {
nodes[i] =
- NodeStarter.createTestNode(5001+i, wd, false, true, true,
MAX_HTL, 0 /* no dropped packets */, /* Node.DEFAULT_SWAP_INTERVAL */ 0,
random);
+ NodeStarter.createTestNode(5001+i, wd, false, true, true,
MAX_HTL, 0 /* no dropped packets */, /* Node.DEFAULT_SWAP_INTERVAL */ 0,
random, executor);
Logger.normal(RealNodeRoutingTest.class, "Created node "+i);
}
Logger.normal(RealNodeRoutingTest.class, "Created "+NUMBER_OF_NODES+"
nodes");