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