public override void DoWork()
{
var config = OuterInstance.NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random()))
.SetMaxBufferedDocs(3)
.SetMergeScheduler(_scheduler1)
.SetMergePolicy(NewLogMergePolicy(2));
IndexWriter writer1 = new IndexWriter(Dir1, config);
((IConcurrentMergeScheduler)writer1.Config.MergeScheduler).SetSuppressExceptions();
// Intentionally use different params so flush/merge
// happen @ different times
var config2 = OuterInstance.NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random()))
.SetMaxBufferedDocs(2)
.SetMergeScheduler(_scheduler2)
.SetMergePolicy(NewLogMergePolicy(3));
IndexWriter writer2 = new IndexWriter(Dir2, config2);
((IConcurrentMergeScheduler)writer2.Config.MergeScheduler).SetSuppressExceptions();
Update(writer1);
Update(writer2);
DoFail = true;
try
{
lock (@lock)
{
try
{
writer1.PrepareCommit();
}
catch (Exception)
{
writer1.Rollback();
writer2.Rollback();
return;
}
try
{
writer2.PrepareCommit();
}
catch (Exception)
{
writer1.Rollback();
writer2.Rollback();
return;
}
writer1.Commit();
writer2.Commit();
}
}
finally
{
DoFail = false;
}
writer1.Dispose();
writer2.Dispose();
}