Spaces:
Build error
Build error
# Clean old RocksDB log files, always leave the last two. | |
# | |
# On invocation, the script will prompt whether to run in dry mode. | |
# | |
# Script MUST be run in the ./storage directory of Qdrant. | |
# Number of newest old logs to keep | |
KEEP_N=2 | |
DRY=1 | |
CLEAN_COUNT=0 | |
set -e | |
function main { | |
# Ensure script is run in storage directory | |
if [[ "$(basename "$(pwd)")" != "storage" ]]; then | |
echo Error: script must be run in ./storage directory | |
echo Currently in "$(pwd)" | |
exit 1 | |
fi | |
echo This script removes old and obsolete log files to clean up disk space. | |
echo It is potentionally dangerous. Always make sure you have a backup before running this. | |
echo Qdrant must be stopped before running this script. | |
# Ask for dry run | |
yes_or_no "Dry run?" || DRY=0 | |
# Confirmation | |
if [[ $DRY == 0 ]]; then | |
yes_or_no "Are you sure you want to continue?" || (echo "Aborted"; exit 1) | |
fi | |
# Go through collections/shards/segments to clean | |
for collection in $(find collections/* -maxdepth 0 -type d); do | |
echo "Cleaning collection: $collection" | |
for shard in $(find $collection/* -maxdepth 0 -type d); do | |
for segment in $(find $shard/segments/* -maxdepth 0 -type d); do | |
clean_segment "$segment" | |
done | |
done | |
done | |
echo Cleaned $CLEAN_COUNT old log files | |
} | |
function yes_or_no { | |
while true; do | |
read -p "$* [y/n]: " yn | |
case $yn in | |
[Yy]*) return 0 ;; | |
[Nn]*) return 1 ;; | |
esac | |
done | |
} | |
function clean_segment { | |
remove_oldest_logs_in "$segment" | |
if [[ -d "$segment/payload_index" ]]; then | |
remove_oldest_logs_in "$segment/payload_index" | |
fi | |
} | |
function remove_oldest_logs_in { | |
FILES=$(find "$1" -maxdepth 1 -name 'LOG.old.*' | sort -n | head -n -${KEEP_N}) | |
CLEAN_COUNT=$((CLEAN_COUNT + $(echo "$FILES" | wc -w))) | |
remove $FILES | |
} | |
function remove { | |
if [[ -z "$*" ]]; then | |
return | |
fi | |
echo "+ rm -f" $* | |
if [[ $DRY == 0 ]]; then | |
rm -f $* | |
fi | |
} | |
main | |