00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "fennel/common/CommonPreamble.h"
00025 #include "fennel/cache/QuotaCacheAccessor.h"
00026
00027 FENNEL_BEGIN_CPPFILE("$Id: //open/dev/fennel/cache/QuotaCacheAccessor.cpp#12 $");
00028
00029 QuotaCacheAccessor::QuotaCacheAccessor(
00030 SharedQuotaCacheAccessor pSuperQuotaAccessorInit,
00031 SharedCacheAccessor pDelegateInit,
00032 uint maxLockedPagesInit)
00033 : TransactionalCacheAccessor(pDelegateInit),
00034 pSuperQuotaAccessor(pSuperQuotaAccessorInit),
00035 maxLockedPages(maxLockedPagesInit)
00036 {
00037 }
00038
00039 QuotaCacheAccessor::~QuotaCacheAccessor()
00040 {
00041 assert(!nPagesLocked);
00042 }
00043
00044 CachePage *QuotaCacheAccessor::lockPage(
00045 BlockId blockId,
00046 LockMode lockMode,
00047 bool readIfUnmapped,
00048 MappedPageListener *pMappedPageListener,
00049 TxnId txnId)
00050 {
00051 CachePage *pPage = TransactionalCacheAccessor::lockPage(
00052 blockId,lockMode,readIfUnmapped,pMappedPageListener,txnId);
00053 if (pPage) {
00054 incrementUsage();
00055 }
00056 return pPage;
00057 }
00058
00059 void QuotaCacheAccessor::unlockPage(
00060 CachePage &page,
00061 LockMode lockMode,
00062 TxnId txnId)
00063 {
00064 decrementUsage();
00065 TransactionalCacheAccessor::unlockPage(page,lockMode,txnId);
00066 }
00067
00068 void QuotaCacheAccessor::incrementUsage()
00069 {
00070 assert(nPagesLocked < maxLockedPages);
00071 ++nPagesLocked;
00072 if (pSuperQuotaAccessor) {
00073 pSuperQuotaAccessor->incrementUsage();
00074 }
00075 }
00076
00077 void QuotaCacheAccessor::decrementUsage()
00078 {
00079 assert(nPagesLocked);
00080 --nPagesLocked;
00081 if (pSuperQuotaAccessor) {
00082 pSuperQuotaAccessor->decrementUsage();
00083 }
00084 }
00085
00086 uint QuotaCacheAccessor::getMaxLockedPages()
00087 {
00088 return maxLockedPages;
00089 }
00090
00091 void QuotaCacheAccessor::setMaxLockedPages(uint nPages)
00092 {
00093 assert(nPages >= nPagesLocked);
00094 maxLockedPages = nPages;
00095 }
00096
00097 FENNEL_END_CPPFILE("$Id: //open/dev/fennel/cache/QuotaCacheAccessor.cpp#12 $");
00098
00099