diff options
-rw-r--r-- | fatcat_scholar/search.py | 17 | ||||
-rw-r--r-- | fatcat_scholar/web.py | 4 |
2 files changed, 15 insertions, 6 deletions
diff --git a/fatcat_scholar/search.py b/fatcat_scholar/search.py index 2ae0ba9..e9f2bc8 100644 --- a/fatcat_scholar/search.py +++ b/fatcat_scholar/search.py @@ -417,16 +417,25 @@ def do_fulltext_search( ) -def es_scholar_index_exists() -> bool: +def es_scholar_index_alive() -> bool: """ - Checks if the configured back-end elasticsearch index exists. - Intended to be used in health checks. + Checks if the configured back-end elasticsearch index exists and can + service queries. Intended to be used in health checks. + + Note that the regular client.indices.exists(index) function call will + return an error if the cluster leader can not be reached, even if the local + node could service queries in a read-only manner. + + The client.indices.get_mapping(index) API, or the client.cat.count(index) + API, both return quickly and indicate that queries can be run against the + index. """ try: - resp = es_client.indices.exists(settings.ELASTICSEARCH_QUERY_FULLTEXT_INDEX) + resp = es_client.indices.get_mapping(settings.ELASTICSEARCH_QUERY_FULLTEXT_INDEX) except elasticsearch.exceptions.RequestError as e_raw: if e_raw.status_code == 404: return False else: raise e_raw return resp + diff --git a/fatcat_scholar/web.py b/fatcat_scholar/web.py index 6cda5b7..895af18 100644 --- a/fatcat_scholar/web.py +++ b/fatcat_scholar/web.py @@ -25,7 +25,7 @@ from fatcat_scholar.search import ( process_query, FulltextQuery, FulltextHits, - es_scholar_index_exists, + es_scholar_index_alive, ) from fatcat_scholar.schema import ScholarDoc @@ -118,7 +118,7 @@ def health_get() -> Any: """ Checks that connection back to elasticsearch index is working. """ - if not es_scholar_index_exists(): + if not es_scholar_index_alive(): raise HTTPException(status_code=503) return Response() |