fix handle unneeded alias overwrite, additional migration edge cases
This commit is contained in:
parent
afb3582bcf
commit
fcd97f55bd
|
|
@ -13,6 +13,7 @@ from appsettings.src.snapshot import ElasticSnapshot
|
|||
from common.src.es_connect import ElasticWrap
|
||||
from common.src.helper import get_mapping
|
||||
from deepdiff import DeepDiff
|
||||
from deepdiff.model import DiffLevel
|
||||
from django.conf import settings
|
||||
|
||||
|
||||
|
|
@ -150,24 +151,37 @@ class ElasticIndex:
|
|||
return MappingAction.REINDEX
|
||||
|
||||
added = diff.get("dictionary_item_added", [])
|
||||
has_additions = bool(added)
|
||||
reindex_from_added = self._needs_reindex(diff_items=added)
|
||||
if reindex_from_added:
|
||||
return MappingAction.REINDEX
|
||||
|
||||
for item in diff.get("values_changed", []):
|
||||
path = item.path(output_format="list")
|
||||
if not path:
|
||||
continue
|
||||
removed = diff.get("dictionary_item_removed", [])
|
||||
reindex_from_removed = self._needs_reindex(diff_items=removed)
|
||||
if reindex_from_removed:
|
||||
return MappingAction.REINDEX
|
||||
|
||||
if path[-1] in self.REINDEX_KEYS:
|
||||
return MappingAction.REINDEX
|
||||
changed = diff.get("values_changed", [])
|
||||
reindex_from_changed = self._needs_reindex(diff_items=changed)
|
||||
if reindex_from_changed:
|
||||
return MappingAction.REINDEX
|
||||
|
||||
# compatible addition
|
||||
has_additions = True
|
||||
|
||||
if has_additions:
|
||||
if added or changed:
|
||||
return MappingAction.PUT_MAPPING
|
||||
|
||||
return MappingAction.NOOP
|
||||
|
||||
def _needs_reindex(self, diff_items: list[DiffLevel]) -> bool:
|
||||
"""check if diff has fields that need reindex"""
|
||||
for item in diff_items:
|
||||
path = item.path(output_format="list")
|
||||
if not path:
|
||||
return False
|
||||
|
||||
if path[-1] in self.REINDEX_KEYS:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def _get_fields_to_delete(self, diff: DeepDiff) -> set[str]:
|
||||
"""fields to remove during next reindex"""
|
||||
removed_fields = set()
|
||||
|
|
@ -192,7 +206,7 @@ class ElasticIndex:
|
|||
self.create_blank(new_version=new_version)
|
||||
self.reindex(new_version=new_version, removed_fields=removed_fields)
|
||||
self.delete_index(by_version=current_version)
|
||||
self.create_alias(new_version=new_version, old_version=current_version)
|
||||
self.create_alias(new_version=new_version)
|
||||
|
||||
def delete_index(self, by_version: int | None):
|
||||
"""delete index passed as argument"""
|
||||
|
|
@ -257,7 +271,7 @@ class ElasticIndex:
|
|||
print(f"{status_code}: {response}")
|
||||
raise ValueError("reindex failed failed")
|
||||
|
||||
def create_alias(self, new_version: int, old_version: int | None = None):
|
||||
def create_alias(self, new_version: int):
|
||||
"""create aliast for moved index"""
|
||||
index_new = f"{self.index_namespace}_v{new_version}"
|
||||
index_old = None
|
||||
|
|
@ -273,16 +287,6 @@ class ElasticIndex:
|
|||
},
|
||||
]
|
||||
}
|
||||
if old_version:
|
||||
index_old = f"{self.index_namespace}_v{old_version}"
|
||||
data["actions"].append(
|
||||
{
|
||||
"remove": {
|
||||
"index": index_old,
|
||||
"alias": self.index_namespace,
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
message = f"create new alias {index_new}"
|
||||
if index_old:
|
||||
|
|
|
|||
Loading…
Reference in New Issue