Files
metavox-loadtest/templates/fast_create_files.sh.j2
Sam428-png a1eda430c8 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>
2026-03-16 16:55:30 +01:00

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 "============================================================"