1
0
Fork 0
mirror of synced 2024-10-05 12:43:13 +13:00

Check project shareTables status when configuring databases

This commit is contained in:
Jake Barnby 2023-11-23 01:13:24 +13:00
parent f44543f083
commit 35163ff52a
No known key found for this signature in database
GPG key ID: C437A8CC85B96E9C
3 changed files with 54 additions and 23 deletions

View file

@ -24,7 +24,7 @@ use Utopia\Registry\Registry;
Authorization::disable(); Authorization::disable();
CLI::setResource('register', fn()=>$register); CLI::setResource('register', fn() => $register);
CLI::setResource('cache', function ($pools) { CLI::setResource('cache', function ($pools) {
$list = Config::getParam('pools-cache', []); $list = Config::getParam('pools-cache', []);

View file

@ -1129,6 +1129,13 @@ App::setResource('dbForProject', function (Group $pools, Database $dbForConsole,
->setMetadata('project', $project->getId()) ->setMetadata('project', $project->getId())
->setTimeout(APP_DATABASE_TIMEOUT_MILLISECONDS); ->setTimeout(APP_DATABASE_TIMEOUT_MILLISECONDS);
if ($project->getAttribute('shareTables')) {
$database
->setNamespace('')
->setShareTables(true)
->setTenant($project->getId());
}
return $database; return $database;
}, ['pools', 'dbForConsole', 'cache', 'project']); }, ['pools', 'dbForConsole', 'cache', 'project']);
@ -1153,22 +1160,31 @@ App::setResource('dbForConsole', function (Group $pools, Cache $cache, Document
App::setResource('getProjectDB', function (Group $pools, Database $dbForConsole, $cache) { App::setResource('getProjectDB', function (Group $pools, Database $dbForConsole, $cache) {
$databases = []; // TODO: @Meldiron This should probably be responsibility of utopia-php/pools $databases = []; // TODO: @Meldiron This should probably be responsibility of utopia-php/pools
$getProjectDB = function (Document $project) use ($pools, $dbForConsole, $cache, &$databases) { return function (Document $project) use ($pools, $dbForConsole, $cache, &$databases) {
if ($project->isEmpty() || $project->getId() === 'console') { if ($project->isEmpty() || $project->getId() === 'console') {
return $dbForConsole; return $dbForConsole;
} }
$databaseName = $project->getAttribute('database'); $databaseName = $project->getAttribute('database');
if (isset($databases[$databaseName])) { $configure = (function (Database $database) use ($project) {
$database = $databases[$databaseName];
$database $database
->setNamespace('_' . $project->getInternalId()) ->setNamespace('_' . $project->getInternalId())
->setMetadata('host', \gethostname()) ->setMetadata('host', \gethostname())
->setMetadata('project', $project->getId()) ->setMetadata('project', $project->getId())
->setTimeout(APP_DATABASE_TIMEOUT_MILLISECONDS); ->setTimeout(APP_DATABASE_TIMEOUT_MILLISECONDS);
if ($project->getAttribute('shareTables')) {
$database
->setNamespace('')
->setShareTables(true)
->setTenant($project->getId());
}
});
if (isset($databases[$databaseName])) {
$database = $databases[$databaseName];
$configure($database);
return $database; return $database;
} }
@ -1178,19 +1194,10 @@ App::setResource('getProjectDB', function (Group $pools, Database $dbForConsole,
->getResource(); ->getResource();
$database = new Database($dbAdapter, $cache); $database = new Database($dbAdapter, $cache);
$databases[$databaseName] = $database; $databases[$databaseName] = $database;
$configure($database);
$database
->setNamespace('_' . $project->getInternalId())
->setMetadata('host', \gethostname())
->setMetadata('project', $project->getId())
->setTimeout(APP_DATABASE_TIMEOUT_MILLISECONDS);
return $database; return $database;
}; };
return $getProjectDB;
}, ['pools', 'dbForConsole', 'cache']); }, ['pools', 'dbForConsole', 'cache']);
App::setResource('cache', function (Group $pools) { App::setResource('cache', function (Group $pools) {

View file

@ -61,15 +61,25 @@ Server::setResource('dbForProject', function (Cache $cache, Registry $register,
} }
$pools = $register->get('pools'); $pools = $register->get('pools');
$database = $pools
$adapter = $pools
->get($project->getAttribute('database')) ->get($project->getAttribute('database'))
->pop() ->pop()
->getResource() ->getResource();
;
$adapter = new Database($database, $cache); $database = new Database($adapter, $cache);
$adapter->setNamespace('_' . $project->getInternalId());
return $adapter; if ($project->getAttribute('shareTables')) {
$database
->setShareTables(true)
->setTenant($project->getId());
} else {
$database
->setNamespace('_' . $project->getInternalId());
}
return $database;
}, ['cache', 'register', 'message', 'dbForConsole']); }, ['cache', 'register', 'message', 'dbForConsole']);
Server::setResource('getProjectDB', function (Group $pools, Database $dbForConsole, $cache) { Server::setResource('getProjectDB', function (Group $pools, Database $dbForConsole, $cache) {
@ -84,7 +94,14 @@ Server::setResource('getProjectDB', function (Group $pools, Database $dbForConso
if (isset($databases[$databaseName])) { if (isset($databases[$databaseName])) {
$database = $databases[$databaseName]; $database = $databases[$databaseName];
$database->setNamespace('_' . $project->getInternalId()); if ($project->getAttribute('shareTables')) {
$database
->setShareTables(true)
->setTenant($project->getId());
} else {
$database
->setNamespace('_' . $project->getInternalId());
}
return $database; return $database;
} }
@ -97,7 +114,14 @@ Server::setResource('getProjectDB', function (Group $pools, Database $dbForConso
$databases[$databaseName] = $database; $databases[$databaseName] = $database;
$database->setNamespace('_' . $project->getInternalId()); if ($project->getAttribute('shareTables')) {
$database
->setShareTables(true)
->setTenant($project->getId());
} else {
$database
->setNamespace('_' . $project->getInternalId());
}
return $database; return $database;
}; };