Spaces:
Build error
Build error
# Script to run qdrant in docker container and handle contingencies, like OOM. | |
# The functioning logic is as follows: | |
# - If recovery mode is allowed, we check if qdrant was killed during initialization or not. | |
# - If it was killed during initialization, we remove run qdrant in recovery mode | |
# - If it was killed after initialization, do nothing and restart container | |
# - If recovery mode is not allowed, we just restart container | |
_term () { | |
kill -TERM "$QDRANT_PID" 2>/dev/null | |
} | |
trap _term SIGTERM | |
_interrupt () { | |
kill -INT "$QDRANT_PID" 2>/dev/null | |
} | |
trap _interrupt SIGINT | |
./qdrant $@ & | |
# Get PID for the traps | |
QDRANT_PID=$! | |
wait $QDRANT_PID | |
EXIT_CODE=$? | |
QDRANT_ALLOW_RECOVERY_MODE=${QDRANT_ALLOW_RECOVERY_MODE:-false} | |
# Check that recovery mode is allowed | |
if [ "$QDRANT_ALLOW_RECOVERY_MODE" != true ]; then | |
exit $EXIT_CODE | |
fi | |
# Check that qdrant was killed (exit code 137) | |
# Ideally, we want to catch only OOM, but it's not possible to distinguish it from random kill signal | |
if [ $EXIT_CODE != 137 ]; then | |
exit $EXIT_CODE | |
fi | |
QDRANT_INIT_FILE_PATH=${QDRANT_INIT_FILE_PATH:-'.qdrant-initialized'} | |
RECOVERY_MESSAGE="Qdrant was killed during initialization. Most likely it's Out-of-Memory. | |
Please check memory consumption, increase memory limit or remove some collections and restart" | |
# Check that qdrant was initialized | |
# Qdrant creates QDRANT_INIT_FILE_PATH file after initialization | |
# So if it doesn't exist, qdrant was killed during initialization | |
if [ ! -f "$QDRANT_INIT_FILE_PATH" ]; then | |
# Run qdrant in recovery mode. | |
# No collection operations are allowed in recovery mode except for removing collections | |
QDRANT__STORAGE__RECOVERY_MODE="$RECOVERY_MESSAGE" ./qdrant $@ & | |
# Get PID for the traps | |
QDRANT_PID=$! | |
wait $QDRANT_PID | |
exit $? | |
fi | |
exit $EXIT_CODE | |