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:
@@ -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 . ')';
|
||||
|
||||
@@ -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'));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user