aboutsummaryrefslogtreecommitdiffstats
path: root/searchcore/src
diff options
context:
space:
mode:
authorArne H Juul <arnej@yahoo-inc.com>2017-03-02 13:28:29 +0100
committerArne H Juul <arnej@yahoo-inc.com>2017-03-02 13:31:04 +0100
commit80e08af686f3ee58cf2d21506d26cd74d86d5ece (patch)
treeaecee508ee5a13050b032ec2ef7f83d5302b387f /searchcore/src
parentcba366fe6ceaa445d46f015f18885b098c13c08e (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')
-rw-r--r--searchcore/src/vespa/searchcore/fdispatch/search/CMakeLists.txt1
-rw-r--r--searchcore/src/vespa/searchcore/fdispatch/search/engine_base.cpp5
-rw-r--r--searchcore/src/vespa/searchcore/fdispatch/search/fnet_dataset.cpp2
-rw-r--r--searchcore/src/vespa/searchcore/fdispatch/search/partitioned_array.cpp167
-rw-r--r--searchcore/src/vespa/searchcore/fdispatch/search/partitioned_array.h138
-rw-r--r--searchcore/src/vespa/searchcore/fdispatch/search/plain_dataset.cpp19
-rw-r--r--searchcore/src/vespa/searchcore/fdispatch/search/plain_dataset.h16
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);
};