diff options
author | Tor Egge <Tor.Egge@yahoo-inc.com> | 2017-03-17 13:08:10 +0000 |
---|---|---|
committer | Tor Egge <Tor.Egge@yahoo-inc.com> | 2017-03-17 13:08:10 +0000 |
commit | 8b8d2fd29f88296fc6b50074e9de7c6a237a6c4c (patch) | |
tree | 3e45292d420b8c9c28b2392f398826f29fe248c0 | |
parent | d5075caaad0423f2057e7945e8087e87d733eb47 (diff) |
Reduce arguments to wipe history method in index maintainer.
17 files changed, 37 insertions, 97 deletions
diff --git a/searchcore/src/tests/proton/index/indexmanager_test.cpp b/searchcore/src/tests/proton/index/indexmanager_test.cpp index 27a2706aae8..77d52d46cb4 100644 --- a/searchcore/src/tests/proton/index/indexmanager_test.cpp +++ b/searchcore/src/tests/proton/index/indexmanager_test.cpp @@ -702,8 +702,7 @@ TEST_F("require that wipeHistory updates schema on disk", Fixture) { s.loadFromFile("test_data/index.flush.1/schema.txt"); EXPECT_EQUAL(1u, s.getNumIndexFields()); - f.runAsMaster([&]() { f._index_manager->wipeHistory(f._serial_num, - empty_schema); }); + f.runAsMaster([&]() { f._index_manager->wipeHistory(f._serial_num); }); s.loadFromFile("test_data/index.flush.1/schema.txt"); EXPECT_EQUAL(0u, s.getNumIndexFields()); diff --git a/searchcore/src/vespa/searchcore/proton/index/indexmanager.h b/searchcore/src/vespa/searchcore/proton/index/indexmanager.h index face9aefac4..b28df9fa02c 100644 --- a/searchcore/src/vespa/searchcore/proton/index/indexmanager.h +++ b/searchcore/src/vespa/searchcore/proton/index/indexmanager.h @@ -118,8 +118,8 @@ public: _maintainer.setSchema(schema); } - virtual void wipeHistory(SerialNum wipeSerial, const Schema &historyFields) { - _maintainer.wipeHistory(wipeSerial, historyFields); + virtual void wipeHistory(SerialNum wipeSerial) { + _maintainer.wipeHistory(wipeSerial); } }; diff --git a/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp b/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp index 79529285706..ff1724c30e8 100644 --- a/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp @@ -1017,7 +1017,7 @@ DocumentDB::internalWipeHistory(SerialNum wipeSerial, const Schema &wipeSchema) { // Called by executor thread - _subDBs.wipeHistory(wipeSerial, *newHistorySchema, wipeSchema); + _subDBs.wipeHistory(wipeSerial, wipeSchema); _historySchema.reset(newHistorySchema.release()); } diff --git a/searchcore/src/vespa/searchcore/proton/server/documentsubdbcollection.cpp b/searchcore/src/vespa/searchcore/proton/server/documentsubdbcollection.cpp index 42f23fa7cf5..5582571ba74 100644 --- a/searchcore/src/vespa/searchcore/proton/server/documentsubdbcollection.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/documentsubdbcollection.cpp @@ -247,11 +247,10 @@ DocumentSubDBCollection::getNewestFlushedSerial() void DocumentSubDBCollection::wipeHistory(SerialNum wipeSerial, - const Schema &newHistorySchema, const Schema &wipeSchema) { for (auto subDb : _subDBs) { - subDb->wipeHistory(wipeSerial, newHistorySchema, wipeSchema); + subDb->wipeHistory(wipeSerial, wipeSchema); } } diff --git a/searchcore/src/vespa/searchcore/proton/server/documentsubdbcollection.h b/searchcore/src/vespa/searchcore/proton/server/documentsubdbcollection.h index 18d073f60e2..cc856fbc4aa 100644 --- a/searchcore/src/vespa/searchcore/proton/server/documentsubdbcollection.h +++ b/searchcore/src/vespa/searchcore/proton/server/documentsubdbcollection.h @@ -111,7 +111,6 @@ public: void wipeHistory(SerialNum wipeSerial, - const search::index::Schema &newHistorySchema, const search::index::Schema &wipeSchema); void diff --git a/searchcore/src/vespa/searchcore/proton/server/idocumentsubdb.h b/searchcore/src/vespa/searchcore/proton/server/idocumentsubdb.h index 30887691900..075e1068690 100644 --- a/searchcore/src/vespa/searchcore/proton/server/idocumentsubdb.h +++ b/searchcore/src/vespa/searchcore/proton/server/idocumentsubdb.h @@ -122,7 +122,7 @@ public: * last part of transaction log. */ virtual SerialNum getNewestFlushedSerial() = 0; - virtual void wipeHistory(SerialNum wipeSerial, const Schema &newHistorySchema, const Schema &wipeSchema) = 0; + virtual void wipeHistory(SerialNum wipeSerial, const Schema &wipeSchema) = 0; virtual void setIndexSchema(const SchemaSP &schema) = 0; virtual search::SearchableStats getSearchableStats() const = 0; virtual std::unique_ptr<IDocumentRetriever> getDocumentRetriever() = 0; diff --git a/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.cpp b/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.cpp index 8fbbc7d3031..0c63b2d32e6 100644 --- a/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.cpp @@ -298,13 +298,12 @@ SearchableDocSubDB::getFlushTargetsInternal() void SearchableDocSubDB::wipeHistory(SerialNum wipeSerial, - const Schema &newHistorySchema, const Schema &wipeSchema) { assert(_writeService.master().isCurrentThread()); SearchView::SP oldSearchView = _rSearchView.get(); IFeedView::SP oldFeedView = _iFeedView.get(); - _indexMgr->wipeHistory(wipeSerial, newHistorySchema); + _indexMgr->wipeHistory(wipeSerial); reconfigureIndexSearchable(); getAttributeManager()->wipeHistory(wipeSchema); } diff --git a/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.h b/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.h index 5462a25f75e..5d4bdd9e64c 100644 --- a/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.h +++ b/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.h @@ -154,7 +154,7 @@ public: SerialNum getOldestFlushedSerial() override; SerialNum getNewestFlushedSerial() override; - void wipeHistory(SerialNum wipeSerial, const Schema &newHistorySchema, const Schema &wipeSchema) override; + void wipeHistory(SerialNum wipeSerial, const Schema &wipeSchema) override; void setIndexSchema(const Schema::SP &schema) override; size_t getNumActiveDocs() const override; search::SearchableStats getSearchableStats() const override ; diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.cpp b/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.cpp index 22f4ee0b6f2..e1ed63dc8d8 100644 --- a/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.cpp @@ -458,7 +458,7 @@ StoreOnlyDocSubDB::getIndexWriter() const } void -StoreOnlyDocSubDB::wipeHistory(SerialNum, const Schema &, const Schema &) +StoreOnlyDocSubDB::wipeHistory(SerialNum, const Schema &) { } diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.h b/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.h index 93cc0e181e3..53dcb51643b 100644 --- a/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.h +++ b/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.h @@ -249,7 +249,7 @@ public: SerialNum getOldestFlushedSerial() override; SerialNum getNewestFlushedSerial() override; - void wipeHistory(SerialNum wipeSerial, const Schema &newHistorySchema, const Schema &wipeSchema) override; + void wipeHistory(SerialNum wipeSerial, const Schema &wipeSchema) override; void setIndexSchema(const Schema::SP &schema) override; search::SearchableStats getSearchableStats() const override; IDocumentRetriever::UP getDocumentRetriever() override; diff --git a/searchcore/src/vespa/searchcore/proton/test/dummy_document_sub_db.h b/searchcore/src/vespa/searchcore/proton/test/dummy_document_sub_db.h index eeef8f46d11..05c63a4ef48 100644 --- a/searchcore/src/vespa/searchcore/proton/test/dummy_document_sub_db.h +++ b/searchcore/src/vespa/searchcore/proton/test/dummy_document_sub_db.h @@ -81,7 +81,7 @@ struct DummyDocumentSubDb : public IDocumentSubDB void onReprocessDone(SerialNum) override { } SerialNum getOldestFlushedSerial() override { return 0; } SerialNum getNewestFlushedSerial() override { return 0; } - void wipeHistory(SerialNum, const Schema &, const Schema &) override { } + void wipeHistory(SerialNum, const Schema &) override { } void setIndexSchema(const Schema::SP &) override { } search::SearchableStats getSearchableStats() const override { return search::SearchableStats(); diff --git a/searchcore/src/vespa/searchcore/proton/test/mock_index_manager.h b/searchcore/src/vespa/searchcore/proton/test/mock_index_manager.h index 242cca7c974..b40b15eb429 100644 --- a/searchcore/src/vespa/searchcore/proton/test/mock_index_manager.h +++ b/searchcore/src/vespa/searchcore/proton/test/mock_index_manager.h @@ -27,7 +27,7 @@ struct MockIndexManager : public IIndexManager return searchcorespi::IFlushTarget::List(); } virtual void setSchema(const Schema &) override {} - virtual void wipeHistory(SerialNum, const Schema &) override {} + virtual void wipeHistory(SerialNum) override {} virtual void heartBeat(SerialNum) override {} }; diff --git a/searchcorespi/src/tests/plugin/plugin.cpp b/searchcorespi/src/tests/plugin/plugin.cpp index 0ebd22495f8..90aca88cdc6 100644 --- a/searchcorespi/src/tests/plugin/plugin.cpp +++ b/searchcorespi/src/tests/plugin/plugin.cpp @@ -34,8 +34,8 @@ public: searchcorespi::IFlushTarget::List l; return l; } - virtual void setSchema(const Schema &) { } - virtual void wipeHistory(SerialNum , const Schema &) { } + virtual void setSchema(const Schema &) override { } + virtual void wipeHistory(SerialNum) override { } }; class IndexManagerFactory : public searchcorespi::IIndexManagerFactory diff --git a/searchcorespi/src/vespa/searchcorespi/index/iindexmanager.cpp b/searchcorespi/src/vespa/searchcorespi/index/iindexmanager.cpp index b6d350ad52e..eb47aaf043e 100644 --- a/searchcorespi/src/vespa/searchcorespi/index/iindexmanager.cpp +++ b/searchcorespi/src/vespa/searchcorespi/index/iindexmanager.cpp @@ -4,10 +4,9 @@ namespace searchcorespi { void -IIndexManager::wipeHistory(SerialNum wipeSerial, const Schema &historyFields) +IIndexManager::wipeHistory(SerialNum wipeSerial) { (void) wipeSerial; - (void) historyFields; } IIndexManager::Reconfigurer::~Reconfigurer() diff --git a/searchcorespi/src/vespa/searchcorespi/index/iindexmanager.h b/searchcorespi/src/vespa/searchcorespi/index/iindexmanager.h index b1e3e5515b5..d4999a2dd1f 100644 --- a/searchcorespi/src/vespa/searchcorespi/index/iindexmanager.h +++ b/searchcorespi/src/vespa/searchcorespi/index/iindexmanager.h @@ -159,14 +159,11 @@ public: virtual void setSchema(const Schema &schema) = 0; /** - * Wipes remains of removed fields from this index manager as specified in the history schema. - * This can for instance be removing these fields from disk indexes. - * The default implementation does nothing. + * Wipes remains of removed fields from this index manager. * * @param wipeSerial The serial number of this wipe operation. - * @param historyFields The schema specifying which fields we should wipe away. **/ - virtual void wipeHistory(SerialNum wipeSerial, const Schema &historyFields); + virtual void wipeHistory(SerialNum wipeSerial); }; } // namespace searchcorespi diff --git a/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.cpp b/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.cpp index ce88cc1188b..642261fa4b5 100644 --- a/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.cpp +++ b/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.cpp @@ -435,16 +435,6 @@ IndexMaintainer::FlushArgs::~FlushArgs() { } IndexMaintainer::FlushArgs::FlushArgs(FlushArgs &&) = default; IndexMaintainer::FlushArgs & IndexMaintainer::FlushArgs::operator=(FlushArgs &&) = default; -IndexMaintainer::WipeHistoryArgs::WipeHistoryArgs() - : _old_source_list(), - _new_source_list() -{ } - -IndexMaintainer::WipeHistoryArgs::WipeHistoryArgs(WipeHistoryArgs &&) = default; -IndexMaintainer::WipeHistoryArgs & IndexMaintainer::WipeHistoryArgs::operator=(WipeHistoryArgs &&) = default; - -IndexMaintainer::WipeHistoryArgs::~WipeHistoryArgs() { } - bool IndexMaintainer::doneInitFlush(FlushArgs *args, IMemoryIndex::SP *new_index) { @@ -768,20 +758,6 @@ IndexMaintainer::doneSetSchema(SetSchemaArgs &args, IMemoryIndex::SP &newIndex) } -bool -IndexMaintainer::doneWipeHistory(WipeHistoryArgs &args) -{ - assert(_ctx.getThreadingService().master().isCurrentThread()); // with idle index executor - LockGuard state_lock(_state_lock); - LockGuard lock(_new_search_lock); - if (args._old_source_list.get() != _source_list.get()) { - return false; // Flush or fusion had started/completed, must retry - } - _source_list = args._new_source_list; - return true; -} - - Schema IndexMaintainer::getSchema(void) const { @@ -891,7 +867,7 @@ IndexMaintainer::IndexMaintainer(const IndexMaintainerConfig &config, LOG(debug, "Index manager created with flushed serial num %" PRIu64, _flush_serial_num); sourceList->append(_current_index_id, _current_index); sourceList->setCurrentIndex(_current_index_id); - _source_list.reset(sourceList.release()); + _source_list = std::move(sourceList); _fusion_spec = spec; } @@ -1221,44 +1197,30 @@ IndexMaintainer::setSchema(const Schema & schema) } void -IndexMaintainer::wipeHistory(SerialNum wipeSerial, const Schema &historyFields) +IndexMaintainer::wipeHistory(SerialNum wipeSerial) { assert(_ctx.getThreadingService().master().isCurrentThread()); - for (;;) { - const Schema before_schema = getSchema(); - IIndexCollection::SP before_coll = getSourceCollection(); - - Schema::UP schema = Schema::make_union(before_schema, historyFields); - updateIndexSchemas(*before_coll, *schema, wipeSerial); - updateActiveFusionWipeTimeSchema(*schema); - - const Schema after_schema(getSchema()); - IIndexCollection::SP after_coll = getSourceCollection(); - if (before_schema == after_schema && - before_coll.get() == after_coll.get()) - { - break; - } - } + ISearchableIndexCollection::SP new_source_list; + const Schema schema = getSchema(); + IIndexCollection::SP coll = getSourceCollection(); + updateIndexSchemas(*coll, schema, wipeSerial); + updateActiveFusionWipeTimeSchema(schema); { LockGuard state_lock(_state_lock); LockGuard lock(_index_update_lock); _changeGens.bumpWipeGen(); } - for (bool success(false); !success;) { - WipeHistoryArgs args; - { - LockGuard state_lock(_state_lock); - args._old_source_list = _source_list; - args._new_source_list.reset(new IndexCollection(_selector, *args._old_source_list)); - } - if (reopenDiskIndexes(*args._new_source_list)) { - _ctx.getThreadingService().sync(); - // Everything should be quiet now. - success = doneWipeHistory(args); - } else { - success = true; - } + { + LockGuard state_lock(_state_lock); + new_source_list = std::make_shared<IndexCollection>(_selector, *_source_list); + } + if (reopenDiskIndexes(*new_source_list)) { + scheduleCommit(); + _ctx.getThreadingService().sync(); + // Everything should be quiet now. + LockGuard state_lock(_state_lock); + LockGuard lock(_new_search_lock); + _source_list = new_source_list; } } diff --git a/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.h b/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.h index c3cacd2cb25..3106b4ae374 100644 --- a/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.h +++ b/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.h @@ -95,7 +95,7 @@ class IndexMaintainer : public IIndexManager, uint32_t _source_selector_changes; // Protected by IUL // _selector is protected by SL + IUL ISourceSelector::SP _selector; - ISearchableIndexCollection::SP _source_list; // Protected by SL + NSL + ISearchableIndexCollection::SP _source_list; // Protected by SL + NSL, only set by master thread uint32_t _last_fusion_id; // Protected by SL + IUL uint32_t _next_id; // Protected by SL + IUL uint32_t _current_index_id; // Protected by SL + IUL @@ -272,20 +272,6 @@ class IndexMaintainer : public IIndexManager, void doneSetSchema(SetSchemaArgs &args, IMemoryIndex::SP &newIndex); - class WipeHistoryArgs - { - public: - ISearchableIndexCollection::SP _old_source_list; - ISearchableIndexCollection::SP _new_source_list; - - WipeHistoryArgs(); - WipeHistoryArgs(WipeHistoryArgs &&); - WipeHistoryArgs & operator=(WipeHistoryArgs &&); - - ~WipeHistoryArgs(); - }; - - bool doneWipeHistory(WipeHistoryArgs &args); Schema getSchema(void) const; Schema::SP getActiveFusionWipeTimeSchema() const; search::TuneFileAttributes getAttrTune(); @@ -396,7 +382,7 @@ public: IFlushTarget::List getFlushTargets() override; void setSchema(const Schema & schema) override ; - void wipeHistory(SerialNum wipeSerial, const Schema &historyFields) override; + void wipeHistory(SerialNum wipeSerial) override; }; } // namespace index |