Fennel: /home/pub/open/dev/fennel/txn/LogicalRecoveryLog.h Source File (original) (raw)

00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 00021 00022 00023 00024 #ifndef Fennel_LogicalRecoveryLog_Included 00025 #define Fennel_LogicalRecoveryLog_Included 00026 00027 #include "fennel/txn/LogicalTxnStoredStructs.h" 00028 #include "fennel/common/PseudoUuid.h" 00029 00030 #include <boost/utility.hpp> 00031 #include 00032 00033 FENNEL_BEGIN_NAMESPACE 00034 00035 class LogicalTxnParticipant; 00036 class LogicalTxnParticipantFactory; 00037 00042 class FENNEL_TXN_EXPORT LogicalRecoveryLog 00043 : public boost::noncopyable 00044 { 00045 typedef std::hash_map<TxnId,LogicalTxnEventMemento> TxnMap; 00046 typedef TxnMap::iterator TxnMapIter; 00047 00048 TxnMap checkpointTxnMap; 00049 00050 LogicalTxnParticipantFactory &participantFactory; 00051 00052 SharedSegmentFactory pSegmentFactory; 00053 00054 SegmentAccessor logSegmentAccessor; 00055 00056 SharedSegInputStream pInputStream; 00057 00058 explicit LogicalRecoveryLog( 00059 LogicalTxnParticipantFactory &participantFactory, 00060 SegmentAccessor const &logSegmentAccessor, 00061 PseudoUuid const &onlineUuid, 00062 SharedSegmentFactory pSegmentFactory); 00063 00064 void redoTxn( 00065 LogicalTxnEventMemento const &commitMemento, 00066 LogicalTxnEventMemento const *pCheckpointMemento, 00067 SharedSegInputStream pTxnInputStream); 00068 00069 void undoTxn( 00070 LogicalTxnEventMemento const &checkpointMemento, 00071 SharedSegInputStream pTxnInputStream); 00072 00073 SharedSegInputStream openLongLogStream(TxnId txnId); 00074 00075 public: 00092 static SharedLogicalRecoveryLog newLogicalRecoveryLog( 00093 LogicalTxnParticipantFactory &participantFactory, 00094 SegmentAccessor const &logSegmentAccessor, 00095 PseudoUuid const &onlineUuid, 00096 SharedSegmentFactory pSegmentFactory); 00097 00098 virtual ~LogicalRecoveryLog(); 00099 void recover(LogicalTxnLogCheckpointMemento const &memento); 00100 00107 static std::string getLongLogFileName(TxnId txnId); 00108 }; 00109 00110 FENNEL_END_NAMESPACE 00111 00112 #endif 00113 00114