diff options
-rw-r--r-- | src/mongo/db/catalog/index_catalog_entry.cpp | 9 | ||||
-rw-r--r-- | src/mongo/db/catalog/index_catalog_entry.h | 3 | ||||
-rw-r--r-- | src/mongo/db/index/btree_based_bulk_access_method.cpp | 2 | ||||
-rw-r--r-- | src/mongo/db/structure/btree/btree_logic.cpp | 8 | ||||
-rw-r--r-- | src/mongo/db/structure/head_manager.h | 4 |
5 files changed, 15 insertions, 11 deletions
diff --git a/src/mongo/db/catalog/index_catalog_entry.cpp b/src/mongo/db/catalog/index_catalog_entry.cpp index c8c55e371ef..835c98add57 100644 --- a/src/mongo/db/catalog/index_catalog_entry.cpp +++ b/src/mongo/db/catalog/index_catalog_entry.cpp @@ -32,6 +32,7 @@ #include "mongo/db/index/index_access_method.h" #include "mongo/db/index/index_descriptor.h" +#include "mongo/db/storage/transaction.h" #include "mongo/db/structure/catalog/namespace_details.h" #include "mongo/db/structure/head_manager.h" @@ -46,8 +47,8 @@ namespace mongo { return _catalogEntry->head(); } - void setHead(const DiskLoc& newHead) { - _catalogEntry->setHead(newHead); + void setHead(TransactionExperiment* txn, const DiskLoc& newHead) { + _catalogEntry->setHead(txn, newHead); } private: @@ -108,11 +109,11 @@ namespace mongo { verify( isReady() == newIsReady ); } - void IndexCatalogEntry::setHead( DiskLoc newHead ) { + void IndexCatalogEntry::setHead( TransactionExperiment* txn, DiskLoc newHead ) { NamespaceDetails* nsd = _collection->detailsWritable(); int idxNo = _indexNo(); IndexDetails& id = nsd->idx( idxNo ); - *getDur().writing(&id.head) = newHead; + *txn->writing(&id.head) = newHead; _head = newHead; } diff --git a/src/mongo/db/catalog/index_catalog_entry.h b/src/mongo/db/catalog/index_catalog_entry.h index 19ee75ad4a6..66afbd09c02 100644 --- a/src/mongo/db/catalog/index_catalog_entry.h +++ b/src/mongo/db/catalog/index_catalog_entry.h @@ -43,6 +43,7 @@ namespace mongo { class IndexAccessMethod; class IndexDescriptor; class RecordStore; + class TransactionExperiment; class IndexCatalogEntry { MONGO_DISALLOW_COPYING( IndexCatalogEntry ); @@ -72,7 +73,7 @@ namespace mongo { const DiskLoc& head() const; - void setHead( DiskLoc newHead ); + void setHead( TransactionExperiment* txn, DiskLoc newHead ); void setIsReady( bool newIsReady ); diff --git a/src/mongo/db/index/btree_based_bulk_access_method.cpp b/src/mongo/db/index/btree_based_bulk_access_method.cpp index fdf288151d0..81f46fb5604 100644 --- a/src/mongo/db/index/btree_based_bulk_access_method.cpp +++ b/src/mongo/db/index/btree_based_bulk_access_method.cpp @@ -138,7 +138,7 @@ namespace mongo { // XXX: do we expect the tree to be empty but have a head set? Looks like so from old code. invariant(!oldHead.isNull()); - _real->_btreeState->setHead(DiskLoc()); + _real->_btreeState->setHead(_txn, DiskLoc()); _real->_btreeState->recordStore()->deleteRecord(_txn, oldHead); if (_isMultiKey) { diff --git a/src/mongo/db/structure/btree/btree_logic.cpp b/src/mongo/db/structure/btree/btree_logic.cpp index dfc1105f530..7e7dd15a8f4 100644 --- a/src/mongo/db/structure/btree/btree_logic.cpp +++ b/src/mongo/db/structure/btree/btree_logic.cpp @@ -125,7 +125,7 @@ namespace mongo { for (;;) { if (_getBucket(loc)->parent.isNull()) { // only 1 bucket at this level. we are done. - _logic->_headManager->setHead(loc); + _logic->_headManager->setHead(_trans, loc); break; } @@ -1438,7 +1438,7 @@ namespace mongo { invariant(bucket->n == 0 && !bucket->nextChild.isNull() ); if (bucket->parent.isNull()) { invariant(getRootLoc() == bucketLoc); - _headManager->setHead(bucket->nextChild); + _headManager->setHead(trans, bucket->nextChild); } else { BucketType* parentBucket = getBucket(bucket->parent); @@ -1955,7 +1955,7 @@ namespace mongo { p->nextChild = rLoc; assertValid(_indexName, p, _ordering); bucket->parent = L; - _headManager->setHead(L); + _headManager->setHead(trans, L); *trans->writing(&getBucket(rLoc)->parent) = bucket->parent; } else { @@ -2002,7 +2002,7 @@ namespace mongo { return Status(ErrorCodes::InternalError, "index already initialized"); } - _headManager->setHead(addBucket(trans)); + _headManager->setHead(trans, addBucket(trans)); return Status::OK(); } diff --git a/src/mongo/db/structure/head_manager.h b/src/mongo/db/structure/head_manager.h index d4a9da5dab3..1df38f56fd6 100644 --- a/src/mongo/db/structure/head_manager.h +++ b/src/mongo/db/structure/head_manager.h @@ -32,6 +32,8 @@ namespace mongo { + class TransactionExperiment; + /** * An abstraction for setting and getting data about the 'head' of an index. This is the data * that lives in the catalog to identify where an index lives. @@ -42,7 +44,7 @@ namespace mongo { virtual const DiskLoc& getHead() const = 0; - virtual void setHead(const DiskLoc& newHead) = 0; + virtual void setHead(TransactionExperiment* txn, const DiskLoc& newHead) = 0; }; } // namespace mongo |