Storage Engine API
dur_recover.h
Go to the documentation of this file.
1 // @file dur.h durability support
2 
31 #pragma once
32 
33 #include <boost/filesystem/operations.hpp>
34 #include <list>
35 #include <memory>
36 
37 #include "mongo/db/service_context.h"
39 #include "mongo/stdx/mutex.h"
40 #include "mongo/util/concurrency/mutex.h"
41 
42 namespace mongo {
43 
44 class DurableMappedFile;
45 
46 namespace dur {
47 
48 struct ParsedJournalEntry;
49 
52 class RecoveryJob {
54 
55 public:
56  RecoveryJob();
57  ~RecoveryJob();
58 
59  void go(OperationContext* opCtx, std::vector<boost::filesystem::path>& files);
60 
62  void processSection(OperationContext* opCtx,
63  const JSectHeader* h,
64  const void* data,
65  unsigned len,
66  const JSectFooter* f);
67 
68  // locks and calls _close()
69  void close(OperationContext* opCtx);
70 
71  static RecoveryJob& get() {
72  return _instance;
73  }
74 
75 private:
76  class Last {
77  public:
78  Last(OperationContext* opCtx);
79 
81 
82  OperationContext* opCtx() {
83  return _opCtx;
84  }
85 
86  private:
87  OperationContext* _opCtx;
89  std::string dbName;
90  int fileNo;
91  };
92 
93 
94  void write(Last& last, const ParsedJournalEntry& entry); // actually writes to the file
95  void applyEntry(Last& last, const ParsedJournalEntry& entry, bool apply, bool dump);
96  void applyEntries(OperationContext* opCtx, const std::vector<ParsedJournalEntry>& entries);
97  bool processFileBuffer(OperationContext* opCtx, const void*, unsigned len);
98  bool processFile(OperationContext* opCtx, boost::filesystem::path journalfile);
99  void _close(OperationContext* opCtx); // doesn't lock
100 
101  // Set of memory mapped files and a mutex to protect them
102  stdx::mutex _mx;
103  std::list<std::shared_ptr<DurableMappedFile>> _mmfs;
104 
105  // Are we in recovery or WRITETODATAFILES
107 
108  unsigned long long _lastDataSyncedFromLastRun;
109  unsigned long long _lastSeqSkipped;
111 
112 
114 };
115 
116 
118 }
119 }
void processSection(OperationContext *opCtx, const JSectHeader *h, const void *data, unsigned len, const JSectFooter *f)
Definition: dur_recover.cpp:396
void _close(OperationContext *opCtx)
Definition: dur_recover.cpp:281
Last(OperationContext *opCtx)
Definition: dur_recover.cpp:290
void go(OperationContext *opCtx, std::vector< boost::filesystem::path > &files)
Definition: dur_recover.cpp:587
void applyEntries(OperationContext *opCtx, const std::vector< ParsedJournalEntry > &entries)
Definition: dur_recover.cpp:378
Copyright (C) 2014 MongoDB Inc.
Definition: bson_collection_catalog_entry.cpp:38
bool processFile(OperationContext *opCtx, boost::filesystem::path journalfile)
apply a specific journal file
Definition: dur_recover.cpp:562
static RecoveryJob & _instance
Definition: dur_recover.h:113
MONGO_DISALLOW_COPYING(RecoveryJob)
bool _appliedAnySections
Definition: dur_recover.h:110
OperationContext * _opCtx
Definition: dur_recover.h:87
"Section" header.
Definition: dur_journalformat.h:91
std::list< std::shared_ptr< DurableMappedFile > > _mmfs
Definition: dur_recover.h:103
std::shared_ptr< void > data
Definition: ephemeral_for_test_record_store_test.cpp:74
void close(OperationContext *opCtx)
Definition: dur_recover.cpp:276
int fileNo
Definition: dur_recover.h:90
DurableMappedFile * newEntry(const ParsedJournalEntry &, RecoveryJob &)
Definition: dur_recover.cpp:295
RecoveryJob()
Definition: dur_recover.cpp:262
void applyEntry(Last &last, const ParsedJournalEntry &entry, bool apply, bool dump)
Definition: dur_recover.cpp:347
unsigned long long _lastDataSyncedFromLastRun
Definition: dur_recover.h:108
DurableMappedFile adds some layers atop memory mapped files - specifically our handling of private vi...
Definition: durable_mapped_file.h:47
Definition: dur_recover.h:76
bool processFileBuffer(OperationContext *opCtx, const void *, unsigned len)
apply a specific journal file, that is already mmap&#39;d
Definition: dur_recover.cpp:482
group commit section footer.
Definition: dur_journalformat.h:178
void replayJournalFilesAtStartup()
recover from a crash called during startup throws on error
Definition: dur_recover.cpp:654
unsigned long long _lastSeqSkipped
Definition: dur_recover.h:109
DurableMappedFile * mmf
Definition: dur_recover.h:88
void write(Last &last, const ParsedJournalEntry &entry)
Definition: dur_recover.cpp:328
bool _recovering
Definition: dur_recover.h:106
Collection *const OperationContext *const opCtx
Definition: collection_impl.cpp:80
call go() to execute a recovery from existing journal files.
Definition: dur_recover.h:52
Definition: dur_recover.cpp:97
stdx::mutex _mx
Definition: dur_recover.h:102
std::string dbName
Definition: dur_recover.h:89
OperationContext * opCtx()
Definition: dur_recover.h:82
~RecoveryJob()
Definition: dur_recover.cpp:271