Skip to content

Commit 98a0c6f

Browse files
committed
SERVER-13635 IndexAccessMethods now take a BtreeInterface rather than a RecordStore
1 parent 527ee35 commit 98a0c6f

21 files changed

+88
-58
lines changed

src/mongo/db/index/2d_access_method.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@
4242
namespace mongo {
4343

4444
TwoDAccessMethod::TwoDAccessMethod(IndexCatalogEntry* btreeState,
45-
RecordStore* rs)
46-
: BtreeBasedAccessMethod(btreeState, rs) {
45+
BtreeInterface* btree)
46+
: BtreeBasedAccessMethod(btreeState, btree) {
4747

4848
const IndexDescriptor* descriptor = btreeState->descriptor();
4949

src/mongo/db/index/2d_access_method.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ namespace mongo {
6969
using BtreeBasedAccessMethod::_descriptor;
7070

7171
TwoDAccessMethod(IndexCatalogEntry* btreeState,
72-
RecordStore* rs);
72+
BtreeInterface* btree);
7373
virtual ~TwoDAccessMethod() { }
7474

7575
private:

src/mongo/db/index/btree_access_method.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@
4040
namespace mongo {
4141

4242
// Standard Btree implementation below.
43-
BtreeAccessMethod::BtreeAccessMethod(IndexCatalogEntry* btreeState, RecordStore* rs )
44-
: BtreeBasedAccessMethod(btreeState, rs) {
43+
BtreeAccessMethod::BtreeAccessMethod(IndexCatalogEntry* btreeState, BtreeInterface* btree )
44+
: BtreeBasedAccessMethod(btreeState, btree) {
4545

4646
// The key generation wants these values.
4747
vector<const char*> fieldNames;

src/mongo/db/index/btree_access_method.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ namespace mongo {
5252
using BtreeBasedAccessMethod::_descriptor;
5353

5454
BtreeAccessMethod(IndexCatalogEntry* btreeState,
55-
RecordStore* rs );
55+
BtreeInterface* btree );
5656
virtual ~BtreeAccessMethod() { }
5757

5858
private:

src/mongo/db/index/btree_based_access_method.cpp

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -50,31 +50,19 @@ namespace mongo {
5050

5151
MONGO_EXPORT_SERVER_PARAMETER(failIndexKeyTooLong, bool, true);
5252

53-
/**
54-
* Invalidates all active cursors, which point at the bucket being deleted.
55-
*/
56-
class InvalidateCursorsNotification : public BucketDeletionNotification {
57-
public:
58-
virtual void aboutToDeleteBucket(const DiskLoc& bucket) {
59-
BtreeIndexCursor::aboutToDeleteBucket(bucket);
60-
}
61-
};
53+
void BtreeBasedAccessMethod::InvalidateCursorsNotification::aboutToDeleteBucket(
54+
const DiskLoc& bucket) {
55+
BtreeIndexCursor::aboutToDeleteBucket(bucket);
56+
}
6257

63-
static InvalidateCursorsNotification invalidateCursors;
58+
BtreeBasedAccessMethod::InvalidateCursorsNotification BtreeBasedAccessMethod::invalidateCursors;
6459

6560
BtreeBasedAccessMethod::BtreeBasedAccessMethod(IndexCatalogEntry* btreeState,
66-
RecordStore* recordStore)
61+
BtreeInterface* btree)
6762
: _btreeState(btreeState),
68-
_recordStore( recordStore ),
69-
_descriptor(btreeState->descriptor()) {
70-
63+
_descriptor(btreeState->descriptor()),
64+
_newInterface(btree) {
7165
verify(0 == _descriptor->version() || 1 == _descriptor->version());
72-
_newInterface.reset(BtreeInterface::getInterface(btreeState->headManager(),
73-
recordStore,
74-
btreeState->ordering(),
75-
_descriptor->indexNamespace(),
76-
_descriptor->version(),
77-
&invalidateCursors));
7866
}
7967

8068
// Find the keys for obj, put them in the tree pointing to loc
@@ -224,7 +212,7 @@ namespace mongo {
224212

225213

226214
Status BtreeBasedAccessMethod::touch( OperationContext* txn ) const {
227-
return _recordStore->touch( txn, NULL );
215+
return _btree->touch(txn);
228216
}
229217

230218
DiskLoc BtreeBasedAccessMethod::findSingle(const BSONObj& key) const {

src/mongo/db/index/btree_based_access_method.h

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,11 @@
3737
#include "mongo/db/index/index_cursor.h"
3838
#include "mongo/db/index/index_descriptor.h"
3939
#include "mongo/db/structure/btree/btree_interface.h"
40+
#include "mongo/db/structure/btree/bucket_deletion_notification.h"
4041

4142
namespace mongo {
4243

4344
class ExternalSortComparison;
44-
class RecordStore;
4545

4646
/**
4747
* Any access method that is Btree based subclasses from this.
@@ -58,7 +58,7 @@ namespace mongo {
5858
MONGO_DISALLOW_COPYING( BtreeBasedAccessMethod );
5959
public:
6060
BtreeBasedAccessMethod( IndexCatalogEntry* btreeState,
61-
RecordStore* recordStore );
61+
BtreeInterface* btree );
6262

6363
virtual ~BtreeBasedAccessMethod() { }
6464

@@ -103,6 +103,16 @@ namespace mongo {
103103
// XXX: consider migrating callers to use IndexCursor instead
104104
virtual DiskLoc findSingle( const BSONObj& key ) const;
105105

106+
/**
107+
* Invalidates all active cursors, which point at the bucket being deleted.
108+
* TODO see if there is a better place to put this.
109+
*/
110+
class InvalidateCursorsNotification : public BucketDeletionNotification {
111+
public:
112+
virtual void aboutToDeleteBucket(const DiskLoc& bucket);
113+
};
114+
static InvalidateCursorsNotification invalidateCursors;
115+
106116
protected:
107117
// Friends who need getKeys.
108118
friend class BtreeBasedBulkAccessMethod;
@@ -113,7 +123,7 @@ namespace mongo {
113123
virtual void getKeys(const BSONObj &obj, BSONObjSet *keys) = 0;
114124

115125
IndexCatalogEntry* _btreeState; // owned by IndexCatalogEntry
116-
scoped_ptr<RecordStore> _recordStore; // owned by us
126+
scoped_ptr<BtreeInterface> _btree; // owned by us
117127
const IndexDescriptor* _descriptor;
118128

119129
private:

src/mongo/db/index/btree_based_bulk_access_method.cpp

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -113,13 +113,6 @@ namespace mongo {
113113

114114
Status BtreeBasedBulkAccessMethod::commit(set<DiskLoc>* dupsToDrop,
115115
bool mayInterrupt) {
116-
DiskLoc oldHead = _real->_btreeState->head();
117-
118-
// XXX: do we expect the tree to be empty but have a head set? Looks like so from old code.
119-
invariant(!oldHead.isNull());
120-
_real->_btreeState->setHead(_txn, DiskLoc());
121-
_real->_recordStore->deleteRecord(_txn, oldHead);
122-
123116
if (_isMultiKey) {
124117
_real->_btreeState->setMultikey( _txn );
125118
}

src/mongo/db/index/fts_access_method.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@
3131

3232
namespace mongo {
3333

34-
FTSAccessMethod::FTSAccessMethod(IndexCatalogEntry* btreeState, RecordStore* rs )
35-
: BtreeBasedAccessMethod(btreeState, rs), _ftsSpec(btreeState->descriptor()->infoObj()) { }
34+
FTSAccessMethod::FTSAccessMethod(IndexCatalogEntry* btreeState, BtreeInterface* btree )
35+
: BtreeBasedAccessMethod(btreeState, btree), _ftsSpec(btreeState->descriptor()->infoObj()) { }
3636

3737
void FTSAccessMethod::getKeys(const BSONObj& obj, BSONObjSet* keys) {
3838
ExpressionKeysPrivate::getFTSKeys(obj, _ftsSpec, keys);

src/mongo/db/index/fts_access_method.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ namespace mongo {
3838

3939
class FTSAccessMethod : public BtreeBasedAccessMethod {
4040
public:
41-
FTSAccessMethod(IndexCatalogEntry* btreeState, RecordStore* rs );
41+
FTSAccessMethod(IndexCatalogEntry* btreeState, BtreeInterface* btree );
4242
virtual ~FTSAccessMethod() { }
4343

4444
const fts::FTSSpec& getSpec() const { return _ftsSpec; }

src/mongo/db/index/hash_access_method.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@
3333

3434
namespace mongo {
3535

36-
HashAccessMethod::HashAccessMethod(IndexCatalogEntry* btreeState, RecordStore* rs)
37-
: BtreeBasedAccessMethod(btreeState, rs) {
36+
HashAccessMethod::HashAccessMethod(IndexCatalogEntry* btreeState, BtreeInterface* btree)
37+
: BtreeBasedAccessMethod(btreeState, btree) {
3838

3939
const IndexDescriptor* descriptor = btreeState->descriptor();
4040

0 commit comments

Comments
 (0)