add abra command for vacuum full

This commit is contained in:
notplants
2026-04-29 13:40:41 -04:00
parent 3fab725957
commit 91efd92d31
4 changed files with 33 additions and 11 deletions

View File

@ -202,10 +202,10 @@ RETENTION_MAX_LIFETIME=4w
## State compression (reduces database bloat from federation) ## State compression (reduces database bloat from federation)
## Runs synapse_auto_compressor daily, built from source on first start ## Runs synapse_auto_compressor daily, built from source on first start
#COMPOSE_FILE="$COMPOSE_FILE:compose.compress-state.yml" #COMPOSE_FILE="$COMPOSE_FILE:compose.compress-state.yml"
#COMPRESS_STATE_ENTRYPOINT_VERSION=v1 # See https://github.com/matrix-org/rust-synapse-compress-state#running-options
#STATE_COMPRESS_CHUNK_SIZE=500 #STATE_COMPRESS_CHUNK_SIZE=500
#STATE_COMPRESS_CHUNKS=100 #STATE_COMPRESS_CHUNKS=100
#STATE_COMPRESS_INTERVAL=86400 #STATE_COMPRESS_SCHEDULE=0 3 * * *
## Admin interface at /admin ## Admin interface at /admin
#COMPOSE_FILE="$COMPOSE_FILE:compose.admin.yml" #COMPOSE_FILE="$COMPOSE_FILE:compose.admin.yml"

10
abra.sh
View File

@ -10,6 +10,16 @@ export WK_SERVER_VERSION=v1
export WK_CLIENT_VERSION=v1 export WK_CLIENT_VERSION=v1
export PG_BACKUP_VERSION=v2 export PG_BACKUP_VERSION=v2
export ADMIN_CONFIG_VERSION=v1 export ADMIN_CONFIG_VERSION=v1
export COMPRESS_STATE_ENTRYPOINT_VERSION=v5
vacuum_state() {
echo "WARNING: VACUUM FULL locks the state_groups_state table."
echo "Synapse will be unable to process events until this completes."
echo "Running VACUUM FULL on state_groups_state..."
psql -U synapse -d synapse -c "VACUUM FULL state_groups_state;"
echo "VACUUM FULL complete."
psql -U synapse -d synapse -c "SELECT pg_size_pretty(pg_total_relation_size('state_groups_state'::regclass)) AS size;"
}
set_admin () { set_admin () {
admin=akadmin admin=akadmin

View File

@ -7,7 +7,7 @@ services:
environment: environment:
- STATE_COMPRESS_CHUNK_SIZE=${STATE_COMPRESS_CHUNK_SIZE:-500} - STATE_COMPRESS_CHUNK_SIZE=${STATE_COMPRESS_CHUNK_SIZE:-500}
- STATE_COMPRESS_CHUNKS=${STATE_COMPRESS_CHUNKS:-100} - STATE_COMPRESS_CHUNKS=${STATE_COMPRESS_CHUNKS:-100}
- STATE_COMPRESS_INTERVAL=${STATE_COMPRESS_INTERVAL:-86400} - STATE_COMPRESS_SCHEDULE=${STATE_COMPRESS_SCHEDULE:-0 3 * * *}
secrets: secrets:
- db_password - db_password
configs: configs:

View File

@ -7,7 +7,7 @@ DB_PASS=$(cat /run/secrets/db_password)
CONN="postgresql://synapse:${DB_PASS}@db:5432/synapse" CONN="postgresql://synapse:${DB_PASS}@db:5432/synapse"
CHUNK_SIZE="${STATE_COMPRESS_CHUNK_SIZE:-500}" CHUNK_SIZE="${STATE_COMPRESS_CHUNK_SIZE:-500}"
CHUNKS="${STATE_COMPRESS_CHUNKS:-100}" CHUNKS="${STATE_COMPRESS_CHUNKS:-100}"
INTERVAL="${STATE_COMPRESS_INTERVAL:-86400}" SCHEDULE="${STATE_COMPRESS_SCHEDULE:-0 3 * * *}"
# Build from source if binary doesn't exist # Build from source if binary doesn't exist
if [ ! -f "$BINARY" ]; then if [ ! -f "$BINARY" ]; then
@ -25,10 +25,22 @@ else
echo "[compress-state] Using cached binary" echo "[compress-state] Using cached binary"
fi fi
# Run compressor in a loop # Run once at startup
while true; do echo "[compress-state] Running initial compression at $(date)"
echo "[compress-state] Running at $(date)" "$BINARY" -p "$CONN" -c "$CHUNK_SIZE" -n "$CHUNKS" || echo "[compress-state] Error: $?"
"$BINARY" -p "$CONN" -c "$CHUNK_SIZE" -n "$CHUNKS" || echo "[compress-state] Error: $?"
echo "[compress-state] Done. Sleeping ${INTERVAL}s" # Set up cron job
sleep "$INTERVAL" CRON_SCRIPT="/build/run_compressor.sh"
done cat > "$CRON_SCRIPT" <<EOF
#!/bin/sh
echo "[compress-state] Running at \$(date)"
$BINARY -p "$CONN" -c $CHUNK_SIZE -n $CHUNKS || echo "[compress-state] Error: \$?"
echo "[compress-state] Done at \$(date)"
EOF
chmod +x "$CRON_SCRIPT"
echo "$SCHEDULE $CRON_SCRIPT" | crontab -
echo "[compress-state] Cron scheduled: $SCHEDULE"
# Run crond in the foreground
exec crond -f -l 2