void GpPersistentRelfileNode_SetDatumValues( Datum *values, Oid tablespaceOid, Oid databaseOid, Oid relfilenodeOid, int32 segmentFileNum, PersistentFileSysRelStorageMgr relationStorageManager, PersistentFileSysState persistentState, PersistentFileSysRelBufpoolKind relBufpoolKind, TransactionId parentXid, int64 persistentSerialNum, ItemPointerData *previousFreeTid, bool sharedStorage) { if (persistentState != PersistentFileSysState_Free && !PersistentFileSysRelStorageMgr_IsValid(relationStorageManager)) elog(ERROR, "Invalid value for relation storage manager (%d)", relationStorageManager); values[Anum_gp_persistent_relfile_node_tablespace_oid - 1] = ObjectIdGetDatum(tablespaceOid); values[Anum_gp_persistent_relfile_node_database_oid - 1] = ObjectIdGetDatum(databaseOid); values[Anum_gp_persistent_relfile_node_relfilenode_oid - 1] = ObjectIdGetDatum(relfilenodeOid); values[Anum_gp_persistent_relfile_node_segment_file_num - 1] = Int32GetDatum(segmentFileNum); values[Anum_gp_persistent_relfile_node_relation_storage_manager - 1] = Int16GetDatum(relationStorageManager); values[Anum_gp_persistent_relfile_node_persistent_state - 1] = Int16GetDatum(persistentState); values[Anum_gp_persistent_relfile_node_relation_bufpool_kind - 1] = Int32GetDatum((int32)relBufpoolKind); values[Anum_gp_persistent_relfile_node_parent_xid - 1] = Int32GetDatum(parentXid); values[Anum_gp_persistent_relfile_node_persistent_serial_num - 1] = Int64GetDatum(persistentSerialNum); values[Anum_gp_persistent_relfile_node_previous_free_tid - 1] = PointerGetDatum(previousFreeTid); }
void GpPersistentRelationNode_SetDatumValues( Datum *values, Oid tablespaceOid, Oid databaseOid, Oid relfilenodeOid, int32 segmentFileNum, PersistentFileSysRelStorageMgr relationStorageManager, PersistentFileSysState persistentState, int64 createMirrorDataLossTrackingSessionNum, MirroredObjectExistenceState mirrorExistenceState, MirroredRelDataSynchronizationState mirrorDataSynchronizationState, bool mirrorBufpoolMarkedForScanIncrementalResync, int64 mirrorBufpoolResyncChangedPageCount, XLogRecPtr *mirrorBufpoolResyncCkptLoc, BlockNumber mirrorBufpoolResyncCkptBlockNum, int64 mirrorAppendOnlyLossEof, int64 mirrorAppendOnlyNewEof, PersistentFileSysRelBufpoolKind relBufpoolKind, TransactionId parentXid, int64 persistentSerialNum) { if (persistentState != PersistentFileSysState_Free && !PersistentFileSysRelStorageMgr_IsValid(relationStorageManager)) elog(ERROR, "Invalid value for relation storage manager (%d)", relationStorageManager); values[Anum_gp_persistent_relation_node_tablespace_oid - 1] = ObjectIdGetDatum(tablespaceOid); values[Anum_gp_persistent_relation_node_database_oid - 1] = ObjectIdGetDatum(databaseOid); values[Anum_gp_persistent_relation_node_relfilenode_oid - 1] = ObjectIdGetDatum(relfilenodeOid); values[Anum_gp_persistent_relation_node_segment_file_num - 1] = Int32GetDatum(segmentFileNum); values[Anum_gp_persistent_relation_node_relation_storage_manager - 1] = Int16GetDatum(relationStorageManager); values[Anum_gp_persistent_relation_node_persistent_state - 1] = Int16GetDatum(persistentState); values[Anum_gp_persistent_relation_node_create_mirror_data_loss_tracking_session_num - 1] = Int64GetDatum(createMirrorDataLossTrackingSessionNum); values[Anum_gp_persistent_relation_node_mirror_existence_state - 1] = Int16GetDatum(mirrorExistenceState); values[Anum_gp_persistent_relation_node_mirror_data_synchronization_state - 1] = Int16GetDatum(mirrorDataSynchronizationState); values[Anum_gp_persistent_relation_node_mirror_bufpool_marked_for_scan_incremental_resync - 1] = BoolGetDatum(mirrorBufpoolMarkedForScanIncrementalResync); values[Anum_gp_persistent_relation_node_mirror_bufpool_resync_changed_page_count - 1] = Int64GetDatum(mirrorBufpoolResyncChangedPageCount); values[Anum_gp_persistent_relation_node_mirror_bufpool_resync_ckpt_loc - 1] = PointerGetDatum(mirrorBufpoolResyncCkptLoc); values[Anum_gp_persistent_relation_node_mirror_bufpool_resync_ckpt_block_num - 1] = Int32GetDatum(mirrorBufpoolResyncCkptBlockNum); values[Anum_gp_persistent_relation_node_mirror_append_only_loss_eof - 1] = Int64GetDatum(mirrorAppendOnlyLossEof); values[Anum_gp_persistent_relation_node_mirror_append_only_new_eof - 1] = Int64GetDatum(mirrorAppendOnlyNewEof); values[Anum_gp_persistent_relation_node_relation_bufpool_kind - 1] = Int32GetDatum((int32)relBufpoolKind); values[Anum_gp_persistent_relation_node_parent_xid - 1] = Int32GetDatum(parentXid); values[Anum_gp_persistent_relation_node_persistent_serial_num - 1] = Int64GetDatum(persistentSerialNum); }
static void PersistentEndXactRec_VerifyFileSysActionInfos( EndXactRecKind endXactRecKind, PersistentEndXactFileSysActionInfo *fileSysActionInfos, int count) { int i; ItemPointerData maxTid; if (InRecovery || Persistent_BeforePersistenceWork()) return; for (i = 0; i < count; i++) { PersistentTidIsKnownResult persistentTidIsKnownResult; if (!PersistentEndXactFileSysAction_IsValid(fileSysActionInfos[i].action)) elog(ERROR, "Persistent file-system action is invalid (%d) (index %d, transaction kind '%s')", fileSysActionInfos[i].action, i, EndXactRecKind_Name(endXactRecKind)); if (!PersistentFsObjType_IsValid(fileSysActionInfos[i].fsObjName.type)) elog(ERROR, "Persistent file-system object type is invalid (%d) (index %d, transaction kind '%s')", fileSysActionInfos[i].fsObjName.type, i, EndXactRecKind_Name(endXactRecKind)); if (PersistentStore_IsZeroTid(&fileSysActionInfos[i].persistentTid)) elog(ERROR, "TID for persistent '%s' tuple is invalid (0,0) (index %d, transaction kind '%s')", PersistentFileSysObjName_TypeAndObjectName(&fileSysActionInfos[i].fsObjName), i, EndXactRecKind_Name(endXactRecKind)); persistentTidIsKnownResult = PersistentFileSysObj_TidIsKnown( fileSysActionInfos[i].fsObjName.type, &fileSysActionInfos[i].persistentTid, &maxTid); switch (persistentTidIsKnownResult) { case PersistentTidIsKnownResult_BeforePersistenceWork: elog(ERROR, "Shouldn't being trying to verify persistent TID before persistence work"); break; case PersistentTidIsKnownResult_ScanNotPerformedYet: // UNDONE: For now, just debug log this. if (Debug_persistent_print) elog(Persistent_DebugPrintLevel(), "Can't verify persistent TID if we haven't done the persistent scan yet"); break; case PersistentTidIsKnownResult_MaxTidIsZero: // UNDONE: For now, just debug log this. if (Debug_persistent_print) elog(Persistent_DebugPrintLevel(), "TID for persistent '%s' tuple TID %s and the last known TID zero (0,0) (index %d, transaction kind '%s')", PersistentFileSysObjName_TypeAndObjectName(&fileSysActionInfos[i].fsObjName), ItemPointerToString(&fileSysActionInfos[i].persistentTid), i, EndXactRecKind_Name(endXactRecKind)); break; case PersistentTidIsKnownResult_NotKnown: // UNDONE: For now, just debug log this. if (Debug_persistent_print) elog(Persistent_DebugPrintLevel(), "TID for persistent '%s' tuple TID %s is beyond the last known TID %s (index %d, transaction kind '%s')", PersistentFileSysObjName_TypeAndObjectName(&fileSysActionInfos[i].fsObjName), ItemPointerToString(&fileSysActionInfos[i].persistentTid), ItemPointerToString2(&maxTid), i, EndXactRecKind_Name(endXactRecKind)); break; case PersistentTidIsKnownResult_Known: /* OK */ break; default: elog(ERROR, "Unexpected persistent file-system TID is known result: %d", persistentTidIsKnownResult); } if (fileSysActionInfos[i].persistentSerialNum == 0) elog(ERROR, "Persistent '%s' serial number is invalid (0) (index %d, transaction kind '%s')", PersistentFileSysObjName_TypeAndObjectName(&fileSysActionInfos[i].fsObjName), i, EndXactRecKind_Name(endXactRecKind)); if (fileSysActionInfos[i].fsObjName.type == PersistentFsObjType_RelationFile && !PersistentFileSysRelStorageMgr_IsValid(fileSysActionInfos[i].relStorageMgr)) elog(ERROR, "Persistent '%s' relation storage manager has invalid value (%d) (index %d, transaction kind '%s')", PersistentFileSysObjName_TypeAndObjectName(&fileSysActionInfos[i].fsObjName), fileSysActionInfos[i].relStorageMgr, i, EndXactRecKind_Name(endXactRecKind)); } }