Storage Engine API
mmap_v1_engine.h
Go to the documentation of this file.
1 // mmap_v1_engine.h
2 
31 #pragma once
32 
33 #include <map>
34 
38 #include "mongo/stdx/mutex.h"
39 
40 namespace mongo {
41 
42 class ClockSource;
43 class JournalListener;
44 class MMAPV1DatabaseCatalogEntry;
45 
46 class MMAPV1Engine : public StorageEngine {
47 public:
48  MMAPV1Engine(const StorageEngineLockFile* lockFile, ClockSource* cs);
49 
50  MMAPV1Engine(const StorageEngineLockFile* lockFile,
51  ClockSource* cs,
52  std::unique_ptr<ExtentManager::Factory> extentManagerFactory);
53  virtual ~MMAPV1Engine();
54 
55  void finishInit();
56 
58  void listDatabases(std::vector<std::string>* out) const;
59 
60  int flushAllFiles(OperationContext* opCtx, bool sync);
61  Status beginBackup(OperationContext* opCtx);
62  void endBackup(OperationContext* opCtx);
63 
64  DatabaseCatalogEntry* getDatabaseCatalogEntry(OperationContext* opCtx, StringData db);
65 
66  virtual bool supportsDocLocking() const {
67  return false;
68  }
69  virtual bool isMmapV1() const {
70  return true;
71  }
72 
73  virtual bool isDurable() const;
74 
75  virtual bool isEphemeral() const;
76 
77  virtual Status closeDatabase(OperationContext* opCtx, StringData db);
78 
79  virtual Status dropDatabase(OperationContext* opCtx, StringData db);
80 
81  virtual void cleanShutdown();
82 
83  // Callers should use repairDatabase instead.
84  virtual Status repairRecordStore(OperationContext* opCtx, const std::string& ns) {
85  return Status(ErrorCodes::InternalError, "MMAPv1 doesn't support repairRecordStore");
86  }
87 
88  // MMAPv1 specific (non-virtual)
89  Status repairDatabase(OperationContext* opCtx,
90  const std::string& dbName,
91  bool preserveClonedFilesOnFailure,
92  bool backupOriginalFiles);
93 
104 
105  void setJournalListener(JournalListener* jl) final;
106 
107  Timestamp getAllCommittedTimestamp() const override {
108  MONGO_UNREACHABLE;
109  }
110 
111 private:
112  static void _listDatabases(const std::string& directory, std::vector<std::string>* out);
113 
114  stdx::mutex _entryMapMutex;
115  typedef std::map<std::string, MMAPV1DatabaseCatalogEntry*> EntryMap;
116  EntryMap _entryMap;
117 
118  // A record access tracker is essentially a large table which tracks recently used
119  // addresses. It is used when higher layers (e.g. the query system) need to ask
120  // the storage engine whether data is likely in physical memory.
122 
123  std::unique_ptr<ExtentManager::Factory> _extentManagerFactory;
124 
125  ClockSource* _clock;
126  int64_t _startMs;
127 };
128 
129 void _deleteDataFiles(const std::string& database);
130 }
virtual Status dropDatabase(OperationContext *opCtx, StringData db)
Deletes all data and metadata for a database.
Definition: mmap_v1_engine.cpp:334
std::unique_ptr< ExtentManager::Factory > _extentManagerFactory
Definition: mmap_v1_engine.h:123
virtual bool isEphemeral() const
Returns true if the engine does not persist data to disk; false otherwise.
Definition: mmap_v1_engine.cpp:379
void finishInit()
Called after the globalStorageEngine pointer has been set up, before any other methods are called...
Definition: mmap_v1_engine.cpp:264
static void _listDatabases(const std::string &directory, std::vector< std::string > *out)
Definition: mmap_v1_engine.cpp:344
Status beginBackup(OperationContext *opCtx)
Transitions the storage engine into backup mode.
Definition: mmap_v1_engine.cpp:367
void endBackup(OperationContext *opCtx)
Transitions the storage engine out of backup mode.
Definition: mmap_v1_engine.cpp:371
Collection *const const NamespaceString & ns
Definition: collection_info_cache_impl.cpp:53
virtual bool supportsDocLocking() const
Returns whether the storage engine supports its own locking locking below the collection level...
Definition: mmap_v1_engine.h:66
virtual Status closeDatabase(OperationContext *opCtx, StringData db)
Closes all file handles associated with a database.
Definition: mmap_v1_engine.cpp:318
Copyright (C) 2014 MongoDB Inc.
Definition: bson_collection_catalog_entry.cpp:38
int flushAllFiles(OperationContext *opCtx, bool sync)
Definition: mmap_v1_engine.cpp:363
OperationContext Database StringData BSONObj CollectionOptions::ParseKind bool const BSONObj &idIndex Status
Definition: database_impl.cpp:956
RecoveryUnit * newRecoveryUnit()
Returns a new interface to the storage engine&#39;s recovery unit.
Definition: mmap_v1_engine.cpp:279
virtual bool isMmapV1() const
Only MMAPv1 should override this and return true to trigger MMAPv1-specific behavior.
Definition: mmap_v1_engine.h:69
virtual void cleanShutdown()
This method will be called before there is a clean shutdown.
Definition: mmap_v1_engine.cpp:387
std::map< std::string, MMAPV1DatabaseCatalogEntry * > EntryMap
Definition: mmap_v1_engine.h:115
int64_t _startMs
Definition: mmap_v1_engine.h:126
This class allows for the storageEngine to alert the rest of the system about journaled write progres...
Definition: journal_listener.h:48
Definition: mmap_v1_engine.h:46
void _deleteDataFiles(const std::string &database)
Definition: repair_database.cpp:84
A RecoveryUnit is responsible for ensuring that data is persisted.
Definition: recovery_unit.h:51
Timestamp getAllCommittedTimestamp() const override
Returns the all committed timestamp.
Definition: mmap_v1_engine.h:107
ClockSource * _clock
Definition: mmap_v1_engine.h:125
virtual Status repairRecordStore(OperationContext *opCtx, const std::string &ns)
Recover as much data as possible from a potentially corrupt RecordStore.
Definition: mmap_v1_engine.h:84
void setJournalListener(JournalListener *jl) final
Sets a new JournalListener, which is used by the storage engine to alert the rest of the system about...
Definition: mmap_v1_engine.cpp:417
Definition: database_catalog_entry.h:50
void listDatabases(std::vector< std::string > *out) const
List the databases stored in this storage engine.
Definition: mmap_v1_engine.cpp:283
virtual ~MMAPV1Engine()
Definition: mmap_v1_engine.cpp:272
OperationContext Database * db
Definition: database_impl.cpp:949
Status repairDatabase(OperationContext *opCtx, const std::string &dbName, bool preserveClonedFilesOnFailure, bool backupOriginalFiles)
Definition: repair_database.cpp:280
Used to implement likelyInPhysicalMemory() for the MMAP v1 storage engine.
Definition: record_access_tracker.h:49
MMAPV1Engine(const StorageEngineLockFile *lockFile, ClockSource *cs)
Definition: mmap_v1_engine.cpp:241
RecordAccessTracker & getRecordAccessTracker()
Gets a reference to the abstraction used by MMAP v1 to track recently used memory addresses...
Definition: mmap_v1_engine.cpp:383
EntryMap _entryMap
Definition: mmap_v1_engine.h:116
stdx::mutex _entryMapMutex
Definition: mmap_v1_engine.h:114
Definition: storage_engine_lock_file.h:41
Collection *const OperationContext *const opCtx
Definition: collection_impl.cpp:80
DatabaseCatalogEntry * getDatabaseCatalogEntry(OperationContext *opCtx, StringData db)
Return the DatabaseCatalogEntry that describes the database indicated by &#39;db&#39;.
Definition: mmap_v1_engine.cpp:287
The StorageEngine class is the top level interface for creating a new storage engine.
Definition: storage_engine.h:57
RecordAccessTracker _recordAccessTracker
Definition: mmap_v1_engine.h:121
virtual bool isDurable() const
Returns whether the engine supports a journalling concept or not.
Definition: mmap_v1_engine.cpp:375