mirror of https://github.com/citusdata/citus.git
Refactor
parent
afa24ed38e
commit
731e9c8dd0
|
@ -126,6 +126,8 @@ static void MaintenanceDaemonShmemExit(int code, Datum arg);
|
||||||
static void MaintenanceDaemonErrorContext(void *arg);
|
static void MaintenanceDaemonErrorContext(void *arg);
|
||||||
static bool MetadataSyncTriggeredCheckAndReset(MaintenanceDaemonDBData *dbData);
|
static bool MetadataSyncTriggeredCheckAndReset(MaintenanceDaemonDBData *dbData);
|
||||||
static void WarnMaintenanceDaemonNotStarted(void);
|
static void WarnMaintenanceDaemonNotStarted(void);
|
||||||
|
static MaintenanceDaemonDBData * GetMaintenanceDaemonDBHashEntry(Oid databaseId,
|
||||||
|
bool *found);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* InitializeMaintenanceDaemon, called at server start, is responsible for
|
* InitializeMaintenanceDaemon, called at server start, is responsible for
|
||||||
|
@ -140,6 +142,39 @@ InitializeMaintenanceDaemon(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* GetMaintenanceDaemonDBHashEntry searches the MaintenanceDaemonDBHash for the
|
||||||
|
* databaseId. It returns the entry if found or creates a new entry and initializes
|
||||||
|
* the value with zeroes.
|
||||||
|
*/
|
||||||
|
MaintenanceDaemonDBData *
|
||||||
|
GetMaintenanceDaemonDBHashEntry(Oid databaseId, bool *found)
|
||||||
|
{
|
||||||
|
MaintenanceDaemonDBData *dbData = (MaintenanceDaemonDBData *) hash_search(
|
||||||
|
MaintenanceDaemonDBHash,
|
||||||
|
&MyDatabaseId,
|
||||||
|
HASH_ENTER_NULL,
|
||||||
|
found);
|
||||||
|
|
||||||
|
if (!dbData)
|
||||||
|
{
|
||||||
|
elog(LOG,
|
||||||
|
"cannot create or find the maintenance deamon hash entry for database %u",
|
||||||
|
databaseId);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!*found)
|
||||||
|
{
|
||||||
|
/* ensure the values in MaintenanceDaemonDBData are zero */
|
||||||
|
memset(((char *) dbData) + sizeof(Oid), 0,
|
||||||
|
sizeof(MaintenanceDaemonDBData) - sizeof(Oid));
|
||||||
|
}
|
||||||
|
|
||||||
|
return dbData;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* InitializeMaintenanceDaemonForMainDb is called in _PG_Init
|
* InitializeMaintenanceDaemonForMainDb is called in _PG_Init
|
||||||
* at which stage we are not in a transaction or have databaseOid
|
* at which stage we are not in a transaction or have databaseOid
|
||||||
|
@ -149,7 +184,7 @@ InitializeMaintenanceDaemonForMainDb(void)
|
||||||
{
|
{
|
||||||
if (strcmp(MainDb, "") == 0)
|
if (strcmp(MainDb, "") == 0)
|
||||||
{
|
{
|
||||||
elog(LOG, "There is no designated main database.");
|
elog(LOG, "There is no designated Main database.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -192,31 +227,20 @@ void
|
||||||
InitializeMaintenanceDaemonBackend(void)
|
InitializeMaintenanceDaemonBackend(void)
|
||||||
{
|
{
|
||||||
Oid extensionOwner = CitusExtensionOwner();
|
Oid extensionOwner = CitusExtensionOwner();
|
||||||
bool found;
|
bool found = false;
|
||||||
|
|
||||||
LWLockAcquire(&MaintenanceDaemonControl->lock, LW_EXCLUSIVE);
|
LWLockAcquire(&MaintenanceDaemonControl->lock, LW_EXCLUSIVE);
|
||||||
|
|
||||||
MaintenanceDaemonDBData *dbData = (MaintenanceDaemonDBData *) hash_search(
|
MaintenanceDaemonDBData *dbData = GetMaintenanceDaemonDBHashEntry(MyDatabaseId,
|
||||||
MaintenanceDaemonDBHash,
|
&found);
|
||||||
&MyDatabaseId,
|
|
||||||
HASH_ENTER_NULL,
|
|
||||||
&found);
|
|
||||||
|
|
||||||
if (dbData == NULL)
|
if (dbData == NULL)
|
||||||
{
|
{
|
||||||
WarnMaintenanceDaemonNotStarted();
|
WarnMaintenanceDaemonNotStarted();
|
||||||
LWLockRelease(&MaintenanceDaemonControl->lock);
|
LWLockRelease(&MaintenanceDaemonControl->lock);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!found)
|
|
||||||
{
|
|
||||||
/* ensure the values in MaintenanceDaemonDBData are zero */
|
|
||||||
memset(((char *) dbData) + sizeof(Oid), 0,
|
|
||||||
sizeof(MaintenanceDaemonDBData) - sizeof(Oid));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IsMaintenanceDaemon)
|
if (IsMaintenanceDaemon)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
@ -350,25 +374,14 @@ CitusMaintenanceDaemonMain(Datum main_arg)
|
||||||
|
|
||||||
/* Now we have a valid MyDatabaseId. */
|
/* Now we have a valid MyDatabaseId. */
|
||||||
/* Insert the daemon instance to the hash table. */
|
/* Insert the daemon instance to the hash table. */
|
||||||
bool found;
|
bool found = false;
|
||||||
|
|
||||||
LWLockAcquire(&MaintenanceDaemonControl->lock, LW_EXCLUSIVE);
|
LWLockAcquire(&MaintenanceDaemonControl->lock, LW_EXCLUSIVE);
|
||||||
|
|
||||||
myDbData = (MaintenanceDaemonDBData *) hash_search(
|
myDbData = GetMaintenanceDaemonDBHashEntry(MyDatabaseId, &found);
|
||||||
MaintenanceDaemonDBHash,
|
|
||||||
&MyDatabaseId,
|
|
||||||
HASH_ENTER_NULL,
|
|
||||||
&found);
|
|
||||||
|
|
||||||
if (!myDbData)
|
if (!myDbData)
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
* When the database crashes, background workers are restarted, but
|
|
||||||
* the state in shared memory is lost. In that case, we exit and wait
|
|
||||||
* for Postmaster calling __PG_Init which in turn calls
|
|
||||||
* InitializeMaintenanceDaemonForAdminDB.
|
|
||||||
*/
|
|
||||||
|
|
||||||
proc_exit(0);
|
proc_exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -379,13 +392,6 @@ CitusMaintenanceDaemonMain(Datum main_arg)
|
||||||
proc_exit(0);
|
proc_exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!found)
|
|
||||||
{
|
|
||||||
/* ensure the values in MaintenanceDaemonDBData are zero */
|
|
||||||
memset(((char *) myDbData) + sizeof(Oid), 0,
|
|
||||||
sizeof(MaintenanceDaemonDBData) - sizeof(Oid));
|
|
||||||
}
|
|
||||||
|
|
||||||
before_shmem_exit(MaintenanceDaemonShmemExit, ObjectIdGetDatum(MyDatabaseId));
|
before_shmem_exit(MaintenanceDaemonShmemExit, ObjectIdGetDatum(MyDatabaseId));
|
||||||
|
|
||||||
databaseOid = MyDatabaseId;
|
databaseOid = MyDatabaseId;
|
||||||
|
|
Loading…
Reference in New Issue