1 #ifndef _CEGOLOGMANAGER_H_INCLUDED_ 2 #define _CEGOLOGMANAGER_H_INCLUDED_ 3 /////////////////////////////////////////////////////////////////////////////// 4 // 5 // CegoLogManager.h 6 // ---------------- 7 // Cego database log manager class definition 8 // 9 // Design and Implementation by Bjoern Lemke 10 // 11 // (C)opyright 2000-2019 Bjoern Lemke 12 // 13 // INTERFACE MODULE 14 // 15 // Class: CegoLogManager 16 // 17 // Description: Cego database log management 18 // 19 // Status: CLEAN 20 // 21 /////////////////////////////////////////////////////////////////////////////// 22 23 // LFC INCLUDES 24 #include <lfcbase/Chain.h> 25 #include <lfcbase/File.h> 26 27 // CEGO INCLUDES 28 #include "CegoFileHandler.h" 29 #include "CegoLogHandler.h" 30 #include "CegoLogRecord.h" 31 #include "CegoXMLSpace.h" 32 #include "CegoDefs.h" 33 34 class CegoLogManager : public CegoFileHandler, public CegoXMLSpace { 35 36 public: 37 38 enum LogResult { LOG_SUCCESS, LOG_FULL, LOG_ERROR }; 39 40 CegoLogManager(const Chain& xmlDef, const Chain& logFile, const Chain& progName); 41 ~CegoLogManager(); 42 43 void initLog(int tabSetId, int size); 44 void stopLog(int tabSetId); 45 void startLog(int tabSetId); 46 int getLogOffset(int tabSetId); 47 void resetLog(int tabSetId); 48 49 LogResult logAction(int tabSetId, CegoLogRecord& logRec, bool flushLog = true); 50 51 void allocateLogConnection(int tabSetId, const Chain& tableSet, const Chain& logHost, int logPort, const Chain& logUser, const Chain& logPwd); 52 bool hasLogConnection(int tabSetId); 53 void releaseLogConnection(int tabSetId); 54 void setLogFile(int tabSetId, const Chain& logFile, bool readOnly); 55 56 unsigned long long getMinLSN(int tabSetId); 57 unsigned long long getMaxLSN(int tabSetId); 58 59 void seekToStart(int tabSetId); 60 bool logSeek(int tabSetId, unsigned long long lsn); 61 bool logRead(int tabSetId, CegoLogRecord& logRec); 62 63 unsigned long long nextLSN(int tabSetId); 64 void setCurrentLSN(int tabSetId, unsigned long long lsn); 65 unsigned long long getCurrentLSN(int tabSetId); 66 67 Chain getArchiveLogName(const Chain& tableSet, unsigned long long lsn); 68 69 bool switchLogFile(int tabSetId); 70 void setActiveLogFile(const Chain& tableSet); 71 72 private: 73 74 int getLFID(); 75 void switchLFID(); 76 77 File *_pLog[TABMNG_MAXTABSET]; 78 File *_pLFID[TABMNG_MAXTABSET]; 79 80 Chain _logFile[TABMNG_MAXTABSET]; 81 int _logSize[TABMNG_MAXTABSET]; 82 int _logOffset[TABMNG_MAXTABSET]; 83 84 char* _logBuf[TABMNG_MAXTABSET]; 85 int _logBufLen[TABMNG_MAXTABSET]; 86 87 int _numGroup[TABMNG_MAXTABSET]; 88 89 unsigned long long _lsn[TABMNG_MAXTABSET]; 90 int _logPos[TABMNG_MAXTABSET]; 91 92 bool _logActive[TABMNG_MAXTABSET]; 93 94 CegoLogHandler* _pLogHandler[TABMNG_MAXTABSET]; 95 NetHandler* _pNetHandler[TABMNG_MAXTABSET]; 96 97 unsigned long _modId; 98 }; 99 100 #endif 101