#17752 Fixing indexing failure on content deletiong

Work Items: 17752

--HG--
branch : 1.x
This commit is contained in:
Sebastien Ros
2011-04-29 07:42:18 -07:00
parent accc1c34d2
commit 657c762d84
2 changed files with 26 additions and 5 deletions

View File

@@ -211,11 +211,31 @@ namespace Orchard.Tests.Modules.Indexing {
Assert.That(_provider.NumDocs(IndexName), Is.EqualTo(2));
_contentManager.Unpublish(content.ContentItem);
_contentManager.Flush();
while (_indexTaskExecutor.UpdateIndexBatch(IndexName)) {}
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]
public void ShouldIndexAllContentOverTheLoopSize() {

View File

@@ -173,21 +173,22 @@ namespace Orchard.Indexing.Services {
Logger.Information("Updating index");
_indexingStatus = IndexingStatus.Updating;
var contentItems = _taskRepository
var indexingTasks = _taskRepository
.Fetch(x => x.Id > indexSettings.LastIndexedId)
.OrderBy(x => x.Id)
.Take(ContentItemsPerLoop)
.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)
.ToArray();
foreach (var item in contentItems) {
foreach (var item in indexingTasks) {
try {
// item.ContentItem can be null if the content item has been deleted
IDocumentIndex documentIndex = ExtractDocumentIndex(item.ContentItem);
if (documentIndex == null) {
deleteFromIndex.Add(item.ContentItem.Id);
deleteFromIndex.Add(item.Id);
}
else if (documentIndex.IsDirty) {
addToIndex.Add(documentIndex);
@@ -196,7 +197,7 @@ namespace Orchard.Indexing.Services {
indexSettings.LastIndexedId = item.TaskId;
}
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);
}
}
}