summaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@yahooinc.com>2022-03-24 23:05:18 +0100
committerTor Egge <Tor.Egge@yahooinc.com>2022-03-24 23:05:18 +0100
commitc681593a3c3c38ef569fe4288deea7356f17d1b4 (patch)
treeeaf104d212feaac03dac61139bbff83b64ff7adf /searchcore
parenta582c6582fe78894a7e9ec87e8f226163228d740 (diff)
Use acquire_elem_ref() method when accessing meta data store from readers.
Use ConstArrayRef to pass view of meta data to saver.
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastore.cpp3
-rw-r--r--searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastore.h2
-rw-r--r--searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastoresaver.cpp30
-rw-r--r--searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastoresaver.h6
-rw-r--r--searchcore/src/vespa/searchcore/proton/documentmetastore/lid_gid_key_comparator.cpp4
-rw-r--r--searchcore/src/vespa/searchcore/proton/documentmetastore/lid_gid_key_comparator.h4
6 files changed, 24 insertions, 25 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastore.cpp b/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastore.cpp
index 5d2f358e4c8..d4b0f173087 100644
--- a/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastore.cpp
+++ b/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastore.cpp
@@ -261,7 +261,8 @@ DocumentMetaStore::onInitSave(vespalib::stringref fileName)
GenerationHandler::Guard guard(getGuard());
return std::make_unique<DocumentMetaStoreSaver>
(std::move(guard), createAttributeHeader(fileName),
- _gidToLidMap.getFrozenView().begin(), _metaDataStore);
+ _gidToLidMap.getFrozenView().begin(),
+ vespalib::ConstArrayRef(&_metaDataStore[0], getCommittedDocIdLimit()));
}
DocumentMetaStore::DocId
diff --git a/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastore.h b/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastore.h
index e393ad16178..305b81d58a6 100644
--- a/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastore.h
+++ b/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastore.h
@@ -178,7 +178,7 @@ public:
bool validLidFast(DocId lid) const { return _lidAlloc.validLid(lid); }
bool validLid(DocId lid) const override { return validLidFast(lid); }
void removeBatch(const std::vector<DocId> &lidsToRemove, const DocId docIdLimit) override;
- const RawDocumentMetaData & getRawMetaData(DocId lid) const override { return _metaDataStore[lid]; }
+ const RawDocumentMetaData & getRawMetaData(DocId lid) const override { return _metaDataStore.acquire_elem_ref(lid); }
/**
* Implements search::IDocumentMetaStore
diff --git a/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastoresaver.cpp b/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastoresaver.cpp
index 0abe88da719..e4ad9cf8ac2 100644
--- a/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastoresaver.cpp
+++ b/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastoresaver.cpp
@@ -14,33 +14,31 @@ namespace {
/*
* Functor class to write meta data for a single lid. Note that during
- * a background save with active feeding, timestamp, bucketused bits
+ * a background save with active feeding, timestamp, bucket used bits
* and size might reflect future values due to missing snapshot
- * properties in MetaDataStore. size might also reflect a mix between
- * current ant future value due to non-atomic access.
+ * properties in RcuVector. Size might also reflect a mix between
+ * current and future value due to non-atomic access.
*/
class WriteMetaData
{
- search::BufferWriter &_datWriter;
- const RawDocumentMetaData *_metaDataStore;
- uint32_t _metaDataStoreSize;
- bool _writeDocSize;
- using MetaDataStore = DocumentMetaStoreSaver::MetaDataStore;
+ using MetaDataView = DocumentMetaStoreSaver::MetaDataView;
using GlobalId = documentmetastore::IStore::GlobalId;
using BucketId = documentmetastore::IStore::BucketId;
using Timestamp = documentmetastore::IStore::Timestamp;
+ search::BufferWriter &_datWriter;
+ MetaDataView _metaDataView;
+ bool _writeDocSize;
public:
- WriteMetaData(search::BufferWriter &datWriter, const MetaDataStore &metaDataStore, bool writeDocSize)
+ WriteMetaData(search::BufferWriter &datWriter, MetaDataView metaDataView, bool writeDocSize)
: _datWriter(datWriter),
- _metaDataStore(&metaDataStore[0]),
- _metaDataStoreSize(metaDataStore.size()),
+ _metaDataView(metaDataView),
_writeDocSize(writeDocSize)
{ }
void operator()(documentmetastore::GidToLidMapKey key) {
auto lid = key.get_lid();
- assert(lid < _metaDataStoreSize);
- const RawDocumentMetaData &metaData = _metaDataStore[lid];
+ assert(lid < _metaDataView.size());
+ const RawDocumentMetaData &metaData = _metaDataView[lid];
const GlobalId &gid = metaData.getGid();
// 6 bits used for bucket bits
uint8_t bucketUsedBits = metaData.getBucketUsedBits();
@@ -71,10 +69,10 @@ DocumentMetaStoreSaver::
DocumentMetaStoreSaver(vespalib::GenerationHandler::Guard &&guard,
const search::attribute::AttributeHeader &header,
const GidIterator &gidIterator,
- const MetaDataStore &metaDataStore)
+ MetaDataView metaDataView)
: AttributeSaver(std::move(guard), header),
_gidIterator(gidIterator),
- _metaDataStore(metaDataStore),
+ _metaDataView(metaDataView),
_writeDocSize(true)
{
if (header.getVersion() == documentmetastore::NO_DOCUMENT_SIZE_TRACKING_VERSION) {
@@ -92,7 +90,7 @@ DocumentMetaStoreSaver::onSave(IAttributeSaveTarget &saveTarget)
// write <lid,gid> pairs, sorted on gid
std::unique_ptr<search::BufferWriter>
datWriter(saveTarget.datWriter().allocBufferWriter());
- _gidIterator.foreach_key(WriteMetaData(*datWriter, _metaDataStore, _writeDocSize));
+ _gidIterator.foreach_key(WriteMetaData(*datWriter, _metaDataView, _writeDocSize));
datWriter->flush();
return true;
}
diff --git a/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastoresaver.h b/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastoresaver.h
index f0be17540a2..5f97ba1e0b0 100644
--- a/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastoresaver.h
+++ b/searchcore/src/vespa/searchcore/proton/documentmetastore/documentmetastoresaver.h
@@ -25,11 +25,11 @@ public:
vespalib::btree::BTreeNoLeafData,
vespalib::btree::NoAggregated,
const KeyComp &>;
- using MetaDataStore = vespalib::RcuVectorBase<RawDocumentMetaData>;
+ using MetaDataView = vespalib::ConstArrayRef<RawDocumentMetaData>;
private:
GidIterator _gidIterator; // iterator over frozen tree
- const MetaDataStore &_metaDataStore;
+ MetaDataView _metaDataView;
bool _writeDocSize;
bool onSave(search::IAttributeSaveTarget &saveTarget) override;
@@ -37,7 +37,7 @@ public:
DocumentMetaStoreSaver(vespalib::GenerationHandler::Guard &&guard,
const search::attribute::AttributeHeader &header,
const GidIterator &gidIterator,
- const MetaDataStore &metaDataStore);
+ MetaDataView metaDataView);
~DocumentMetaStoreSaver() override;
};
diff --git a/searchcore/src/vespa/searchcore/proton/documentmetastore/lid_gid_key_comparator.cpp b/searchcore/src/vespa/searchcore/proton/documentmetastore/lid_gid_key_comparator.cpp
index d52e87a0871..40cd3c89a6d 100644
--- a/searchcore/src/vespa/searchcore/proton/documentmetastore/lid_gid_key_comparator.cpp
+++ b/searchcore/src/vespa/searchcore/proton/documentmetastore/lid_gid_key_comparator.cpp
@@ -7,7 +7,7 @@ namespace proton::documentmetastore {
LidGidKeyComparator::LidGidKeyComparator(const document::GlobalId &gid,
const MetaDataStore &metaDataStore)
: _gid(gid),
- _metaDataStore(metaDataStore),
+ _metaDataView(&metaDataStore.acquire_elem_ref(0)),
_gidCompare()
{
}
@@ -15,7 +15,7 @@ LidGidKeyComparator::LidGidKeyComparator(const document::GlobalId &gid,
LidGidKeyComparator::LidGidKeyComparator(const RawDocumentMetaData &metaData,
const MetaDataStore &metaDataStore)
: _gid(metaData.getGid()),
- _metaDataStore(metaDataStore),
+ _metaDataView(&metaDataStore.acquire_elem_ref(0)),
_gidCompare()
{
}
diff --git a/searchcore/src/vespa/searchcore/proton/documentmetastore/lid_gid_key_comparator.h b/searchcore/src/vespa/searchcore/proton/documentmetastore/lid_gid_key_comparator.h
index c18224370e1..5970342c750 100644
--- a/searchcore/src/vespa/searchcore/proton/documentmetastore/lid_gid_key_comparator.h
+++ b/searchcore/src/vespa/searchcore/proton/documentmetastore/lid_gid_key_comparator.h
@@ -21,12 +21,12 @@ private:
typedef vespalib::RcuVectorBase<RawDocumentMetaData> MetaDataStore;
const document::GlobalId &_gid;
- const MetaDataStore &_metaDataStore;
+ const RawDocumentMetaData* _metaDataView;
const document::GlobalId::BucketOrderCmp _gidCompare;
const document::GlobalId &getGid(const GidToLidMapKey &key) const {
if (!key.is_find_key()) {
- return _metaDataStore[key.get_lid()].getGid();
+ return _metaDataView[key.get_lid()].getGid();
}
return _gid;
}