Initial commit: MetaVox loadtest playbook
Ansible playbook voor het opzetten van een MetaVox loadtest omgeving: - 50 teamfolders met 10.000 bestanden elk (500K totaal) - 100 metadata velddefinities (10 teamfolder + 90 file-level) - 3-niveau mappenstructuur (10 hoofdmappen x 3 submappen) - ~43M metadata records via directe MySQL inserts - Geoptimaliseerde database indexes (7 redundante indexes gedropt) Gebruikt directe filesystem writes en MySQL inserts i.p.v. WebDAV/API voor maximale performance. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
73
templates/fast_create_files.sh.j2
Normal file
73
templates/fast_create_files.sh.j2
Normal file
@@ -0,0 +1,73 @@
|
||||
#!/bin/bash
|
||||
# =============================================================================
|
||||
# Fast File Creator - Direct filesystem
|
||||
# =============================================================================
|
||||
# Maakt {{ files_per_teamfolder }} bestanden per teamfolder aan op het filesystem.
|
||||
# Veel sneller dan WebDAV uploads (~500K bestanden in ~40 minuten).
|
||||
# =============================================================================
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
GROUPFOLDERS_DIR="{{ groupfolders_dir }}"
|
||||
NUM_TEAMFOLDERS={{ num_teamfolders }}
|
||||
FILES_PER_FOLDER={{ files_per_teamfolder }}
|
||||
FILE_PREFIX="{{ dummy_file_prefix }}"
|
||||
FILE_EXT="{{ dummy_file_extension }}"
|
||||
FILE_CONTENT="{{ dummy_file_content }}"
|
||||
|
||||
echo "============================================================"
|
||||
echo "Fast File Creator - Direct Filesystem"
|
||||
echo "Doel: ${NUM_TEAMFOLDERS} folders x ${FILES_PER_FOLDER} bestanden"
|
||||
echo "============================================================"
|
||||
|
||||
# Haal groupfolder mapping op (API folder_id -> disk folder number)
|
||||
GF_IDS=$(mysql -u root {{ nextcloud_db_name }} -N -e \
|
||||
"SELECT folder_id FROM oc_group_folders
|
||||
WHERE mount_point LIKE '{{ teamfolder_prefix }}-%'
|
||||
ORDER BY folder_id
|
||||
LIMIT ${NUM_TEAMFOLDERS}")
|
||||
|
||||
TOTAL_CREATED=0
|
||||
FOLDER_COUNT=0
|
||||
START_TIME=$(date +%s)
|
||||
|
||||
for GF_ID in ${GF_IDS}; do
|
||||
FOLDER_COUNT=$((FOLDER_COUNT + 1))
|
||||
FILES_DIR="${GROUPFOLDERS_DIR}/${GF_ID}/files"
|
||||
|
||||
# Maak files directory aan als die niet bestaat
|
||||
mkdir -p "${FILES_DIR}"
|
||||
|
||||
# Tel bestaande bestanden
|
||||
EXISTING=$(find "${FILES_DIR}" -maxdepth 1 -name "${FILE_PREFIX}-*.${FILE_EXT}" 2>/dev/null | wc -l)
|
||||
if [ "${EXISTING}" -ge "${FILES_PER_FOLDER}" ]; then
|
||||
echo "[SKIP] Folder ${FOLDER_COUNT} (gf_id=${GF_ID}): ${EXISTING} bestanden bestaan al"
|
||||
TOTAL_CREATED=$((TOTAL_CREATED + EXISTING))
|
||||
continue
|
||||
fi
|
||||
|
||||
# Maak bestanden aan
|
||||
CREATED=0
|
||||
for i in $(seq -w 1 ${FILES_PER_FOLDER}); do
|
||||
FNAME="${FILE_PREFIX}-${i}.${FILE_EXT}"
|
||||
FPATH="${FILES_DIR}/${FNAME}"
|
||||
if [ ! -f "${FPATH}" ]; then
|
||||
echo "${FILE_CONTENT}" > "${FPATH}"
|
||||
CREATED=$((CREATED + 1))
|
||||
fi
|
||||
done
|
||||
|
||||
# Fix ownership
|
||||
chown -R www-data:www-data "${FILES_DIR}"
|
||||
|
||||
TOTAL_CREATED=$((TOTAL_CREATED + FILES_PER_FOLDER))
|
||||
ELAPSED=$(( $(date +%s) - START_TIME ))
|
||||
echo "[DONE] Folder ${FOLDER_COUNT} (gf_id=${GF_ID}): ${CREATED} nieuw aangemaakt (${ELAPSED}s, totaal: ${TOTAL_CREATED})"
|
||||
done
|
||||
|
||||
ELAPSED=$(( $(date +%s) - START_TIME ))
|
||||
echo ""
|
||||
echo "============================================================"
|
||||
echo "Voltooid in ${ELAPSED} seconden"
|
||||
echo "Totaal bestanden: ${TOTAL_CREATED}"
|
||||
echo "============================================================"
|
||||
Reference in New Issue
Block a user