QuotaCacheAccessor.cpp

Go to the documentation of this file.
00001 /*
00002 // $Id: //open/dev/fennel/cache/QuotaCacheAccessor.cpp#12 $
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 #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 // End QuotaCacheAccessor.cpp

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