openfire-docker-compose/optional/sql/README.md

3.3 KiB

Optional SQL Scripts

This directory contains optional SQL scripts for generating test data in Openfire Docker environments. These scripts are useful for performance testing, debugging, and simulating production-like environments.

Directory Structure

optional/sql/
├── postgresql/          # Scripts for PostgreSQL databases
│   ├── generate-test-messages.sql
│   ├── create-50-rooms.sql
│   ├── performance-test-10000-rooms.sql
│   ├── performance-test-200-rooms-with-data.sql
│   └── set-worker-count.sql
└── mssql/               # Scripts for Microsoft SQL Server
    ├── generate-test-messages.sql
    └── create-50-rooms.sql

Available Scripts

PostgreSQL Scripts

Script Purpose
generate-test-messages.sql Generates ~410,000 MUC messages across 2 rooms. Useful for testing slow startup issues due to large message history.
create-50-rooms.sql Creates 48 additional rooms (IDs 3-50) and redistributes messages across all 50 rooms.
performance-test-10000-rooms.sql Creates 10,000 minimal rooms with single owner affiliation. Ideal for testing room loading at scale without message history overhead.
performance-test-200-rooms-with-data.sql Creates 200 rooms with realistic data: varied affiliations (owners, admins, members) and 100-500 messages per room (~60,000 total).
set-worker-count.sql Template for setting the xmpp.muc.loading.workers property to control parallel room loading.

MSSQL Scripts

Script Purpose
generate-test-messages.sql MSSQL version of the 410,000 message generator.
create-50-rooms.sql MSSQL version of the 50 rooms creator.

Usage

Copy the desired script to your deployment's sql/ directory with a numbered prefix:

# For simple deployment with 10,000 rooms
cp optional/sql/postgresql/performance-test-10000-rooms.sql simple/sql/001-perf-rooms.sql

# Start fresh (removes existing database)
./start.sh

Scripts in the sql/ directory run automatically on container startup via PostgreSQL's docker-entrypoint-initdb.d mechanism.

Option 2: Run manually against running database

# PostgreSQL example
docker exec -i simple-db-1 psql -U openfire -d openfire \
  < optional/sql/postgresql/generate-test-messages.sql

# MSSQL example
docker exec -it mssql_server /opt/mssql-tools18/bin/sqlcmd \
  -S localhost -U sa -P 'YourPassword' -d openfire -C \
  -i /path/to/script.sql

Choosing a Test Dataset

Use Case Recommended Script
Test MUC history loading performance generate-test-messages.sql + create-50-rooms.sql
Test room loading at scale (many rooms, no messages) performance-test-10000-rooms.sql
Test realistic room loading (rooms with affiliations + messages) performance-test-200-rooms-with-data.sql
Test parallel worker configuration Any data script + set-worker-count.sql

Notes

  • Scripts numbered 001-* onwards run after 000-init-openfire.sql (the base schema)
  • Some scripts (like create-50-rooms.sql) expect existing rooms/messages to work with
  • Performance test scripts replace existing rooms, so use on fresh databases
  • Worker count changes require an Openfire restart to take effect