1
0
Fork 0
mirror of synced 2024-06-13 08:14:46 +12:00

Harmonize database reconnect across services

This commit is contained in:
kodumbeats 2022-01-21 12:32:27 -05:00
parent f7373fff2b
commit 7e6c9b9d87
3 changed files with 16 additions and 12 deletions

View file

@ -86,6 +86,9 @@ const APP_SOCIAL_DISCORD_CHANNEL = '564160730845151244';
const APP_SOCIAL_DEV = 'https://dev.to/appwrite';
const APP_SOCIAL_STACKSHARE = 'https://stackshare.io/appwrite';
const APP_SOCIAL_YOUTUBE = 'https://www.youtube.com/c/appwrite?sub_confirmation=1';
// Database Reconnect
const DATABASE_RECONNECT_SLEEP = 2;
const DATABASE_RECONNECT_MAX_ATTEMPTS = 10;
// Database Worker Types
const DATABASE_TYPE_CREATE_ATTRIBUTE = 'createAttribute';
const DATABASE_TYPE_CREATE_INDEX = 'createIndex';

View file

@ -92,8 +92,6 @@ $server->error($logError);
function getDatabase(Registry &$register, string $namespace)
{
$attempts = 0;
$sleep = 2;
$maxAttempts = 10;
do {
try {
@ -107,18 +105,18 @@ function getDatabase(Registry &$register, string $namespace)
$database->setDefaultDatabase(App::getEnv('_APP_DB_SCHEMA', 'appwrite'));
$database->setNamespace($namespace);
if (!$database->exists(App::getEnv('_APP_DB_SCHEMA', 'appwrite'), 'realtime')) {
if (!$database->exists($database->getDefaultDatabase(), 'realtime')) {
throw new Exception('Collection not ready');
}
break; // leave loop if successful
} catch(\Exception $e) {
Console::warning("Database not ready. Retrying connection ({$attempts})...");
if ($attempts >= $maxAttempts) {
if ($attempts >= DATABASE_RECONNECT_MAX_ATTEMPTS) {
throw new \Exception('Failed to connect to database: '. $e->getMessage());
}
sleep($sleep);
sleep(DATABASE_RECONNECT_SLEEP);
}
} while ($attempts < $maxAttempts);
} while ($attempts < DATABASE_RECONNECT_MAX_ATTEMPTS);
return [
$database,

View file

@ -70,9 +70,6 @@ abstract class Worker
throw new Exception("Please implement getName method in worker");
}
const MAX_ATTEMPTS = 10;
const SLEEP_TIME = 2;
const DATABASE_PROJECT = 'project';
const DATABASE_CONSOLE = 'console';
@ -174,7 +171,7 @@ abstract class Worker
global $register;
$namespace = '';
$sleep = self::SLEEP_TIME; // overwritten when necessary
$sleep = DATABASE_RECONNECT_SLEEP; // overwritten when necessary
switch ($type) {
case self::DATABASE_PROJECT:
@ -201,18 +198,24 @@ abstract class Worker
$database = new Database(new MariaDB($register->get('db')), $cache);
$database->setDefaultDatabase(App::getEnv('_APP_DB_SCHEMA', 'appwrite'));
$database->setNamespace($namespace); // Main DB
if (!empty($projectId) && !$database->getDocument('projects', $projectId)->isEmpty()) {
throw new \Exception("Project does not exist: {$projectId}");
}
if ($type === self::DATABASE_CONSOLE && !$database->exists($database->getDefaultDatabase(), 'realtime')) {
throw new \Exception('Console project not ready');
}
break; // leave loop if successful
} catch(\Exception $e) {
Console::warning("Database not ready. Retrying connection ({$attempts})...");
if ($attempts >= self::MAX_ATTEMPTS) {
if ($attempts >= DATABASE_RECONNECT_MAX_ATTEMPTS) {
throw new \Exception('Failed to connect to database: '. $e->getMessage());
}
sleep($sleep);
}
} while ($attempts < self::MAX_ATTEMPTS);
} while ($attempts < DATABASE_RECONNECT_MAX_ATTEMPTS);
return $database;
}