static bool PersistentFilespace_FileRepVerifyScanTupleCallback( ItemPointer persistentTid, int64 persistentSerialNum, Datum *values) { Oid filespaceOid; int16 dbId1; char locationBlankPadded1[FilespaceLocationBlankPaddedWithNullTermLen]; int16 dbId2; char locationBlankPadded2[FilespaceLocationBlankPaddedWithNullTermLen]; PersistentFileSysState state; int64 createMirrorDataLossTrackingSessionNum; MirroredObjectExistenceState mirrorExistenceState; int32 reserved; TransactionId parentXid; int64 serialNum; ItemPointerData previousFreeTid; GpPersistentFilespaceNode_GetValues( values, &filespaceOid, &dbId1, locationBlankPadded1, &dbId2, locationBlankPadded2, &state, &createMirrorDataLossTrackingSessionNum, &mirrorExistenceState, &reserved, &parentXid, &serialNum, &previousFreeTid); elog(LOG, "PersistentFilespace_FileRepVerify: filespace %u, location1 %s location2 %s dbId1 %d, dbId2 %d, state '%s', mirror existence state '%s', TID %s, serial number " INT64_FORMAT, filespaceOid, locationBlankPadded1, locationBlankPadded2, dbId1, dbId2, PersistentFileSysObjState_Name(state), MirroredObjectExistenceState_Name(mirrorExistenceState), ItemPointerToString2(persistentTid), persistentSerialNum); return true; // Continue. }
static bool PersistentFilespace_CheckScanTupleCallback( ItemPointer persistentTid, int64 persistentSerialNum, Datum *values) { Oid filespaceOid; int16 dbId1; char locationBlankPadded1[FilespaceLocationBlankPaddedWithNullTermLen]; int16 dbId2; char locationBlankPadded2[FilespaceLocationBlankPaddedWithNullTermLen]; PersistentFileSysState state; int64 createMirrorDataLossTrackingSessionNum; MirroredObjectExistenceState mirrorExistenceState; int32 reserved; TransactionId parentXid; int64 serialNum; ItemPointerData previousFreeTid; GpPersistentFilespaceNode_GetValues( values, &filespaceOid, &dbId1, locationBlankPadded1, &dbId2, locationBlankPadded2, &state, &createMirrorDataLossTrackingSessionNum, &mirrorExistenceState, &reserved, &parentXid, &serialNum, &previousFreeTid); if (state == PersistentFileSysState_Created && filespaceOid == persistentFilespaceCheck) { persistentFilespaceCheckFound = true; return false; } return true; // Continue. }
void GpPersistent_GetCommonValues( PersistentFsObjType fsObjType, Datum *values, PersistentFileSysObjName *fsObjName, PersistentFileSysState *persistentState, MirroredObjectExistenceState *mirrorExistenceState, TransactionId *parentXid, int64 *persistentSerialNum) { int64 createMirrorDataLossTrackingSessionNum; int32 reserved; switch (fsObjType) { case PersistentFsObjType_RelationFile: { RelFileNode relFileNode; int32 segmentFileNum; PersistentFileSysRelStorageMgr relationStorageManager; MirroredRelDataSynchronizationState mirrorDataSynchronizationState; bool mirrorBufpoolMarkedForScanIncrementalResync; int64 mirrorBufpoolResyncChangedPageCount; XLogRecPtr mirrorBufpoolResyncCkptLoc; BlockNumber mirrorBufpoolResyncCkptBlockNum; int64 mirrorAppendOnlyLossEof; int64 mirrorAppendOnlyNewEof; PersistentFileSysRelBufpoolKind relBufpoolKind; GpPersistentRelationNode_GetValues( values, &relFileNode.spcNode, &relFileNode.dbNode, &relFileNode.relNode, &segmentFileNum, &relationStorageManager, persistentState, &createMirrorDataLossTrackingSessionNum, mirrorExistenceState, &mirrorDataSynchronizationState, &mirrorBufpoolMarkedForScanIncrementalResync, &mirrorBufpoolResyncChangedPageCount, &mirrorBufpoolResyncCkptLoc, &mirrorBufpoolResyncCkptBlockNum, &mirrorAppendOnlyLossEof, &mirrorAppendOnlyNewEof, &relBufpoolKind, parentXid, persistentSerialNum); PersistentFileSysObjName_SetRelationFile( fsObjName, &relFileNode, segmentFileNum); } break; case PersistentFsObjType_DatabaseDir: { DbDirNode dbDirNode; GpPersistentDatabaseNode_GetValues( values, &dbDirNode.tablespace, &dbDirNode.database, persistentState, &createMirrorDataLossTrackingSessionNum, mirrorExistenceState, &reserved, parentXid, persistentSerialNum); PersistentFileSysObjName_SetDatabaseDir( fsObjName, dbDirNode.tablespace, dbDirNode.database); } break; case PersistentFsObjType_TablespaceDir: { Oid tablespaceOid; Oid filespaceOid; GpPersistentTablespaceNode_GetValues( values, &filespaceOid, &tablespaceOid, persistentState, &createMirrorDataLossTrackingSessionNum, mirrorExistenceState, &reserved, parentXid, persistentSerialNum); PersistentFileSysObjName_SetTablespaceDir( fsObjName, tablespaceOid); } break; case PersistentFsObjType_FilespaceDir: { Oid filespaceOid; int16 dbId1; char locationBlankPadded1[FilespaceLocationBlankPaddedWithNullTermLen]; int16 dbId2; char locationBlankPadded2[FilespaceLocationBlankPaddedWithNullTermLen]; GpPersistentFilespaceNode_GetValues( values, &filespaceOid, &dbId1, locationBlankPadded1, &dbId2, locationBlankPadded2, persistentState, &createMirrorDataLossTrackingSessionNum, mirrorExistenceState, &reserved, parentXid, persistentSerialNum); PersistentFileSysObjName_SetFilespaceDir( fsObjName, filespaceOid); } break; default: elog(ERROR, "Unexpected persistent file-system object type: %d", fsObjType); } }
static bool PersistentFilespace_ScanTupleCallback( ItemPointer persistentTid, int64 persistentSerialNum, Datum *values) { Oid filespaceOid; int16 dbId1; char locationBlankPadded1[FilespaceLocationBlankPaddedWithNullTermLen]; int16 dbId2; char locationBlankPadded2[FilespaceLocationBlankPaddedWithNullTermLen]; PersistentFileSysState state; int64 createMirrorDataLossTrackingSessionNum; MirroredObjectExistenceState mirrorExistenceState; int32 reserved; TransactionId parentXid; int64 serialNum; FilespaceDirEntry filespaceDirEntry; GpPersistentFilespaceNode_GetValues( values, &filespaceOid, &dbId1, locationBlankPadded1, &dbId2, locationBlankPadded2, &state, &createMirrorDataLossTrackingSessionNum, &mirrorExistenceState, &reserved, &parentXid, &serialNum); /* * Normally we would acquire this lock with the WRITE_FILESPACE_HASH_LOCK * macro, however, this particular function can be called during startup. * During startup, which executes in a single threaded context, no * PersistentObjLock exists and we cannot assert that we're holding it. */ LWLockAcquire(FilespaceHashLock, LW_EXCLUSIVE); filespaceDirEntry = PersistentFilespace_CreateDirUnderLock(filespaceOid); filespaceDirEntry->dbId1 = dbId1; memcpy(filespaceDirEntry->locationBlankPadded1, locationBlankPadded1, FilespaceLocationBlankPaddedWithNullTermLen); filespaceDirEntry->dbId2 = dbId2; memcpy(filespaceDirEntry->locationBlankPadded2, locationBlankPadded2, FilespaceLocationBlankPaddedWithNullTermLen); filespaceDirEntry->state = state; filespaceDirEntry->persistentSerialNum = serialNum; filespaceDirEntry->persistentTid = *persistentTid; LWLockRelease(FilespaceHashLock); if (Debug_persistent_print) elog(Persistent_DebugPrintLevel(), "PersistentFilespace_ScanTupleCallback: filespace %u, dbId1 %d, dbId2 %d, state '%s', mirror existence state '%s', TID %s, serial number " INT64_FORMAT, filespaceOid, dbId1, dbId2, PersistentFileSysObjState_Name(state), MirroredObjectExistenceState_Name(mirrorExistenceState), ItemPointerToString2(persistentTid), persistentSerialNum); 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 bool PersistentFilespace_ScanTupleCallback( ItemPointer persistentTid, int64 persistentSerialNum, Datum *values) { Oid filespaceOid; int16 dbId1; char locationBlankPadded1[FilespaceLocationBlankPaddedWithNullTermLen]; int16 dbId2; char locationBlankPadded2[FilespaceLocationBlankPaddedWithNullTermLen]; PersistentFileSysState state; int64 createMirrorDataLossTrackingSessionNum; MirroredObjectExistenceState mirrorExistenceState; int32 reserved; TransactionId parentXid; int64 serialNum; ItemPointerData previousFreeTid; FilespaceDirEntry filespaceDirEntry; GpPersistentFilespaceNode_GetValues( values, &filespaceOid, &dbId1, locationBlankPadded1, &dbId2, locationBlankPadded2, &state, &createMirrorDataLossTrackingSessionNum, &mirrorExistenceState, &reserved, &parentXid, &serialNum, &previousFreeTid); if (state == PersistentFileSysState_Free) { if (Debug_persistent_print) elog(Persistent_DebugPrintLevel(), "PersistentFilespace_ScanTupleCallback: TID %s, serial number " INT64_FORMAT " is free", ItemPointerToString2(persistentTid), persistentSerialNum); return true; // Continue. } filespaceDirEntry = PersistentFilespace_CreateDirUnderLock( filespaceOid); filespaceDirEntry->dbId1 = dbId1; memcpy(filespaceDirEntry->locationBlankPadded1, locationBlankPadded1, FilespaceLocationBlankPaddedWithNullTermLen); filespaceDirEntry->dbId2 = dbId2; memcpy(filespaceDirEntry->locationBlankPadded2, locationBlankPadded2, FilespaceLocationBlankPaddedWithNullTermLen); filespaceDirEntry->state = state; filespaceDirEntry->persistentSerialNum = serialNum; filespaceDirEntry->persistentTid = *persistentTid; if (Debug_persistent_print) elog(Persistent_DebugPrintLevel(), "PersistentFilespace_ScanTupleCallback: filespace %u, dbId1 %d, dbId2 %d, state '%s', mirror existence state '%s', TID %s, serial number " INT64_FORMAT, filespaceOid, dbId1, dbId2, PersistentFileSysObjState_Name(state), MirroredObjectExistenceState_Name(mirrorExistenceState), ItemPointerToString2(persistentTid), persistentSerialNum); return true; // Continue. }
static bool PersistentFilespace_ScanTupleCallback( ItemPointer persistentTid, int64 persistentSerialNum, Datum *values) { Oid filespaceOid; int16 dbId1; char locationBlankPadded1[FilespaceLocationBlankPaddedWithNullTermLen]; PersistentFileSysState state; int32 reserved; TransactionId parentXid; int64 serialNum; ItemPointerData previousFreeTid; FilespaceDirEntry filespaceDirEntry; bool sharedStorage; GpPersistentFilespaceNode_GetValues( values, &filespaceOid, &dbId1, locationBlankPadded1, &state, &reserved, &parentXid, &serialNum, &previousFreeTid, &sharedStorage); if (state == PersistentFileSysState_Free) { if (Debug_persistent_print) elog(Persistent_DebugPrintLevel(), "PersistentFilespace_ScanTupleCallback: TID %s, serial number " INT64_FORMAT " is free", ItemPointerToString2(persistentTid), persistentSerialNum); return true; // Continue. } filespaceDirEntry = PersistentFilespace_CreateDirUnderLock( filespaceOid); if (filespaceDirEntry == NULL) elog(ERROR, "Out of shared-memory for persistent filespaces"); memcpy(filespaceDirEntry->locationBlankPadded1, locationBlankPadded1, FilespaceLocationBlankPaddedWithNullTermLen); filespaceDirEntry->state = state; filespaceDirEntry->persistentSerialNum = serialNum; filespaceDirEntry->persistentTid = *persistentTid; if (Debug_persistent_print) elog(Persistent_DebugPrintLevel(), "PersistentFilespace_ScanTupleCallback: filespace %u, dbId1 %d, state '%s', TID %s, serial number " INT64_FORMAT, filespaceOid, dbId1, PersistentFileSysObjState_Name(state), ItemPointerToString2(persistentTid), persistentSerialNum); return true; // Continue. }