protected internal virtual void Start(int numNodes, double runTimeSec, int maxSearcherAgeSeconds)
{
EndTime = DateTime.UtcNow.AddSeconds(runTimeSec);
this.MaxSearcherAgeSeconds = maxSearcherAgeSeconds;
Nodes = new NodeState[numNodes];
for (int nodeID = 0; nodeID < numNodes; nodeID++)
{
Nodes[nodeID] = new NodeState(this, Random(), nodeID, numNodes);
}
long[] nodeVersions = new long[Nodes.Length];
for (int nodeID = 0; nodeID < numNodes; nodeID++)
{
IndexSearcher s = Nodes[nodeID].Mgr.Acquire();
try
{
nodeVersions[nodeID] = Nodes[nodeID].Searchers.Record(s);
}
finally
{
Nodes[nodeID].Mgr.Release(s);
}
}
for (int nodeID = 0; nodeID < numNodes; nodeID++)
{
IndexSearcher s = Nodes[nodeID].Mgr.Acquire();
Debug.Assert(nodeVersions[nodeID] == Nodes[nodeID].Searchers.Record(s));
Debug.Assert(s != null);
try
{
BroadcastNodeReopen(nodeID, nodeVersions[nodeID], s);
}
finally
{
Nodes[nodeID].Mgr.Release(s);
}
}
ChangeIndicesThread = new ChangeIndices(this);
ChangeIndicesThread.Start();
}