Create connections only on fill method
This commit is contained in:
parent
fe29e58f22
commit
f6449687b5
103
app/init.php
103
app/init.php
|
@ -590,24 +590,30 @@ $register->set('pools', function () {
|
|||
switch ($dsn->getScheme()) {
|
||||
case 'mysql':
|
||||
case 'mariadb':
|
||||
$resource = new PDOProxy(function() use ($dsnHost, $dsnPort, $dsnUser, $dsnPass, $dsnScheme) {
|
||||
return new PDO("mysql:host={$dsnHost};port={$dsnPort};dbname={$dsnScheme};charset=utf8mb4", $dsnUser, $dsnPass, array(
|
||||
PDO::ATTR_TIMEOUT => 3, // Seconds
|
||||
PDO::ATTR_PERSISTENT => true,
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||
PDO::ATTR_ERRMODE => App::isDevelopment() ? PDO::ERRMODE_WARNING : PDO::ERRMODE_SILENT, // If in production mode, warnings are not displayed
|
||||
PDO::ATTR_EMULATE_PREPARES => true,
|
||||
PDO::ATTR_STRINGIFY_FETCHES => true
|
||||
));
|
||||
});
|
||||
$resource = function () use ($dsnHost, $dsnPort, $dsnUser, $dsnPass, $dsnScheme) {
|
||||
return new PDOProxy(function() use ($dsnHost, $dsnPort, $dsnUser, $dsnPass, $dsnScheme) {
|
||||
return new PDO("mysql:host={$dsnHost};port={$dsnPort};dbname={$dsnScheme};charset=utf8mb4", $dsnUser, $dsnPass, array(
|
||||
PDO::ATTR_TIMEOUT => 3, // Seconds
|
||||
PDO::ATTR_PERSISTENT => true,
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||
PDO::ATTR_ERRMODE => App::isDevelopment() ? PDO::ERRMODE_WARNING : PDO::ERRMODE_SILENT, // If in production mode, warnings are not displayed
|
||||
PDO::ATTR_EMULATE_PREPARES => true,
|
||||
PDO::ATTR_STRINGIFY_FETCHES => true
|
||||
));
|
||||
});
|
||||
};
|
||||
break;
|
||||
case 'redis':
|
||||
$resource = new Redis();
|
||||
$resource->pconnect($dsnHost, $dsnPort);
|
||||
if($dsnPass) {
|
||||
$resource->auth($dsnPass);
|
||||
}
|
||||
$resource->setOption(Redis::OPT_READ_TIMEOUT, -1);
|
||||
$resource = function() use ($dsnHost, $dsnPort, $dsnPass) {
|
||||
$redis = new Redis();
|
||||
@$redis->pconnect($dsnHost, $dsnPort);
|
||||
if($dsnPass) {
|
||||
$redis->auth($dsnPass);
|
||||
}
|
||||
$redis->setOption(Redis::OPT_READ_TIMEOUT, -1);
|
||||
|
||||
return $redis;
|
||||
};
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -615,40 +621,37 @@ $register->set('pools', function () {
|
|||
break;
|
||||
}
|
||||
|
||||
// Get Adapter
|
||||
$pool = new Pool($name, 64, function () use ($type, $resource, $dsn) {
|
||||
// Get Adapter
|
||||
$adapter = null;
|
||||
|
||||
switch ($type) {
|
||||
case 'database':
|
||||
$adapter = match ($dsn->getScheme()) {
|
||||
'mariadb' => new MariaDB($resource),
|
||||
'mysql' => new MySQL($resource),
|
||||
default => null
|
||||
};
|
||||
switch ($type) {
|
||||
case 'database':
|
||||
$adapter = match ($dsn->getScheme()) {
|
||||
'mariadb' => new MariaDB($resource()),
|
||||
'mysql' => new MySQL($resource()),
|
||||
default => null
|
||||
};
|
||||
|
||||
break;
|
||||
case 'queue':
|
||||
//$adapter = new Queue($resource);
|
||||
break;
|
||||
case 'pubsub':
|
||||
//$adapter = new PubSub($resource);
|
||||
break;
|
||||
case 'cache':
|
||||
$adapter = match ($dsn->getScheme()) {
|
||||
'redis' => new RedisCache($resource()),
|
||||
default => null
|
||||
};
|
||||
break;
|
||||
|
||||
break;
|
||||
case 'queue':
|
||||
//$adapter = new Queue($resource);
|
||||
break;
|
||||
case 'pubsub':
|
||||
//$adapter = new PubSub($resource);
|
||||
break;
|
||||
case 'cache':
|
||||
$adapter = match ($dsn->getScheme()) {
|
||||
'redis' => new RedisCache($resource),
|
||||
default => null
|
||||
};
|
||||
break;
|
||||
default:
|
||||
throw new Exception(Exception::GENERAL_SERVER_ERROR, "Server error: Missing adapter implementation.");
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
throw new Exception(Exception::GENERAL_SERVER_ERROR, "Server error: Missing adapter implementation.");
|
||||
break;
|
||||
}
|
||||
|
||||
if(is_null($adapter)) {
|
||||
throw new Exception(Exception::GENERAL_SERVER_ERROR, "Server error: Missing adapter implementation.");
|
||||
}
|
||||
|
||||
$pool = new Pool($name, 64, function () use ($adapter) {
|
||||
return $adapter;
|
||||
});
|
||||
|
||||
|
@ -658,7 +661,11 @@ $register->set('pools', function () {
|
|||
Config::setParam('pools-'.$key, $config);
|
||||
}
|
||||
|
||||
$group->fill();
|
||||
try {
|
||||
$group->fill();
|
||||
} catch (\Throwable $th) {
|
||||
Console::error('Connection failure: '.$th->getMessage());
|
||||
}
|
||||
|
||||
return $group;
|
||||
});
|
||||
|
|
|
@ -78,7 +78,6 @@ $cli
|
|||
Console::log('🟢 HTTPS force option is enabled');
|
||||
}
|
||||
|
||||
|
||||
$providerName = App::getEnv('_APP_LOGGING_PROVIDER', '');
|
||||
$providerConfig = App::getEnv('_APP_LOGGING_CONFIG', '');
|
||||
|
||||
|
@ -97,6 +96,7 @@ $cli
|
|||
}
|
||||
|
||||
$pools = $register->get('pools'); /** @var \Utopia\Pools\Group $pools */
|
||||
|
||||
$configs = [
|
||||
'Console.DB' => Config::getParam('pools-console'),
|
||||
'Projects.DB' => Config::getParam('pools-database'),
|
||||
|
@ -104,9 +104,9 @@ $cli
|
|||
|
||||
foreach ($configs as $key => $config) {
|
||||
foreach ($config as $database) {
|
||||
$adapter = $pools->get($database)->pop()->getResource();
|
||||
|
||||
try {
|
||||
$adapter = $pools->get($database)->pop()->getResource();
|
||||
|
||||
if($adapter->ping()) {
|
||||
Console::success('🟢 '.str_pad("{$key}({$database})", 50, '.').'connected');
|
||||
} else {
|
||||
|
@ -127,9 +127,9 @@ $cli
|
|||
|
||||
foreach ($configs as $key => $config) {
|
||||
foreach ($config as $pool) {
|
||||
$adapter = $pools->get($pool)->pop()->getResource();
|
||||
|
||||
try {
|
||||
$adapter = $pools->get($pool)->pop()->getResource();
|
||||
|
||||
if($adapter->ping()) {
|
||||
Console::success('🟢 '.str_pad("{$key}({$pool})", 50, '.').'connected');
|
||||
} else {
|
||||
|
|
Loading…
Reference in a new issue