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_ScratchSegment_Included
00025 #define Fennel_ScratchSegment_Included
00026
00027 #include "fennel/segment/Segment.h"
00028 #include "fennel/cache/CacheAccessor.h"
00029 #include "fennel/synch/SynchObj.h"
00030 #include <vector>
00031
00032 FENNEL_BEGIN_NAMESPACE
00033
00040 class FENNEL_SEGMENT_EXPORT ScratchSegment
00041 : public Segment, public CacheAccessor
00042 {
00043 friend class SegmentFactory;
00044
00045 typedef std::vector<CachePage *> PageList;
00046 typedef PageList::iterator PageListIter;
00047
00051 BlockNum nPagesMax;
00052
00056 PageList pages;
00057
00061 StrictMutex mutex;
00062
00063 explicit ScratchSegment(
00064 SharedCache pCache,
00065 uint nPagesMax);
00066
00067
00068 virtual void closeImpl();
00069
00070 void clearPages();
00071
00072 public:
00073
00074
00075 virtual BlockId translatePageId(PageId);
00076 virtual PageId translateBlockId(BlockId);
00077 virtual PageId allocatePageId(PageOwnerId ownerId);
00078 virtual void deallocatePageRange(PageId startPageId,PageId endPageId);
00079 virtual bool isPageIdAllocated(PageId pageId);
00080 virtual BlockNum getAllocatedSizeInPages();
00081 virtual BlockNum getNumPagesOccupiedHighWater();
00082 virtual BlockNum getNumPagesExtended();
00083 virtual PageId getPageSuccessor(PageId pageId);
00084 virtual void setPageSuccessor(PageId pageId, PageId successorId);
00085 virtual AllocationOrder getAllocationOrder() const;
00086
00087
00088 virtual CachePage *lockPage(
00089 BlockId blockId,
00090 LockMode lockMode,
00091 bool readIfUnmapped = true,
00092 MappedPageListener *pMappedPageListener = NULL,
00093 TxnId txnId = IMPLICIT_TXN_ID);
00094 virtual void unlockPage(
00095 CachePage &page,LockMode lockMode,TxnId txnId = IMPLICIT_TXN_ID);
00096 virtual void discardPage(BlockId blockId);
00097 virtual bool prefetchPage(
00098 BlockId blockId,
00099 MappedPageListener *pMappedPageListener = NULL);
00100 virtual void prefetchBatch(
00101 BlockId blockId,uint nPages,
00102 MappedPageListener *pMappedPageListener = NULL);
00103 virtual void flushPage(CachePage &page,bool async);
00104 virtual void nicePage(CachePage &page);
00105 virtual SharedCache getCache();
00106 virtual uint getMaxLockedPages();
00107 virtual void setMaxLockedPages(uint nPages);
00108 virtual void setTxnId(TxnId txnId);
00109 virtual TxnId getTxnId() const;
00110 virtual void getPrefetchParams(
00111 uint &nPagesPerBatch,
00112 uint &nBatchPrefetches);
00113 };
00114
00115 FENNEL_END_NAMESPACE
00116
00117 #endif
00118
00119