diff options
author | Arne H Juul <arnej@yahoo-inc.com> | 2017-03-02 13:28:29 +0100 |
---|---|---|
committer | Arne H Juul <arnej@yahoo-inc.com> | 2017-03-02 13:31:04 +0100 |
commit | 80e08af686f3ee58cf2d21506d26cd74d86d5ece (patch) | |
tree | aecee508ee5a13050b032ec2ef7f83d5302b387f /searchcore/src | |
parent | cba366fe6ceaa445d46f015f18885b098c13c08e (diff) |
remove FastS_QueryDistribution::PartitionedArray
* make _enginesArray a simple array of engines
* remove extra unused book-keeping of partid changes
* remove now-unused class PartitionedArray
Diffstat (limited to 'searchcore/src')
7 files changed, 20 insertions, 328 deletions
diff --git a/searchcore/src/vespa/searchcore/fdispatch/search/CMakeLists.txt b/searchcore/src/vespa/searchcore/fdispatch/search/CMakeLists.txt index ded3bf47fe8..371530fbd0a 100644 --- a/searchcore/src/vespa/searchcore/fdispatch/search/CMakeLists.txt +++ b/searchcore/src/vespa/searchcore/fdispatch/search/CMakeLists.txt @@ -10,7 +10,6 @@ vespa_add_library(searchcore_fdispatch_search STATIC fnet_search.cpp mergehits.cpp nodemanager.cpp - partitioned_array.cpp plain_dataset.cpp query.cpp querycacheutil.cpp diff --git a/searchcore/src/vespa/searchcore/fdispatch/search/engine_base.cpp b/searchcore/src/vespa/searchcore/fdispatch/search/engine_base.cpp index 8332b42b1df..5ca7bcd9103 100644 --- a/searchcore/src/vespa/searchcore/fdispatch/search/engine_base.cpp +++ b/searchcore/src/vespa/searchcore/fdispatch/search/engine_base.cpp @@ -296,8 +296,6 @@ FastS_EngineBase::HandlePingResponse(uint32_t partid, activeDocs != _reported._activeDocs || parts != _reported._actParts)); - bool partIdChanged = partid != _partid; - uint32_t oldPartID = _partid; // nothing happened ? #if 0 @@ -360,9 +358,6 @@ FastS_EngineBase::HandlePingResponse(uint32_t partid, _dataset->LinkInPart_HasLock(this); - if (partIdChanged) { - _dataset->EnginePartIDChanged_HasLock(this, oldPartID); - } _dataset->UnlockDataset(); _dataset->ScheduleCheckTempFail(); diff --git a/searchcore/src/vespa/searchcore/fdispatch/search/fnet_dataset.cpp b/searchcore/src/vespa/searchcore/fdispatch/search/fnet_dataset.cpp index fe45f9c97c2..9f775fcce51 100644 --- a/searchcore/src/vespa/searchcore/fdispatch/search/fnet_dataset.cpp +++ b/searchcore/src/vespa/searchcore/fdispatch/search/fnet_dataset.cpp @@ -77,7 +77,7 @@ struct ConnectFNETEngine { void FastS_FNET_DataSet::ConfigDone(FastS_DataSetCollection *) { - _enginesArray.ForEach( ConnectFNETEngine() ); + ForEachEngine( ConnectFNETEngine() ); _pingTask.ScheduleNow(); } diff --git a/searchcore/src/vespa/searchcore/fdispatch/search/partitioned_array.cpp b/searchcore/src/vespa/searchcore/fdispatch/search/partitioned_array.cpp deleted file mode 100644 index a2af3b5c737..00000000000 --- a/searchcore/src/vespa/searchcore/fdispatch/search/partitioned_array.cpp +++ /dev/null @@ -1,167 +0,0 @@ -// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#include <vespa/fastos/fastos.h> -#include <cstring> -#include <algorithm> - -#include <vespa/log/log.h> -LOG_SETUP(""); - -#include <vespa/searchcore/util/log.h> -#include <vespa/searchcore/fdispatch/search/partitioned_array.h> -#include <vespa/searchcore/fdispatch/search/engine_base.h> -#include <vespa/searchcore/fdispatch/common/stdincl.h> - -using namespace FastS_QueryDistribution; - -#define PA PartitionedArray - -struct PA::PartitionIDLessThan { - bool operator()(MeasuredVec& partition, - FastS_EngineBase* engine) const - { - return (*partition.vec.begin())->GetPartID() < - engine->GetPartID(); - } -}; - -namespace { -struct EngineOrdering { - //less than definition - bool operator()(FastS_EngineBase* l, - FastS_EngineBase* r) const { - return std::strcmp(l->GetName(), - r->GetName()) < 0; - } -}; - -} //end anonymous namespace - -bool PA::EqualPartitionID(PartitionIterator partitionIterator, FastS_EngineBase* engine) { - FastS_EngineBase* firstEngine = *partitionIterator->vec.begin(); - return firstEngine->GetPartID() == engine->GetPartID(); -} - -void PA::InsertNewEngine(PartitionIterator partitionIterator, - FastS_EngineBase* engine) { - EngineIterator engineIterator = std::lower_bound( - partitionIterator->vec.begin(), - partitionIterator->vec.end(), - engine, EngineOrdering()); - - partitionIterator->vec.insert(engineIterator, engine); - -} - -void PA::InsertNewPartition(PartitionIterator partitionIterator, - FastS_EngineBase* engine) { - if (partitionIterator == _partitions.begin()) { - _minPartitionID = engine->GetPartID(); - } - - MeasuredVec partition; - partition.vec.push_back(engine); - _partitions.insert(partitionIterator, partition); -} - -void PA::Add(FastS_EngineBase* engine) { - - if (engine->GetPartID() == FastS_NoID32()){ - AddEngineWithInvalidPartitionID(engine); - } else { - PartitionIterator partitionIter = std::lower_bound( - _partitions.begin(), - _partitions.end(), - engine, - PartitionIDLessThan()); - - if( partitionIter == _partitions.end() || - !EqualPartitionID(partitionIter, engine) ) - { - InsertNewPartition( partitionIter, engine); - } else { - InsertNewEngine( partitionIter, engine ); - } - } - ++_numEngines; -} - -void PA::AddEngineWithInvalidPartitionID(FastS_EngineBase* engine) { - _invalidPartitionEngines.push_back(engine); -} - -FastS_EngineBase* PA::Extract() { - if (_partitions.empty() ) { - if (_invalidPartitionEngines.empty()) - return 0; - else { - FastS_EngineBase* res = _invalidPartitionEngines.back(); - _invalidPartitionEngines.pop_back(); - --_numEngines; - return res; - } - } - else { - FastS_EngineBase* res = _partitions.back().vec.back(); - _partitions.back().vec.pop_back(); - if( _partitions.back().vec.empty() ) { - _partitions.pop_back(); - } - --_numEngines; - return res; - } - -} - -void PA::EnginePartitionIDChanged(FastS_EngineBase* engine, uint32_t oldID) { - if (oldID == FastS_NoID32()) { - RemoveFromInvalidList(engine); - } else { - RemoveFromPartitionedArray(engine,oldID); - } - Add(engine); -} - -void PA::RemoveFromInvalidList(FastS_EngineBase* engine) { - if ( _invalidPartitionEngines.end() != - std::remove(_invalidPartitionEngines.begin(), _invalidPartitionEngines.end(), - engine) ) - { - --_numEngines; - _invalidPartitionEngines.pop_back(); - } else { - LOG(error, "RemoveFromInvalidList: Engine not found"); - } -} - -void PA::RemoveFromPartitionedArray(FastS_EngineBase* engine, uint32_t oldID) { - size_t index = oldID - _minPartitionID; - if (_partitions[index].vec.end() != - std::remove(_partitions[index].vec.begin(), _partitions[index].vec.end(), - engine) ) - { - --_numEngines; - _partitions[index].vec.pop_back(); - } else { - LOG(error, "RemoveFromPartitionedArray: Engine with oldID %d not found", oldID); - } - - if (_partitions[index].vec.empty()) { - _partitions.erase(_partitions.begin() + index); - } -} - -uint32_t PA::totalMeasure() const{ - uint32_t result = 0; - - for (const_PartitionIterator pi = _partitions.begin(); - pi != _partitions.end(); - ++pi) { - result += pi->count; - } - return result; -} - -uint32_t PA::Partition::ID() const { - FastS_assert(!Empty()); - return (*this)[0]->GetPartID(); -} diff --git a/searchcore/src/vespa/searchcore/fdispatch/search/partitioned_array.h b/searchcore/src/vespa/searchcore/fdispatch/search/partitioned_array.h deleted file mode 100644 index c719aa773a2..00000000000 --- a/searchcore/src/vespa/searchcore/fdispatch/search/partitioned_array.h +++ /dev/null @@ -1,138 +0,0 @@ -// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#pragma once - - -#include <vector> - -class FastS_EngineBase; - -namespace FastS_QueryDistribution { - -//assumes partitions are numbered sequentially -class PartitionedArray { -private: - typedef std::vector<FastS_EngineBase*> Vec; - - struct MeasuredVec { - Vec vec; - //counts number of deterministically distributed queries - mutable uint32_t count; - MeasuredVec() - :count(0) - {} - }; - - typedef std::vector<MeasuredVec> Vec2d; - - typedef Vec2d::iterator PartitionIterator; - typedef Vec2d::const_iterator const_PartitionIterator; - - typedef Vec::iterator EngineIterator; - typedef Vec::const_iterator const_EngineIterator; - - Vec2d _partitions; - size_t _minPartitionID; - - Vec _invalidPartitionEngines; - size_t _numEngines; - -public: - class Partition { - const MeasuredVec& _partition; - public: - Partition(const PartitionedArray& pc, size_t index) - : _partition( pc._partitions[index] ) - {} - - FastS_EngineBase* operator[](size_t index) const { - return _partition.vec[index]; - } - - size_t Size() const{ - return _partition.vec.size(); - } - - uint32_t QueryCount() const { - return _partition.count; - } - - void IncQueryCount() const { - ++_partition.count; - } - - bool Empty() const { - return _partition.vec.empty(); - } - - uint32_t ID() const; - - }; - -private: - bool EqualPartitionID(PartitionIterator partitionIterator, FastS_EngineBase* engine); - void InsertNewEngine(PartitionIterator partitionIterator, FastS_EngineBase* engine); - void InsertNewPartition(PartitionIterator partitionIterator, FastS_EngineBase* engine); - void AddEngineWithInvalidPartitionID(FastS_EngineBase* engine); - void RemoveFromInvalidList(FastS_EngineBase* engine); - void RemoveFromPartitionedArray(FastS_EngineBase* engine, uint32_t oldID); - struct PartitionIDLessThan; - - -public: - //should only be used after building modus is finished - inline Partition operator[](size_t partitionIndex) const { - return Partition(*this, partitionIndex); - } - - inline Partition operator()(size_t partitionID) const { - return Partition(*this, partitionID - _minPartitionID); - } - - FastS_EngineBase* Extract(); - void Add(FastS_EngineBase* engine); - void EnginePartitionIDChanged(FastS_EngineBase* engine, uint32_t oldID); - - template <class FUN> - FUN ForEachPartition(FUN fun) const { - for (size_t i=0; i<_partitions.size(); i++) { - fun(Partition(*this, i)); - } - return fun; - } - - template <class FUN> - FUN ForEach(FUN fun) const { - for(const_EngineIterator ei = _invalidPartitionEngines.begin(); - ei != _invalidPartitionEngines.end(); - ++ei) - { - fun(*ei); - } - - for(const_PartitionIterator pi=_partitions.begin(); - pi != _partitions.end(); - ++pi) - { - for(const_EngineIterator ei = pi->vec.begin(); - ei != pi->vec.end(); - ++ei) - { - fun(*ei); - } - } - return fun; - } - - uint32_t totalMeasure() const; - - PartitionedArray() : - _minPartitionID(0) - {} - - size_t NumPartitions() { - return _partitions.size(); - } - -}; - -} //namespace FastS_QueryDistribution diff --git a/searchcore/src/vespa/searchcore/fdispatch/search/plain_dataset.cpp b/searchcore/src/vespa/searchcore/fdispatch/search/plain_dataset.cpp index 490e02684e9..af2d6627ac9 100644 --- a/searchcore/src/vespa/searchcore/fdispatch/search/plain_dataset.cpp +++ b/searchcore/src/vespa/searchcore/fdispatch/search/plain_dataset.cpp @@ -191,13 +191,19 @@ FastS_PlainDataSet::MHPN_log_t::MHPN_log_t() void FastS_PlainDataSet::InsertEngine(FastS_EngineBase *engine) { - _enginesArray.Add(engine); + _enginesArray.push_back(engine); } FastS_EngineBase * FastS_PlainDataSet::ExtractEngine() { - return _enginesArray.Extract(); + if (_enginesArray.size() > 0) { + FastS_EngineBase *ret = _enginesArray.back(); + _enginesArray.pop_back(); + return ret; + } else { + return NULL; + } } FastS_PlainDataSet::FastS_PlainDataSet(FastS_AppContext *appCtx, @@ -323,8 +329,6 @@ FastS_PlainDataSet::UseNewEngine(FastS_EngineBase *oldEngine, return RefCostUseNewEngine(oldEngine, newEngine, oldCount); } -using namespace FastS_QueryDistribution; - FastS_EngineBase * FastS_PlainDataSet::getPartition(const FastOS_Mutex & dsMutex, uint32_t partindex, uint32_t rowid) { @@ -557,7 +561,7 @@ FastS_PlainDataSet::AreEnginesReady() // We don't need to lock things here, since the engine list // is non-mutable during datasetcollection lifetime. - return _enginesArray.ForEach( CheckReady() ).allReady; + return ForEachEngine( CheckReady() ).allReady; } void @@ -567,8 +571,9 @@ FastS_PlainDataSet::Ping() FastOS_Time beforePing; beforePing.SetNow(); #endif - _enginesArray.ForEach( - std::mem_fun(&FastS_EngineBase::Ping) ); + for (FastS_EngineBase* engine : _enginesArray) { + engine->Ping(); + } #ifdef FNET_SANITY_CHECKS double pingTime = beforePing.MilliSecsToNow(); if (pingTime > 100.0) { diff --git a/searchcore/src/vespa/searchcore/fdispatch/search/plain_dataset.h b/searchcore/src/vespa/searchcore/fdispatch/search/plain_dataset.h index 8d73a216431..9f7b4cf034f 100644 --- a/searchcore/src/vespa/searchcore/fdispatch/search/plain_dataset.h +++ b/searchcore/src/vespa/searchcore/fdispatch/search/plain_dataset.h @@ -9,13 +9,12 @@ #include "child_info.h" #include <vespa/searchcore/fdispatch/search/dataset_base.h> #include <vespa/searchlib/util/rand48.h> - -#include <vespa/searchcore/fdispatch/search/partitioned_array.h> #include <vespa/searchcore/fdispatch/search/configdesc.h> - #include <vespa/searchcore/fdispatch/search/rowstate.h> #include <vespa/fnet/task.h> +class FastS_EngineBase; + //---------------------------------------------------------------- // class holding information about a set of partitions //---------------------------------------------------------------- @@ -133,7 +132,7 @@ protected: FastS_DataSetDesc::QueryDistributionMode _queryDistributionMode; //all engines in this dataset - FastS_QueryDistribution::PartitionedArray _enginesArray; + std::vector<FastS_EngineBase *> _enginesArray; search::Rand48 _randState; void InsertEngine(FastS_EngineBase *engine); @@ -215,14 +214,13 @@ public: template <class FUN> FUN ForEachEngine(FUN fun) { - return _enginesArray.ForEach(fun); + for (FastS_EngineBase *ptr : _enginesArray) { + fun(ptr); + } + return fun; } static bool EngineDocStampOK(time_t haveDocStamp) { return (haveDocStamp != 0); } - void EnginePartIDChanged_HasLock(FastS_EngineBase* engine, uint32_t oldID) { - _enginesArray.EnginePartitionIDChanged(engine, oldID); - } - void UseDeterministicQueryDistribution(bool); }; |