mirror of
https://github.com/appwrite/appwrite.git
synced 2026-05-26 13:51:13 +00:00
chore: bump utopia-php/http to fix/concurrency-shared-state branch
Adopts the breaking changes from utopia-php/http#251 (concurrency races on shared Http/Route singletons): - Replace `Http::getRoute()` / `setRoute()` with `getResource('route')` and context container writes. - Replace `Route::getMatchedPath()` with `getResource('matchedPath')`. - Use `Adapter::getContext()` for the per-request container in `app/http.php` (`getContainer()` now always returns the global singleton). - Read request params from `$request->getParams()` in the api shutdown hook instead of `Route::getParamsValues()`, which is no longer populated. - Update Swoole promise context key to `__utopia_http_context`. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
3d3f5934c6
commit
7f41f3ef49
@@ -856,14 +856,14 @@ Http::init()
|
||||
// Only run Router when external domain
|
||||
if (!\in_array($hostname, $platformHostnames) || !empty($previewHostname)) {
|
||||
if (router($utopia, $dbForPlatform, $getProjectDB, $swooleRequest, $request, $response, $log, $queueForEvents, $bus, $executor, $geodb, $isResourceBlocked, $platform, $previewHostname, $authorization, $apiKey, $queueForDeletes, $executionsRetentionCount)) {
|
||||
$utopia->getRoute()?->label('router', true);
|
||||
$utopia->getResource('route')?->label('router', true);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Request format
|
||||
*/
|
||||
$route = $utopia->getRoute();
|
||||
$route = $utopia->getResource('route');
|
||||
$request->setRoute($route);
|
||||
|
||||
if ($route === null) {
|
||||
@@ -1148,7 +1148,7 @@ Http::options()
|
||||
// Only run Router when external domain
|
||||
if (!in_array($request->getHostname(), $platformHostnames) || !empty($previewHostname)) {
|
||||
if (router($utopia, $dbForPlatform, $getProjectDB, $swooleRequest, $request, $response, $log, $queueForEvents, $bus, $executor, $geodb, $isResourceBlocked, $platform, $previewHostname, $authorization, $apiKey, $queueForDeletes, $executionsRetentionCount)) {
|
||||
$utopia->getRoute()?->label('router', true);
|
||||
$utopia->getResource('route')?->label('router', true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1183,7 +1183,11 @@ Http::error()
|
||||
->inject('authorization')
|
||||
->action(function (Throwable $error, Http $utopia, Request $request, Response $response, Document $project, ?Logger $logger, Log $log, Bus $bus, Document $devKey, Authorization $authorization) {
|
||||
$version = System::getEnv('_APP_VERSION', 'UNKNOWN');
|
||||
$route = $utopia->getRoute();
|
||||
try {
|
||||
$route = $utopia->getResource('route');
|
||||
} catch (\Throwable $_th) {
|
||||
$route = null;
|
||||
}
|
||||
$class = \get_class($error);
|
||||
$code = $error->getCode();
|
||||
$message = $error->getMessage();
|
||||
@@ -1549,7 +1553,7 @@ Http::get('/robots.txt')
|
||||
$response->text($template->render(false));
|
||||
} else {
|
||||
if (router($utopia, $dbForPlatform, $getProjectDB, $swooleRequest, $request, $response, $log, $queueForEvents, $bus, $executor, $geodb, $isResourceBlocked, $platform, $previewHostname, $authorization, $apiKey, $queueForDeletes, $executionsRetentionCount)) {
|
||||
$utopia->getRoute()?->label('router', true);
|
||||
$utopia->getResource('route')?->label('router', true);
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -1583,7 +1587,7 @@ Http::get('/humans.txt')
|
||||
$response->text($template->render(false));
|
||||
} else {
|
||||
if (router($utopia, $dbForPlatform, $getProjectDB, $swooleRequest, $request, $response, $log, $queueForEvents, $bus, $executor, $geodb, $isResourceBlocked, $platform, $previewHostname, $authorization, $apiKey, $queueForDeletes, $executionsRetentionCount)) {
|
||||
$utopia->getRoute()?->label('router', true);
|
||||
$utopia->getResource('route')?->label('router', true);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -289,7 +289,7 @@ Http::shutdown()
|
||||
->action(function (Http $utopia, Response $response, Request $request) {
|
||||
|
||||
$result = [];
|
||||
$route = $utopia->getRoute();
|
||||
$route = $utopia->getResource('route');
|
||||
$path = APP_STORAGE_CACHE . '/tests.json';
|
||||
$tests = (\file_exists($path)) ? \json_decode(\file_get_contents($path), true) : [];
|
||||
|
||||
|
||||
@@ -101,7 +101,7 @@ Http::init()
|
||||
->inject('apiKey')
|
||||
->inject('authorization')
|
||||
->action(function (Http $utopia, Request $request, Database $dbForPlatform, Database $dbForProject, AuditContext $auditContext, Document $project, User $user, ?Document $session, array $servers, string $mode, Document $team, ?Key $apiKey, Authorization $authorization) {
|
||||
$route = $utopia->getRoute();
|
||||
$route = $utopia->getResource('route');
|
||||
if ($route === null) {
|
||||
throw new AppwriteException(AppwriteException::GENERAL_ROUTE_NOT_FOUND);
|
||||
}
|
||||
@@ -507,12 +507,12 @@ Http::init()
|
||||
$response->setUser($user);
|
||||
$request->setUser($user);
|
||||
|
||||
$route = $utopia->getRoute();
|
||||
$route = $utopia->getResource('route');
|
||||
if ($route === null) {
|
||||
throw new AppwriteException(AppwriteException::GENERAL_ROUTE_NOT_FOUND);
|
||||
}
|
||||
|
||||
$path = $route->getMatchedPath();
|
||||
$path = $utopia->getResource('matchedPath');
|
||||
$databaseType = match (true) {
|
||||
str_contains($path, '/documentsdb') => DATABASE_TYPE_DOCUMENTSDB,
|
||||
str_contains($path, '/vectorsdb') => DATABASE_TYPE_VECTORSDB,
|
||||
@@ -861,8 +861,8 @@ Http::shutdown()
|
||||
}
|
||||
}
|
||||
|
||||
$route = $utopia->getRoute();
|
||||
$requestParams = $route->getParamsValues();
|
||||
$route = $utopia->getResource('route');
|
||||
$requestParams = $request->getParams();
|
||||
|
||||
/**
|
||||
* Abuse labels
|
||||
|
||||
+7
-3
@@ -522,7 +522,7 @@ $swooleAdapter->onRequest(function ($utopiaRequest, $utopiaResponse) use ($files
|
||||
return;
|
||||
}
|
||||
|
||||
$requestContainer = $swooleAdapter->getContainer();
|
||||
$requestContainer = $swooleAdapter->getContext();
|
||||
$requestContainer->set('container', fn () => $requestContainer);
|
||||
$requestContainer->set('request', fn () => $request);
|
||||
$requestContainer->set('response', fn () => $response);
|
||||
@@ -545,7 +545,7 @@ $swooleAdapter->onRequest(function ($utopiaRequest, $utopiaResponse) use ($files
|
||||
|
||||
$app->run($request, $response);
|
||||
|
||||
$route = $app->getRoute();
|
||||
$route = $app->getResource('route');
|
||||
Span::add('http.path', $route?->getPath() ?? 'unknown');
|
||||
} catch (\Throwable $th) {
|
||||
Span::error($th);
|
||||
@@ -561,7 +561,11 @@ $swooleAdapter->onRequest(function ($utopiaRequest, $utopiaResponse) use ($files
|
||||
// All good, user is optional information for logger
|
||||
}
|
||||
|
||||
$route = $app->getRoute();
|
||||
try {
|
||||
$route = $app->getResource('route');
|
||||
} catch (\Throwable $_th) {
|
||||
$route = null;
|
||||
}
|
||||
|
||||
$log = $app->getResource("log");
|
||||
|
||||
|
||||
+1
-1
@@ -67,7 +67,7 @@
|
||||
"utopia-php/emails": "0.6.*",
|
||||
"utopia-php/dns": "1.6.*",
|
||||
"utopia-php/dsn": "0.2.1",
|
||||
"utopia-php/http": "0.34.*",
|
||||
"utopia-php/http": "dev-fix/concurrency-shared-state as 0.34.99",
|
||||
"utopia-php/fetch": "0.5.*",
|
||||
"utopia-php/validators": "0.2.*",
|
||||
"utopia-php/image": "0.8.*",
|
||||
|
||||
Generated
+18
-9
@@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "805802552f7482eaeae4bdaa505ae982",
|
||||
"content-hash": "4fe55bdcb4efe2a8e4394e3a504bd94e",
|
||||
"packages": [
|
||||
{
|
||||
"name": "adhocore/jwt",
|
||||
@@ -4271,16 +4271,16 @@
|
||||
},
|
||||
{
|
||||
"name": "utopia-php/http",
|
||||
"version": "0.34.24",
|
||||
"version": "dev-fix/concurrency-shared-state",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/utopia-php/http.git",
|
||||
"reference": "d1eced0627c5a9fceddf53992ed97d664b810d33"
|
||||
"reference": "0707b7caff4ec0561027eba12ed045940e7b1b0d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/utopia-php/http/zipball/d1eced0627c5a9fceddf53992ed97d664b810d33",
|
||||
"reference": "d1eced0627c5a9fceddf53992ed97d664b810d33",
|
||||
"url": "https://api.github.com/repos/utopia-php/http/zipball/0707b7caff4ec0561027eba12ed045940e7b1b0d",
|
||||
"reference": "0707b7caff4ec0561027eba12ed045940e7b1b0d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -4321,9 +4321,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/utopia-php/http/issues",
|
||||
"source": "https://github.com/utopia-php/http/tree/0.34.24"
|
||||
"source": "https://github.com/utopia-php/http/tree/fix/concurrency-shared-state"
|
||||
},
|
||||
"time": "2026-04-24T12:16:53+00:00"
|
||||
"time": "2026-04-28T10:30:40+00:00"
|
||||
},
|
||||
{
|
||||
"name": "utopia-php/image",
|
||||
@@ -8443,9 +8443,18 @@
|
||||
"time": "2024-11-07T12:36:22+00:00"
|
||||
}
|
||||
],
|
||||
"aliases": [],
|
||||
"aliases": [
|
||||
{
|
||||
"package": "utopia-php/http",
|
||||
"version": "dev-fix/concurrency-shared-state",
|
||||
"alias": "0.34.99",
|
||||
"alias_normalized": "0.34.99.0"
|
||||
}
|
||||
],
|
||||
"minimum-stability": "dev",
|
||||
"stability-flags": {},
|
||||
"stability-flags": {
|
||||
"utopia-php/http": 20
|
||||
},
|
||||
"prefer-stable": true,
|
||||
"prefer-lowest": false,
|
||||
"platform": {
|
||||
|
||||
@@ -359,7 +359,11 @@ class Resolvers
|
||||
|
||||
$lock->acquire();
|
||||
|
||||
$original = $utopia->getRoute();
|
||||
try {
|
||||
$original = $utopia->getResource('route');
|
||||
} catch (\Throwable $_th) {
|
||||
$original = null;
|
||||
}
|
||||
try {
|
||||
$request = clone $request;
|
||||
|
||||
@@ -403,7 +407,8 @@ class Resolvers
|
||||
return;
|
||||
} finally {
|
||||
if ($original !== null) {
|
||||
$utopia->setRoute($original);
|
||||
$container = self::getResolverContainer($utopia);
|
||||
$container->set('route', static fn () => $original);
|
||||
}
|
||||
|
||||
$lock->release();
|
||||
|
||||
@@ -8,7 +8,7 @@ use Utopia\DI\Container;
|
||||
|
||||
class Swoole extends Promise
|
||||
{
|
||||
private const REQUEST_CONTAINER_CONTEXT_KEY = '__utopia_http_request_container';
|
||||
private const REQUEST_CONTAINER_CONTEXT_KEY = '__utopia_http_context';
|
||||
|
||||
public function __construct(?callable $executor = null)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user