Fennel: /home/pub/open/dev/fennel/db/Database.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_Database_Included 00025 #define Fennel_Database_Included 00026 00027 #include "fennel/device/DeviceMode.h" 00028 #include "fennel/common/TraceSource.h" 00029 #include "fennel/common/StatsSource.h" 00030 #include "fennel/common/ConfigMap.h" 00031 #include "fennel/common/ClosableObject.h" 00032 #include "fennel/db/DatabaseHeader.h" 00033 #include "fennel/tuple/StandardTypeDescriptor.h" 00034 #include "fennel/segment/SegmentMap.h" 00035 #include "fennel/synch/SynchMonitoredObject.h" 00036 00037 #include <boost/utility.hpp> 00038 00039 FENNEL_BEGIN_NAMESPACE 00040 00041 class LogicalTxnParticipantFactory; 00042 class VersionedSegment; 00043 class LinearDeviceSegmentParams; 00044 00049 class FENNEL_DB_EXPORT Database 00050 : public boost::noncopyable, 00051 public ClosableObject, 00052 public TraceSource, 00053 public SegmentMap, 00054 public StatsSource, 00055 public SynchMonitoredObject 00056 { 00057 DeviceId dataDeviceId; 00058 00059 SharedRandomAccessDevice pDataDevice; 00060 00061 DeviceId tempDeviceId; 00062 00063 DeviceId shadowDeviceId; 00064 00065 DeviceId txnLogDeviceId; 00066 00067 std::string dataDeviceName; 00068 00069 std::string tempDeviceName; 00070 00071 std::string shadowDeviceName; 00072 00073 std::string txnLogDeviceName; 00074 00075 SharedCache pCache; 00076 00077 SharedSegmentFactory pSegmentFactory; 00078 00079 SharedSegment pHeaderSegment; 00080 00081 SharedSegment pDataSegment; 00082 00083 SharedSegment pTempSegment; 00084 00085 VersionedSegment *pVersionedSegment; 00086 00087 SharedLogicalTxnLog pTxnLog; 00088 00089 PageId headerPageId1; 00090 00091 PageId headerPageId2; 00092 00093 DatabaseHeader header; 00094 00095 LogicalTxnParticipantFactory *pTxnParticipantFactory; 00096 00097 bool forceTxns; 00098 00099 bool disableSnapshots; 00100 00101 bool recoveryRequired; 00102 00103 DeviceMode openMode; 00104 00105 ConfigMap configMap; 00106 00107 StandardTypeDescriptorFactory typeFactory; 00108 00109 SharedCheckpointThread pCheckpointThread; 00110 00111 SharedPseudoUuidGenerator pUuidGenerator; 00112 00116 uint nCheckpointsStat; 00117 00121 uint nCheckpoints; 00122 00126 bool disableDeallocateOld; 00127 00131 SharedSegPageBackupRestoreDevice pBackupRestoreDevice; 00132 00136 SegmentAccessor scratchAccessor; 00137 00138 explicit Database( 00139 SharedCache pCache, 00140 ConfigMap const &configMap, 00141 DeviceMode openMode, 00142 SharedTraceTarget pTraceTarget, 00143 SharedPseudoUuidGenerator pUuidGenerator); 00144 00145
00146 virtual void closeImpl(); 00147 00148 00149 00150 00151 00152 void init(); 00153 00154 void createTxnLog(DeviceMode); 00155 00156 SharedSegment createTxnLogSegment(DeviceMode,PageId); 00157 00158 SharedSegment createShadowLog(DeviceMode); 00159 00160 void createDataDevice(LinearDeviceSegmentParams &); 00161 00162 void createDataSegment(SharedSegment, LinearDeviceSegmentParams &); 00163 00164 void createTempSegment(); 00165 00166 void allocateHeader(); 00167 00168 void writeHeader(); 00169 00170 void loadHeader(bool); 00171 00172 void closeDevices(); 00173 00174 void deleteLogs(); 00175 00176 void openSegments(); 00177 00178 void prepareForRecovery(); 00179 00180 void recoverPhysical(CheckpointType); 00181 00182 void readDeviceParams( 00183 std::string paramNamePrefix, 00184 DeviceMode deviceMode, 00185 LinearDeviceSegmentParams &deviceParams); 00186 00187 void cleanupBackupRestore(bool isBackup); 00188 00189 public: 00190 static ParamName paramDatabaseDir; 00191 static ParamName paramResourceDir; 00192 static ParamName paramForceTxns; 00193 static ParamName paramDisableSnapshots; 00194 static ParamName paramDatabasePrefix; 00195 static ParamName paramTempPrefix; 00196 static ParamName paramShadowLogPrefix; 00197 static ParamName paramTxnLogPrefix; 00198 static ParamName paramInitSizeSuffix; 00199 static ParamName paramMaxSizeSuffix; 00200 static ParamName paramIncSizeSuffix; 00201 00202 static ParamVal valLogAllocLinear; 00203 static ParamVal valLogAllocCircular; 00204 00205 static const SegmentId DEFAULT_DATA_SEGMENT_ID; 00206 static const SegmentId TEMP_SEGMENT_ID; 00207 00208 static SharedDatabase newDatabase( 00209 SharedCache pCache, 00210 ConfigMap const &configMap, 00211 DeviceMode openMode, 00212 SharedTraceTarget pTraceTarget, 00213 SharedPseudoUuidGenerator pUuidGenerator = SharedPseudoUuidGenerator()); 00214 00215 virtual ~Database(); 00216 00217 const ConfigMap& getConfigMap() const; 00218 00219 SharedCache getCache() const; 00220 00221 SharedSegmentFactory getSegmentFactory() const; 00222 00223 SharedSegment getDataSegment() const; 00224 00225 SharedSegment getTempSegment() const; 00226 00227 SharedCheckpointThread getCheckpointThread() const; 00228 00229
00230 virtual SharedSegment getSegmentById( 00231 SegmentId segmentId, 00232 SharedSegment pDataSegment); 00233 00234
00235 virtual void writeStats(StatsTarget &target); 00236 00237 SharedLogicalTxnLog getTxnLog() const; 00238 00239 StoredTypeDescriptorFactory const &getTypeFactory() const; 00240 00241 bool isRecoveryRequired() const; 00242 00243 bool shouldForceTxns() const; 00244 00245 bool areSnapshotsEnabled() const; 00246 00247 void recoverOnline(); 00248 00249 void recover( 00250 LogicalTxnParticipantFactory &txnParticipantFactory); 00251 00252 void checkpointImpl(CheckpointType = CHECKPOINT_FLUSH_ALL); 00253 00263 void requestCheckpoint( 00264 CheckpointType checkpointType, 00265 bool async); 00266 00275 void deallocateOldPages(TxnId oldestLabelCsn); 00276 00282 void setLastCommittedTxnId(TxnId txnId); 00283 00287 TxnId getLastCommittedTxnId(); 00288 00311 TxnId initiateBackup( 00312 const std::string &backupFilePathname, 00313 bool checkSpaceRequirements, 00314 FileSize spacePadding, 00315 TxnId lowerBoundCsn, 00316 const std::string &compressionProgram, 00317 FileSize &dataDeviceSize, 00318 const volatile bool &aborted); 00319 00332 void completeBackup( 00333 TxnId lowerBoundCsn, 00334 TxnId upperBoundCsn, 00335 const volatile bool &aborted); 00336 00343 void abortBackup(); 00344 00363 void restoreFromBackup( 00364 const std::string &backupFilePathname, 00365 FileSize newSize, 00366 const std::string &compressionProgram, 00367 TxnId lowerBoundCsn, 00368 TxnId upperBoundCsn, 00369 const volatile bool &aborted); 00370 }; 00371 00372 FENNEL_END_NAMESPACE 00373 00374 #endif 00375 00376