Browse Source

Nullable improvement.

pull/534/head
Sebastian 6 years ago
parent
commit
28facb0ac9
  1. 12
      backend/src/Squidex.Domain.Apps.Entities/Contents/Text/Lucene/IndexManager.cs
  2. 61
      backend/src/Squidex.Domain.Apps.Entities/Contents/Text/Lucene/IndexManager_Impl.cs

12
backend/src/Squidex.Domain.Apps.Entities/Contents/Text/Lucene/IndexManager.cs

@ -62,7 +62,9 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text.Lucene
await CommitInternalAsync(indexHolder, true);
}
indexHolder = new IndexHolder(ownerId);
var directory = await indexStorage.CreateDirectoryAsync(ownerId);
indexHolder = new IndexHolder(ownerId, directory);
indices[ownerId] = indexHolder;
}
finally
@ -70,10 +72,6 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text.Lucene
lockObject.Release();
}
var directory = await indexStorage.CreateDirectoryAsync(ownerId);
indexHolder.Open(directory);
return indexHolder;
}
@ -87,7 +85,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text.Lucene
{
lockObject.Wait();
indexHolder.Release();
indexHolder.Dispose();
indices.Remove(indexHolder.Id);
}
finally
@ -118,7 +116,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text.Lucene
holder.Commit();
}
await indexStorage.WriteAsync(holder.GetUnsafeWriter().Directory, holder.Snapshotter);
await indexStorage.WriteAsync(holder.Directory, holder.Snapshotter);
}
}

61
backend/src/Squidex.Domain.Apps.Entities/Contents/Text/Lucene/IndexManager_Impl.cs

@ -11,7 +11,6 @@ using Lucene.Net.Index;
using Lucene.Net.Search;
using Lucene.Net.Store;
using Lucene.Net.Util;
using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Entities.Contents.Text.Lucene
{
@ -23,11 +22,11 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text.Lucene
private static readonly MergeScheduler MergeScheduler = new ConcurrentMergeScheduler();
private static readonly Analyzer SharedAnalyzer = new MultiLanguageAnalyzer(Version);
private readonly SnapshotDeletionPolicy snapshotter = new SnapshotDeletionPolicy(new KeepOnlyLastCommitDeletionPolicy());
private Directory directory;
private readonly Directory directory;
private IndexWriter indexWriter;
private IndexSearcher? indexSearcher;
private DirectoryReader? indexReader;
private bool isReleased;
private bool isDisposed;
public Analyzer Analyzer
{
@ -39,12 +38,22 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text.Lucene
get { return snapshotter; }
}
public Directory Directory
{
get { return directory; }
}
public IndexWriter Writer
{
get
{
ThrowIfReleased();
if (indexWriter == null)
{
throw new InvalidOperationException("Index writer has not been created yet. Call Open()");
}
return indexWriter;
}
}
@ -71,20 +80,9 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text.Lucene
public Guid Id { get; }
public IndexHolder(Guid id)
public IndexHolder(Guid id, Directory directory)
{
Id = id;
}
public void Dispose()
{
indexReader?.Dispose();
indexWriter?.Dispose();
}
public void Open(Directory directory)
{
Guard.NotNull(directory, nameof(directory));
this.directory = directory;
@ -96,7 +94,20 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text.Lucene
}
}
private void RecreateIndexWriter()
public void Dispose()
{
if (!isDisposed)
{
indexReader?.Dispose();
indexReader = null;
indexWriter.Dispose();
isDisposed = true;
}
}
private IndexWriter RecreateIndexWriter()
{
var config = new IndexWriterConfig(Version, Analyzer)
{
@ -108,13 +119,15 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text.Lucene
indexWriter = new IndexWriter(directory, config);
MarkStale();
return indexWriter;
}
public void EnsureReader()
{
ThrowIfReleased();
if (indexReader == null)
if (indexReader == null && indexWriter != null)
{
indexReader = indexWriter.GetReader(true);
indexSearcher = new IndexSearcher(indexReader);
@ -156,20 +169,10 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text.Lucene
private void ThrowIfReleased()
{
if (isReleased)
{
throw new InvalidOperationException("Index is already released.");
}
}
internal void Release()
if (indexWriter == null)
{
isReleased = true;
throw new InvalidOperationException("Index is already released or not open yet.");
}
internal IndexWriter GetUnsafeWriter()
{
return indexWriter;
}
}
}

Loading…
Cancel
Save