aboutsummaryrefslogtreecommitdiffstats
path: root/searchcore/src/tests/proton
diff options
context:
space:
mode:
authorGeir Storli <geirst@verizonmedia.com>2019-05-31 12:09:33 +0000
committerGeir Storli <geirst@verizonmedia.com>2019-05-31 12:09:33 +0000
commit38a7db76c5d6f4c6c6f1c55218d5671768768692 (patch)
tree775211700e47e67b7027904df74ff150a0da69df /searchcore/src/tests/proton
parentcb165b874d9d7bdc31c0081d7ec26bb6cd963bac (diff)
Fix bug in lid space compaction where partial updates to attributes were lost when moving a document.
Instead of using the document store directly (when reading the document to move) the document retriever must be used. The document retriever patches in attribute values and also correctly waits for the thread writing to the document store. The job moving documents between the "ready" and "not ready" sub databases was already doing this correctly.
Diffstat (limited to 'searchcore/src/tests/proton')
-rw-r--r--searchcore/src/tests/proton/documentdb/documentbucketmover/documentbucketmover_test.cpp8
-rw-r--r--searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_compaction_test.cpp70
-rw-r--r--searchcore/src/tests/proton/documentdb/maintenancecontroller/maintenancecontroller_test.cpp5
3 files changed, 47 insertions, 36 deletions
diff --git a/searchcore/src/tests/proton/documentdb/documentbucketmover/documentbucketmover_test.cpp b/searchcore/src/tests/proton/documentdb/documentbucketmover/documentbucketmover_test.cpp
index af6a9d38385..10b1c829674 100644
--- a/searchcore/src/tests/proton/documentdb/documentbucketmover/documentbucketmover_test.cpp
+++ b/searchcore/src/tests/proton/documentdb/documentbucketmover/documentbucketmover_test.cpp
@@ -191,7 +191,7 @@ MySubDb::MySubDb(const std::shared_ptr<const DocumentTypeRepo> &repo, std::share
_metaStore(*_metaStoreSP),
_realRetriever(std::make_shared<MyDocumentRetriever>(repo)),
_retriever(_realRetriever),
- _subDb(_metaStoreSP, _retriever, subDbId), _docs(),
+ _subDb("my_sub_db", subDbId, _metaStoreSP, _retriever, IFeedView::SP()), _docs(),
_bucketDBHandler(*bucketDB)
{
_bucketDBHandler.addDocumentMetaStore(_metaStoreSP.get(), 0);
@@ -238,7 +238,11 @@ struct MoveFixture
void setupForBucket(const BucketId &bucket,
uint32_t sourceSubDbId,
uint32_t targetSubDbId) {
- _source._subDb._subDbId = sourceSubDbId;
+ _source._subDb = MaintenanceDocumentSubDB(_source._subDb.name(),
+ sourceSubDbId,
+ _source._subDb.meta_store(),
+ _source._subDb.retriever(),
+ _source._subDb.feed_view());
_mover.setupForBucket(bucket, &_source._subDb, targetSubDbId, _handler, _bucketDb);
}
void moveDocuments(size_t maxDocsToMove) {
diff --git a/searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_compaction_test.cpp b/searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_compaction_test.cpp
index 82566025a30..5305ff15003 100644
--- a/searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_compaction_test.cpp
+++ b/searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_compaction_test.cpp
@@ -160,51 +160,59 @@ struct MyFrozenBucketHandler : public IFrozenBucketHandler
virtual void removeListener(IBucketFreezeListener *) override { }
};
-struct MyFeedView : public test::DummyFeedView
-{
- MyFeedView(const std::shared_ptr<const DocumentTypeRepo> &repo)
- : test::DummyFeedView(repo)
+struct MyFeedView : public test::DummyFeedView {
+ MyFeedView(std::shared_ptr<const DocumentTypeRepo> repo)
+ : test::DummyFeedView(std::move(repo))
{
}
};
-struct MyDocumentStore : public test::DummyDocumentStore
-{
+struct MyDocumentStore : public test::DummyDocumentStore {
Document::SP _readDoc;
mutable uint32_t _readLid;
MyDocumentStore() : _readDoc(), _readLid(0) {}
- virtual document::Document::UP
- read(search::DocumentIdT lid, const document::DocumentTypeRepo &) const override {
+ ~MyDocumentStore();
+ document::Document::UP read(search::DocumentIdT lid, const document::DocumentTypeRepo &) const override {
_readLid = lid;
return Document::UP(_readDoc->clone());
}
};
-struct MySummaryManager : public test::DummySummaryManager
-{
- MyDocumentStore _store;
- MySummaryManager() : _store() {}
- virtual search::IDocumentStore &getBackingStore() override { return _store; }
-};
+MyDocumentStore::~MyDocumentStore() = default;
-struct MySubDb : public test::DummyDocumentSubDb
-{
- std::shared_ptr<const DocumentTypeRepo> _repo;
- MySubDb(const std::shared_ptr<const DocumentTypeRepo> &repo, std::shared_ptr<BucketDBOwner> bucketDB);
- ~MySubDb();
- virtual IFeedView::SP getFeedView() const override {
- return IFeedView::SP(new MyFeedView(_repo));
+struct MyDocumentRetriever : public DocumentRetrieverBaseForTest {
+ std::shared_ptr<const DocumentTypeRepo> repo;
+ const MyDocumentStore& store;
+ MyDocumentRetriever(std::shared_ptr<const DocumentTypeRepo> repo_in, const MyDocumentStore& store_in)
+ : repo(repo_in),
+ store(store_in)
+ {
+ }
+ const document::DocumentTypeRepo& getDocumentTypeRepo() const override { return *repo; }
+ void getBucketMetaData(const storage::spi::Bucket&, DocumentMetaData::Vector& ) const override { abort(); }
+ DocumentMetaData getDocumentMetaData(const DocumentId& ) const override { abort(); }
+ Document::UP getDocument(DocumentIdT lid) const override {
+ return store.read(lid, *repo);
}
+ CachedSelect::SP parseSelect(const vespalib::string &) const override { abort(); }
};
+struct MySubDb {
+ test::DummyDocumentSubDb sub_db;
+ MaintenanceDocumentSubDB maintenance_sub_db;
+ MySubDb(std::shared_ptr<BucketDBOwner> bucket_db, const MyDocumentStore& store, std::shared_ptr<const DocumentTypeRepo> repo);
+ ~MySubDb();
+};
-MySubDb::MySubDb(const std::shared_ptr<const DocumentTypeRepo> &repo, std::shared_ptr<BucketDBOwner> bucketDB)
- : test::DummyDocumentSubDb(bucketDB, SUBDB_ID),
- _repo(repo)
+MySubDb::MySubDb(std::shared_ptr<BucketDBOwner> bucket_db, const MyDocumentStore& store, std::shared_ptr<const DocumentTypeRepo> repo)
+ : sub_db(std::move(bucket_db), SUBDB_ID),
+ maintenance_sub_db(sub_db.getName(), sub_db.getSubDbId(), sub_db.getDocumentMetaStoreContext().getSP(),
+ std::make_shared<MyDocumentRetriever>(repo, store),
+ std::make_shared<MyFeedView>(repo))
{
- _summaryManager.reset(new MySummaryManager());
}
-MySubDb::~MySubDb() {}
+
+MySubDb::~MySubDb() = default;
struct MyDirectJobRunner : public IMaintenanceJobRunner {
IMaintenanceJob &_job;
@@ -350,17 +358,15 @@ struct HandlerFixture
{
DocBuilder _docBuilder;
std::shared_ptr<BucketDBOwner> _bucketDB;
+ MyDocumentStore _docStore;
MySubDb _subDb;
- MySummaryManager &_summaryMgr;
- MyDocumentStore &_docStore;
LidSpaceCompactionHandler _handler;
HandlerFixture()
: _docBuilder(Schema()),
_bucketDB(std::make_shared<BucketDBOwner>()),
- _subDb(_docBuilder.getDocumentTypeRepo(), _bucketDB),
- _summaryMgr(static_cast<MySummaryManager &>(*_subDb.getSummaryManager())),
- _docStore(_summaryMgr._store),
- _handler(_subDb, "test")
+ _docStore(),
+ _subDb(_bucketDB, _docStore, _docBuilder.getDocumentTypeRepo()),
+ _handler(_subDb.maintenance_sub_db, "test")
{
_docStore._readDoc = _docBuilder.startDocument(DOC_ID).endDocument();
}
diff --git a/searchcore/src/tests/proton/documentdb/maintenancecontroller/maintenancecontroller_test.cpp b/searchcore/src/tests/proton/documentdb/maintenancecontroller/maintenancecontroller_test.cpp
index c3974368e54..a4f2aeb767d 100644
--- a/searchcore/src/tests/proton/documentdb/maintenancecontroller/maintenancecontroller_test.cpp
+++ b/searchcore/src/tests/proton/documentdb/maintenancecontroller/maintenancecontroller_test.cpp
@@ -523,9 +523,10 @@ MyDocumentSubDB::getSubDB()
{
IDocumentRetriever::SP retriever(new MyDocumentRetriever(*this));
- return MaintenanceDocumentSubDB(_metaStoreSP,
+ return MaintenanceDocumentSubDB("my_sub_db", _subDBId,
+ _metaStoreSP,
retriever,
- _subDBId);
+ IFeedView::SP());
}