mirror of
https://github.com/appwrite/appwrite
synced 2026-05-24 09:28:40 +00:00
Merge pull request #9850 from appwrite/task-coroutine-hooks-1.6
fix: task coroutine hooks
This commit is contained in:
commit
02de47f1dc
5 changed files with 14 additions and 15 deletions
|
|
@ -284,6 +284,5 @@ $cli
|
||||||
|
|
||||||
$cli->shutdown()->action(fn () => Timer::clearAll());
|
$cli->shutdown()->action(fn () => Timer::clearAll());
|
||||||
|
|
||||||
// Enable coroutines, but disable TCP hooks. These don't work until we use `\Utopia\Cache\Adapter\Pool` and `\Utopia\Database\Adapter\Pool`.
|
Runtime::enableCoroutine(SWOOLE_HOOK_ALL);
|
||||||
Runtime::enableCoroutine(SWOOLE_HOOK_ALL ^ SWOOLE_HOOK_TCP);
|
|
||||||
run($cli->run(...));
|
run($cli->run(...));
|
||||||
|
|
|
||||||
12
composer.lock
generated
12
composer.lock
generated
|
|
@ -4771,16 +4771,16 @@
|
||||||
"packages-dev": [
|
"packages-dev": [
|
||||||
{
|
{
|
||||||
"name": "appwrite/sdk-generator",
|
"name": "appwrite/sdk-generator",
|
||||||
"version": "0.40.17",
|
"version": "0.40.18",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/appwrite/sdk-generator.git",
|
"url": "https://github.com/appwrite/sdk-generator.git",
|
||||||
"reference": "7e333c1003bfd4763e4d6f3a0a799fde5e7bc4de"
|
"reference": "38de4b9c58112d7e83eb75955994c8412a401093"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/7e333c1003bfd4763e4d6f3a0a799fde5e7bc4de",
|
"url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/38de4b9c58112d7e83eb75955994c8412a401093",
|
||||||
"reference": "7e333c1003bfd4763e4d6f3a0a799fde5e7bc4de",
|
"reference": "38de4b9c58112d7e83eb75955994c8412a401093",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
|
@ -4816,9 +4816,9 @@
|
||||||
"description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms",
|
"description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/appwrite/sdk-generator/issues",
|
"issues": "https://github.com/appwrite/sdk-generator/issues",
|
||||||
"source": "https://github.com/appwrite/sdk-generator/tree/0.40.17"
|
"source": "https://github.com/appwrite/sdk-generator/tree/0.40.18"
|
||||||
},
|
},
|
||||||
"time": "2025-05-16T15:10:54+00:00"
|
"time": "2025-05-21T14:14:47+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "doctrine/annotations",
|
"name": "doctrine/annotations",
|
||||||
|
|
|
||||||
|
|
@ -79,16 +79,16 @@ abstract class ScheduleBase extends Action
|
||||||
|
|
||||||
// start with "0" to load all active documents.
|
// start with "0" to load all active documents.
|
||||||
$lastSyncUpdate = "0";
|
$lastSyncUpdate = "0";
|
||||||
$this->collectSchedules($pools, $dbForPlatform, $getProjectDB, $lastSyncUpdate);
|
$this->collectSchedules($dbForPlatform, $getProjectDB, $lastSyncUpdate);
|
||||||
|
|
||||||
Console::success("Starting timers at " . DateTime::now());
|
Console::success("Starting timers at " . DateTime::now());
|
||||||
/**
|
/**
|
||||||
* The timer synchronize $schedules copy with database collection.
|
* The timer synchronize $schedules copy with database collection.
|
||||||
*/
|
*/
|
||||||
Timer::tick(static::UPDATE_TIMER * 1000, function () use ($pools, $dbForPlatform, $getProjectDB, &$lastSyncUpdate) {
|
Timer::tick(static::UPDATE_TIMER * 1000, function () use ($dbForPlatform, $getProjectDB, &$lastSyncUpdate) {
|
||||||
$time = DateTime::now();
|
$time = DateTime::now();
|
||||||
Console::log("Sync tick: Running at $time");
|
Console::log("Sync tick: Running at $time");
|
||||||
$this->collectSchedules($pools, $dbForPlatform, $getProjectDB, $lastSyncUpdate);
|
$this->collectSchedules($dbForPlatform, $getProjectDB, $lastSyncUpdate);
|
||||||
});
|
});
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
|
|
@ -103,7 +103,7 @@ abstract class ScheduleBase extends Action
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function collectSchedules(Group $pools, Database $dbForPlatform, callable $getProjectDB, string &$lastSyncUpdate): void
|
private function collectSchedules(Database $dbForPlatform, callable $getProjectDB, string &$lastSyncUpdate): void
|
||||||
{
|
{
|
||||||
// If we haven't synced yet, load all active schedules
|
// If we haven't synced yet, load all active schedules
|
||||||
$initialLoad = $lastSyncUpdate === "0";
|
$initialLoad = $lastSyncUpdate === "0";
|
||||||
|
|
@ -115,7 +115,7 @@ abstract class ScheduleBase extends Action
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
* @var Document $schedule
|
* @var Document $schedule
|
||||||
*/
|
*/
|
||||||
$getSchedule = function (Document $schedule) use ($pools, $dbForPlatform, $getProjectDB): array {
|
$getSchedule = function (Document $schedule) use ($dbForPlatform, $getProjectDB): array {
|
||||||
$project = $dbForPlatform->getDocument('projects', $schedule->getAttribute('projectId'));
|
$project = $dbForPlatform->getDocument('projects', $schedule->getAttribute('projectId'));
|
||||||
|
|
||||||
$resource = $getProjectDB($project)->getDocument(
|
$resource = $getProjectDB($project)->getDocument(
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@ class ScheduleFunctions extends ScheduleBase
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($delayedExecutions as $delay => $schedules) {
|
foreach ($delayedExecutions as $delay => $schedules) {
|
||||||
\go(function () use ($delay, $schedules, $pools, $dbForPlatform) {
|
\go(function () use ($delay, $schedules, $dbForPlatform) {
|
||||||
\sleep($delay); // in seconds
|
\sleep($delay); // in seconds
|
||||||
|
|
||||||
foreach ($schedules as $delayConfig) {
|
foreach ($schedules as $delayConfig) {
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ class ScheduleMessages extends ScheduleBase
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
\go(function () use ($schedule, $scheduledAt, $pools, $dbForPlatform) {
|
\go(function () use ($schedule, $scheduledAt, $dbForPlatform) {
|
||||||
$queueForMessaging = new Messaging($this->publisher);
|
$queueForMessaging = new Messaging($this->publisher);
|
||||||
|
|
||||||
$this->updateProjectAccess($schedule['project'], $dbForPlatform);
|
$this->updateProjectAccess($schedule['project'], $dbForPlatform);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue