/* * Populate cdb_component_dbs object by reading from catalog. Use * probeContext instead of current memory context because current * context will be destroyed by CommitTransactionCommand(). */ static void readCdbComponentInfoAndUpdateStatus(MemoryContext probeContext) { int i; MemoryContext save = MemoryContextSwitchTo(probeContext); /* cdb_component_dbs is free'd by FtsLoop(). */ cdb_component_dbs = getCdbComponentInfo(false); MemoryContextSwitchTo(save); for (i=0; i < cdb_component_dbs->total_segment_dbs; i++) { CdbComponentDatabaseInfo *segInfo = &cdb_component_dbs->segment_db_info[i]; uint8 segStatus; segStatus = 0; if (SEGMENT_IS_ALIVE(segInfo)) segStatus |= FTS_STATUS_ALIVE; if (SEGMENT_IS_ACTIVE_PRIMARY(segInfo)) segStatus |= FTS_STATUS_PRIMARY; if (segInfo->preferred_role == 'p') segStatus |= FTS_STATUS_DEFINEDPRIMARY; if (segInfo->mode == 's') segStatus |= FTS_STATUS_SYNCHRONIZED; if (segInfo->mode == 'c') segStatus |= FTS_STATUS_CHANGELOGGING; ftsProbeInfo->fts_status[segInfo->dbid] = segStatus; } }
/* * getCdbComponentDatabases * * * Storage for the SegmentInstances block and all subsidiary * structures are allocated from the caller's context. */ CdbComponentDatabases * getCdbComponentDatabases(void) { return getCdbComponentInfo(true); }