From 5611713eb8bcf4bfdbe3376da12a0e3f173582fb Mon Sep 17 00:00:00 2001 From: Ovidiu Mircescu Date: Sat, 30 May 2020 10:34:22 +0200 Subject: [PATCH] WIP: workload manager final version of the API The highest level API should not change any more. Tests need to be added. --- src/engine/ComposedNode.cxx | 11 +++++++++++ src/engine/ComposedNode.hxx | 2 ++ src/engine/Executor.cxx | 12 ++++++++++++ src/engine/Executor.hxx | 6 +----- src/engine/Scheduler.hxx | 2 ++ src/runtime/PythonNode.cxx | 32 +++++++++++++------------------- src/runtime/PythonNode.hxx | 1 - 7 files changed, 41 insertions(+), 25 deletions(-) diff --git a/src/engine/ComposedNode.cxx b/src/engine/ComposedNode.cxx index 70ab5b304..626a8abfe 100644 --- a/src/engine/ComposedNode.cxx +++ b/src/engine/ComposedNode.cxx @@ -1501,6 +1501,17 @@ void ComposedNode::accept(Visitor *visitor) } } +void ComposedNode::setProperty(const std::string& name,const std::string& value) +{ + Node::setProperty(name, value); +} + +std::string ComposedNode::getProperty(const std::string& name) +{ + return Node::getProperty(name); +} + + //! redefined on derived class of ComposedNode. by default a ComposedNode has no port by itself std::list ComposedNode::getLocalInputPorts() const { diff --git a/src/engine/ComposedNode.hxx b/src/engine/ComposedNode.hxx index 355ddf809..f0f53d5e3 100644 --- a/src/engine/ComposedNode.hxx +++ b/src/engine/ComposedNode.hxx @@ -124,6 +124,8 @@ namespace YACS void accept(Visitor *visitor); virtual void cleanNodes(); virtual std::string getProgress() const { return "0"; } + void setProperty(const std::string& name,const std::string& value)override; + std::string getProperty(const std::string& name)override; protected: struct SortHierarc { diff --git a/src/engine/Executor.cxx b/src/engine/Executor.cxx index 5f18fff1d..8af044080 100644 --- a/src/engine/Executor.cxx +++ b/src/engine/Executor.cxx @@ -1881,3 +1881,15 @@ void Executor::newRun(Scheduler *graph,int debug, bool fromScratch) } DEBTRACE("End of RunB thread"); } + +void Executor::RunW(Scheduler *graph,int debug, bool fromScratch) +{ + std::string str_value = graph->getProperty("executor"); + if(str_value == "WorkloadManager" + || str_value == "WORKLOADMANAGER" + || str_value == "workloadmanager" + || str_value == "WorkLoadManager") + newRun(graph, debug, fromScratch); + else + RunB(graph, debug, fromScratch); +} diff --git a/src/engine/Executor.hxx b/src/engine/Executor.hxx index acd780833..c83b4159f 100644 --- a/src/engine/Executor.hxx +++ b/src/engine/Executor.hxx @@ -99,11 +99,7 @@ namespace YACS Executor(); virtual ~Executor(); void RunA(Scheduler *graph,int debug=0, bool fromScratch=true); - void RunW(Scheduler *graph,int debug=0, bool fromScratch=true) - { - //RunB(graph, debug, fromScratch); - newRun(graph, debug, fromScratch); - } + void RunW(Scheduler *graph,int debug=0, bool fromScratch=true); void RunB(Scheduler *graph,int debug=0, bool fromScratch=true); void newRun(Scheduler *graph,int debug=0, bool fromScratch=true); void setKeepGoingProperty(bool newVal) { _keepGoingOnFail=newVal; } diff --git a/src/engine/Scheduler.hxx b/src/engine/Scheduler.hxx index f0a9d2cac..c41bbed57 100644 --- a/src/engine/Scheduler.hxx +++ b/src/engine/Scheduler.hxx @@ -49,6 +49,8 @@ namespace YACS virtual bool isPlacementPredictableB4Run() const = 0; virtual bool isMultiplicitySpecified(unsigned& value) const = 0; virtual void forceMultiplicity(unsigned value) = 0; + virtual void setProperty(const std::string& name,const std::string& value)=0; + virtual std::string getProperty(const std::string& name)=0; virtual ~Scheduler(); }; } diff --git a/src/runtime/PythonNode.cxx b/src/runtime/PythonNode.cxx index 402e3f568..9ac3c6105 100644 --- a/src/runtime/PythonNode.cxx +++ b/src/runtime/PythonNode.cxx @@ -76,7 +76,7 @@ const char PyFuncNode::SCRIPT_FOR_SERIALIZATION[]="import pickle\n" " args=pickle.loads(st)\n" " return args\n"; -const char PythonNode::KEEP_CONTEXT_PROPERTY[]="KEEP_CONTEXT"; +const char PythonNode::KEEP_CONTEXT_PROPERTY[]="keep_context"; PythonEntry::PythonEntry():_context(0),_pyfuncSer(0),_pyfuncUnser(0),_pyfuncSimpleSer(0) { @@ -259,7 +259,6 @@ void PythonEntry::loadRemoteContext(InlineNode *reqNode, Engines::Container_ptr } } -// TODO: verify removing std::string PythonEntry::GetContainerLog(const std::string& mode, Container *container, const Task *askingTask) { if(mode=="local") @@ -755,27 +754,22 @@ std::string PythonNode::pythonEntryName()const bool PythonNode::keepContext()const { - std::string str_value = const_cast(this)->getProperty(KEEP_CONTEXT_PROPERTY); - const char* yes_values[] = {"YES", "Yes", "yes", "TRUE", "True", "true", "1", - "ON", "on", "On"}; bool found = false; - for(const char* v : yes_values) - if(str_value == v) - { - found = true; - break; - } + if(_container) + { + std::string str_value = _container->getProperty(KEEP_CONTEXT_PROPERTY); + const char* yes_values[] = {"YES", "Yes", "yes", "TRUE", "True", "true", "1", + "ON", "on", "On"}; + for(const char* v : yes_values) + if(str_value == v) + { + found = true; + break; + } + } return found; } -void PythonNode::setKeepContext(bool keep) -{ - if(keep) - setProperty(KEEP_CONTEXT_PROPERTY, "true"); - else - setProperty(KEEP_CONTEXT_PROPERTY, "false"); -} - Node *PythonNode::simpleClone(ComposedNode *father, bool editionOnly) const { return new PythonNode(*this,father); diff --git a/src/runtime/PythonNode.hxx b/src/runtime/PythonNode.hxx index e012539e6..a18409bd7 100644 --- a/src/runtime/PythonNode.hxx +++ b/src/runtime/PythonNode.hxx @@ -92,7 +92,6 @@ namespace YACS const std::string& container_name) override; bool canAcceptImposedResource()override; bool keepContext()const; - void setKeepContext(bool keep); std::string getContainerLog(); PythonNode* cloneNode(const std::string& name); virtual std::string typeName() { return "YACS__ENGINE__PythonNode"; } -- 2.30.2