Storage Engine API
mongo::KVCatalog Class Reference

#include <kv_catalog.h>

Classes

class  AddIdentChange
 
struct  Entry
 
class  FeatureTracker
 Manages the contents of a document in the KVCatalog used to restrict downgrade compatibility. More...
 
class  RemoveIdentChange
 

Public Member Functions

 KVCatalog (RecordStore *rs, bool directoryPerDb, bool directoryForIndexes)
 
 ~KVCatalog ()
 
void init (OperationContext *opCtx)
 
void getAllCollections (std::vector< std::string > *out) const
 
Status newCollection (OperationContext *opCtx, StringData ns, const CollectionOptions &options, KVPrefix prefix)
 
std::string getCollectionIdent (StringData ns) const
 
std::string getIndexIdent (OperationContext *opCtx, StringData ns, StringData idName) const
 
BSONCollectionCatalogEntry::MetaData getMetaData (OperationContext *opCtx, StringData ns) const
 
void putMetaData (OperationContext *opCtx, StringData ns, BSONCollectionCatalogEntry::MetaData &md)
 
Status renameCollection (OperationContext *opCtx, StringData fromNS, StringData toNS, bool stayTemp)
 
Status dropCollection (OperationContext *opCtx, StringData ns)
 
std::vector< std::string > getAllIdentsForDB (StringData db) const
 
std::vector< std::string > getAllIdents (OperationContext *opCtx) const
 
bool isUserDataIdent (StringData ident) const
 
FeatureTrackergetFeatureTracker () const
 
RecordStoregetRecordStore ()
 

Private Types

typedef std::map< std::string, EntryNSToIdentMap
 

Private Member Functions

BSONObj _findEntry (OperationContext *opCtx, StringData ns, RecordId *out=NULL) const
 
std::string _newUniqueIdent (StringData ns, const char *kind)
 Generates a new unique identifier for a new "thing". More...
 
bool _hasEntryCollidingWithRand () const
 

Static Private Member Functions

static std::string _newRand ()
 

Private Attributes

RecordStore_rs
 
const bool _directoryPerDb
 
const bool _directoryForIndexes
 
std::string _rand
 
AtomicUInt64 _next
 
NSToIdentMap _idents
 
stdx::mutex _identsLock
 
std::unique_ptr< FeatureTracker_featureTracker
 

Member Typedef Documentation

◆ NSToIdentMap

typedef std::map<std::string, Entry> mongo::KVCatalog::NSToIdentMap
private

Constructor & Destructor Documentation

◆ KVCatalog()

mongo::KVCatalog::KVCatalog ( RecordStore rs,
bool  directoryPerDb,
bool  directoryForIndexes 
)
Parameters
rs- does NOT take ownership. The RecordStore must be thread-safe, in particular with concurrent calls to RecordStore::find, updateRecord, insertRecord, deleteRecord and dataFor. The KVCatalog does not utilize Cursors and those methods may omit further protection.

◆ ~KVCatalog()

mongo::KVCatalog::~KVCatalog ( )

Member Function Documentation

◆ _findEntry()

BSONObj mongo::KVCatalog::_findEntry ( OperationContext *  opCtx,
StringData  ns,
RecordId *  out = NULL 
) const
private

◆ _hasEntryCollidingWithRand()

bool mongo::KVCatalog::_hasEntryCollidingWithRand ( ) const
private

◆ _newRand()

std::string mongo::KVCatalog::_newRand ( )
staticprivate

◆ _newUniqueIdent()

std::string mongo::KVCatalog::_newUniqueIdent ( StringData  ns,
const char *  kind 
)
private

Generates a new unique identifier for a new "thing".

Parameters
ns- the containing ns
kind- what this "thing" is, likely collection or index

◆ dropCollection()

Status mongo::KVCatalog::dropCollection ( OperationContext *  opCtx,
StringData  ns 
)

◆ getAllCollections()

void mongo::KVCatalog::getAllCollections ( std::vector< std::string > *  out) const

◆ getAllIdents()

std::vector< std::string > mongo::KVCatalog::getAllIdents ( OperationContext *  opCtx) const

◆ getAllIdentsForDB()

std::vector< std::string > mongo::KVCatalog::getAllIdentsForDB ( StringData  db) const

◆ getCollectionIdent()

std::string mongo::KVCatalog::getCollectionIdent ( StringData  ns) const

◆ getFeatureTracker()

FeatureTracker* mongo::KVCatalog::getFeatureTracker ( ) const
inline

◆ getIndexIdent()

std::string mongo::KVCatalog::getIndexIdent ( OperationContext *  opCtx,
StringData  ns,
StringData  idName 
) const

◆ getMetaData()

BSONCollectionCatalogEntry::MetaData mongo::KVCatalog::getMetaData ( OperationContext *  opCtx,
StringData  ns 
) const

◆ getRecordStore()

RecordStore* mongo::KVCatalog::getRecordStore ( )
inline

◆ init()

void mongo::KVCatalog::init ( OperationContext *  opCtx)

◆ isUserDataIdent()

bool mongo::KVCatalog::isUserDataIdent ( StringData  ident) const

◆ newCollection()

Status mongo::KVCatalog::newCollection ( OperationContext *  opCtx,
StringData  ns,
const CollectionOptions options,
KVPrefix  prefix 
)
Returns
error or ident for instance

◆ putMetaData()

void mongo::KVCatalog::putMetaData ( OperationContext *  opCtx,
StringData  ns,
BSONCollectionCatalogEntry::MetaData md 
)

◆ renameCollection()

Status mongo::KVCatalog::renameCollection ( OperationContext *  opCtx,
StringData  fromNS,
StringData  toNS,
bool  stayTemp 
)

Member Data Documentation

◆ _directoryForIndexes

const bool mongo::KVCatalog::_directoryForIndexes
private

◆ _directoryPerDb

const bool mongo::KVCatalog::_directoryPerDb
private

◆ _featureTracker

std::unique_ptr<FeatureTracker> mongo::KVCatalog::_featureTracker
private

◆ _idents

NSToIdentMap mongo::KVCatalog::_idents
private

◆ _identsLock

stdx::mutex mongo::KVCatalog::_identsLock
mutableprivate

◆ _next

AtomicUInt64 mongo::KVCatalog::_next
private

◆ _rand

std::string mongo::KVCatalog::_rand
private

◆ _rs

RecordStore* mongo::KVCatalog::_rs
private

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