Storage Engine API
wiredtiger_size_storer.h
Go to the documentation of this file.
1 // wiredtiger_size_storer.h
2 
32 #pragma once
33 
34 #include <string>
35 
36 #include <wiredtiger.h>
37 
38 #include "mongo/base/string_data.h"
40 #include "mongo/platform/atomic_word.h"
41 #include "mongo/stdx/mutex.h"
42 #include "mongo/util/string_map.h"
43 
44 namespace mongo {
45 
58 public:
66  struct SizeInfo {
68  invariant(!_dirty.load());
69  }
70  AtomicInt64 numRecords;
71  AtomicInt64 dataSize;
72 
73  private:
75  AtomicBool _dirty;
76  };
77 
78  WiredTigerSizeStorer(WT_CONNECTION* conn,
79  const std::string& storageUri,
80  const bool readOnly = false);
82 
87  void store(StringData uri, std::shared_ptr<SizeInfo> sizeInfo);
88 
89  std::shared_ptr<SizeInfo> load(StringData uri) const;
90 
94  void flush(bool syncToDisk);
95 
96 private:
98  const bool _readOnly;
99  // Guards _cursor. Acquire *before* _bufferMutex.
100  mutable stdx::mutex _cursorMutex;
101  WT_CURSOR* _cursor; // pointer is const after constructor
102 
103  using Buffer = StringMap<std::shared_ptr<SizeInfo>>;
104 
105  mutable stdx::mutex _bufferMutex; // Guards _buffer
107 };
108 }
~SizeInfo()
Definition: wiredtiger_size_storer.h:67
const bool _readOnly
Definition: wiredtiger_size_storer.h:98
friend WiredTigerSizeStorer
Definition: wiredtiger_size_storer.h:74
const WiredTigerSession _session
Definition: wiredtiger_size_storer.h:97
The WiredTigerSizeStorer class serves as a write buffer to durably store size information for MongoDB...
Definition: wiredtiger_size_storer.h:57
Copyright (C) 2014 MongoDB Inc.
Definition: bson_collection_catalog_entry.cpp:38
Buffer _buffer
Definition: wiredtiger_size_storer.h:106
StringMap< std::shared_ptr< SizeInfo > > Buffer
Definition: wiredtiger_size_storer.h:103
This is a structure that caches 1 cursor for each uri.
Definition: wiredtiger_session_cache.h:65
AtomicInt64 dataSize
Definition: wiredtiger_size_storer.h:71
WT_CURSOR * _cursor
Definition: wiredtiger_size_storer.h:101
AtomicInt64 numRecords
Definition: wiredtiger_size_storer.h:70
void flush(bool syncToDisk)
Writes all changes to the underlying table.
Definition: wiredtiger_size_storer.cpp:127
stdx::mutex _bufferMutex
Definition: wiredtiger_size_storer.h:105
SizeInfo is a thread-safe buffer for keeping track of the number of documents in a collection and the...
Definition: wiredtiger_size_storer.h:66
std::shared_ptr< SizeInfo > load(StringData uri) const
Definition: wiredtiger_size_storer.cpp:92
AtomicBool _dirty
Definition: wiredtiger_size_storer.h:75
~WiredTigerSizeStorer()
Definition: wiredtiger_size_storer.cpp:68
stdx::mutex _cursorMutex
Definition: wiredtiger_size_storer.h:100
void store(StringData uri, std::shared_ptr< SizeInfo > sizeInfo)
Ensure that the shared SizeInfo will be stored by the next call to flush.
Definition: wiredtiger_size_storer.cpp:73
std::string uri
Definition: wiredtiger_standard_record_store_test.cpp:367