From 6e3dee4e1f5da2fe489934d3b84aab6b3bfa1702 Mon Sep 17 00:00:00 2001 From: Jake Barnby Date: Wed, 8 May 2024 16:25:12 +1200 Subject: [PATCH 1/2] Fix shared tables db queue name --- app/controllers/general.php | 10 +++++++++- src/Appwrite/Event/Database.php | 10 +++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/app/controllers/general.php b/app/controllers/general.php index bcdf0fecb3..3734b81a3b 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -26,6 +26,7 @@ use Utopia\Database\Helpers\ID; use Utopia\Database\Query; use Utopia\Database\Validator\Authorization; use Utopia\Domains\Domain; +use Utopia\DSN\DSN; use Utopia\Locale\Locale; use Utopia\Logger\Log; use Utopia\Logger\Log\User; @@ -740,13 +741,20 @@ App::error() $log->setUser(new User($user->getId())); } + try { + $dsn = new DSN($project->getAttribute('database', 'console')); + } catch (\InvalidArgumentException) { + // TODO: Temporary until all projects are using shared tables + $dsn = new DSN('mysql://' . $project->getAttribute('database', 'console')); + } + $log->setNamespace("http"); $log->setServer(\gethostname()); $log->setVersion($version); $log->setType(Log::TYPE_ERROR); $log->setMessage($error->getMessage()); - $log->addTag('database', $project->getAttribute('database', 'console')); + $log->addTag('database', $dsn->getHost()); $log->addTag('method', $route->getMethod()); $log->addTag('url', $route->getPath()); $log->addTag('verboseType', get_class($error)); diff --git a/src/Appwrite/Event/Database.php b/src/Appwrite/Event/Database.php index c0c5ef2f43..f9eb7d9a7d 100644 --- a/src/Appwrite/Event/Database.php +++ b/src/Appwrite/Event/Database.php @@ -3,6 +3,7 @@ namespace Appwrite\Event; use Utopia\Database\Document; +use Utopia\DSN\DSN; use Utopia\Queue\Client; use Utopia\Queue\Connection; @@ -107,7 +108,14 @@ class Database extends Event */ public function trigger(): string|bool { - $this->setQueue($this->getProject()->getAttribute('database')); + try { + $dsn = new DSN($this->getProject()->getAttribute('database')); + } catch (\InvalidArgumentException) { + // TODO: Temporary until all projects are using shared tables + $dsn = new DSN('mysql://' . $this->getProject()->getAttribute('database')); + } + + $this->setQueue($dsn->getHost()); $client = new Client($this->queue, $this->connection); From f00133d1995975fa9c718e51a16e1f63c6504271 Mon Sep 17 00:00:00 2001 From: Jake Barnby Date: Wed, 8 May 2024 16:28:00 +1200 Subject: [PATCH 2/2] Add tests for queued job status --- tests/e2e/Services/Projects/ProjectsConsoleClientTest.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php index 39264386df..aec3d529a1 100644 --- a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php +++ b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php @@ -3820,6 +3820,7 @@ class ProjectsConsoleClientTest extends Scope $this->assertEquals(1, $attributesProject1['body']['total']); $this->assertEquals(1, \count($attributesProject1['body']['attributes'])); + $this->assertEquals('available', $attributesProject1['body']['attributes'][0]['status']); $attributesProject2 = $this->client->call(Client::METHOD_GET, '/databases/' . $database2['body']['$id'] . '/collections/' . $collection2['body']['$id'] . '/attributes', [ 'content-type' => 'application/json', @@ -3829,6 +3830,7 @@ class ProjectsConsoleClientTest extends Scope $this->assertEquals(1, $attributesProject2['body']['total']); $this->assertEquals(1, \count($attributesProject2['body']['attributes'])); + $this->assertEquals('available', $attributesProject2['body']['attributes'][0]['status']); $attributesProject3 = $this->client->call(Client::METHOD_GET, '/databases/' . $database3['body']['$id'] . '/collections/' . $collection3['body']['$id'] . '/attributes', [ 'content-type' => 'application/json', @@ -3838,6 +3840,7 @@ class ProjectsConsoleClientTest extends Scope $this->assertEquals(1, $attributesProject3['body']['total']); $this->assertEquals(1, \count($attributesProject3['body']['attributes'])); + $this->assertEquals('available', $attributesProject3['body']['attributes'][0]['status']); $attributesProject4 = $this->client->call(Client::METHOD_GET, '/databases/' . $database4['body']['$id'] . '/collections/' . $collection4['body']['$id'] . '/attributes', [ 'content-type' => 'application/json', @@ -3847,6 +3850,7 @@ class ProjectsConsoleClientTest extends Scope $this->assertEquals(1, $attributesProject4['body']['total']); $this->assertEquals(1, \count($attributesProject4['body']['attributes'])); + $this->assertEquals('available', $attributesProject4['body']['attributes'][0]['status']); $indexesProject1 = $this->client->call(Client::METHOD_GET, '/databases/' . $database1['body']['$id'] . '/collections/' . $collection1['body']['$id'] . '/indexes', [ 'content-type' => 'application/json',