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>
74 lines
2.7 KiB
Django/Jinja
74 lines
2.7 KiB
Django/Jinja
#!/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 "============================================================"
|