refactor: delete all documents on discard

This commit is contained in:
Navin Karkera
2024-08-07 12:36:24 +05:30
committed by Navin Karkera
parent 2efff2697b
commit 140b9bb968
2 changed files with 14 additions and 38 deletions

View File

@@ -143,7 +143,7 @@ def _wait_for_meili_task(info: TaskInfo) -> None:
raise MeilisearchError(err_reason)
def wait_for_meili_tasks(info_list: list[TaskInfo]) -> None:
def _wait_for_meili_tasks(info_list: list[TaskInfo]) -> None:
"""
Simple helper method to wait for multiple Meilisearch tasks to complete
"""
@@ -231,7 +231,7 @@ def _recurse_children(block, fn, status_cb: Callable[[str], None] | None = None)
fn(child)
def _update_index_docs(docs, wait=True) -> list[TaskInfo]:
def _update_index_docs(docs) -> list[TaskInfo]:
"""
Helper function that updates the documents in the search index
@@ -249,9 +249,7 @@ def _update_index_docs(docs, wait=True) -> list[TaskInfo]:
tasks.append(client.index(current_rebuild_index_name).update_documents(docs))
tasks.append(client.index(STUDIO_INDEX_NAME).update_documents(docs))
if wait:
wait_for_meili_tasks(tasks)
return tasks
_wait_for_meili_tasks(tasks)
def only_if_meilisearch_enabled(f):
@@ -466,29 +464,24 @@ def delete_index_doc(usage_key: UsageKey) -> None:
tasks.append(client.index(current_rebuild_index_name).delete_document(meili_id_from_opaque_key(usage_key)))
tasks.append(client.index(STUDIO_INDEX_NAME).delete_document(meili_id_from_opaque_key(usage_key)))
wait_for_meili_tasks(tasks)
_wait_for_meili_tasks(tasks)
def delete_index_docs(meili_ids: list[str], wait=True) -> list[TaskInfo]:
def delete_all_index_docs_for_library(library_key: LibraryLocatorV2) -> None:
"""
Deletes documents for the given XBlocks from the search index
Args:
meili_ids (list[str]): List of meili_ids from usage keys of the XBlocks to be removed from the index
"""
current_rebuild_index_name = _get_running_rebuild_index_name()
client = _get_meilisearch_client()
filter = f'{Fields.context_key}="{library_key}"'
tasks = []
if current_rebuild_index_name:
# If there is a rebuild in progress, the document will also be deleted from the new index.
tasks.append(client.index(current_rebuild_index_name).delete_documents(meili_ids))
tasks.append(client.index(STUDIO_INDEX_NAME).delete_documents(meili_ids))
# If there is a rebuild in progress, the documents will also be deleted from the new index.
tasks.append(client.index(current_rebuild_index_name).delete_documents(filter=filter))
tasks.append(client.index(STUDIO_INDEX_NAME).delete_documents(filter=filter))
if wait:
wait_for_meili_tasks(tasks)
return tasks
_wait_for_meili_tasks(tasks)
def upsert_library_block_index_doc(usage_key: UsageKey) -> None:
@@ -506,7 +499,7 @@ def upsert_library_block_index_doc(usage_key: UsageKey) -> None:
_update_index_docs(docs)
def upsert_content_library_index_docs(library_key: LibraryLocatorV2, wait=True) -> None:
def upsert_content_library_index_docs(library_key: LibraryLocatorV2) -> None:
"""
Creates or updates the documents for the given Content Library in the search index
"""
@@ -516,23 +509,7 @@ def upsert_content_library_index_docs(library_key: LibraryLocatorV2, wait=True)
doc = searchable_doc_for_library_block(metadata)
docs.append(doc)
return _update_index_docs(docs, wait=wait)
def delete_content_library_index_docs(library_key: LibraryLocatorV2, wait=True) -> None:
"""
Deletes the discarded draft documents for the given Content Library in the search index
"""
meili_ids = []
# draft version and published version equal to False/null means those drafts were discarded.
for component in lib_api.get_library_components(library_key, draft=False, published=False):
usage_key = LibraryUsageLocatorV2(
library_key,
component.component_type.name,
component.local_key,
)
meili_ids.append(meili_id_from_opaque_key(usage_key))
return delete_index_docs(meili_ids, wait=wait)
return _update_index_docs(docs)
def upsert_block_tags_index_docs(usage_key: UsageKey):

View File

@@ -80,6 +80,5 @@ def update_content_library_index_docs(library_key_str: str) -> None:
log.info("Updating content index documents for library with id: %s", library_key)
tasks = api.delete_content_library_index_docs(library_key, wait=False) + \
api.upsert_content_library_index_docs(library_key, wait=False)
api.wait_for_meili_tasks(tasks)
api.delete_all_index_docs_for_library(library_key)
api.upsert_content_library_index_docs(library_key)