mirror of
https://github.com/hanzoai/vector.git
synced 2026-10-30 18:18:56 +00:00
85 lines
2.1 KiB
Bash
Executable File
85 lines
2.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# 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
|