and notification routing
All 15 queues previously ran through one auto-balanced supervisor.
Horizon's `balance: auto` does not honor queue array order for
priority, so despite queue names implying priority ('high' vs 'low'),
a burst on any one queue could starve any other sharing that
supervisor - e.g. a burst of mmo (image/video optimization, 23
dispatch sites, CPU/IO heavy) could delay high-queue DM/follow
delivery just as easily as it could delay low-queue background work.
Split into 4 supervisors grouped by actual job characteristics
(checked via grep across every ->onQueue() call site, not guessed):
- supervisor-priority: high, inbox, pushnotify, follow, default,
shared - user-facing federation/DM/notification delivery.
- supervisor-fanout: feed, story, groups - bursty timeline/story
fanout writes triggered by posts, likes, and follows.
- supervisor-media: mmo - image/video optimize/resize/thumbnail.
Runs a fixed worker pool (balance: false) instead of auto-scaling,
so it can't claim workers away from the other pools under load.
- supervisor-background: low, delete, adelete, move, intbg - imports,
crawling, account deletion/migration; not time-sensitive.
Moved the shared supervisor shape into `defaults` (keyed per
supervisor name, per Horizon's own merge behavior) so `environments`
only needs to override what actually differs, instead of each
environment fully redefining supervisor-1 from scratch. Existing env
vars (HORIZON_MAX_PROCESSES, HORIZON_MIN_PROCESSES,
HORIZON_BALANCE_STRATEGY, HORIZON_SUPERVISOR_*) keep governing the
priority supervisor for continuity with existing deployments; the
three new supervisors get their own HORIZON_*_MAX_PROCESSES vars
with conservative defaults.
Also:
- Added balanceCooldown: 3 explicitly (previously relied on
SupervisorOptions' own constructor default of the same value -
behavior is unchanged, just no longer implicit).
- Wired LongWaitDetected notification routing
(Horizon::routeMailNotificationsTo/routeSlackNotificationsTo) to
new optional config('horizon.notification_routing') keys, sourced
from env vars. Previously these were hardcoded, commented-out
examples with nowhere to actually alert on the `waits` thresholds
already configured below.
Verified by actually starting `php artisan horizon` and inspecting
`horizon:supervisors`: all 4 supervisors registered with exactly the
intended queues, supervisor-media correctly running fixed (non-auto)
balancing. Cross-checked every ->onQueue() call site in app/ against
the new supervisor queue lists - exact match, no queue dropped or
duplicated. Full test suite (715/715) and Larastan clean.
|
2 weeks ago | |
|---|---|---|
| .ddev | 1 year ago | |
| .github | 2 weeks ago | |
| .vscode | 3 years ago | |
| app | 2 weeks ago | |
| bootstrap | 2 weeks ago | |
| config | 2 weeks ago | |
| database | 2 weeks ago | |
| lang | 3 weeks ago | |
| notes | 4 weeks ago | |
| public | 3 weeks ago | |
| resources | 2 weeks ago | |
| routes | 2 weeks ago | |
| storage | 3 years ago | |
| tests | 2 weeks ago | |
| .dockerignore | 2 weeks ago | |
| .editorconfig | 3 years ago | |
| .env.docker.example | 4 weeks ago | |
| .env.example | 4 weeks ago | |
| .env.testing | 4 weeks ago | |
| .gitattributes | 3 years ago | |
| .gitignore | 4 weeks ago | |
| .markdownlint.json | 3 years ago | |
| .node-version | 4 years ago | |
| .shellcheckrc | 3 years ago | |
| CHANGELOG.md | 2 weeks ago | |
| CODEOWNERS | 3 years ago | |
| CODE_OF_CONDUCT.md | ||
| CONTRIBUTING.md | 2 years ago | |
| DOCKER_COMPOSE_SETUP.md | 4 weeks ago | |
| Dockerfile | 1 month ago | |
| LICENSE | ||
| README.md | 2 weeks ago | |
| SECURITY.md | 5 years ago | |
| artisan | 4 weeks ago | |
| composer.json | 2 weeks ago | |
| composer.lock | 2 weeks ago | |
| crowdin.yml | 3 weeks ago | |
| docker-compose.test.yml | 4 weeks ago | |
| docker-compose.yml | 1 month ago | |
| funding.json | 2 years ago | |
| package-lock.json | 3 weeks ago | |
| package.json | 3 weeks ago | |
| phpstan.neon | 3 weeks ago | |
| phpunit.xml | 3 weeks ago | |
| pint.json | 1 month ago | |
| psalm-baseline.xml | 4 weeks ago | |
| psalm.xml | 4 weeks ago | |
| server.php | ||
| webpack.mix.js | 1 year ago | |
README.md
Introduction
Photo sharing the way it should be. Pixelfed lets your casual shots and creative photography find their audience naturally, without algorithmic barriers. Join millions of people sharing across the fediverse.
Official Documentation
Documentation for Pixelfed can be found on the Pixelfed documentation website.
Run on YunoHost
Pixelfed app for YunoHost. See the package source code
License
Pixelfed is open-sourced software licensed under the AGPL license.
Communication
The ways you can communicate on the project are below. Before interacting, please read through the Code Of Conduct.
- Mastodon: @pixelfed@mastodon.social
- E-mail: hello@pixelfed.org
Pixelfed Sponsors
We would like to extend our thanks to the following sponsors for funding Pixelfed development. If you are interested in becoming a sponsor, please visit the Pixelfed Patreon Page
- NLnet Foundation and NGI0 Discovery, part of the Next Generation Internet initiative.
This project is supported by:
