DatabaseHeader.h

Go to the documentation of this file.
00001 /*
00002 // $Id: //open/dev/fennel/db/DatabaseHeader.h#13 $
00003 // Fennel is a library of data storage and processing components.
00004 // Copyright (C) 2005-2009 The Eigenbase Project
00005 // Copyright (C) 2005-2009 SQLstream, Inc.
00006 // Copyright (C) 2005-2009 LucidEra, Inc.
00007 // Portions Copyright (C) 1999-2009 John V. Sichi
00008 //
00009 // This program is free software; you can redistribute it and/or modify it
00010 // under the terms of the GNU General Public License as published by the Free
00011 // Software Foundation; either version 2 of the License, or (at your option)
00012 // any later version approved by The Eigenbase Project.
00013 //
00014 // This program is distributed in the hope that it will be useful,
00015 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00016 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00017 // GNU General Public License for more details.
00018 //
00019 // You should have received a copy of the GNU General Public License
00020 // along with this program; if not, write to the Free Software
00021 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00022 */
00023 
00024 #ifndef Fennel_DatabaseHeader_Included
00025 #define Fennel_DatabaseHeader_Included
00026 
00027 #include "fennel/segment/SegPageLock.h"
00028 #include "fennel/txn/LogicalTxnStoredStructs.h"
00029 #include "fennel/common/PseudoUuid.h"
00030 
00031 FENNEL_BEGIN_NAMESPACE
00032 
00033 // NOTE:  read comments on struct StoredNode before modifying
00034 // DatabaseHeader
00035 
00041 struct FENNEL_DB_EXPORT DatabaseHeader
00042     : public StoredNode
00043 {
00044     // NOTE jvs 27-Apr-2007:  We use distinct magic numbers for incompatible
00045     // hardware/OS/compiler architectures.  This prevents accidents when
00046     // attempting to transport physical backup images across machines.
00047     // Currently, for 32-bit x86, Windows and Linux gcc are incompatible
00048     // (it may be possible to fix this via pragma/switches, but no
00049     // one has investigated it so far).  64-bit Linux is incompatible
00050     // with both.  On next bump-up, it would probably be a good idea
00051     // to rationalize the numbering scheme so that arch component
00052     // is one component and Fennel structural version is another;
00053     // the current scheme isn't scalable as we keep adding architectures!
00054 
00055     // Magic number history:
00056     // Original value:  0xb1b7b315d821d90aLL;
00057 #ifndef __MSVC__
00058 #if __WORDSIZE == 64
00059     // Added by jvs for amd64 on 27-May-2007
00060     static const MagicNumber MAGIC_NUMBER = 0xa513a9e27bc336acLL;
00061 #else
00062     // Changed by zfong on 3/1/07 (for addition of nextTxnId to checkpoint
00063     // memento) from original value above to latest value:
00064     static const MagicNumber MAGIC_NUMBER = 0xb0941b203b81f718LL;
00065 #endif
00066 #else
00067     // Added by jvs for Windows-specific on 27-Apr-2007
00068     static const MagicNumber MAGIC_NUMBER = 0x8afe0241a2f7063eLL;
00069 #endif
00070 
00074     SegVersionNum versionNumber;
00075 
00079     LogicalTxnLogCheckpointMemento txnLogCheckpointMemento;
00080 
00084     PageId shadowRecoveryPageId;
00085 
00093     PseudoUuid onlineUuid;
00094 };
00095 
00096 typedef SegNodeLock<DatabaseHeader> DatabaseHeaderPageLock;
00097 
00098 FENNEL_END_NAMESPACE
00099 
00100 #endif
00101 
00102 // End DatabaseHeader.h

Generated on Mon Jun 22 04:00:18 2009 for Fennel by  doxygen 1.5.1