static bool PersistentRelfile_CheckTablespaceScanTupleCallback( ItemPointer persistentTid, int64 persistentSerialNum, Datum *values) { RelFileNode relFileNode; int32 segmentFileNum; PersistentFileSysRelStorageMgr relationStorageManager; PersistentFileSysState state; PersistentFileSysRelBufpoolKind relBufpoolKind; TransactionId parentXid; int64 serialNum; ItemPointerData previousFreeTid; bool sharedStorage; GpPersistentRelfileNode_GetValues( values, &relFileNode.spcNode, &relFileNode.dbNode, &relFileNode.relNode, &segmentFileNum, &relationStorageManager, &state, &relBufpoolKind, &parentXid, &serialNum, &previousFreeTid, &sharedStorage); if (state == PersistentFileSysState_Created && relFileNode.spcNode == persistentRelfileCheckTablespace) { persistentRelfileCheckTablespaceUseCount++; if (persistentRelfileCheckTablespaceUseCount == 1) { memcpy(&persistentRelfileCheckTablespaceRelFileNode, &relFileNode, sizeof(RelFileNode)); } } return true; // Continue. }
void GpPersistent_GetCommonValues( PersistentFsObjType fsObjType, Datum *values, PersistentFileSysObjName *fsObjName, PersistentFileSysState *persistentState, TransactionId *parentXid, int64 *persistentSerialNum) { int32 reserved; ItemPointerData previousFreeTid; bool sharedStorage; switch (fsObjType) { case PersistentFsObjType_RelationFile: { RelFileNode relFileNode; int32 segmentFileNum; PersistentFileSysRelStorageMgr relationStorageManager; PersistentFileSysRelBufpoolKind relBufpoolKind; GpPersistentRelfileNode_GetValues( values, &relFileNode.spcNode, &relFileNode.dbNode, &relFileNode.relNode, &segmentFileNum, &relationStorageManager, persistentState, &relBufpoolKind, parentXid, persistentSerialNum, &previousFreeTid, &sharedStorage); PersistentFileSysObjName_SetRelationFile( fsObjName, &relFileNode, segmentFileNum, NULL); fsObjName->hasInited = true; fsObjName->sharedStorage = sharedStorage; } break; case PersistentFsObjType_RelationDir: { RelFileNode relFileNode; GpPersistentRelationNode_GetValues( values, &relFileNode.spcNode, &relFileNode.dbNode, &relFileNode.relNode, persistentState, &reserved, parentXid, persistentSerialNum, &previousFreeTid, &sharedStorage); PersistentFileSysObjName_SetRelationDir( fsObjName, &relFileNode, NULL); fsObjName->hasInited = true; fsObjName->sharedStorage = sharedStorage; } break; case PersistentFsObjType_DatabaseDir: { DbDirNode dbDirNode; GpPersistentDatabaseNode_GetValues( values, &dbDirNode.tablespace, &dbDirNode.database, persistentState, &reserved, parentXid, persistentSerialNum, &previousFreeTid, &sharedStorage); PersistentFileSysObjName_SetDatabaseDir( fsObjName, dbDirNode.tablespace, dbDirNode.database, NULL); fsObjName->hasInited = true; fsObjName->sharedStorage = sharedStorage; } break; case PersistentFsObjType_TablespaceDir: { Oid tablespaceOid; Oid filespaceOid; GpPersistentTablespaceNode_GetValues( values, &filespaceOid, &tablespaceOid, persistentState, &reserved, parentXid, persistentSerialNum, &previousFreeTid, &sharedStorage); PersistentFileSysObjName_SetTablespaceDir( fsObjName, tablespaceOid, NULL); fsObjName->hasInited = true; fsObjName->sharedStorage = sharedStorage; } break; case PersistentFsObjType_FilespaceDir: { Oid filespaceOid; int16 dbId1; char locationBlankPadded1[FilespaceLocationBlankPaddedWithNullTermLen]; GpPersistentFilespaceNode_GetValues( values, &filespaceOid, &dbId1, locationBlankPadded1, persistentState, &reserved, parentXid, persistentSerialNum, &previousFreeTid, &sharedStorage); PersistentFileSysObjName_SetFilespaceDir( fsObjName, filespaceOid, NULL); fsObjName->hasInited = true; fsObjName->sharedStorage = sharedStorage; } break; default: elog(ERROR, "Unexpected persistent file-system object type: %d", fsObjType); } }
static void PersistentBuild_ScanGpPersistentRelationNodeForGlobal( Relation gp_relation_node, int64 *count) { PersistentFileSysObjData *fileSysObjData; PersistentFileSysObjSharedData *fileSysObjSharedData; PersistentStoreScan storeScan; Datum values[Natts_gp_persistent_relfile_node]; ItemPointerData persistentTid; int64 persistentSerialNum; PersistentFileSysObj_GetDataPtrs( PersistentFsObjType_RelationFile, &fileSysObjData, &fileSysObjSharedData); PersistentStore_BeginScan( &fileSysObjData->storeData, &fileSysObjSharedData->storeSharedData, &storeScan); while (PersistentStore_GetNext( &storeScan, values, &persistentTid, &persistentSerialNum)) { RelFileNode relFileNode; int32 segmentFileNum; PersistentFileSysRelStorageMgr relationStorageManager; PersistentFileSysState persistentState; PersistentFileSysRelBufpoolKind relBufpoolKind; TransactionId parentXid; int64 serialNum; ItemPointerData previousFreeTid; PersistentFileSysObjName fsObjName; bool sharedStorage; GpPersistentRelfileNode_GetValues( values, &relFileNode.spcNode, &relFileNode.dbNode, &relFileNode.relNode, &segmentFileNum, &relationStorageManager, &persistentState, &relBufpoolKind, &parentXid, &serialNum, &previousFreeTid, &sharedStorage); if (persistentState == PersistentFileSysState_Free) continue; PersistentFileSysObjName_SetRelationFile( &fsObjName, &relFileNode, segmentFileNum, NULL); fsObjName.hasInited = true; fsObjName.sharedStorage = sharedStorage; if (relFileNode.spcNode != GLOBALTABLESPACE_OID) continue; if (relationStorageManager != PersistentFileSysRelStorageMgr_BufferPool) elog(ERROR, "Only expecting global tables to be Buffer Pool managed"); InsertGpRelfileNodeTuple( gp_relation_node, relFileNode.relNode, // pg_class OID /* relationName */ NULL, // Optional. relFileNode.relNode, // pg_class relfilenode /* segmentFileNum */ 0, /* updateIndex */ false, &persistentTid, persistentSerialNum); (*count)++; } PersistentStore_EndScan(&storeScan); }