Fennel: TransactionalCacheAccessor Class Reference (original) (raw)

TransactionalCacheAccessor implements the CacheAccessor::setTxnId method, allowing it to be used to lock pages on behalf of a particular transaction without the caller being aware of the association. More...

#include <[TransactionalCacheAccessor.h](TransactionalCacheAccessor%5F8h-source.html)>

Inheritance diagram for TransactionalCacheAccessor:

List of all members.

Public Member Functions
TransactionalCacheAccessor (SharedCacheAccessor pDelegate)
Constructor.
virtual ~TransactionalCacheAccessor ()
virtual CachePage * lockPage (BlockId blockId, LockMode lockMode, bool readIfUnmapped=true, MappedPageListener *pMappedPageListener=NULL, TxnId txnId=IMPLICIT_TXN_ID)
Locks a page into memory with the specified concurrency mode.
virtual void unlockPage (CachePage &page, LockMode lockMode, TxnId txnId=IMPLICIT_TXN_ID)
Releases lock held on page.
virtual void setTxnId (TxnId txnId)
Sets a default TxnId to use for locking pages (to be used when IMPLICIT_TXN_ID is specified).
virtual TxnId getTxnId () const
**Returns:**default TxnId associated with this accessor
virtual void discardPage (BlockId blockId)
Unmaps a page from the cache if already mapped, discarding its contents if dirty.
virtual bool prefetchPage (BlockId blockId, MappedPageListener *pMappedPageListener=NULL)
Hints that a page should be prefetched in preparation for a future lock request.
virtual void prefetchBatch (BlockId blockId, uint nPages, MappedPageListener *pMappedPageListener=NULL)
Hints that a contiguous run of pages should be prefetched.
virtual void flushPage (CachePage &page, bool async)
Forces the contents of a dirty page to its mapped location.
virtual void nicePage (CachePage &page)
Marks a page as nice, indicating that it is very unlikely the page's mapping will be needed again any time soon, so it is a good candidate for victimization.
virtual SharedCache getCache ()
**Returns:**the underlying Cache accessed by this CacheAccessor
virtual uint getMaxLockedPages ()
**Returns:**the page lock quota on this accessor
virtual void setMaxLockedPages (uint nPages)
Sets the page lock quota on this accessor.
virtual void getPrefetchParams (uint &prefetchPagesMax, uint &prefetchThrottleRate)
Retrieves the current pre-fetch caching parameters that determine how many pages should be pre-fetched and how often the pre-fetches should occur.
Private Attributes
TxnId implicitTxnId

Detailed Description

TransactionalCacheAccessor implements the CacheAccessor::setTxnId method, allowing it to be used to lock pages on behalf of a particular transaction without the caller being aware of the association.

Version:

Id

//open/dev/fennel/cache/TransactionalCacheAccessor.h#5

Definition at line 38 of file TransactionalCacheAccessor.h.


Constructor & Destructor Documentation

TransactionalCacheAccessor::TransactionalCacheAccessor ( SharedCacheAccessor pDelegate ) [explicit]

| TransactionalCacheAccessor::~TransactionalCacheAccessor | ( | | ) | [virtual] | | -------------------------------------------------------- | - | | - | ----------- |


Member Function Documentation

Locks a page into memory with the specified concurrency mode.

When the page contents are no longer needed, the caller must invoke the unlockPage() method with the same concurrency mode to release it. If the desired page is already locked by another thread with an incompatible concurrency mode, blocks until the page becomes available (unless the lock mode is of the NoWait variety, in which case returns NULL immediately). Note that NoWait locking only applies to lock contention, not I/O, so if an unmapped page is locked in NoWait mode, blocks until the read completes.

The device referenced by the requested blockId must already be registered with the cache and must remain registered for the duration of the lock.

Notes on concurrency modes:

Parameters:

blockId the BlockId of the page to be locked
lockMode the desired concurrency mode
readIfUnmapped if true (the default) the page data is read as part of mapping; if false, the page data is left invalid until first write (used when allocating a new block with invalid contents)
pMappedPageListener optional listener to receive notifications when this page is written; if specified, it must match all prior and subsequent lock requests for the same page mapping
txnId optional TxnId to associate with lock; default is IMPLICIT_TXN_ID, which uses current thread ID as an implicit TxnId

Returns:

