summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@yahoo-inc.com>2017-03-17 13:08:10 +0000
committerTor Egge <Tor.Egge@yahoo-inc.com>2017-03-17 13:08:10 +0000
commit8b8d2fd29f88296fc6b50074e9de7c6a237a6c4c (patch)
tree3e45292d420b8c9c28b2392f398826f29fe248c0
parentd5075caaad0423f2057e7945e8087e87d733eb47 (diff)
Reduce arguments to wipe history method in index maintainer.
-rw-r--r--searchcore/src/tests/proton/index/indexmanager_test.cpp3
-rw-r--r--searchcore/src/vespa/searchcore/proton/index/indexmanager.h4
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/documentdb.cpp2
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/documentsubdbcollection.cpp3
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/documentsubdbcollection.h1
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/idocumentsubdb.h2
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.cpp3
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.h2
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.cpp2
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.h2
-rw-r--r--searchcore/src/vespa/searchcore/proton/test/dummy_document_sub_db.h2
-rw-r--r--searchcore/src/vespa/searchcore/proton/test/mock_index_manager.h2
-rw-r--r--searchcorespi/src/tests/plugin/plugin.cpp4
-rw-r--r--searchcorespi/src/vespa/searchcorespi/index/iindexmanager.cpp3
-rw-r--r--searchcorespi/src/vespa/searchcorespi/index/iindexmanager.h7
-rw-r--r--searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.cpp74
-rw-r--r--searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.h18
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