aboutsummaryrefslogtreecommitdiffstats
path: root/searchcorespi
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@broadpark.no>2019-01-16 12:45:36 +0100
committerTor Egge <Tor.Egge@broadpark.no>2019-01-16 12:45:36 +0100
commit2b682b9a6dab1dd27ca9fae8cb62cfc678f5bafa (patch)
tree7eedc9a12fc02ea33940f1e956eb66a75266f5ea /searchcorespi
parent25aa30626175b677eced506604b6dd30a2094eca (diff)
Update default source in source selector when switching to new memory index.
Override default source when loading source selector from disk.
Diffstat (limited to 'searchcorespi')
-rw-r--r--searchcorespi/src/vespa/searchcorespi/index/fusionrunner.cpp6
-rw-r--r--searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.cpp5
2 files changed, 7 insertions, 4 deletions
diff --git a/searchcorespi/src/vespa/searchcorespi/index/fusionrunner.cpp b/searchcorespi/src/vespa/searchcorespi/index/fusionrunner.cpp
index b5d3086d11e..009bf5d16d9 100644
--- a/searchcorespi/src/vespa/searchcorespi/index/fusionrunner.cpp
+++ b/searchcorespi/src/vespa/searchcorespi/index/fusionrunner.cpp
@@ -43,9 +43,9 @@ FusionRunner::~FusionRunner() {
namespace {
void readSelectorArray(const string &selector_name, SelectorArray &selector_array,
- const vector<uint8_t> &id_map, uint32_t base_id) {
+ const vector<uint8_t> &id_map, uint32_t base_id, uint32_t fusion_id) {
FixedSourceSelector::UP selector =
- FixedSourceSelector::load(selector_name);
+ FixedSourceSelector::load(selector_name, fusion_id);
if (base_id != selector->getBaseId()) {
selector = selector->cloneAndSubtract("tmp_for_fusion", base_id - selector->getBaseId());
}
@@ -115,7 +115,7 @@ FusionRunner::fuse(const FusionSpec &fusion_spec,
const string selector_name = IndexDiskLayout::getSelectorFileName(_diskLayout.getFlushDir(fusion_id));
SelectorArray selector_array;
- readSelectorArray(selector_name, selector_array, id_map, fusion_spec.last_fusion_id);
+ readSelectorArray(selector_name, selector_array, id_map, fusion_spec.last_fusion_id, fusion_id);
if (!operations.runFusion(_schema, fusion_dir, sources, selector_array, lastSerialNum)) {
return 0;
diff --git a/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.cpp b/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.cpp
index 6a7f4a14f2a..440cc8bc605 100644
--- a/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.cpp
+++ b/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.cpp
@@ -471,6 +471,7 @@ IndexMaintainer::doneInitFlush(FlushArgs *args, IMemoryIndex::SP *new_index)
// XXX: Overflow issue in source selector
_current_index_id = getNewAbsoluteId() - _last_fusion_id;
assert(_current_index_id < ISourceSelector::SOURCE_LIMIT);
+ _selector->setDefaultSource(_current_index_id);
_source_selector_changes = 0;
}
_current_index = *new_index;
@@ -747,6 +748,7 @@ IndexMaintainer::doneSetSchema(SetSchemaArgs &args, IMemoryIndex::SP &newIndex)
// XXX: Overflow issue in source selector
_current_index_id = getNewAbsoluteId() - _last_fusion_id;
assert(_current_index_id < ISourceSelector::SOURCE_LIMIT);
+ _selector->setDefaultSource(_current_index_id);
// Extra index to flush next time flushing is performed
_frozenMemoryIndexes.emplace_back(args._oldIndex, freezeSerialNum, std::move(saveInfo), oldAbsoluteId);
}
@@ -849,7 +851,7 @@ IndexMaintainer::IndexMaintainer(const IndexMaintainerConfig &config,
_lastFlushTime = search::FileKit::getModificationTime(latest_index_dir);
_current_serial_num = _flush_serial_num;
const string selector = IndexDiskLayout::getSelectorFileName(latest_index_dir);
- _selector.reset(FixedSourceSelector::load(selector).release());
+ _selector.reset(FixedSourceSelector::load(selector, _next_id - 1).release());
} else {
_flush_serial_num = 0;
_selector.reset(new FixedSourceSelector(0, "sourceselector", 1));
@@ -866,6 +868,7 @@ IndexMaintainer::IndexMaintainer(const IndexMaintainerConfig &config,
_current_index = operations.createMemoryIndex(_schema, _current_serial_num);
_current_index_id = getNewAbsoluteId() - _last_fusion_id;
assert(_current_index_id < ISourceSelector::SOURCE_LIMIT);
+ _selector->setDefaultSource(_current_index_id);
ISearchableIndexCollection::UP sourceList(loadDiskIndexes(spec, ISearchableIndexCollection::UP(new IndexCollection(_selector))));
LOG(debug, "Index manager created with flushed serial num %" PRIu64, _flush_serial_num);
sourceList->append(_current_index_id, _current_index);