the locked CachePage, or NULL if a NoWait attempt failed

Reimplemented from DelegatingCacheAccessor.

Reimplemented in QuotaCacheAccessor.

Definition at line 39 of file TransactionalCacheAccessor.cpp.

References IMPLICIT_TXN_ID, implicitTxnId, and DelegatingCacheAccessor::lockPage().

Referenced by QuotaCacheAccessor::lockPage().

void TransactionalCacheAccessor::setTxnId ( TxnId txnId ) [virtual]

| TxnId TransactionalCacheAccessor::getTxnId | ( | | ) | const [virtual] | | ------------------------------------------ | - | | - | ----------------- |

void DelegatingCacheAccessor::discardPage ( BlockId blockId ) [virtual, inherited]
bool DelegatingCacheAccessor::prefetchPage ( BlockId blockId,
MappedPageListener * pMappedPageListener = NULL
) [virtual, inherited]

Hints that a page should be prefetched in preparation for a future lock request.

Parameters:

blockId the BlockId of the page to be prefetched
pMappedPageListener optional listener to receive notifications when this page is written; if specified, it must match all prior and subsequent lock requests for the same page mapping

Returns:

true if the pre-fetch request was successful

Implements CacheAccessor.

Definition at line 60 of file DelegatingCacheAccessor.cpp.

References DelegatingCacheAccessor::pDelegate.

00063 { 00064 return pDelegate->prefetchPage(blockId,pMappedPageListener); 00065 }

void DelegatingCacheAccessor::prefetchBatch ( BlockId blockId,
uint nPages,
MappedPageListener * pMappedPageListener = NULL
) [virtual, inherited]

Hints that a contiguous run of pages should be prefetched.

Parameters:

blockId the BlockId of the first page to be prefetched; more will be prefetched depending on the configured batch size
nPages number of pages in batch
pMappedPageListener optional listener to receive notifications when this page is written; if specified, it must match all prior and subsequent lock requests for the same page mapping

Implements CacheAccessor.

Definition at line 67 of file DelegatingCacheAccessor.cpp.

References DelegatingCacheAccessor::pDelegate.

00070 { 00071 pDelegate->prefetchBatch(blockId,nPages,pMappedPageListener); 00072 }

void DelegatingCacheAccessor::flushPage ( CachePage & page,
bool async
) [virtual, inherited]

Forces the contents of a dirty page to its mapped location.

Page must already be locked in exclusive mode. For an asynchronous flush, the caller must ensure that the page contents remain unchanged until the flush completes.

Parameters:

page the page to be flushed
async true to schedle async write and return immediately; false to wait for write to complete

Implements CacheAccessor.

Definition at line 74 of file DelegatingCacheAccessor.cpp.

References DelegatingCacheAccessor::pDelegate.

00075 { 00076 pDelegate->flushPage(page,async); 00077 }

void DelegatingCacheAccessor::nicePage ( CachePage & page ) [virtual, inherited]

| SharedCache DelegatingCacheAccessor::getCache | ( | | ) | [virtual, inherited] | | ------------------------------------------------------------------------------------------------------- | - | | - | ---------------------- |

| uint DelegatingCacheAccessor::getMaxLockedPages | ( | | ) | [virtual, inherited] | | ------------------------------------------------------------------------------------------------------------ | - | | - | ---------------------- |

void DelegatingCacheAccessor::setMaxLockedPages ( uint nPages ) [virtual, inherited]
void DelegatingCacheAccessor::getPrefetchParams ( uint & prefetchPagesMax,
uint & prefetchThrottleRate
) [virtual, inherited]

Retrieves the current pre-fetch caching parameters that determine how many pages should be pre-fetched and how often the pre-fetches should occur.

Parameters:

[out] prefetchPagesMax max number of outstanding pre-fetch pages
[out] prefetchThrottleRate the number of successful pre-fetches that have to occur before the pre-fetch rate is throttled back up, in the event that it has been throttled down due to rejected requests

Implements CacheAccessor.

Definition at line 109 of file DelegatingCacheAccessor.cpp.

References DelegatingCacheAccessor::pDelegate.

00112 { 00113 pDelegate->getPrefetchParams(prefetchPagesMax, prefetchThrottleRate); 00114 }


Member Data Documentation


The documentation for this class was generated from the following files:


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