Я использую сценарий оболочки для запуска запроса curl, который удаляет все документы определенного типа в моем кластере Elasticsearch. В случае успеха запускается Logstash и пытается переиндексировать документы удаленного типа.
printf "\n%s\n" "Sending delete request..."
RESPONSE=$(curl --max-time 600 -XPOST
"https://mycluster.com:9243/locations/ca/_delete_by_query?conflicts=proceed" -H
'Content-Type: application/json' -d' { "query": { "match_all": {} } }'
--user user:password)
if [[ $RESPONSE == *"deleted"* ]]; then
echo $RESPONSE
printf "\n%s\n" "Delete successful, starting Logstash..."
cd /home/denroot/EP-logstash && bin/logstash -f /home/denroot/EP-
logstash-configs/locations/create/california.config
else
echo $RESPONSE
printf "\n%s\n" "Delete failed, shutting down..."
fi
Проблема, с которой я столкнулся, заключается в том, что этот конкретный тип содержит более 5 миллионов документов. Задача удаления Elasticsearch не может завершиться до истечения 5 минут, и мой запрос curl завершается с кодом выхода 0. Кажется, я не могу предотвратить это с помощью --max-time. Обычно, когда задача удаления завершается в Elasticsearch, она отправляет обратно тело ответа JSON, которое мне нужно для правильной работы моей логики потока управления. Любая помощь в предотвращении этой 5-минутной проблемы с выходом будет принята с благодарностью, поскольку я не могу найти прецедента.