libfoedus-core
FOEDUS Core Library
foedus::storage::masstree::MasstreeStorageControlBlock Struct Referencefinal

Shared data of this storage type. More...

Detailed Description

Shared data of this storage type.

Definition at line 50 of file masstree_storage_pimpl.hpp.

#include <masstree_storage_pimpl.hpp>

Collaboration diagram for foedus::storage::masstree::MasstreeStorageControlBlock:

Public Member Functions

 MasstreeStorageControlBlock ()=delete
 
 ~MasstreeStorageControlBlock ()=delete
 
bool exists () const
 

Public Attributes

soc::SharedMutex status_mutex_
 
StorageStatus status_
 Status of the storage. More...
 
DualPagePointer root_page_pointer_
 Points to the root page (or something equivalent). More...
 
MasstreeMetadata meta_
 metadata of this storage. More...
 
bool first_root_locked_
 Used to synchronize updates to root_page_pointer_. More...
 

Constructor & Destructor Documentation

foedus::storage::masstree::MasstreeStorageControlBlock::MasstreeStorageControlBlock ( )
delete
foedus::storage::masstree::MasstreeStorageControlBlock::~MasstreeStorageControlBlock ( )
delete

Member Function Documentation

bool foedus::storage::masstree::MasstreeStorageControlBlock::exists ( ) const
inline

Definition at line 55 of file masstree_storage_pimpl.hpp.

References foedus::storage::kExists, foedus::storage::kMarkedForDeath, and status_.

55 { return status_ == kExists || status_ == kMarkedForDeath; }
The storage has been marked for drop and can't be used.
Definition: storage_id.hpp:164
The storage has been created and ready for use.
Definition: storage_id.hpp:158

Member Data Documentation

bool foedus::storage::masstree::MasstreeStorageControlBlock::first_root_locked_

Used to synchronize updates to root_page_pointer_.

The only usecase is to grow the root of the first layer. This lock must be one that can be used outside of volatile page, i.e., a dumb spinlock or MCS Lock because we put it in the control block. Locks that require UniversalLockId conversion can't be used here, e.g., the Extended RW Lock. We thus use a very different lock here separate from our main lock/commit protocol.

See also
GrowFirstLayerRoot

Definition at line 88 of file masstree_storage_pimpl.hpp.

MasstreeMetadata foedus::storage::masstree::MasstreeStorageControlBlock::meta_

metadata of this storage.

Definition at line 74 of file masstree_storage_pimpl.hpp.

DualPagePointer foedus::storage::masstree::MasstreeStorageControlBlock::root_page_pointer_

Points to the root page (or something equivalent).

Masstree-specific: Volatile pointer is always active. This is always MasstreeIntermediatePage (a contract only for first layer's root page). When the first layer B-tree grows, this points to a new page. So, this is one of the few page pointers that might be swapped. Transactions thus have to add this to a pointer set even thought they are following a volatile pointer.

Instead, this always points to a root. We don't need "is_root" check in [YANDONG12] and thus doesn't need a parent pointer.

Definition at line 72 of file masstree_storage_pimpl.hpp.

Referenced by foedus::storage::masstree::MasstreePartitioner::design_partition().

StorageStatus foedus::storage::masstree::MasstreeStorageControlBlock::status_

Status of the storage.

Definition at line 59 of file masstree_storage_pimpl.hpp.

Referenced by exists().

soc::SharedMutex foedus::storage::masstree::MasstreeStorageControlBlock::status_mutex_

Definition at line 57 of file masstree_storage_pimpl.hpp.


The documentation for this struct was generated from the following file: