You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by ni...@apache.org on 2017/05/09 11:57:49 UTC
[2/3] lucenenet git commit: Added test case which throws on
concurrent directory access.
Added test case which throws on concurrent directory access.
Project: http://git-wip-us.apache.org/repos/asf/lucenenet/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucenenet/commit/33401007
Tree: http://git-wip-us.apache.org/repos/asf/lucenenet/tree/33401007
Diff: http://git-wip-us.apache.org/repos/asf/lucenenet/diff/33401007
Branch: refs/heads/master
Commit: 33401007061e339ed692432abcbb5feb33ed50a0
Parents: d581572
Author: Pieter van Ginkel <pi...@amcsgroup.com>
Authored: Mon May 8 15:21:00 2017 +0200
Committer: Pieter van Ginkel <pi...@amcsgroup.com>
Committed: Mon May 8 15:21:00 2017 +0200
----------------------------------------------------------------------
src/Lucene.Net.Tests/Store/TestDirectory.cs | 55 ++++++++++++++++++++++++
1 file changed, 55 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/33401007/src/Lucene.Net.Tests/Store/TestDirectory.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Tests/Store/TestDirectory.cs b/src/Lucene.Net.Tests/Store/TestDirectory.cs
index e796640..3753818 100644
--- a/src/Lucene.Net.Tests/Store/TestDirectory.cs
+++ b/src/Lucene.Net.Tests/Store/TestDirectory.cs
@@ -6,6 +6,7 @@ using Lucene.Net.Util;
using NUnit.Framework;
using System;
using System.IO;
+using System.Threading;
namespace Lucene.Net.Store
{
@@ -423,5 +424,59 @@ namespace Lucene.Net.Store
Assert.AreEqual(0, fsdir.ListAll().Length);
}
}
+
+ [Test]
+ [Ignore("Not deterministic; depends on a race condition")]
+ [LuceneNetSpecific]
+ public virtual void ConcurrentIndexAccessThrowsWithoutSynchronizedStaleFiles()
+ {
+ DirectoryInfo tempDir = CreateTempDir(GetType().Name);
+ using (Directory dir = new SimpleFSDirectory(tempDir))
+ {
+ var ioContext = NewIOContext(Random());
+ var threads = new Thread[Environment.ProcessorCount];
+ int file = 0;
+ Exception exception = null;
+ bool stopped = false;
+
+ using (var @event = new ManualResetEvent(false))
+ {
+ for (int i = 0; i < threads.Length; i++)
+ {
+ var thread = new Thread(() =>
+ {
+ while (!stopped)
+ {
+ int nextFile = Interlocked.Increment(ref file);
+ try
+ {
+ dir.CreateOutput("test" + nextFile, ioContext).Dispose();
+ }
+ catch (Exception ex)
+ {
+ exception = ex;
+ @event.Set();
+ break;
+ }
+ }
+ });
+ thread.Start();
+ threads[i] = thread;
+ }
+
+ bool raised = @event.WaitOne(TimeSpan.FromSeconds(5));
+
+ stopped = true;
+
+ if (raised)
+ throw new Exception("Test failed", exception);
+ }
+
+ foreach (var thread in threads)
+ {
+ thread.Join();
+ }
+ }
+ }
}
}
\ No newline at end of file