mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2026-02-09 09:16:41 +08:00
#17752 Fixing indexing failure on content deletiong
Work Items: 17752 --HG-- branch : 1.x
This commit is contained in:
@@ -211,11 +211,31 @@ namespace Orchard.Tests.Modules.Indexing {
|
|||||||
Assert.That(_provider.NumDocs(IndexName), Is.EqualTo(2));
|
Assert.That(_provider.NumDocs(IndexName), Is.EqualTo(2));
|
||||||
|
|
||||||
_contentManager.Unpublish(content.ContentItem);
|
_contentManager.Unpublish(content.ContentItem);
|
||||||
|
_contentManager.Flush();
|
||||||
|
|
||||||
while (_indexTaskExecutor.UpdateIndexBatch(IndexName)) {}
|
while (_indexTaskExecutor.UpdateIndexBatch(IndexName)) {}
|
||||||
Assert.That(_provider.NumDocs(IndexName), Is.EqualTo(1));
|
Assert.That(_provider.NumDocs(IndexName), Is.EqualTo(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void ShouldUpdateTheIndexWhenContentIsDeleted() {
|
||||||
|
_contentManager.Create<Thing>(ThingDriver.ContentTypeName).Text = "Lorem ipsum";
|
||||||
|
|
||||||
|
while (_indexTaskExecutor.UpdateIndexBatch(IndexName)) { }
|
||||||
|
Assert.That(_provider.NumDocs(IndexName), Is.EqualTo(1));
|
||||||
|
|
||||||
|
var content = _contentManager.Create<Thing>(ThingDriver.ContentTypeName);
|
||||||
|
content.Text = "Lorem ipsum";
|
||||||
|
|
||||||
|
while (_indexTaskExecutor.UpdateIndexBatch(IndexName)) { }
|
||||||
|
Assert.That(_provider.NumDocs(IndexName), Is.EqualTo(2));
|
||||||
|
|
||||||
|
_contentManager.Remove(content.ContentItem);
|
||||||
|
_contentManager.Flush();
|
||||||
|
|
||||||
|
while (_indexTaskExecutor.UpdateIndexBatch(IndexName)) { }
|
||||||
|
Assert.That(_provider.NumDocs(IndexName), Is.EqualTo(1));
|
||||||
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void ShouldIndexAllContentOverTheLoopSize() {
|
public void ShouldIndexAllContentOverTheLoopSize() {
|
||||||
|
|||||||
@@ -173,21 +173,22 @@ namespace Orchard.Indexing.Services {
|
|||||||
Logger.Information("Updating index");
|
Logger.Information("Updating index");
|
||||||
_indexingStatus = IndexingStatus.Updating;
|
_indexingStatus = IndexingStatus.Updating;
|
||||||
|
|
||||||
var contentItems = _taskRepository
|
var indexingTasks = _taskRepository
|
||||||
.Fetch(x => x.Id > indexSettings.LastIndexedId)
|
.Fetch(x => x.Id > indexSettings.LastIndexedId)
|
||||||
.OrderBy(x => x.Id)
|
.OrderBy(x => x.Id)
|
||||||
.Take(ContentItemsPerLoop)
|
.Take(ContentItemsPerLoop)
|
||||||
.GroupBy(x => x.ContentItemRecord.Id)
|
.GroupBy(x => x.ContentItemRecord.Id)
|
||||||
.Select(group => new {TaskId = group.Max(task => task.Id), ContentItem = _contentManager.Get(group.Key, VersionOptions.Published)})
|
.Select(group => new {TaskId = group.Max(task => task.Id), Id = group.Key, ContentItem = _contentManager.Get(group.Key, VersionOptions.Published)})
|
||||||
.OrderBy(x => x.TaskId)
|
.OrderBy(x => x.TaskId)
|
||||||
.ToArray();
|
.ToArray();
|
||||||
|
|
||||||
foreach (var item in contentItems) {
|
foreach (var item in indexingTasks) {
|
||||||
try {
|
try {
|
||||||
|
// item.ContentItem can be null if the content item has been deleted
|
||||||
IDocumentIndex documentIndex = ExtractDocumentIndex(item.ContentItem);
|
IDocumentIndex documentIndex = ExtractDocumentIndex(item.ContentItem);
|
||||||
|
|
||||||
if (documentIndex == null) {
|
if (documentIndex == null) {
|
||||||
deleteFromIndex.Add(item.ContentItem.Id);
|
deleteFromIndex.Add(item.Id);
|
||||||
}
|
}
|
||||||
else if (documentIndex.IsDirty) {
|
else if (documentIndex.IsDirty) {
|
||||||
addToIndex.Add(documentIndex);
|
addToIndex.Add(documentIndex);
|
||||||
@@ -196,7 +197,7 @@ namespace Orchard.Indexing.Services {
|
|||||||
indexSettings.LastIndexedId = item.TaskId;
|
indexSettings.LastIndexedId = item.TaskId;
|
||||||
}
|
}
|
||||||
catch (Exception ex) {
|
catch (Exception ex) {
|
||||||
Logger.Warning(ex, "Unable to index content item #{0} during update", item.ContentItem.Id);
|
Logger.Warning(ex, "Unable to index content item #{0} during update", item.Id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user