Description
Currently, all application data is stored in a single SQLite database file (data/phuppi.db). This creates unnecessary risk by coupling transient data (sessions, queue jobs) with persistent application data. A corruption or issue in one subsystem could potentially affect the entire application.
This task involves refactoring the application to use separate SQLite database files for sessions and queue jobs, providing better isolation, easier maintenance, and improved recovery options.
Motivation
- Failure Isolation - A corrupted queue database won't affect user data or session state
- Easier Recovery - Queue or session data can be reset independently without affecting the main application
- Reduced Contention - High-frequency session/queue operations won't lock the main database
- Simplified Debugging - Each subsystem's data can be inspected independently
- Defense in Depth - Each storage boundary limits the blast radius of failures
Scope
Files to Create/Modify:
| File |
Action |
Purpose |
data/sessions.db |
Create |
Dedicated SQLite file for session data |
data/queue.db |
Create |
Dedicated SQLite file for queue jobs |
src/Phuppi/DatabaseSession.php |
Modify |
Connect to sessions.db instead of main DB |
src/Phuppi/Queue/QueueManager.php |
Modify |
Connect to queue.db instead of main DB |
src/migrations/001_install_migration.php |
Modify |
Create sessions table in sessions.db |
src/migrations/007_add_video_preview_jobs_table.php |
Modify |
Create queue jobs table in queue.db |
src/bootstrap.php |
Modify |
Update database connection initialization |
docker-compose.yml |
Modify |
Add volume mappings for new database files |
Data Isolation Structure:
data/
├── phuppi.db # Main application data (users, files, settings, etc.)
├── sessions.db # User sessions only
└── queue.db # Queue jobs only
Implementation Steps
- Create new database files - Initialize
sessions.db and queue.db with appropriate schema
- Update DatabaseSession - Modify to connect to
sessions.db via PDO
- Update QueueManager - Modify to connect to
queue.db via PDO
- Update migrations - Ensure migrations create tables in the correct database files
- Update bootstrap - Initialize separate PDO connections for each database
- Update Docker configuration - Add volume mappings for persistence
- Test isolation - Verify each database operates independently
- Document changes - Update documentation to reflect new data structure
Backward Compatibility
- Existing
phuppi.db remains unchanged for main application data
- Session and queue data migration from main DB to separate files should be handled during upgrade
- Configuration option to specify custom database paths for flexibility
Testing Considerations
- Verify sessions persist correctly in
sessions.db
- Verify queue jobs process correctly from
queue.db
- Test failure scenarios (corrupted session/queue DB doesn't affect main app)
- Test data reset scenarios (clearing sessions/queue independently)
- Verify Docker volume persistence across container restarts
Risk Assessment
| Risk |
Mitigation |
| Migration complexity |
Provide migration script; test thoroughly |
| Connection overhead |
Use persistent PDO connections |
| File management |
Clear naming conventions and documentation |
References
Labels
enhancement database refactoring security
Description
Currently, all application data is stored in a single SQLite database file (
data/phuppi.db). This creates unnecessary risk by coupling transient data (sessions, queue jobs) with persistent application data. A corruption or issue in one subsystem could potentially affect the entire application.This task involves refactoring the application to use separate SQLite database files for sessions and queue jobs, providing better isolation, easier maintenance, and improved recovery options.
Motivation
Scope
Files to Create/Modify:
data/sessions.dbdata/queue.dbsrc/Phuppi/DatabaseSession.phpsessions.dbinstead of main DBsrc/Phuppi/Queue/QueueManager.phpqueue.dbinstead of main DBsrc/migrations/001_install_migration.phpsessions.dbsrc/migrations/007_add_video_preview_jobs_table.phpqueue.dbsrc/bootstrap.phpdocker-compose.ymlData Isolation Structure:
Implementation Steps
sessions.dbandqueue.dbwith appropriate schemasessions.dbvia PDOqueue.dbvia PDOBackward Compatibility
phuppi.dbremains unchanged for main application dataTesting Considerations
sessions.dbqueue.dbRisk Assessment
References
src/Phuppi/DatabaseSession.php,src/Phuppi/Queue/QueueManager.phpLabels
enhancementdatabaserefactoringsecurity