mirror of
https://github.com/appwrite/appwrite.git
synced 2026-05-26 13:51:13 +00:00
Adds two DI factories and wires them where coordination is needed:
- distributedLock — skip on contention, void return. For idempotent
fan-out where N pods doing the same write is wasteful but losing
the race is correct.
- distributedLockOrFail — blocking acquire (3s default) then throws
GENERAL_RESOURCE_LOCKED (HTTP 409) on contention. For
read-modify-write on shared mutable state where a silent skip
would drop a user's change.
Both factories: _APP_LOCKING_ENABLED kill switch (set 'disabled' for
fail-open), fail-open on Redis-unreachable, and a lock.attempts
telemetry counter sliced by outcome and target collection.
Wired sites:
- shared/api.php × 3 (distributedLock): keys.accessedAt + sdks,
projects.accessedAt, users.accessedAt. Reduces redundant writes
and cache-purge fan-out under request bursts on the same project.
- Project/Services/Update.php × 1 (distributedLockOrFail): the
services map toggle. Re-reads inside the lock so the baseline
reflects concurrent updates. Two simultaneous toggles to
different services no longer lose one of them.
Lock key namespace: lock:platform:{collection}:{id}.
Dep: premtsd-code/lock pinned to a specific commit as a development
preview. Migration to utopia-php/lock is a follow-up once that
package is published.
129 lines
4.2 KiB
JSON
129 lines
4.2 KiB
JSON
{
|
|
"name": "appwrite/server-ce",
|
|
"description": "End to end backend server for frontend and mobile apps.",
|
|
"type": "project",
|
|
"license": "BSD-3-Clause",
|
|
"authors": [
|
|
{
|
|
"name": "Eldad Fux",
|
|
"email": "eldad@appwrite.io"
|
|
}
|
|
],
|
|
"scripts": {
|
|
"test": "vendor/bin/phpunit",
|
|
"lint": "vendor/bin/pint --test --config pint.json",
|
|
"format": "vendor/bin/pint --config pint.json",
|
|
"analyze": "./vendor/bin/phpstan analyse -c phpstan.neon --memory-limit=1G",
|
|
"bench": "vendor/bin/phpbench run --report=benchmark",
|
|
"check": "./vendor/bin/phpstan analyse -c phpstan.neon --memory-limit=1G",
|
|
"installer:clean": "php src/Appwrite/Platform/Installer/Server.php --clean",
|
|
"installer:dev": "docker compose build && composer installer:clean && php src/Appwrite/Platform/Installer/Server.php --docker"
|
|
},
|
|
"autoload": {
|
|
"psr-4": {
|
|
"Appwrite\\": "src/Appwrite",
|
|
"Executor\\": "src/Executor",
|
|
"Utopia\\Bus\\": "src/Utopia/Bus"
|
|
}
|
|
},
|
|
"autoload-dev": {
|
|
"psr-4": {
|
|
"Tests\\E2E\\": "tests/e2e",
|
|
"Tests\\Unit\\": "tests/unit",
|
|
"Appwrite\\Tests\\": "tests/extensions"
|
|
}
|
|
},
|
|
"minimum-stability": "dev",
|
|
"prefer-stable": true,
|
|
"require": {
|
|
"php": ">=8.3.0",
|
|
"ext-curl": "*",
|
|
"ext-imagick": "*",
|
|
"ext-mbstring": "*",
|
|
"ext-json": "*",
|
|
"ext-yaml": "*",
|
|
"ext-dom": "*",
|
|
"ext-redis": "*",
|
|
"ext-swoole": "6.*",
|
|
"ext-pdo": "*",
|
|
"ext-openssl": "*",
|
|
"ext-zlib": "*",
|
|
"ext-sockets": "*",
|
|
"appwrite/php-runtimes": "0.19.*",
|
|
"appwrite/php-clamav": "2.0.*",
|
|
"utopia-php/abuse": "1.2.*",
|
|
"utopia-php/agents": "1.2.*",
|
|
"utopia-php/analytics": "0.15.*",
|
|
"utopia-php/audit": "2.2.*",
|
|
"utopia-php/auth": "0.5.*",
|
|
"utopia-php/cache": "1.0.*",
|
|
"utopia-php/cli": "0.23.*",
|
|
"utopia-php/compression": "0.1.*",
|
|
"utopia-php/config": "1.*",
|
|
"utopia-php/console": "0.1.*",
|
|
"utopia-php/database": "5.*",
|
|
"utopia-php/detector": "0.2.*",
|
|
"utopia-php/domains": "1.*",
|
|
"utopia-php/emails": "0.6.*",
|
|
"utopia-php/dns": "1.6.*",
|
|
"utopia-php/dsn": "0.2.1",
|
|
"utopia-php/http": "0.34.*",
|
|
"utopia-php/fetch": "0.5.*",
|
|
"utopia-php/image": "0.8.*",
|
|
"utopia-php/locale": "0.8.*",
|
|
"utopia-php/logger": "0.6.*",
|
|
"utopia-php/messaging": "0.22.*",
|
|
"utopia-php/migration": "1.9.*",
|
|
"utopia-php/platform": "0.13.*",
|
|
"utopia-php/pools": "1.*",
|
|
"utopia-php/span": "1.1.*",
|
|
"utopia-php/preloader": "0.2.*",
|
|
"utopia-php/queue": "0.17.*",
|
|
"utopia-php/servers": "0.3.*",
|
|
"utopia-php/registry": "0.5.*",
|
|
"utopia-php/storage": "1.0.*",
|
|
"utopia-php/system": "0.10.*",
|
|
"utopia-php/telemetry": "0.2.*",
|
|
"utopia-php/vcs": "3.*",
|
|
"utopia-php/websocket": "1.0.*",
|
|
"matomo/device-detector": "6.4.*",
|
|
"dragonmantank/cron-expression": "3.4.*",
|
|
"phpmailer/phpmailer": "6.9.*",
|
|
"chillerlan/php-qrcode": "4.3.*",
|
|
"adhocore/jwt": "1.1.*",
|
|
"spomky-labs/otphp": "11.*",
|
|
"webonyx/graphql-php": "15.31.*",
|
|
"league/csv": "9.14.*",
|
|
"enshrined/svg-sanitize": "0.22.*",
|
|
"premtsd-code/lock": "dev-main#7ec10dae33b950bc0f473c51e5b165b20754760c"
|
|
},
|
|
"repositories": [
|
|
{
|
|
"type": "vcs",
|
|
"url": "https://github.com/premtsd-code/lock"
|
|
}
|
|
],
|
|
"require-dev": {
|
|
"ext-fileinfo": "*",
|
|
"appwrite/sdk-generator": "*",
|
|
"brianium/paratest": "7.*",
|
|
"phpunit/phpunit": "12.*",
|
|
"swoole/ide-helper": "6.*",
|
|
"phpstan/phpstan": "^2.0",
|
|
"textalk/websocket": "1.5.*",
|
|
"czproject/git-php": "4.*",
|
|
"laravel/pint": "1.*"
|
|
},
|
|
"provide": {
|
|
"ext-phpiredis": "*"
|
|
},
|
|
"config": {
|
|
"platform": {
|
|
},
|
|
"allow-plugins": {
|
|
"php-http/discovery": true,
|
|
"tbachert/spi": true
|
|
}
|
|
}
|
|
}
|