MDL-61824 core_search: Deleting restored context caused error

When restoring content, this adds it to a queue for indexing. If the
restored content was then deleted before the indexing takes place,
this caused an exception in the scheduled task.

This change makes it continue safely past missing contexts.
This commit is contained in:
sam marshall
2018-04-09 16:36:30 +01:00
parent 2bd2660751
commit a539e5605c
2 changed files with 25 additions and 1 deletions
+6 -1
View File
@@ -1303,7 +1303,12 @@ class manager {
}
// Show a message before each request, indicating what will be indexed.
$context = \context::instance_by_id($request->contextid);
$context = \context::instance_by_id($request->contextid, IGNORE_MISSING);
if (!$context) {
$DB->delete_records('search_index_requests', ['id' => $request->id]);
$progress->output('Skipped deleted context: ' . $request->contextid);
continue;
}
$contextname = $context->get_context_name();
if ($request->searcharea) {
$contextname .= ' (search area: ' . $request->searcharea . ')';
+19
View File
@@ -1190,5 +1190,24 @@ class search_manager_testcase extends advanced_testcase {
$this->assertContains(
'Completed requested context: Forum: TForum1 (search area: mod_forum-activity)',
$out);
// Make a request for a course context...
$course = $generator->create_course();
$context = context_course::instance($course->id);
$search::request_index($context);
// ...but then delete it (note: delete_course spews output, so we throw it away).
ob_start();
delete_course($course);
ob_end_clean();
// Process requests - it should only note the deleted context.
$search->process_index_requests(10, $progress);
$out = $progress->get_buffer();
$progress->reset_buffer();
$this->assertContains('Skipped deleted context: ' . $context->id, $out);
// Confirm request table is now empty.
$this->assertEquals(0, $DB->count_records('search_index_requests'));
}
}