private static void UpdateDirtyDocuments(List <VersionInfo> infoList)
{
//-- select dirty documents
var dirtyVersions = infoList.Where(i => !i.IsActualDocument &&
(i.OriginalIsPublic != i.ExpectedIsPublic || i.OriginalIsMajor != i.ExpectedIsMajor ||
i.OriginalIsLastDraft != i.ExpectedIsLastDraft || i.OriginalIsLastPublic != i.ExpectedIsLastPublic)).ToArray();
//-- play dirty documents
var docs = IndexDocumentInfo.GetDocuments(dirtyVersions.Select(d => d.VersionId));
foreach (var doc in docs)
{
var versionId = Int32.Parse(doc.Get(LucObject.FieldName.VersionId));
foreach (var dirtyVersion in dirtyVersions)
{
if (dirtyVersion.VersionId == versionId)
{
dirtyVersion.Document = doc;
SetDocumentFlags(dirtyVersion);
var delTerm = new Term(KeyFieldName, Lucene.Net.Util.NumericUtils.IntToPrefixCoded(dirtyVersion.VersionId));
//_writerRestartLock.EnterReadLock();
//try
//{
// //in case the system was shut down in the meantime
// if (!LuceneManager.Running)
// return;
// _writer.UpdateDocument(delTerm, dirtyVersion.Document);
//}
//finally
//{
// _writerRestartLock.ExitReadLock();
//}
using (var wrFrame = IndexWriterFrame.Get(false)) // // UpdateDirtyDocuments
{
//in case the system was shut down in the meantime
if (!LuceneManager.Running)
{
return;
}
_writer.UpdateDocument(delTerm, dirtyVersion.Document);
}
break;
}
}
}
}