public override int DoLogic() { PerfRunData runData = RunData; // Get initial reader IndexWriter w = runData.IndexWriter; if (w == null) { throw new Exception("please open the writer before invoking NearRealtimeReader"); } if (runData.GetIndexReader() != null) { throw new Exception("please close the existing reader before invoking NearRealtimeReader"); } long t = J2N.Time.CurrentTimeMilliseconds(); DirectoryReader r = DirectoryReader.Open(w, true); runData.SetIndexReader(r); // Transfer our reference to runData r.DecRef(); // TODO: gather basic metrics for reporting -- eg mean, // stddev, min/max reopen latencies // Parent sequence sets stopNow reopenCount = 0; while (!Stop) { long waitForMsec = (pauseMSec - (J2N.Time.CurrentTimeMilliseconds() - t)); if (waitForMsec > 0) { Thread.Sleep((int)waitForMsec); //System.out.println("NRT wait: " + waitForMsec + " msec"); } t = J2N.Time.CurrentTimeMilliseconds(); DirectoryReader newReader = DirectoryReader.OpenIfChanged(r); if (newReader != null) { int delay = (int)(J2N.Time.CurrentTimeMilliseconds() - t); if (reopenTimes.Length == reopenCount) { reopenTimes = ArrayUtil.Grow(reopenTimes, 1 + reopenCount); } reopenTimes[reopenCount++] = delay; // TODO: somehow we need to enable warming, here runData.SetIndexReader(newReader); // Transfer our reference to runData newReader.DecRef(); r = newReader; } } Stop = false; return(reopenCount); }
public override int DoLogic() { DirectoryReader r = RunData.GetIndexReader(); DirectoryReader nr = DirectoryReader.OpenIfChanged(r); if (nr != null) { RunData.SetIndexReader(nr); nr.DecRef(); } r.DecRef(); return(1); }
public override int DoLogic() { Store.Directory dir = RunData.Directory; DirectoryReader r = null; if (commitUserData != null) { r = DirectoryReader.Open(OpenReaderTask.FindIndexCommit(dir, commitUserData)); } else { r = DirectoryReader.Open(dir); } RunData.SetIndexReader(r); // We transfer reference to the run data r.DecRef(); return(1); }