Briefly, this error occurs when Elasticsearch detects an index on the local file system that is not present in the cluster metadata. This is known as a “dangling” index. Elasticsearch schedules these indices for deletion or auto-import to the cluster state. To resolve this issue, you can manually import the dangling index using the Import Dangling Index API. Alternatively, you can adjust the “gateway.auto_import_dangling_indices” setting to “true” to automatically import dangling indices, or to “false” to prevent auto-import and deletion.
This guide will help you check for common problems that cause the log ” [{}] dangling index; exists on local file system; but not in cluster metadata; scheduling to delete in [{}]; auto import to cluster state [{}] ” to appear. To understand the issues related to this log, read the explanation below about the following Elasticsearch concepts: cluster, dangling, delete and discovery-file.
Overview
DELETE is an Elasticsearch API which removes a document from a specific index. This API requires an index name and _id document to delete the document.
Delete a document
DELETE /my_index/_doc/1
Notes
- A delete request throws 404 error code if the document does not already exist in the index.
- If you want to delete a set of documents that matches a query, you need to use delete by query API.
Log Context
Log “[{}] dangling index; exists on local file system; but not in cluster metadata; scheduling to delete in [{}]; auto import to cluster state [{}]” classname is LocalGatewayMetaState.java.
We extracted the following from Elasticsearch source code for those seeking an in-depth context :
danglingIndices.put(indexName; new DanglingIndex(indexName; null)); } else if (danglingTimeout.millis() == 0) { logger.info("[{}] dangling index; exists on local file system; but not in cluster metadata; timeout set to 0; deleting now"; indexName); indicesService.deleteIndexStore("dangling index with timeout set to 0"; indexMetaData; state); } else { logger.info("[{}] dangling index; exists on local file system; but not in cluster metadata; scheduling to delete in [{}]; auto import to cluster state [{}]"; indexName; danglingTimeout; autoImportDangled); danglingIndices.put(indexName; new DanglingIndex(indexName; threadPool.schedule(danglingTimeout; ThreadPool.Names.SAME; new RemoveDanglingIndex(indexMetaData))));