31 #include <boost/optional.hpp> 34 #include "mongo/base/owned_pointer_vector.h" 35 #include "mongo/base/shim.h" 36 #include "mongo/bson/ordering.h" 37 #include "mongo/bson/timestamp.h" 38 #include "mongo/db/index/multikey_paths.h" 39 #include "mongo/db/record_id.h" 41 #include "mongo/platform/atomic_word.h" 42 #include "mongo/stdx/functional.h" 43 #include "mongo/stdx/mutex.h" 44 #include "mongo/util/debug_util.h" 47 class CollatorInterface;
48 class CollectionCatalogEntry;
49 class CollectionInfoCache;
51 class IndexAccessMethod;
52 class IndexDescriptor;
53 class MatchExpression;
54 class OperationContext;
65 virtual const std::string&
ns()
const = 0;
71 virtual const IndexDescriptor*
descriptor()
const = 0;
75 virtual const IndexAccessMethod*
accessMethod()
const = 0;
77 virtual const Ordering&
ordering()
const = 0;
81 virtual const CollatorInterface*
getCollator()
const = 0;
83 virtual const RecordId&
head(OperationContext*
opCtx)
const = 0;
85 virtual void setHead(OperationContext* opCtx, RecordId newHead) = 0;
91 virtual bool isMultikey(OperationContext* opCtx)
const = 0;
95 virtual void setMultikey(OperationContext* opCtx,
const MultikeyPaths& multikeyPaths) = 0;
97 virtual bool isReady(OperationContext* opCtx)
const = 0;
108 OperationContext*
opCtx,
113 PrivateTo<IndexCatalogEntry>)
114 ->std::unique_ptr<Impl>) makeImpl;
117 OperationContext* opCtx,
120 std::unique_ptr<IndexDescriptor> descriptor,
132 inline const std::string&
ns()
const {
168 inline const RecordId&
head(OperationContext*
const opCtx)
const {
172 inline void setHead(OperationContext*
const opCtx,
const RecordId newHead) {
221 void setMultikey(OperationContext*
const opCtx,
const MultikeyPaths& multikeyPaths) {
226 bool isReady(OperationContext*
const opCtx)
const {
251 static void hook() noexcept;
281 const_iterator
end()
const {
312 bool remove(
const IndexDescriptor*
desc) {
320 _entries.push_back(std::unique_ptr<IndexCatalogEntry>{entry});
324 std::vector<std::unique_ptr<IndexCatalogEntry>>
_entries;
IndexCatalogEntry *const OperationContext *const const StringData CollectionCatalogEntry *const std::unique_ptr< IndexDescriptor > CollectionInfoCache *const infoCache
Definition: index_catalog_entry_impl.cpp:58
const Impl & _impl() const
Definition: index_catalog_entry.h:259
virtual void setMultikey(OperationContext *opCtx, const MultikeyPaths &multikeyPaths)=0
iterator end()
Definition: index_catalog_entry.h:289
KVPrefix getPrefix() const
Definition: index_catalog_entry.h:230
const_iterator begin() const
Definition: index_catalog_entry.h:277
IndexCatalogEntry & operator=(IndexCatalogEntry &&)=delete
void setMultikey(OperationContext *const opCtx, const MultikeyPaths &multikeyPaths)
Sets this index to be multikey.
Definition: index_catalog_entry.h:221
boost::optional< Timestamp > getMinimumVisibleSnapshot()
If return value is not boost::none, reads with majority read concern using an older snapshot must tre...
Definition: index_catalog_entry.h:238
Definition: index_catalog_entry.h:272
void setMinimumVisibleSnapshot(const Timestamp name)
Definition: index_catalog_entry.h:242
const RecordId & head(OperationContext *const opCtx) const
Definition: index_catalog_entry.h:168
Definition: index_catalog_entry.h:61
Copyright (C) 2014 MongoDB Inc.
Definition: bson_collection_catalog_entry.cpp:38
IndexCatalogEntryContainer * _entries
Definition: index_catalog_impl.cpp:1017
Definition: collection_catalog_entry.h:47
Database *const this_
Definition: database_impl.cpp:82
static MONGO_DECLARE_SHIM((IndexCatalogEntry *this_, OperationContext *opCtx, StringData ns, CollectionCatalogEntry *collection, std::unique_ptr< IndexDescriptor > descriptor, CollectionInfoCache *infoCache, PrivateTo< IndexCatalogEntry >) ->std::unique_ptr< Impl >) makeImpl
Collection *const collection
Definition: collection_info_cache_impl.cpp:53
virtual IndexDescriptor * descriptor()=0
IndexCatalogEntry(OperationContext *opCtx, StringData ns, CollectionCatalogEntry *collection, std::unique_ptr< IndexDescriptor > descriptor, CollectionInfoCache *infoCache)
Definition: index_catalog_entry.cpp:45
bool isMultikey(OperationContext *opCtx) const
Returns true if this index is multikey and false otherwise.
Definition: index_catalog_entry.h:189
virtual const CollatorInterface * getCollator() const =0
virtual HeadManager * headManager() const =0
~IndexCatalogEntry()=default
const std::string & ns() const
Definition: index_catalog_entry.h:132
TUHook() noexcept
Definition: index_catalog_entry.h:253
virtual const std::string & ns() const =0
const IndexAccessMethod * accessMethod() const
Definition: index_catalog_entry.h:150
const Ordering & ordering() const
Definition: index_catalog_entry.h:154
virtual KVPrefix getPrefix() const =0
virtual boost::optional< Timestamp > getMinimumVisibleSnapshot()=0
virtual bool isReady(OperationContext *opCtx) const =0
IndexDescriptor * descriptor()
Definition: index_catalog_entry.h:138
IndexCatalogEntry(std::unique_ptr< Impl > impl)
Definition: index_catalog_entry.h:125
void setHead(OperationContext *const opCtx, const RecordId newHead)
Definition: index_catalog_entry.h:172
virtual IndexAccessMethod * accessMethod()=0
const CollatorInterface * getCollator() const
Definition: index_catalog_entry.h:162
HeadManager * headManager() const
Definition: index_catalog_entry.h:180
Definition: index_catalog_entry.h:56
std::vector< std::unique_ptr< IndexCatalogEntry > > _entries
Definition: index_catalog_entry.h:324
const IndexDescriptor * descriptor() const
Definition: index_catalog_entry.h:142
unsigned size() const
Definition: index_catalog_entry.h:301
iterator begin()
Definition: index_catalog_entry.h:285
virtual MultikeyPaths getMultikeyPaths(OperationContext *opCtx) const =0
virtual const MatchExpression * getFilterExpression() const =0
Impl & _impl()
Definition: index_catalog_entry.h:264
void setIsReady(const bool newIsReady)
Definition: index_catalog_entry.h:176
bool isReady(OperationContext *const opCtx) const
Definition: index_catalog_entry.h:226
virtual void setMinimumVisibleSnapshot(Timestamp name)=0
MultikeyPaths getMultikeyPaths(OperationContext *const opCtx) const
Returns the path components that cause this index to be multikey if this index supports path-level mu...
Definition: index_catalog_entry.h:202
std::vector< std::unique_ptr< IndexCatalogEntry > >::const_iterator const_iterator
Definition: index_catalog_entry.h:274
virtual bool isMultikey(OperationContext *opCtx) const =0
virtual const RecordId & head(OperationContext *opCtx) const =0
void add(IndexCatalogEntry *entry)
Definition: index_catalog_entry.h:319
A KVPrefix may be prepended to the keys of entries in an underlying KV store.
Definition: kv_prefix.h:44
An abstraction for setting and getting data about the 'head' of an index.
Definition: head_manager.h:41
virtual const Ordering & ordering() const =0
std::vector< std::unique_ptr< IndexCatalogEntry > >::const_iterator iterator
Definition: index_catalog_entry.h:275
virtual void setIsReady(bool newIsReady)=0
const MatchExpression * getFilterExpression() const
Definition: index_catalog_entry.h:158
Database *const OperationContext *const const StringData name
Definition: database_impl.cpp:82
Collection *const OperationContext *const opCtx
Definition: collection_impl.cpp:80
std::unique_ptr< Impl > _pimpl
Definition: index_catalog_entry.h:269
virtual void setHead(OperationContext *opCtx, RecordId newHead)=0
OperationContext const IndexDescriptor * desc
Definition: index_catalog_impl.cpp:97
this is for storing things that you want to cache about a single collection life cycle is managed for...
Definition: collection_info_cache.h:47
const_iterator end() const
Definition: index_catalog_entry.h:281
IndexAccessMethod * accessMethod()
Definition: index_catalog_entry.h:146
virtual void init(std::unique_ptr< IndexAccessMethod > accessMethod)=0
Definition: index_catalog_entry.h:250