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 2022/11/07 13:07:01 UTC
[lucenenet] branch master updated: BREAKING: Lucene.Net.Index.IndexReader: De-nested IReaderClosedListener and renamed to IReaderDisposedListener.
This is an automated email from the ASF dual-hosted git repository.
nightowl888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git
The following commit(s) were added to refs/heads/master by this push:
new 3a1ced448 BREAKING: Lucene.Net.Index.IndexReader: De-nested IReaderClosedListener and renamed to IReaderDisposedListener.
3a1ced448 is described below
commit 3a1ced448ed9e14264ec3b6af1cd093c28070287
Author: Shad Storhaug <sh...@shadstorhaug.com>
AuthorDate: Mon Nov 7 19:06:55 2022 +0700
BREAKING: Lucene.Net.Index.IndexReader: De-nested IReaderClosedListener and renamed to IReaderDisposedListener.
---
.../Util/LuceneTestCase.cs | 6 +-
src/Lucene.Net.Tests/Index/TestDirectoryReader.cs | 10 +--
src/Lucene.Net.Tests/Index/TestIndexReaderClose.cs | 16 ++---
.../Index/TestParallelCompositeReader.cs | 13 ++--
src/Lucene.Net.Tests/Support/TestIDisposable.cs | 4 +-
src/Lucene.Net/Index/IndexReader.cs | 66 ++++++++++--------
src/Lucene.Net/Search/FieldCacheImpl.cs | 10 +--
src/Lucene.Net/Support/ObsoleteAPI/IndexReader.cs | 79 ++++++++++++++++++++++
8 files changed, 145 insertions(+), 59 deletions(-)
diff --git a/src/Lucene.Net.TestFramework/Util/LuceneTestCase.cs b/src/Lucene.Net.TestFramework/Util/LuceneTestCase.cs
index c8e92fa14..7992e19dd 100644
--- a/src/Lucene.Net.TestFramework/Util/LuceneTestCase.cs
+++ b/src/Lucene.Net.TestFramework/Util/LuceneTestCase.cs
@@ -2018,7 +2018,7 @@ namespace Lucene.Net.Util
{
Console.WriteLine("NOTE: newSearcher using ExecutorService with " + threads + " threads");
}
- r.AddReaderClosedListener(new ReaderClosedListenerAnonymousClass(ex));
+ r.AddReaderDisposedListener(new ReaderClosedListenerAnonymousClass(ex));
}
IndexSearcher ret;
if (wrapWithAssertions)
@@ -3171,7 +3171,7 @@ namespace Lucene.Net.Util
return Random.NextGaussian();
}
- private sealed class ReaderClosedListenerAnonymousClass : IndexReader.IReaderClosedListener
+ private sealed class ReaderClosedListenerAnonymousClass : IReaderDisposedListener
{
private readonly LimitedConcurrencyLevelTaskScheduler ex;
@@ -3180,7 +3180,7 @@ namespace Lucene.Net.Util
this.ex = ex;
}
- public void OnClose(IndexReader reader)
+ public void OnDispose(IndexReader reader)
{
ex?.Shutdown();
//TestUtil.ShutdownExecutorService(ex);
diff --git a/src/Lucene.Net.Tests/Index/TestDirectoryReader.cs b/src/Lucene.Net.Tests/Index/TestDirectoryReader.cs
index 856abc0bf..42ade8a9e 100644
--- a/src/Lucene.Net.Tests/Index/TestDirectoryReader.cs
+++ b/src/Lucene.Net.Tests/Index/TestDirectoryReader.cs
@@ -1089,9 +1089,9 @@ namespace Lucene.Net.Index
writer.Commit();
DirectoryReader reader = writer.GetReader();
int[] closeCount = new int[1];
- IndexReader.IReaderClosedListener listener = new ReaderClosedListenerAnonymousClass(this, reader, closeCount);
+ IReaderDisposedListener listener = new ReaderClosedListenerAnonymousClass(this, reader, closeCount);
- reader.AddReaderClosedListener(listener);
+ reader.AddReaderDisposedListener(listener);
reader.Dispose();
@@ -1100,7 +1100,7 @@ namespace Lucene.Net.Index
writer.Dispose();
DirectoryReader reader2 = DirectoryReader.Open(dir);
- reader2.AddReaderClosedListener(listener);
+ reader2.AddReaderDisposedListener(listener);
closeCount[0] = 0;
reader2.Dispose();
@@ -1108,7 +1108,7 @@ namespace Lucene.Net.Index
dir.Dispose();
}
- private sealed class ReaderClosedListenerAnonymousClass : IndexReader.IReaderClosedListener
+ private sealed class ReaderClosedListenerAnonymousClass : IReaderDisposedListener
{
private readonly TestDirectoryReader outerInstance;
@@ -1122,7 +1122,7 @@ namespace Lucene.Net.Index
this.closeCount = closeCount;
}
- public void OnClose(IndexReader reader)
+ public void OnDispose(IndexReader reader)
{
closeCount[0]++;
}
diff --git a/src/Lucene.Net.Tests/Index/TestIndexReaderClose.cs b/src/Lucene.Net.Tests/Index/TestIndexReaderClose.cs
index ac06ae234..b6f195089 100644
--- a/src/Lucene.Net.Tests/Index/TestIndexReaderClose.cs
+++ b/src/Lucene.Net.Tests/Index/TestIndexReaderClose.cs
@@ -47,7 +47,7 @@ namespace Lucene.Net.Index
bool throwOnClose = !Rarely();
AtomicReader wrap = SlowCompositeReaderWrapper.Wrap(open);
FilterAtomicReader reader = new FilterAtomicReaderAnonymousClass(this, wrap, throwOnClose);
- //IList<IndexReader.IReaderClosedListener> listeners = new JCG.List<IndexReader.IReaderClosedListener>(); // LUCENENET: This list is unused (and was unused in Java)
+ //IList<IReaderDisposedListener> listeners = new JCG.List<IReaderDisposedListener>(); // LUCENENET: This list is unused (and was unused in Java)
int listenerCount = Random.Next(20);
AtomicInt32 count = new AtomicInt32();
bool faultySet = false;
@@ -56,17 +56,17 @@ namespace Lucene.Net.Index
if (Rarely())
{
faultySet = true;
- reader.AddReaderClosedListener(new FaultyListener());
+ reader.AddReaderDisposedListener(new FaultyListener());
}
else
{
count.IncrementAndGet();
- reader.AddReaderClosedListener(new CountListener(count));
+ reader.AddReaderDisposedListener(new CountListener(count));
}
}
if (!faultySet && !throwOnClose)
{
- reader.AddReaderClosedListener(new FaultyListener());
+ reader.AddReaderDisposedListener(new FaultyListener());
}
try
{
@@ -127,7 +127,7 @@ namespace Lucene.Net.Index
}
}
- private sealed class CountListener : IndexReader.IReaderClosedListener
+ private sealed class CountListener : IReaderDisposedListener
{
internal readonly AtomicInt32 count;
@@ -136,15 +136,15 @@ namespace Lucene.Net.Index
this.count = count;
}
- public void OnClose(IndexReader reader)
+ public void OnDispose(IndexReader reader)
{
count.DecrementAndGet();
}
}
- private sealed class FaultyListener : IndexReader.IReaderClosedListener
+ private sealed class FaultyListener : IReaderDisposedListener
{
- public void OnClose(IndexReader reader)
+ public void OnDispose(IndexReader reader)
{
throw IllegalStateException.Create("GRRRRRRRRRRRR!");
}
diff --git a/src/Lucene.Net.Tests/Index/TestParallelCompositeReader.cs b/src/Lucene.Net.Tests/Index/TestParallelCompositeReader.cs
index dff35e115..e44403963 100644
--- a/src/Lucene.Net.Tests/Index/TestParallelCompositeReader.cs
+++ b/src/Lucene.Net.Tests/Index/TestParallelCompositeReader.cs
@@ -31,7 +31,6 @@ namespace Lucene.Net.Index
using LuceneTestCase = Lucene.Net.Util.LuceneTestCase;
using MockAnalyzer = Lucene.Net.Analysis.MockAnalyzer;
using Occur = Lucene.Net.Search.Occur;
- using IReaderClosedListener = Lucene.Net.Index.IndexReader.IReaderClosedListener;
[TestFixture]
public class TestParallelCompositeReader : LuceneTestCase
@@ -161,7 +160,7 @@ namespace Lucene.Net.Index
foreach (AtomicReaderContext cxt in pr.Leaves)
{
- cxt.Reader.AddReaderClosedListener(new ReaderClosedListenerAnonymousClass(this, listenerClosedCount));
+ cxt.Reader.AddReaderDisposedListener(new ReaderClosedListenerAnonymousClass(this, listenerClosedCount));
}
pr.Dispose();
ir1.Dispose();
@@ -169,7 +168,7 @@ namespace Lucene.Net.Index
dir1.Dispose();
}
- private sealed class ReaderClosedListenerAnonymousClass : IReaderClosedListener
+ private sealed class ReaderClosedListenerAnonymousClass : IReaderDisposedListener
{
private readonly TestParallelCompositeReader outerInstance;
@@ -181,7 +180,7 @@ namespace Lucene.Net.Index
this.listenerClosedCount = listenerClosedCount;
}
- public void OnClose(IndexReader reader)
+ public void OnDispose(IndexReader reader)
{
listenerClosedCount[0]++;
}
@@ -203,14 +202,14 @@ namespace Lucene.Net.Index
foreach (AtomicReaderContext cxt in pr.Leaves)
{
- cxt.Reader.AddReaderClosedListener(new ReaderClosedListenerAnonymousClass2(this, listenerClosedCount));
+ cxt.Reader.AddReaderDisposedListener(new ReaderClosedListenerAnonymousClass2(this, listenerClosedCount));
}
pr.Dispose();
Assert.AreEqual(3, listenerClosedCount[0]);
dir1.Dispose();
}
- private sealed class ReaderClosedListenerAnonymousClass2 : IReaderClosedListener
+ private sealed class ReaderClosedListenerAnonymousClass2 : IReaderDisposedListener
{
private readonly TestParallelCompositeReader outerInstance;
@@ -222,7 +221,7 @@ namespace Lucene.Net.Index
this.listenerClosedCount = listenerClosedCount;
}
- public void OnClose(IndexReader reader)
+ public void OnDispose(IndexReader reader)
{
listenerClosedCount[0]++;
}
diff --git a/src/Lucene.Net.Tests/Support/TestIDisposable.cs b/src/Lucene.Net.Tests/Support/TestIDisposable.cs
index 10ca6f5b8..3af48634d 100644
--- a/src/Lucene.Net.Tests/Support/TestIDisposable.cs
+++ b/src/Lucene.Net.Tests/Support/TestIDisposable.cs
@@ -1,4 +1,4 @@
-using Lucene.Net.Analysis.Core;
+using Lucene.Net.Analysis.Core;
using Lucene.Net.Attributes;
using Lucene.Net.Documents;
using Lucene.Net.Index;
@@ -58,7 +58,7 @@ namespace Lucene.Net.Support
{
}
- Assert.Throws<ObjectDisposedException>(() => reader.RemoveReaderClosedListener(null), "IndexReader shouldn't be open here");
+ Assert.Throws<ObjectDisposedException>(() => reader.RemoveReaderDisposedListener(null), "IndexReader shouldn't be open here");
}
Assert.Throws<ObjectDisposedException>(() => writer.AddDocument(doc), "IndexWriter shouldn't be open here");
diff --git a/src/Lucene.Net/Index/IndexReader.cs b/src/Lucene.Net/Index/IndexReader.cs
index ab19154e7..d1e355e0f 100644
--- a/src/Lucene.Net/Index/IndexReader.cs
+++ b/src/Lucene.Net/Index/IndexReader.cs
@@ -75,7 +75,7 @@ namespace Lucene.Net.Index
/// <see cref="IndexReader"/> instance; use your own
/// (non-Lucene) objects instead.
/// </summary>
- public abstract class IndexReader : IDisposable
+ public abstract partial class IndexReader : IDisposable
{
private bool closed = false;
private bool closedByChild = false;
@@ -94,20 +94,9 @@ namespace Lucene.Net.Index
private readonly IEventAggregator eventAggregator = new EventAggregator();
#endif
- /// <summary>
- /// A custom listener that's invoked when the <see cref="IndexReader"/>
- /// is closed.
- /// <para/>
- /// @lucene.experimental
- /// </summary>
- public interface IReaderClosedListener
- {
- /// <summary>
- /// Invoked when the <see cref="IndexReader"/> is closed. </summary>
- void OnClose(IndexReader reader);
- }
+ // LUCENENET specific - de-nested IReaderClosedListener and renamed to IReaderDisposedListener
- private readonly ISet<IReaderClosedListener> readerClosedListeners = new JCG.LinkedHashSet<IReaderClosedListener>().AsConcurrent();
+ private readonly ISet<IReaderDisposedListener> readerDisposedListeners = new JCG.LinkedHashSet<IReaderDisposedListener>().AsConcurrent();
private readonly ConditionalWeakTable<IndexReader, object> parentReaders = new ConditionalWeakTable<IndexReader, object>();
@@ -116,26 +105,30 @@ namespace Lucene.Net.Index
private readonly object parentReadersLock = new object();
/// <summary>
- /// Expert: adds a <see cref="IReaderClosedListener"/>. The
- /// provided listener will be invoked when this reader is closed.
+ /// Expert: adds a <see cref="IReaderDisposedListener"/>. The
+ /// provided listener will be invoked when this reader is disposed.
+ /// <para/>
+ /// <b>NOTE:</b> This was addReaderClosedListener() in Lucene.
/// <para/>
/// @lucene.experimental
/// </summary>
- public void AddReaderClosedListener(IReaderClosedListener listener)
+ public void AddReaderDisposedListener(IReaderDisposedListener listener)
{
EnsureOpen();
- readerClosedListeners.Add(listener);
+ readerDisposedListeners.Add(listener);
}
/// <summary>
- /// Expert: remove a previously added <see cref="IReaderClosedListener"/>.
+ /// Expert: remove a previously added <see cref="IReaderDisposedListener"/>.
+ /// <para/>
+ /// <b>NOTE:</b> This was removeReaderClosedListener() in Lucene.
/// <para/>
/// @lucene.experimental
/// </summary>
- public void RemoveReaderClosedListener(IReaderClosedListener listener)
+ public void RemoveReaderDisposedListener(IReaderDisposedListener listener)
{
EnsureOpen();
- readerClosedListeners.Remove(listener);
+ readerDisposedListeners.Remove(listener);
}
/// <summary>
@@ -174,17 +167,17 @@ namespace Lucene.Net.Index
}
}
- private void NotifyReaderClosedListeners(Exception th)
+ private void NotifyReaderDisposedListeners(Exception th) // LUCENENET: Renamed from notifyReaderClosedListeners()
{
- object syncRoot = ((ICollection)readerClosedListeners).SyncRoot;
+ object syncRoot = ((ICollection)readerDisposedListeners).SyncRoot;
UninterruptableMonitor.Enter(syncRoot); // LUCENENET: Ensure we sync on the SyncRoot of ConcurrentSet<T>
try
{
- foreach (IReaderClosedListener listener in readerClosedListeners)
+ foreach (IReaderDisposedListener listener in readerDisposedListeners)
{
try
{
- listener.OnClose(this);
+ listener.OnDispose(this);
}
catch (Exception t) when (t.IsThrowable())
{
@@ -206,7 +199,7 @@ namespace Lucene.Net.Index
}
}
- private void ReportCloseToParentReaders()
+ private void ReportDisposeToParentReaders() // LUCENENET: Renamed from reportCloseToParentReaders()
{
// LUCENENET specific - since ConditionalWeakTable doesn't synchronize
// on the enumerator, we need to do external synchronization to make them threadsafe.
@@ -231,7 +224,7 @@ namespace Lucene.Net.Index
// cross memory barrier by a fake write:
target.refCount.AddAndGet(0);
// recurse:
- target.ReportCloseToParentReaders();
+ target.ReportDisposeToParentReaders();
}
}
}
@@ -341,11 +334,11 @@ namespace Lucene.Net.Index
{
try
{
- ReportCloseToParentReaders();
+ ReportDisposeToParentReaders();
}
finally
{
- NotifyReaderClosedListeners(throwable);
+ NotifyReaderDisposedListeners(throwable);
}
}
}
@@ -773,4 +766,19 @@ namespace Lucene.Net.Index
/// <seealso cref="Terms.SumTotalTermFreq"/>
public abstract long GetSumTotalTermFreq(string field);
}
+
+ /// <summary>
+ /// A custom listener that's invoked when the <see cref="IndexReader"/>
+ /// is disposed.
+ /// <para/>
+ /// <b>NOTE:</b> This was IndexReader.ReaderClosedListener in Lucene.
+ /// <para/>
+ /// @lucene.experimental
+ /// </summary>
+ public interface IReaderDisposedListener
+ {
+ /// <summary>
+ /// Invoked when the <see cref="IndexReader"/> is disposed. </summary>
+ void OnDispose(IndexReader reader);
+ }
}
\ No newline at end of file
diff --git a/src/Lucene.Net/Search/FieldCacheImpl.cs b/src/Lucene.Net/Search/FieldCacheImpl.cs
index 7b400fe16..07e490a3d 100644
--- a/src/Lucene.Net/Search/FieldCacheImpl.cs
+++ b/src/Lucene.Net/Search/FieldCacheImpl.cs
@@ -228,9 +228,9 @@ namespace Lucene.Net.Search
}
// composite/SlowMultiReaderWrapper fieldcaches don't purge until composite reader is closed.
- internal readonly IndexReader.IReaderClosedListener purgeReader;
+ internal readonly IReaderDisposedListener purgeReader;
- private sealed class ReaderClosedListenerAnonymousClass : IndexReader.IReaderClosedListener
+ private sealed class ReaderClosedListenerAnonymousClass : IReaderDisposedListener
{
private readonly FieldCacheImpl outerInstance;
@@ -239,7 +239,7 @@ namespace Lucene.Net.Search
this.outerInstance = outerInstance;
}
- public void OnClose(IndexReader owner)
+ public void OnDispose(IndexReader owner)
{
if (Debugging.AssertsEnabled) Debugging.Assert(owner is AtomicReader);
outerInstance.PurgeByCacheKey(((AtomicReader)owner).CoreCacheKey);
@@ -259,12 +259,12 @@ namespace Lucene.Net.Search
object key = reader.CoreCacheKey;
if (key is AtomicReader atomicReader)
{
- atomicReader.AddReaderClosedListener(purgeReader);
+ atomicReader.AddReaderDisposedListener(purgeReader);
}
else
{
// last chance
- reader.AddReaderClosedListener(purgeReader);
+ reader.AddReaderDisposedListener(purgeReader);
}
}
#if !FEATURE_CONDITIONALWEAKTABLE_ENUMERATOR
diff --git a/src/Lucene.Net/Support/ObsoleteAPI/IndexReader.cs b/src/Lucene.Net/Support/ObsoleteAPI/IndexReader.cs
new file mode 100644
index 000000000..806fb58e6
--- /dev/null
+++ b/src/Lucene.Net/Support/ObsoleteAPI/IndexReader.cs
@@ -0,0 +1,79 @@
+using System;
+
+namespace Lucene.Net.Index
+{
+ /*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ public abstract partial class IndexReader
+ {
+ /// <summary>
+ /// A custom listener that's invoked when the <see cref="IndexReader"/>
+ /// is closed.
+ /// <para/>
+ /// @lucene.experimental
+ /// </summary>
+ [Obsolete("Use IReaderDisposedListener interface instead. This method will be removed in 4.8.0 release candidate."), System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
+ public interface IReaderClosedListener
+ {
+ /// <summary>
+ /// Invoked when the <see cref="IndexReader"/> is closed. </summary>
+ void OnClose(IndexReader reader);
+ }
+
+ [Obsolete("This class will be removed in 4.8.0 release candidate."), System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
+ private sealed class ReaderCloseListenerWrapper : IReaderDisposedListener
+ {
+ private readonly IReaderClosedListener listener;
+ public ReaderCloseListenerWrapper(IReaderClosedListener listener)
+ {
+ this.listener = listener ?? throw new ArgumentNullException(nameof(listener));
+ }
+
+ public void OnDispose(IndexReader reader) => listener.OnClose(reader);
+
+ public override bool Equals(object obj) => listener.Equals(obj);
+ public override int GetHashCode() => listener.GetHashCode();
+ public override string ToString() => listener.ToString();
+ }
+
+ /// <summary>
+ /// Expert: adds a <see cref="IReaderClosedListener"/>. The
+ /// provided listener will be invoked when this reader is closed.
+ /// <para/>
+ /// @lucene.experimental
+ /// </summary>
+ [Obsolete("Use AddReaderDisposedListerner method instead. This method will be removed in 4.8.0 release candidate."), System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
+ public void AddReaderClosedListener(IReaderClosedListener listener)
+ {
+ EnsureOpen();
+ readerDisposedListeners.Add(new ReaderCloseListenerWrapper(listener));
+ }
+
+ /// <summary>
+ /// Expert: remove a previously added <see cref="IReaderClosedListener"/>.
+ /// <para/>
+ /// @lucene.experimental
+ /// </summary>
+ [Obsolete("Use RemoveReaderDisposedListerner method instead. This method will be removed in 4.8.0 release candidate."), System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
+ public void RemoveReaderClosedListener(IReaderClosedListener listener)
+ {
+ EnsureOpen();
+ readerDisposedListeners.Remove(new ReaderCloseListenerWrapper(listener));
+ }
+ }
+}