private DirectoryReader DoOpenFromWriter(IndexCommit commit) { if (commit != null) { return(DoOpenFromCommit(commit)); } if (writer.NrtIsCurrent(segmentInfos)) { return(null); } DirectoryReader reader = writer.GetReader(applyAllDeletes); // If in fact no changes took place, return null: if (reader.Version == segmentInfos.Version) { reader.DecRef(); return(null); } return(reader); }
public override void Run() { DirectoryReader currentReader = null; Random random = LuceneTestCase.Random; try { Document doc = new Document(); doc.Add(new TextField("id", "1", Field.Store.NO)); writer.AddDocument(doc); holder.reader = currentReader = writer.GetReader(true); Term term = new Term("id"); for (int i = 0; i < numOps && !holder.stop; i++) { float nextOp = (float)random.NextDouble(); if (nextOp < 0.3) { term.Set("id", new BytesRef("1")); writer.UpdateDocument(term, doc); } else if (nextOp < 0.5) { writer.AddDocument(doc); } else { term.Set("id", new BytesRef("1")); writer.DeleteDocuments(term); } if (holder.reader != currentReader) { holder.reader = currentReader; if (countdown) { countdown = false; latch.Signal(); } } if (random.NextBoolean()) { writer.Commit(); DirectoryReader newReader = DirectoryReader.OpenIfChanged(currentReader); if (newReader != null) { currentReader.DecRef(); currentReader = newReader; } if (currentReader.NumDocs == 0) { writer.AddDocument(doc); } } } } catch (Exception e) { failed = e; } finally { holder.reader = null; if (countdown) { latch.Signal(); } if (currentReader != null) { try { currentReader.DecRef(); } #pragma warning disable 168 catch (IOException e) #pragma warning restore 168 { } } } if (Verbose) { Console.WriteLine("writer stopped - forced by reader: " + holder.stop); } }
public override void Run() { DirectoryReader currentReader = null; Random random = LuceneTestCase.Random(); try { Document doc = new Document(); doc.Add(new TextField("id", "1", Field.Store.NO)); Writer.AddDocument(doc); Holder.Reader = currentReader = Writer.GetReader(true); Term term = new Term("id"); for (int i = 0; i < NumOps && !Holder.Stop; i++) { float nextOp = (float)random.NextDouble(); if (nextOp < 0.3) { term.Set("id", new BytesRef("1")); Writer.UpdateDocument(term, doc); } else if (nextOp < 0.5) { Writer.AddDocument(doc); } else { term.Set("id", new BytesRef("1")); Writer.DeleteDocuments(term); } if (Holder.Reader != currentReader) { Holder.Reader = currentReader; if (Countdown) { Countdown = false; Latch.Signal(); } } if (random.NextBoolean()) { Writer.Commit(); DirectoryReader newReader = DirectoryReader.OpenIfChanged(currentReader); if (newReader != null) { currentReader.DecRef(); currentReader = newReader; } if (currentReader.NumDocs == 0) { Writer.AddDocument(doc); } } } } catch (Exception e) { Failed = e; } finally { Holder.Reader = null; if (Countdown) { Latch.Signal(); } if (currentReader != null) { try { currentReader.DecRef(); } catch (IOException e) { } } } if (VERBOSE) { Console.WriteLine("writer stopped - forced by reader: " + Holder.Stop); } }