add sphinx documentation
[nepi.git] / doc / sphinx / _build / html / _modules / nepi / execution / resource.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
4
5 <html xmlns="http://www.w3.org/1999/xhtml">
6   <head>
7     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8     
9     <title>nepi.execution.resource &mdash; NEPI 3.0 documentation</title>
10     
11     <link rel="stylesheet" href="../../../_static/sphinxdoc.css" type="text/css" />
12     <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
13     
14     <script type="text/javascript">
15       var DOCUMENTATION_OPTIONS = {
16         URL_ROOT:    '../../../',
17         VERSION:     '3.0',
18         COLLAPSE_INDEX: false,
19         FILE_SUFFIX: '.html',
20         HAS_SOURCE:  true
21       };
22     </script>
23     <script type="text/javascript" src="../../../_static/jquery.js"></script>
24     <script type="text/javascript" src="../../../_static/underscore.js"></script>
25     <script type="text/javascript" src="../../../_static/doctools.js"></script>
26     <link rel="top" title="NEPI 3.0 documentation" href="../../../index.html" />
27     <link rel="up" title="Module code" href="../../index.html" /> 
28   </head>
29   <body>
30     <div class="related">
31       <h3>Navigation</h3>
32       <ul>
33         <li class="right" style="margin-right: 10px">
34           <a href="../../../genindex.html" title="General Index"
35              accesskey="I">index</a></li>
36         <li class="right" >
37           <a href="../../../py-modindex.html" title="Python Module Index"
38              >modules</a> |</li>
39         <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
40           <li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</li> 
41       </ul>
42     </div>
43       <div class="sphinxsidebar">
44         <div class="sphinxsidebarwrapper">
45 <div id="searchbox" style="display: none">
46   <h3>Quick search</h3>
47     <form class="search" action="../../../search.html" method="get">
48       <input type="text" name="q" />
49       <input type="submit" value="Go" />
50       <input type="hidden" name="check_keywords" value="yes" />
51       <input type="hidden" name="area" value="default" />
52     </form>
53     <p class="searchtip" style="font-size: 90%">
54     Enter search terms or a module, class or function name.
55     </p>
56 </div>
57 <script type="text/javascript">$('#searchbox').show(0);</script>
58         </div>
59       </div>
60
61     <div class="document">
62       <div class="documentwrapper">
63         <div class="bodywrapper">
64           <div class="body">
65             
66   <h1>Source code for nepi.execution.resource</h1><div class="highlight"><pre>
67 <span class="c">#</span>
68 <span class="c">#    NEPI, a framework to manage network experiments</span>
69 <span class="c">#    Copyright (C) 2013 INRIA</span>
70 <span class="c">#</span>
71 <span class="c">#    This program is free software: you can redistribute it and/or modify</span>
72 <span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
73 <span class="c">#    published by the Free Software Foundation;</span>
74 <span class="c">#</span>
75 <span class="c">#    This program is distributed in the hope that it will be useful,</span>
76 <span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
77 <span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
78 <span class="c">#    GNU General Public License for more details.</span>
79 <span class="c">#</span>
80 <span class="c">#    You should have received a copy of the GNU General Public License</span>
81 <span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
82 <span class="c">#</span>
83 <span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
84
85 <span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tnow</span><span class="p">,</span> <span class="n">tdiff</span><span class="p">,</span> <span class="n">tdiffsec</span><span class="p">,</span> <span class="n">stabsformat</span>
86 <span class="kn">from</span> <span class="nn">nepi.util.logger</span> <span class="kn">import</span> <span class="n">Logger</span>
87 <span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
88 <span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">TraceAttr</span>
89
90 <span class="kn">import</span> <span class="nn">copy</span>
91 <span class="kn">import</span> <span class="nn">functools</span>
92 <span class="kn">import</span> <span class="nn">logging</span>
93 <span class="kn">import</span> <span class="nn">os</span>
94 <span class="kn">import</span> <span class="nn">pkgutil</span>
95 <span class="kn">import</span> <span class="nn">sys</span>
96 <span class="kn">import</span> <span class="nn">threading</span>
97 <span class="kn">import</span> <span class="nn">weakref</span>
98
99 <div class="viewcode-block" id="ResourceAction"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceAction">[docs]</a><span class="k">class</span> <span class="nc">ResourceAction</span><span class="p">:</span>
100     <span class="sd">&quot;&quot;&quot; Action that a user can order to a Resource Manager</span>
101 <span class="sd">   </span>
102 <span class="sd">    &quot;&quot;&quot;</span>
103     <span class="n">DEPLOY</span> <span class="o">=</span> <span class="mi">0</span>
104     <span class="n">START</span> <span class="o">=</span> <span class="mi">1</span>
105     <span class="n">STOP</span> <span class="o">=</span> <span class="mi">2</span>
106 </div>
107 <div class="viewcode-block" id="ResourceState"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceState">[docs]</a><span class="k">class</span> <span class="nc">ResourceState</span><span class="p">:</span>
108     <span class="sd">&quot;&quot;&quot; State of a Resource Manager</span>
109 <span class="sd">   </span>
110 <span class="sd">    &quot;&quot;&quot;</span>
111     <span class="n">NEW</span> <span class="o">=</span> <span class="mi">0</span>
112     <span class="n">DISCOVERED</span> <span class="o">=</span> <span class="mi">1</span>
113     <span class="n">RESERVED</span> <span class="o">=</span> <span class="mi">2</span>
114     <span class="n">PROVISIONED</span> <span class="o">=</span> <span class="mi">3</span>
115     <span class="n">READY</span> <span class="o">=</span> <span class="mi">4</span>
116     <span class="n">STARTED</span> <span class="o">=</span> <span class="mi">5</span>
117     <span class="n">STOPPED</span> <span class="o">=</span> <span class="mi">6</span>
118     <span class="n">FAILED</span> <span class="o">=</span> <span class="mi">7</span>
119     <span class="n">RELEASED</span> <span class="o">=</span> <span class="mi">8</span>
120 </div>
121 <span class="n">ResourceState2str</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">({</span>
122     <span class="n">ResourceState</span><span class="o">.</span><span class="n">NEW</span> <span class="p">:</span> <span class="s">&quot;NEW&quot;</span><span class="p">,</span>
123     <span class="n">ResourceState</span><span class="o">.</span><span class="n">DISCOVERED</span> <span class="p">:</span> <span class="s">&quot;DISCOVERED&quot;</span><span class="p">,</span>
124     <span class="n">ResourceState</span><span class="o">.</span><span class="n">RESERVED</span> <span class="p">:</span> <span class="s">&quot;RESERVED&quot;</span><span class="p">,</span>
125     <span class="n">ResourceState</span><span class="o">.</span><span class="n">PROVISIONED</span> <span class="p">:</span> <span class="s">&quot;PROVISIONED&quot;</span><span class="p">,</span>
126     <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span> <span class="p">:</span> <span class="s">&quot;READY&quot;</span><span class="p">,</span>
127     <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span> <span class="p">:</span> <span class="s">&quot;STARTED&quot;</span><span class="p">,</span>
128     <span class="n">ResourceState</span><span class="o">.</span><span class="n">STOPPED</span> <span class="p">:</span> <span class="s">&quot;STOPPED&quot;</span><span class="p">,</span>
129     <span class="n">ResourceState</span><span class="o">.</span><span class="n">FAILED</span> <span class="p">:</span> <span class="s">&quot;FAILED&quot;</span><span class="p">,</span>
130     <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span> <span class="p">:</span> <span class="s">&quot;RELEASED&quot;</span><span class="p">,</span>
131     <span class="p">})</span>
132
133 <div class="viewcode-block" id="clsinit"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.clsinit">[docs]</a><span class="k">def</span> <span class="nf">clsinit</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
134     <span class="sd">&quot;&quot;&quot; Initializes template information (i.e. attributes and traces)</span>
135 <span class="sd">    on classes derived from the ResourceManager class.</span>
136
137 <span class="sd">    It is used as a decorator in the class declaration as follows:</span>
138
139 <span class="sd">        @clsinit</span>
140 <span class="sd">        class MyResourceManager(ResourceManager):</span>
141 <span class="sd">        </span>
142 <span class="sd">            ...</span>
143
144 <span class="sd">     &quot;&quot;&quot;</span>
145
146     <span class="n">cls</span><span class="o">.</span><span class="n">_clsinit</span><span class="p">()</span>
147     <span class="k">return</span> <span class="n">cls</span>
148 </div>
149 <div class="viewcode-block" id="clsinit_copy"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.clsinit_copy">[docs]</a><span class="k">def</span> <span class="nf">clsinit_copy</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
150     <span class="sd">&quot;&quot;&quot; Initializes template information (i.e. attributes and traces)</span>
151 <span class="sd">    on classes derived from the ResourceManager class.</span>
152 <span class="sd">    It differs from the clsinit method in that it forces inheritance</span>
153 <span class="sd">    of attributes and traces from the parent class.</span>
154
155 <span class="sd">    It is used as a decorator in the class declaration as follows:</span>
156
157 <span class="sd">        @clsinit</span>
158 <span class="sd">        class MyResourceManager(ResourceManager):</span>
159 <span class="sd">        </span>
160 <span class="sd">            ...</span>
161
162
163 <span class="sd">    clsinit_copy should be prefered to clsinit when creating new</span>
164 <span class="sd">    ResourceManager child classes.</span>
165
166 <span class="sd">    &quot;&quot;&quot;</span>
167     
168     <span class="n">cls</span><span class="o">.</span><span class="n">_clsinit_copy</span><span class="p">()</span>
169     <span class="k">return</span> <span class="n">cls</span>
170 </div>
171 <div class="viewcode-block" id="failtrap"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.failtrap">[docs]</a><span class="k">def</span> <span class="nf">failtrap</span><span class="p">(</span><span class="n">func</span><span class="p">):</span>
172     <span class="sd">&quot;&quot;&quot; Decorator function for instance methods that should set the </span>
173 <span class="sd">    RM state to FAILED when an error is raised. The methods that must be</span>
174 <span class="sd">    decorated are: discover, reserved, provision, deploy, start, stop.</span>
175
176 <span class="sd">    &quot;&quot;&quot;</span>
177     <span class="k">def</span> <span class="nf">wrapped</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
178         <span class="k">try</span><span class="p">:</span>
179             <span class="k">return</span> <span class="n">func</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
180         <span class="k">except</span><span class="p">:</span>
181             <span class="bp">self</span><span class="o">.</span><span class="n">fail</span><span class="p">()</span>
182             
183             <span class="kn">import</span> <span class="nn">traceback</span>
184             <span class="n">err</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
185             <span class="n">logger</span> <span class="o">=</span> <span class="n">Logger</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_rtype</span><span class="p">)</span>
186             <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">err</span><span class="p">)</span>
187             <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">&quot;SETTING guid </span><span class="si">%d</span><span class="s"> to state FAILED&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">)</span>
188             <span class="k">raise</span>
189     
190     <span class="k">return</span> <span class="n">wrapped</span>
191 </div>
192 <span class="nd">@clsinit</span>
193 <div class="viewcode-block" id="ResourceManager"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager">[docs]</a><span class="k">class</span> <span class="nc">ResourceManager</span><span class="p">(</span><span class="n">Logger</span><span class="p">):</span>
194     <span class="sd">&quot;&quot;&quot; Base clase for all ResourceManagers. </span>
195 <span class="sd">    </span>
196 <span class="sd">    A ResourceManger is specific to a resource type (e.g. Node, </span>
197 <span class="sd">    Switch, Application, etc) on a specific platform (e.g. PlanetLab, </span>
198 <span class="sd">    OMF, etc).</span>
199
200 <span class="sd">    The ResourceManager instances are responsible for interacting with</span>
201 <span class="sd">    and controlling concrete (physical or virtual) resources in the </span>
202 <span class="sd">    experimental platforms.</span>
203 <span class="sd">    </span>
204 <span class="sd">    &quot;&quot;&quot;</span>
205     <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;Resource&quot;</span>
206     <span class="n">_attributes</span> <span class="o">=</span> <span class="bp">None</span>
207     <span class="n">_traces</span> <span class="o">=</span> <span class="bp">None</span>
208     <span class="n">_help</span> <span class="o">=</span> <span class="bp">None</span>
209     <span class="n">_platform</span> <span class="o">=</span> <span class="bp">None</span>
210     <span class="n">_reschedule_delay</span> <span class="o">=</span> <span class="s">&quot;0.5s&quot;</span>
211
212     <span class="nd">@classmethod</span>
213     <span class="k">def</span> <span class="nf">_register_attribute</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">attr</span><span class="p">):</span>
214         <span class="sd">&quot;&quot;&quot; Resource subclasses will invoke this method to add a </span>
215 <span class="sd">        resource attribute</span>
216
217 <span class="sd">        &quot;&quot;&quot;</span>
218         
219         <span class="n">cls</span><span class="o">.</span><span class="n">_attributes</span><span class="p">[</span><span class="n">attr</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">attr</span>
220
221     <span class="nd">@classmethod</span>
222     <span class="k">def</span> <span class="nf">_remove_attribute</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
223         <span class="sd">&quot;&quot;&quot; Resource subclasses will invoke this method to remove a </span>
224 <span class="sd">        resource attribute</span>
225
226 <span class="sd">        &quot;&quot;&quot;</span>
227         
228         <span class="k">del</span> <span class="n">cls</span><span class="o">.</span><span class="n">_attributes</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
229
230     <span class="nd">@classmethod</span>
231     <span class="k">def</span> <span class="nf">_register_trace</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">trace</span><span class="p">):</span>
232         <span class="sd">&quot;&quot;&quot; Resource subclasses will invoke this method to add a </span>
233 <span class="sd">        resource trace</span>
234
235 <span class="sd">        &quot;&quot;&quot;</span>
236         
237         <span class="n">cls</span><span class="o">.</span><span class="n">_traces</span><span class="p">[</span><span class="n">trace</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">trace</span>
238
239     <span class="nd">@classmethod</span>
240     <span class="k">def</span> <span class="nf">_remove_trace</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
241         <span class="sd">&quot;&quot;&quot; Resource subclasses will invoke this method to remove a </span>
242 <span class="sd">        resource trace</span>
243
244 <span class="sd">        &quot;&quot;&quot;</span>
245         
246         <span class="k">del</span> <span class="n">cls</span><span class="o">.</span><span class="n">_traces</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
247
248     <span class="nd">@classmethod</span>
249     <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
250         <span class="sd">&quot;&quot;&quot; Resource subclasses will invoke this method to register</span>
251 <span class="sd">        resource attributes.</span>
252
253 <span class="sd">        This method should be overriden in the RMs that define</span>
254 <span class="sd">        attributes.</span>
255
256 <span class="sd">        &quot;&quot;&quot;</span>
257         <span class="n">critical</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;critical&quot;</span><span class="p">,</span> 
258                 <span class="s">&quot;Defines whether the resource is critical. &quot;</span>
259                 <span class="s">&quot;A failure on a critical resource will interrupt &quot;</span>
260                 <span class="s">&quot;the experiment. &quot;</span><span class="p">,</span>
261                 <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
262                 <span class="n">default</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span>
263                 <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
264         <span class="n">hard_release</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;hardRelease&quot;</span><span class="p">,</span> 
265                 <span class="s">&quot;Forces removal of all result files and directories associated &quot;</span>
266                 <span class="s">&quot;to the RM upon resource release. After release the RM will &quot;</span>
267                 <span class="s">&quot;be removed from the EC and the results will not longer be &quot;</span>
268                 <span class="s">&quot;accessible&quot;</span><span class="p">,</span>
269                 <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
270                 <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
271                 <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
272
273         <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">critical</span><span class="p">)</span>
274         <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">hard_release</span><span class="p">)</span>
275         
276     <span class="nd">@classmethod</span>
277     <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
278         <span class="sd">&quot;&quot;&quot; Resource subclasses will invoke this method to register</span>
279 <span class="sd">        resource traces</span>
280
281 <span class="sd">        This method should be overridden in the RMs that define traces.</span>
282 <span class="sd">        </span>
283 <span class="sd">        &quot;&quot;&quot;</span>
284         
285         <span class="k">pass</span>
286
287     <span class="nd">@classmethod</span>
288     <span class="k">def</span> <span class="nf">_clsinit</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
289         <span class="sd">&quot;&quot;&quot; ResourceManager classes have different attributes and traces.</span>
290 <span class="sd">        Attribute and traces are stored in &#39;class attribute&#39; dictionaries.</span>
291 <span class="sd">        When a new ResourceManager class is created, the _clsinit method is </span>
292 <span class="sd">        called to create a new instance of those dictionaries and initialize </span>
293 <span class="sd">        them.</span>
294 <span class="sd">        </span>
295 <span class="sd">        The _clsinit method is called by the clsinit decorator method.</span>
296 <span class="sd">        </span>
297 <span class="sd">        &quot;&quot;&quot;</span>
298         
299         <span class="c"># static template for resource attributes</span>
300         <span class="n">cls</span><span class="o">.</span><span class="n">_attributes</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
301         <span class="n">cls</span><span class="o">.</span><span class="n">_register_attributes</span><span class="p">()</span>
302
303         <span class="c"># static template for resource traces</span>
304         <span class="n">cls</span><span class="o">.</span><span class="n">_traces</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
305         <span class="n">cls</span><span class="o">.</span><span class="n">_register_traces</span><span class="p">()</span>
306
307     <span class="nd">@classmethod</span>
308     <span class="k">def</span> <span class="nf">_clsinit_copy</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
309         <span class="sd">&quot;&quot;&quot; Same as _clsinit, except that after creating new instances of the</span>
310 <span class="sd">        dictionaries it copies all the attributes and traces from the parent </span>
311 <span class="sd">        class.</span>
312 <span class="sd">        </span>
313 <span class="sd">        The _clsinit_copy method is called by the clsinit_copy decorator method.</span>
314 <span class="sd">        </span>
315 <span class="sd">        &quot;&quot;&quot;</span>
316         <span class="c"># static template for resource attributes</span>
317         <span class="n">cls</span><span class="o">.</span><span class="n">_attributes</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="n">cls</span><span class="o">.</span><span class="n">_attributes</span><span class="p">)</span>
318         <span class="n">cls</span><span class="o">.</span><span class="n">_register_attributes</span><span class="p">()</span>
319
320         <span class="c"># static template for resource traces</span>
321         <span class="n">cls</span><span class="o">.</span><span class="n">_traces</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="n">cls</span><span class="o">.</span><span class="n">_traces</span><span class="p">)</span>
322         <span class="n">cls</span><span class="o">.</span><span class="n">_register_traces</span><span class="p">()</span>
323
324     <span class="nd">@classmethod</span>
325 <div class="viewcode-block" id="ResourceManager.get_rtype"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_rtype">[docs]</a>    <span class="k">def</span> <span class="nf">get_rtype</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
326         <span class="sd">&quot;&quot;&quot; Returns the type of the Resource Manager</span>
327
328 <span class="sd">        &quot;&quot;&quot;</span>
329         <span class="k">return</span> <span class="n">cls</span><span class="o">.</span><span class="n">_rtype</span>
330 </div>
331     <span class="nd">@classmethod</span>
332 <div class="viewcode-block" id="ResourceManager.get_attributes"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_attributes">[docs]</a>    <span class="k">def</span> <span class="nf">get_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
333         <span class="sd">&quot;&quot;&quot; Returns a copy of the attributes</span>
334
335 <span class="sd">        &quot;&quot;&quot;</span>
336         <span class="k">return</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="n">cls</span><span class="o">.</span><span class="n">_attributes</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
337 </div>
338     <span class="nd">@classmethod</span>
339 <div class="viewcode-block" id="ResourceManager.get_attribute"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_attribute">[docs]</a>    <span class="k">def</span> <span class="nf">get_attribute</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
340         <span class="sd">&quot;&quot;&quot; Returns a copy of the attribute with name &#39;name&#39;</span>
341
342 <span class="sd">        &quot;&quot;&quot;</span>
343         <span class="k">return</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="n">cls</span><span class="o">.</span><span class="n">_attributes</span><span class="p">[</span><span class="n">name</span><span class="p">])</span>
344 </div>
345     <span class="nd">@classmethod</span>
346 <div class="viewcode-block" id="ResourceManager.get_traces"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_traces">[docs]</a>    <span class="k">def</span> <span class="nf">get_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
347         <span class="sd">&quot;&quot;&quot; Returns a copy of the traces</span>
348
349 <span class="sd">        &quot;&quot;&quot;</span>
350         <span class="k">return</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="n">cls</span><span class="o">.</span><span class="n">_traces</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
351 </div>
352     <span class="nd">@classmethod</span>
353 <div class="viewcode-block" id="ResourceManager.get_help"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_help">[docs]</a>    <span class="k">def</span> <span class="nf">get_help</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
354         <span class="sd">&quot;&quot;&quot; Returns the description of the type of Resource</span>
355
356 <span class="sd">        &quot;&quot;&quot;</span>
357         <span class="k">return</span> <span class="n">cls</span><span class="o">.</span><span class="n">_help</span>
358 </div>
359     <span class="nd">@classmethod</span>
360 <div class="viewcode-block" id="ResourceManager.get_platform"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_platform">[docs]</a>    <span class="k">def</span> <span class="nf">get_platform</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
361         <span class="sd">&quot;&quot;&quot; Returns the identified of the platform (i.e. testbed type)</span>
362 <span class="sd">        for the Resource</span>
363
364 <span class="sd">        &quot;&quot;&quot;</span>
365         <span class="k">return</span> <span class="n">cls</span><span class="o">.</span><span class="n">_platform</span>
366 </div>
367     <span class="nd">@classmethod</span>
368 <div class="viewcode-block" id="ResourceManager.get_global"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_global">[docs]</a>    <span class="k">def</span> <span class="nf">get_global</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
369         <span class="sd">&quot;&quot;&quot; Returns the value of a global attribute</span>
370 <span class="sd">            Global attribute meaning an attribute for </span>
371 <span class="sd">            all the resources from a rtype</span>
372
373 <span class="sd">        :param name: Name of the attribute</span>
374 <span class="sd">        :type name: str</span>
375 <span class="sd">        :rtype: str</span>
376 <span class="sd">        &quot;&quot;&quot;</span>
377         <span class="n">global_attr</span> <span class="o">=</span> <span class="n">cls</span><span class="o">.</span><span class="n">_attributes</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
378         <span class="k">return</span> <span class="n">global_attr</span><span class="o">.</span><span class="n">value</span>
379 </div>
380     <span class="nd">@classmethod</span>
381 <div class="viewcode-block" id="ResourceManager.set_global"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_global">[docs]</a>    <span class="k">def</span> <span class="nf">set_global</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
382         <span class="sd">&quot;&quot;&quot; Set value for a global attribute</span>
383
384 <span class="sd">        :param name: Name of the attribute</span>
385 <span class="sd">        :type name: str</span>
386 <span class="sd">        :param name: Value of the attribute</span>
387 <span class="sd">        :type name: str</span>
388 <span class="sd">        &quot;&quot;&quot;</span>
389         <span class="n">global_attr</span> <span class="o">=</span> <span class="n">cls</span><span class="o">.</span><span class="n">_attributes</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
390         <span class="n">global_attr</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">value</span>
391         <span class="k">return</span> <span class="n">value</span>
392 </div>
393     <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
394         <span class="nb">super</span><span class="p">(</span><span class="n">ResourceManager</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
395         
396         <span class="bp">self</span><span class="o">.</span><span class="n">_guid</span> <span class="o">=</span> <span class="n">guid</span>
397         <span class="bp">self</span><span class="o">.</span><span class="n">_ec</span> <span class="o">=</span> <span class="n">weakref</span><span class="o">.</span><span class="n">ref</span><span class="p">(</span><span class="n">ec</span><span class="p">)</span>
398         <span class="bp">self</span><span class="o">.</span><span class="n">_connections</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
399         <span class="bp">self</span><span class="o">.</span><span class="n">_conditions</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span> 
400
401         <span class="c"># the resource instance gets a copy of all attributes</span>
402         <span class="bp">self</span><span class="o">.</span><span class="n">_attrs</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_attributes</span><span class="p">)</span>
403
404         <span class="c"># the resource instance gets a copy of all traces</span>
405         <span class="bp">self</span><span class="o">.</span><span class="n">_trcs</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_traces</span><span class="p">)</span>
406
407         <span class="c"># Each resource is placed on a deployment group by the EC</span>
408         <span class="c"># during deployment</span>
409         <span class="bp">self</span><span class="o">.</span><span class="n">deployment_group</span> <span class="o">=</span> <span class="bp">None</span>
410
411         <span class="bp">self</span><span class="o">.</span><span class="n">_start_time</span> <span class="o">=</span> <span class="bp">None</span>
412         <span class="bp">self</span><span class="o">.</span><span class="n">_stop_time</span> <span class="o">=</span> <span class="bp">None</span>
413         <span class="bp">self</span><span class="o">.</span><span class="n">_discover_time</span> <span class="o">=</span> <span class="bp">None</span>
414         <span class="bp">self</span><span class="o">.</span><span class="n">_reserved_time</span> <span class="o">=</span> <span class="bp">None</span>
415         <span class="bp">self</span><span class="o">.</span><span class="n">_provision_time</span> <span class="o">=</span> <span class="bp">None</span>
416         <span class="bp">self</span><span class="o">.</span><span class="n">_ready_time</span> <span class="o">=</span> <span class="bp">None</span>
417         <span class="bp">self</span><span class="o">.</span><span class="n">_release_time</span> <span class="o">=</span> <span class="bp">None</span>
418         <span class="bp">self</span><span class="o">.</span><span class="n">_failed_time</span> <span class="o">=</span> <span class="bp">None</span>
419
420         <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">NEW</span>
421
422         <span class="c"># instance lock to synchronize exclusive state change methods (such</span>
423         <span class="c"># as deploy and release methods), in order to prevent them from being </span>
424         <span class="c"># executed at the same time and corrupt internal resource state</span>
425         <span class="bp">self</span><span class="o">.</span><span class="n">_release_lock</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Lock</span><span class="p">()</span>
426
427     <span class="nd">@property</span>
428 <div class="viewcode-block" id="ResourceManager.guid"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.guid">[docs]</a>    <span class="k">def</span> <span class="nf">guid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
429         <span class="sd">&quot;&quot;&quot; Returns the global unique identifier of the RM &quot;&quot;&quot;</span>
430         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_guid</span>
431 </div>
432     <span class="nd">@property</span>
433 <div class="viewcode-block" id="ResourceManager.ec"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.ec">[docs]</a>    <span class="k">def</span> <span class="nf">ec</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
434         <span class="sd">&quot;&quot;&quot; Returns the Experiment Controller of the RM &quot;&quot;&quot;</span>
435         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ec</span><span class="p">()</span>
436 </div>
437     <span class="nd">@property</span>
438 <div class="viewcode-block" id="ResourceManager.connections"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.connections">[docs]</a>    <span class="k">def</span> <span class="nf">connections</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
439         <span class="sd">&quot;&quot;&quot; Returns the set of guids of connected RMs &quot;&quot;&quot;</span>
440         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_connections</span>
441 </div>
442     <span class="nd">@property</span>
443 <div class="viewcode-block" id="ResourceManager.conditions"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.conditions">[docs]</a>    <span class="k">def</span> <span class="nf">conditions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
444         <span class="sd">&quot;&quot;&quot; Returns the conditions to which the RM is subjected to.</span>
445 <span class="sd">        </span>
446 <span class="sd">        This method returns a dictionary of conditions lists indexed by</span>
447 <span class="sd">        a ResourceAction.</span>
448 <span class="sd">        </span>
449 <span class="sd">        &quot;&quot;&quot;</span>
450         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_conditions</span>
451 </div>
452     <span class="nd">@property</span>
453 <div class="viewcode-block" id="ResourceManager.start_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.start_time">[docs]</a>    <span class="k">def</span> <span class="nf">start_time</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
454         <span class="sd">&quot;&quot;&quot; Returns the start time of the RM as a timestamp &quot;&quot;&quot;</span>
455         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_start_time</span>
456 </div>
457     <span class="nd">@property</span>
458 <div class="viewcode-block" id="ResourceManager.stop_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.stop_time">[docs]</a>    <span class="k">def</span> <span class="nf">stop_time</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
459         <span class="sd">&quot;&quot;&quot; Returns the stop time of the RM as a timestamp &quot;&quot;&quot;</span>
460         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_stop_time</span>
461 </div>
462     <span class="nd">@property</span>
463 <div class="viewcode-block" id="ResourceManager.discover_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.discover_time">[docs]</a>    <span class="k">def</span> <span class="nf">discover_time</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
464         <span class="sd">&quot;&quot;&quot; Returns the discover time of the RM as a timestamp &quot;&quot;&quot;</span>
465         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_discover_time</span>
466 </div>
467     <span class="nd">@property</span>
468 <div class="viewcode-block" id="ResourceManager.reserved_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.reserved_time">[docs]</a>    <span class="k">def</span> <span class="nf">reserved_time</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
469         <span class="sd">&quot;&quot;&quot; Returns the reserved time of the RM as a timestamp &quot;&quot;&quot;</span>
470         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reserved_time</span>
471 </div>
472     <span class="nd">@property</span>
473 <div class="viewcode-block" id="ResourceManager.provision_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.provision_time">[docs]</a>    <span class="k">def</span> <span class="nf">provision_time</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
474         <span class="sd">&quot;&quot;&quot; Returns the provision time of the RM as a timestamp &quot;&quot;&quot;</span>
475         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_provision_time</span>
476 </div>
477     <span class="nd">@property</span>
478 <div class="viewcode-block" id="ResourceManager.ready_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.ready_time">[docs]</a>    <span class="k">def</span> <span class="nf">ready_time</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
479         <span class="sd">&quot;&quot;&quot; Returns the deployment time of the RM as a timestamp &quot;&quot;&quot;</span>
480         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ready_time</span>
481 </div>
482     <span class="nd">@property</span>
483 <div class="viewcode-block" id="ResourceManager.release_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.release_time">[docs]</a>    <span class="k">def</span> <span class="nf">release_time</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
484         <span class="sd">&quot;&quot;&quot; Returns the release time of the RM as a timestamp &quot;&quot;&quot;</span>
485         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_time</span>
486 </div>
487     <span class="nd">@property</span>
488 <div class="viewcode-block" id="ResourceManager.failed_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.failed_time">[docs]</a>    <span class="k">def</span> <span class="nf">failed_time</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
489         <span class="sd">&quot;&quot;&quot; Returns the time failure occurred for the RM as a timestamp &quot;&quot;&quot;</span>
490         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_failed_time</span>
491 </div>
492     <span class="nd">@property</span>
493 <div class="viewcode-block" id="ResourceManager.state"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.state">[docs]</a>    <span class="k">def</span> <span class="nf">state</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
494         <span class="sd">&quot;&quot;&quot; Get the current state of the RM &quot;&quot;&quot;</span>
495         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span>
496 </div>
497     <span class="nd">@property</span>
498 <div class="viewcode-block" id="ResourceManager.reschedule_delay"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.reschedule_delay">[docs]</a>    <span class="k">def</span> <span class="nf">reschedule_delay</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
499         <span class="sd">&quot;&quot;&quot; Returns default reschedule delay &quot;&quot;&quot;</span>
500         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reschedule_delay</span>
501 </div>
502 <div class="viewcode-block" id="ResourceManager.log_message"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.log_message">[docs]</a>    <span class="k">def</span> <span class="nf">log_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">):</span>
503         <span class="sd">&quot;&quot;&quot; Returns the log message formatted with added information.</span>
504
505 <span class="sd">        :param msg: text message</span>
506 <span class="sd">        :type msg: str</span>
507 <span class="sd">        :rtype: str</span>
508
509 <span class="sd">        &quot;&quot;&quot;</span>
510         <span class="k">return</span> <span class="s">&quot; </span><span class="si">%s</span><span class="s"> guid </span><span class="si">%d</span><span class="s"> - </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_rtype</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span>
511 </div>
512 <div class="viewcode-block" id="ResourceManager.register_connection"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.register_connection">[docs]</a>    <span class="k">def</span> <span class="nf">register_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
513         <span class="sd">&quot;&quot;&quot; Registers a connection to the RM identified by guid</span>
514
515 <span class="sd">        This method should not be overridden. Specific functionality</span>
516 <span class="sd">        should be added in the do_connect method.</span>
517
518 <span class="sd">        :param guid: Global unique identified of the RM to connect to</span>
519 <span class="sd">        :type guid: int</span>
520
521 <span class="sd">        &quot;&quot;&quot;</span>
522         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">valid_connection</span><span class="p">(</span><span class="n">guid</span><span class="p">):</span>
523             <span class="bp">self</span><span class="o">.</span><span class="n">do_connect</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
524             <span class="bp">self</span><span class="o">.</span><span class="n">_connections</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
525 </div>
526 <div class="viewcode-block" id="ResourceManager.unregister_connection"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.unregister_connection">[docs]</a>    <span class="k">def</span> <span class="nf">unregister_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
527         <span class="sd">&quot;&quot;&quot; Removes a registered connection to the RM identified by guid</span>
528 <span class="sd">        </span>
529 <span class="sd">        This method should not be overridden. Specific functionality</span>
530 <span class="sd">        should be added in the do_disconnect method.</span>
531
532 <span class="sd">        :param guid: Global unique identified of the RM to connect to</span>
533 <span class="sd">        :type guid: int</span>
534
535 <span class="sd">        &quot;&quot;&quot;</span>
536         <span class="k">if</span> <span class="n">guid</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_connections</span><span class="p">:</span>
537             <span class="bp">self</span><span class="o">.</span><span class="n">do_disconnect</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
538             <span class="bp">self</span><span class="o">.</span><span class="n">_connections</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
539 </div>
540     <span class="nd">@failtrap</span>
541 <div class="viewcode-block" id="ResourceManager.discover"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.discover">[docs]</a>    <span class="k">def</span> <span class="nf">discover</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
542         <span class="sd">&quot;&quot;&quot; Performs resource discovery.</span>
543 <span class="sd">        </span>
544 <span class="sd">        This  method is responsible for selecting an individual resource</span>
545 <span class="sd">        matching user requirements.</span>
546
547 <span class="sd">        This method should not be overridden directly. Specific functionality</span>
548 <span class="sd">        should be added in the do_discover method.</span>
549
550 <span class="sd">        &quot;&quot;&quot;</span>
551         <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_lock</span><span class="p">:</span>
552             <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">!=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
553                 <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
554 </div>
555     <span class="nd">@failtrap</span>
556 <div class="viewcode-block" id="ResourceManager.reserve"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.reserve">[docs]</a>    <span class="k">def</span> <span class="nf">reserve</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
557         <span class="sd">&quot;&quot;&quot; Performs resource reserve.</span>
558 <span class="sd">        </span>
559 <span class="sd">        This  method is responsible for reserving an individual resource</span>
560 <span class="sd">        matching user requirements.</span>
561
562 <span class="sd">        This method should not be overridden directly. Specific functionality</span>
563 <span class="sd">        should be added in the do_reserved method.</span>
564
565 <span class="sd">        &quot;&quot;&quot;</span>
566         <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_lock</span><span class="p">:</span>
567             <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">!=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
568                 <span class="bp">self</span><span class="o">.</span><span class="n">do_reserve</span><span class="p">()</span>
569 </div>
570     <span class="nd">@failtrap</span>
571 <div class="viewcode-block" id="ResourceManager.provision"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.provision">[docs]</a>    <span class="k">def</span> <span class="nf">provision</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
572         <span class="sd">&quot;&quot;&quot; Performs resource provisioning.</span>
573
574 <span class="sd">        This  method is responsible for provisioning one resource.</span>
575 <span class="sd">        After this method has been successfully invoked, the resource</span>
576 <span class="sd">        should be accessible/controllable by the RM.</span>
577
578 <span class="sd">        This method should not be overridden directly. Specific functionality</span>
579 <span class="sd">        should be added in the do_provision method.</span>
580
581 <span class="sd">        &quot;&quot;&quot;</span>
582         <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_lock</span><span class="p">:</span>
583             <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">!=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
584                 <span class="bp">self</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
585 </div>
586     <span class="nd">@failtrap</span>
587 <div class="viewcode-block" id="ResourceManager.configure"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.configure">[docs]</a>    <span class="k">def</span> <span class="nf">configure</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
588         <span class="sd">&quot;&quot;&quot; Performs resource configuration.</span>
589
590 <span class="sd">        This  method is responsible for configuring one resource.</span>
591 <span class="sd">        After this method has been successfully invoked, the resource</span>
592 <span class="sd">        should be set up to start the experimentation.</span>
593
594 <span class="sd">        This method should not be overridden directly. Specific functionality</span>
595 <span class="sd">        should be added in the do_configure method.</span>
596
597 <span class="sd">        &quot;&quot;&quot;</span>
598         <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_lock</span><span class="p">:</span>
599             <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">!=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
600                 <span class="bp">self</span><span class="o">.</span><span class="n">do_configure</span><span class="p">()</span>
601 </div>
602     <span class="nd">@failtrap</span>
603 <div class="viewcode-block" id="ResourceManager.start"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.start">[docs]</a>    <span class="k">def</span> <span class="nf">start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
604         <span class="sd">&quot;&quot;&quot; Starts the RM (e.g. launch remote process).</span>
605 <span class="sd">    </span>
606 <span class="sd">        There is no standard start behavior. Some RMs will not need to perform</span>
607 <span class="sd">        any actions upon start.</span>
608
609 <span class="sd">        This method should not be overridden directly. Specific functionality</span>
610 <span class="sd">        should be added in the do_start method.</span>
611
612 <span class="sd">        &quot;&quot;&quot;</span>
613
614         <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="ow">in</span> <span class="p">[</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">,</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STOPPED</span><span class="p">]:</span>
615             <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">&quot;Wrong state </span><span class="si">%s</span><span class="s"> for start&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span><span class="p">)</span>
616             <span class="k">return</span>
617
618         <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_lock</span><span class="p">:</span>
619             <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">!=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
620                 <span class="bp">self</span><span class="o">.</span><span class="n">do_start</span><span class="p">()</span>
621 </div>
622     <span class="nd">@failtrap</span>
623 <div class="viewcode-block" id="ResourceManager.stop"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.stop">[docs]</a>    <span class="k">def</span> <span class="nf">stop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
624         <span class="sd">&quot;&quot;&quot; Interrupts the RM, stopping any tasks the RM was performing.</span>
625 <span class="sd">     </span>
626 <span class="sd">        There is no standard stop behavior. Some RMs will not need to perform</span>
627 <span class="sd">        any actions upon stop.</span>
628 <span class="sd">    </span>
629 <span class="sd">        This method should not be overridden directly. Specific functionality</span>
630 <span class="sd">        should be added in the do_stop method.</span>
631 <span class="sd">      </span>
632 <span class="sd">        &quot;&quot;&quot;</span>
633         <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="ow">in</span> <span class="p">[</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">]:</span>
634             <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">&quot;Wrong state </span><span class="si">%s</span><span class="s"> for stop&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span><span class="p">)</span>
635             <span class="k">return</span>
636         
637         <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_lock</span><span class="p">:</span>
638             <span class="bp">self</span><span class="o">.</span><span class="n">do_stop</span><span class="p">()</span>
639 </div>
640     <span class="nd">@failtrap</span>
641 <div class="viewcode-block" id="ResourceManager.deploy"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.deploy">[docs]</a>    <span class="k">def</span> <span class="nf">deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
642         <span class="sd">&quot;&quot;&quot; Execute all steps required for the RM to reach the state READY.</span>
643
644 <span class="sd">        This method is responsible for deploying the resource (and invoking </span>
645 <span class="sd">        the discover and provision methods).</span>
646 <span class="sd"> </span>
647 <span class="sd">        This method should not be overridden directly. Specific functionality</span>
648 <span class="sd">        should be added in the do_deploy method.</span>
649 <span class="sd">       </span>
650 <span class="sd">        &quot;&quot;&quot;</span>
651         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">&gt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
652             <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">&quot;Wrong state </span><span class="si">%s</span><span class="s"> for deploy&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span><span class="p">)</span>
653             <span class="k">return</span>
654
655         <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_lock</span><span class="p">:</span>
656             <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">!=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
657                 <span class="bp">self</span><span class="o">.</span><span class="n">do_deploy</span><span class="p">()</span>
658 </div>
659 <div class="viewcode-block" id="ResourceManager.release"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.release">[docs]</a>    <span class="k">def</span> <span class="nf">release</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
660         <span class="sd">&quot;&quot;&quot; Perform actions to free resources used by the RM.</span>
661 <span class="sd">  </span>
662 <span class="sd">        This  method is responsible for releasing resources that were</span>
663 <span class="sd">        used during the experiment by the RM.</span>
664
665 <span class="sd">        This method should not be overridden directly. Specific functionality</span>
666 <span class="sd">        should be added in the do_release method.</span>
667 <span class="sd">      </span>
668 <span class="sd">        &quot;&quot;&quot;</span>
669         <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_lock</span><span class="p">:</span>
670             <span class="k">try</span><span class="p">:</span>
671                 <span class="bp">self</span><span class="o">.</span><span class="n">do_release</span><span class="p">()</span>
672             <span class="k">except</span><span class="p">:</span>
673                 <span class="bp">self</span><span class="o">.</span><span class="n">set_released</span><span class="p">()</span>
674
675                 <span class="kn">import</span> <span class="nn">traceback</span>
676                 <span class="n">err</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
677                 <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; </span><span class="si">%s</span><span class="s"> guid </span><span class="si">%d</span><span class="s"> ----- FAILED TO RELEASE ----- </span><span class="se">\n</span><span class="s"> </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="p">(</span>
678                         <span class="bp">self</span><span class="o">.</span><span class="n">_rtype</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
679                 <span class="n">logger</span> <span class="o">=</span> <span class="n">Logger</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_rtype</span><span class="p">)</span>
680                 <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
681 </div>
682 <div class="viewcode-block" id="ResourceManager.fail"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.fail">[docs]</a>    <span class="k">def</span> <span class="nf">fail</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
683         <span class="sd">&quot;&quot;&quot; Sets the RM to state FAILED.</span>
684
685 <span class="sd">        This method should not be overridden directly. Specific functionality</span>
686 <span class="sd">        should be added in the do_fail method.</span>
687
688 <span class="sd">        &quot;&quot;&quot;</span>
689         <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_lock</span><span class="p">:</span>
690             <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">!=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
691                 <span class="bp">self</span><span class="o">.</span><span class="n">do_fail</span><span class="p">()</span>
692 </div>
693 <div class="viewcode-block" id="ResourceManager.set"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set">[docs]</a>    <span class="k">def</span> <span class="nf">set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
694         <span class="sd">&quot;&quot;&quot; Set the value of the attribute</span>
695
696 <span class="sd">        :param name: Name of the attribute</span>
697 <span class="sd">        :type name: str</span>
698 <span class="sd">        :param name: Value of the attribute</span>
699 <span class="sd">        :type name: str</span>
700 <span class="sd">        &quot;&quot;&quot;</span>
701         <span class="n">attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attrs</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
702         <span class="n">attr</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">value</span>
703         <span class="k">return</span> <span class="n">value</span>
704 </div>
705 <div class="viewcode-block" id="ResourceManager.get"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get">[docs]</a>    <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
706         <span class="sd">&quot;&quot;&quot; Returns the value of the attribute</span>
707
708 <span class="sd">        :param name: Name of the attribute</span>
709 <span class="sd">        :type name: str</span>
710 <span class="sd">        :rtype: str</span>
711 <span class="sd">        &quot;&quot;&quot;</span>
712         <span class="n">attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attrs</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
713
714         <span class="sd">&quot;&quot;&quot;</span>
715 <span class="sd">        A.Q. Commenting due to performance impact</span>
716 <span class="sd">        if attr.has_flag(Flags.Global):</span>
717 <span class="sd">            self.warning( &quot;Attribute %s is global. Use get_global instead.&quot; % name)</span>
718 <span class="sd">        &quot;&quot;&quot;</span>
719             
720         <span class="k">return</span> <span class="n">attr</span><span class="o">.</span><span class="n">value</span>
721 </div>
722 <div class="viewcode-block" id="ResourceManager.has_changed"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.has_changed">[docs]</a>    <span class="k">def</span> <span class="nf">has_changed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
723         <span class="sd">&quot;&quot;&quot; Returns the True is the value of the attribute</span>
724 <span class="sd">            has been modified by the user.</span>
725
726 <span class="sd">        :param name: Name of the attribute</span>
727 <span class="sd">        :type name: str</span>
728 <span class="sd">        :rtype: str</span>
729 <span class="sd">        &quot;&quot;&quot;</span>
730         <span class="n">attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attrs</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
731         <span class="k">return</span> <span class="n">attr</span><span class="o">.</span><span class="n">has_changed</span>
732 </div>
733 <div class="viewcode-block" id="ResourceManager.has_flag"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.has_flag">[docs]</a>    <span class="k">def</span> <span class="nf">has_flag</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">flag</span><span class="p">):</span>
734         <span class="sd">&quot;&quot;&quot; Returns true if the attribute has the flag &#39;flag&#39;</span>
735
736 <span class="sd">        :param flag: Flag to be checked</span>
737 <span class="sd">        :type flag: Flags</span>
738 <span class="sd">        &quot;&quot;&quot;</span>
739         <span class="n">attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attrs</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
740         <span class="k">return</span> <span class="n">attr</span><span class="o">.</span><span class="n">has_flag</span><span class="p">(</span><span class="n">flag</span><span class="p">)</span>
741 </div>
742 <div class="viewcode-block" id="ResourceManager.has_attribute"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.has_attribute">[docs]</a>    <span class="k">def</span> <span class="nf">has_attribute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
743         <span class="sd">&quot;&quot;&quot; Returns true if the RM has an attribute with name</span>
744
745 <span class="sd">        :param name: name of the attribute</span>
746 <span class="sd">        :type name: string</span>
747 <span class="sd">        &quot;&quot;&quot;</span>
748         <span class="k">return</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attrs</span>
749 </div>
750 <div class="viewcode-block" id="ResourceManager.enable_trace"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.enable_trace">[docs]</a>    <span class="k">def</span> <span class="nf">enable_trace</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
751         <span class="sd">&quot;&quot;&quot; Explicitly enable trace generation</span>
752
753 <span class="sd">        :param name: Name of the trace</span>
754 <span class="sd">        :type name: str</span>
755 <span class="sd">        &quot;&quot;&quot;</span>
756         <span class="n">trace</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_trcs</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
757         <span class="n">trace</span><span class="o">.</span><span class="n">enabled</span> <span class="o">=</span> <span class="bp">True</span>
758     </div>
759 <div class="viewcode-block" id="ResourceManager.trace_enabled"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.trace_enabled">[docs]</a>    <span class="k">def</span> <span class="nf">trace_enabled</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
760         <span class="sd">&quot;&quot;&quot;Returns True if trace is enables </span>
761
762 <span class="sd">        :param name: Name of the trace</span>
763 <span class="sd">        :type name: str</span>
764 <span class="sd">        &quot;&quot;&quot;</span>
765         <span class="n">trace</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_trcs</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
766         <span class="k">return</span> <span class="n">trace</span><span class="o">.</span><span class="n">enabled</span>
767  </div>
768 <div class="viewcode-block" id="ResourceManager.trace"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.trace">[docs]</a>    <span class="k">def</span> <span class="nf">trace</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">attr</span> <span class="o">=</span> <span class="n">TraceAttr</span><span class="o">.</span><span class="n">ALL</span><span class="p">,</span> <span class="n">block</span> <span class="o">=</span> <span class="mi">512</span><span class="p">,</span> <span class="n">offset</span> <span class="o">=</span> <span class="mi">0</span><span class="p">):</span>
769         <span class="sd">&quot;&quot;&quot; Get information on collected trace</span>
770
771 <span class="sd">        :param name: Name of the trace</span>
772 <span class="sd">        :type name: str</span>
773
774 <span class="sd">        :param attr: Can be one of:</span>
775 <span class="sd">                         - TraceAttr.ALL (complete trace content), </span>
776 <span class="sd">                         - TraceAttr.STREAM (block in bytes to read starting at offset), </span>
777 <span class="sd">                         - TraceAttr.PATH (full path to the trace file),</span>
778 <span class="sd">                         - TraceAttr.SIZE (size of trace file). </span>
779 <span class="sd">        :type attr: str</span>
780
781 <span class="sd">        :param block: Number of bytes to retrieve from trace, when attr is TraceAttr.STREAM </span>
782 <span class="sd">        :type name: int</span>
783
784 <span class="sd">        :param offset: Number of &#39;blocks&#39; to skip, when attr is TraceAttr.STREAM </span>
785 <span class="sd">        :type name: int</span>
786
787 <span class="sd">        :rtype: str</span>
788 <span class="sd">        &quot;&quot;&quot;</span>
789         <span class="k">pass</span>
790 </div>
791 <div class="viewcode-block" id="ResourceManager.register_condition"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.register_condition">[docs]</a>    <span class="k">def</span> <span class="nf">register_condition</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
792         <span class="sd">&quot;&quot;&quot; Registers a condition on the resource manager to allow execution </span>
793 <span class="sd">        of &#39;action&#39; only after &#39;time&#39; has elapsed from the moment all resources </span>
794 <span class="sd">        in &#39;group&#39; reached state &#39;state&#39;</span>
795
796 <span class="sd">        :param action: Action to restrict to condition (either &#39;START&#39; or &#39;STOP&#39;)</span>
797 <span class="sd">        :type action: str</span>
798 <span class="sd">        :param group: Group of RMs to wait for (list of guids)</span>
799 <span class="sd">        :type group: int or list of int</span>
800 <span class="sd">        :param state: State to wait for on all RM in group. (either &#39;STARTED&#39;, &#39;STOPPED&#39; or &#39;READY&#39;)</span>
801 <span class="sd">        :type state: str</span>
802 <span class="sd">        :param time: Time to wait after &#39;state&#39; is reached on all RMs in group. (e.g. &#39;2s&#39;)</span>
803 <span class="sd">        :type time: str</span>
804
805 <span class="sd">        &quot;&quot;&quot;</span>
806
807         <span class="k">if</span> <span class="ow">not</span> <span class="n">action</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">conditions</span><span class="p">:</span>
808             <span class="bp">self</span><span class="o">.</span><span class="n">_conditions</span><span class="p">[</span><span class="n">action</span><span class="p">]</span> <span class="o">=</span> <span class="nb">list</span><span class="p">()</span>
809         
810         <span class="n">conditions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">conditions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
811
812         <span class="c"># For each condition to register a tuple of (group, state, time) is </span>
813         <span class="c"># added to the &#39;action&#39; list</span>
814         <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">group</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
815             <span class="n">group</span> <span class="o">=</span> <span class="p">[</span><span class="n">group</span><span class="p">]</span>
816
817         <span class="n">conditions</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">))</span>
818 </div>
819 <div class="viewcode-block" id="ResourceManager.unregister_condition"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.unregister_condition">[docs]</a>    <span class="k">def</span> <span class="nf">unregister_condition</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">group</span><span class="p">,</span> <span class="n">action</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
820         <span class="sd">&quot;&quot;&quot; Removed conditions for a certain group of guids</span>
821
822 <span class="sd">        :param action: Action to restrict to condition (either &#39;START&#39;, &#39;STOP&#39; or &#39;READY&#39;)</span>
823 <span class="sd">        :type action: str</span>
824
825 <span class="sd">        :param group: Group of RMs to wait for (list of guids)</span>
826 <span class="sd">        :type group: int or list of int</span>
827
828 <span class="sd">        &quot;&quot;&quot;</span>
829         <span class="c"># For each condition a tuple of (group, state, time) is </span>
830         <span class="c"># added to the &#39;action&#39; list</span>
831         <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">group</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
832             <span class="n">group</span> <span class="o">=</span> <span class="p">[</span><span class="n">group</span><span class="p">]</span>
833
834         <span class="k">for</span> <span class="n">act</span><span class="p">,</span> <span class="n">conditions</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">conditions</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
835             <span class="k">if</span> <span class="n">action</span> <span class="ow">and</span> <span class="n">act</span> <span class="o">!=</span> <span class="n">action</span><span class="p">:</span>
836                 <span class="k">continue</span>
837
838             <span class="k">for</span> <span class="n">condition</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">conditions</span><span class="p">):</span>
839                 <span class="p">(</span><span class="n">grp</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span> <span class="o">=</span> <span class="n">condition</span>
840
841                 <span class="c"># If there is an intersection between grp and group,</span>
842                 <span class="c"># then remove intersected elements</span>
843                 <span class="n">intsec</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">group</span><span class="p">)</span><span class="o">.</span><span class="n">intersection</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">grp</span><span class="p">))</span>
844                 <span class="k">if</span> <span class="n">intsec</span><span class="p">:</span>
845                     <span class="n">idx</span> <span class="o">=</span> <span class="n">conditions</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">condition</span><span class="p">)</span>
846                     <span class="n">newgrp</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">grp</span><span class="p">)</span>
847                     <span class="n">newgrp</span><span class="o">.</span><span class="n">difference_update</span><span class="p">(</span><span class="n">intsec</span><span class="p">)</span>
848                     <span class="n">conditions</span><span class="p">[</span><span class="n">idx</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">newgrp</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
849                  </div>
850 <div class="viewcode-block" id="ResourceManager.get_connected"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_connected">[docs]</a>    <span class="k">def</span> <span class="nf">get_connected</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rtype</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
851         <span class="sd">&quot;&quot;&quot; Returns the list of RM with the type &#39;rtype&#39;</span>
852
853 <span class="sd">        :param rtype: Type of the RM we look for</span>
854 <span class="sd">        :type rtype: str</span>
855 <span class="sd">        :return: list of guid</span>
856 <span class="sd">        &quot;&quot;&quot;</span>
857         <span class="n">connected</span> <span class="o">=</span> <span class="p">[]</span>
858         <span class="n">rclass</span> <span class="o">=</span> <span class="n">ResourceFactory</span><span class="o">.</span><span class="n">get_resource_type</span><span class="p">(</span><span class="n">rtype</span><span class="p">)</span>
859         <span class="k">for</span> <span class="n">guid</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">connections</span><span class="p">:</span>
860             <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
861             <span class="k">if</span> <span class="ow">not</span> <span class="n">rtype</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">rm</span><span class="p">,</span> <span class="n">rclass</span><span class="p">):</span>
862                 <span class="n">connected</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">rm</span><span class="p">)</span>
863         <span class="k">return</span> <span class="n">connected</span>
864 </div>
865 <div class="viewcode-block" id="ResourceManager.is_rm_instance"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.is_rm_instance">[docs]</a>    <span class="k">def</span> <span class="nf">is_rm_instance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rtype</span><span class="p">):</span>
866         <span class="sd">&quot;&quot;&quot; Returns True if the RM is instance of &#39;rtype&#39;</span>
867
868 <span class="sd">        :param rtype: Type of the RM we look for</span>
869 <span class="sd">        :type rtype: str</span>
870 <span class="sd">        :return: True|False</span>
871 <span class="sd">        &quot;&quot;&quot;</span>
872         <span class="n">rclass</span> <span class="o">=</span> <span class="n">ResourceFactory</span><span class="o">.</span><span class="n">get_resource_type</span><span class="p">(</span><span class="n">rtype</span><span class="p">)</span>
873         <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rclass</span><span class="p">):</span>
874             <span class="k">return</span> <span class="bp">True</span>
875         <span class="k">return</span> <span class="bp">False</span>
876 </div>
877     <span class="nd">@failtrap</span>
878     <span class="k">def</span> <span class="nf">_needs_reschedule</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">):</span>
879         <span class="sd">&quot;&quot;&quot; Internal method that verify if &#39;time&#39; has elapsed since </span>
880 <span class="sd">        all elements in &#39;group&#39; have reached state &#39;state&#39;.</span>
881
882 <span class="sd">        :param group: Group of RMs to wait for (list of guids)</span>
883 <span class="sd">        :type group: int or list of int</span>
884 <span class="sd">        :param state: State to wait for on all RM in group. (either &#39;STARTED&#39;, &#39;STOPPED&#39; or &#39;READY&#39;)</span>
885 <span class="sd">        :type state: str</span>
886 <span class="sd">        :param time: Time to wait after &#39;state&#39; is reached on all RMs in group. (e.g. &#39;2s&#39;)</span>
887 <span class="sd">        :type time: str</span>
888
889 <span class="sd">        .. note : time should be written like &quot;2s&quot; or &quot;3m&quot; with s for seconds, m for minutes, h for hours, ...</span>
890 <span class="sd">        If for example, you need to wait 2min 30sec, time could be &quot;150s&quot; or &quot;2.5m&quot;.</span>
891 <span class="sd">        For the moment, 2m30s is not a correct syntax.</span>
892
893 <span class="sd">        &quot;&quot;&quot;</span>
894         <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">False</span>
895         <span class="n">delay</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span> 
896
897         <span class="c"># check state and time elapsed on all RMs</span>
898         <span class="k">for</span> <span class="n">guid</span> <span class="ow">in</span> <span class="n">group</span><span class="p">:</span>
899             <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
900             
901             <span class="c"># If one of the RMs this resource needs to wait for has FAILED</span>
902             <span class="c"># and is critical we raise an exception</span>
903             <span class="k">if</span> <span class="n">rm</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
904                 <span class="k">if</span> <span class="ow">not</span> <span class="n">rm</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;critical&#39;</span><span class="p">):</span>
905                     <span class="k">continue</span>
906                 <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Resource can not wait for FAILED RM </span><span class="si">%d</span><span class="s">. Setting Resource to FAILED&quot;</span>
907                 <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
908
909             <span class="c"># If the RM state is lower than the requested state we must</span>
910             <span class="c"># reschedule (e.g. if RM is READY but we required STARTED).</span>
911             <span class="k">if</span> <span class="n">rm</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">state</span><span class="p">:</span>
912                 <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">True</span>
913                 <span class="k">break</span>
914
915             <span class="c"># If there is a time restriction, we must verify the</span>
916             <span class="c"># restriction is satisfied </span>
917             <span class="k">if</span> <span class="n">time</span><span class="p">:</span>
918                 <span class="k">if</span> <span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">DISCOVERED</span><span class="p">:</span>
919                     <span class="n">t</span> <span class="o">=</span> <span class="n">rm</span><span class="o">.</span><span class="n">discover_time</span>
920                 <span class="k">elif</span> <span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RESERVED</span><span class="p">:</span>
921                     <span class="n">t</span> <span class="o">=</span> <span class="n">rm</span><span class="o">.</span><span class="n">reserved_time</span>
922                 <span class="k">elif</span> <span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">PROVISIONED</span><span class="p">:</span>
923                     <span class="n">t</span> <span class="o">=</span> <span class="n">rm</span><span class="o">.</span><span class="n">provision_time</span>
924                 <span class="k">elif</span> <span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
925                     <span class="n">t</span> <span class="o">=</span> <span class="n">rm</span><span class="o">.</span><span class="n">ready_time</span>
926                 <span class="k">elif</span> <span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
927                     <span class="n">t</span> <span class="o">=</span> <span class="n">rm</span><span class="o">.</span><span class="n">start_time</span>
928                 <span class="k">elif</span> <span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STOPPED</span><span class="p">:</span>
929                     <span class="n">t</span> <span class="o">=</span> <span class="n">rm</span><span class="o">.</span><span class="n">stop_time</span>
930                 <span class="k">elif</span> <span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
931                     <span class="n">t</span> <span class="o">=</span> <span class="n">rm</span><span class="o">.</span><span class="n">release_time</span>
932                 <span class="k">else</span><span class="p">:</span>
933                     <span class="k">break</span>
934
935                 <span class="c"># time already elapsed since RM changed state</span>
936                 <span class="n">waited</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%f</span><span class="s">s&quot;</span> <span class="o">%</span> <span class="n">tdiffsec</span><span class="p">(</span><span class="n">tnow</span><span class="p">(),</span> <span class="n">t</span><span class="p">)</span>
937
938                 <span class="c"># time still to wait</span>
939                 <span class="n">wait</span> <span class="o">=</span> <span class="n">tdiffsec</span><span class="p">(</span><span class="n">stabsformat</span><span class="p">(</span><span class="n">time</span><span class="p">),</span> <span class="n">stabsformat</span><span class="p">(</span><span class="n">waited</span><span class="p">))</span>
940
941                 <span class="k">if</span> <span class="n">wait</span> <span class="o">&gt;</span> <span class="mf">0.001</span><span class="p">:</span>
942                     <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">True</span>
943                     <span class="n">delay</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%f</span><span class="s">s&quot;</span> <span class="o">%</span> <span class="n">wait</span>
944                     <span class="k">break</span>
945
946         <span class="k">return</span> <span class="n">reschedule</span><span class="p">,</span> <span class="n">delay</span>
947
948 <div class="viewcode-block" id="ResourceManager.set_with_conditions"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_with_conditions">[docs]</a>    <span class="k">def</span> <span class="nf">set_with_conditions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">):</span>
949         <span class="sd">&quot;&quot;&quot; Set value &#39;value&#39; on attribute with name &#39;name&#39; when &#39;time&#39; </span>
950 <span class="sd">        has elapsed since all elements in &#39;group&#39; have reached state</span>
951 <span class="sd">        &#39;state&#39;</span>
952
953 <span class="sd">        :param name: Name of the attribute to set</span>
954 <span class="sd">        :type name: str</span>
955 <span class="sd">        :param name: Value of the attribute to set</span>
956 <span class="sd">        :type name: str</span>
957 <span class="sd">        :param group: Group of RMs to wait for (list of guids)</span>
958 <span class="sd">        :type group: int or list of int</span>
959 <span class="sd">        :param state: State to wait for on all RM in group. (either &#39;STARTED&#39;, &#39;STOPPED&#39; or &#39;READY&#39;)</span>
960 <span class="sd">        :type state: str</span>
961 <span class="sd">        :param time: Time to wait after &#39;state&#39; is reached on all RMs in group. (e.g. &#39;2s&#39;)</span>
962 <span class="sd">        :type time: str</span>
963 <span class="sd">        &quot;&quot;&quot;</span>
964
965         <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">False</span>
966         <span class="n">delay</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span> 
967
968         <span class="c">## evaluate if set conditions are met</span>
969
970         <span class="c"># only can set with conditions after the RM is started</span>
971         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">!=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
972             <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">True</span>
973         <span class="k">else</span><span class="p">:</span>
974             <span class="n">reschedule</span><span class="p">,</span> <span class="n">delay</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_needs_reschedule</span><span class="p">(</span><span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
975
976         <span class="k">if</span> <span class="n">reschedule</span><span class="p">:</span>
977             <span class="n">callback</span> <span class="o">=</span> <span class="n">functools</span><span class="o">.</span><span class="n">partial</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">set_with_conditions</span><span class="p">,</span> 
978                     <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
979             <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="n">delay</span><span class="p">,</span> <span class="n">callback</span><span class="p">)</span>
980         <span class="k">else</span><span class="p">:</span>
981             <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
982 </div>
983 <div class="viewcode-block" id="ResourceManager.start_with_conditions"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.start_with_conditions">[docs]</a>    <span class="k">def</span> <span class="nf">start_with_conditions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
984         <span class="sd">&quot;&quot;&quot; Starts RM when all the conditions in self.conditions for</span>
985 <span class="sd">        action &#39;START&#39; are satisfied.</span>
986
987 <span class="sd">        &quot;&quot;&quot;</span>
988         <span class="c">#import pdb;pdb.set_trace()</span>
989
990         <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">False</span>
991         <span class="n">delay</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span> 
992
993
994         <span class="c">## evaluate if conditions to start are met</span>
995         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">abort</span><span class="p">:</span>
996             <span class="k">return</span> 
997
998         <span class="c"># Can only start when RM is either STOPPED or READY</span>
999         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">STOPPED</span><span class="p">,</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">]:</span>
1000             <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">True</span>
1001             <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- RESCHEDULING START ---- state </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="p">)</span>
1002         <span class="k">else</span><span class="p">:</span>
1003             <span class="n">start_conditions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">conditions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">ResourceAction</span><span class="o">.</span><span class="n">START</span><span class="p">,</span> <span class="p">[])</span>
1004             
1005             <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- START CONDITIONS ---- </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">start_conditions</span><span class="p">)</span> 
1006             
1007             <span class="c"># Verify all start conditions are met</span>
1008             <span class="k">for</span> <span class="p">(</span><span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span> <span class="ow">in</span> <span class="n">start_conditions</span><span class="p">:</span>
1009                 <span class="c"># Uncomment for debug</span>
1010                 <span class="c">#unmet = []</span>
1011                 <span class="c">#for guid in group:</span>
1012                 <span class="c">#    rm = self.ec.get_resource(guid)</span>
1013                 <span class="c">#    unmet.append((guid, rm._state))</span>
1014                 <span class="c">#</span>
1015                 <span class="c">#self.debug(&quot;---- WAITED STATES ---- %s&quot; % unmet )</span>
1016
1017                 <span class="n">reschedule</span><span class="p">,</span> <span class="n">delay</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_needs_reschedule</span><span class="p">(</span><span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
1018                 <span class="k">if</span> <span class="n">reschedule</span><span class="p">:</span>
1019                     <span class="k">break</span>
1020
1021         <span class="k">if</span> <span class="n">reschedule</span><span class="p">:</span>
1022             <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="n">delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">start_with_conditions</span><span class="p">)</span>
1023         <span class="k">else</span><span class="p">:</span>
1024             <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;----- STARTING ---- &quot;</span><span class="p">)</span>
1025             <span class="bp">self</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
1026 </div>
1027 <div class="viewcode-block" id="ResourceManager.stop_with_conditions"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.stop_with_conditions">[docs]</a>    <span class="k">def</span> <span class="nf">stop_with_conditions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1028         <span class="sd">&quot;&quot;&quot; Stops RM when all the conditions in self.conditions for</span>
1029 <span class="sd">        action &#39;STOP&#39; are satisfied.</span>
1030
1031 <span class="sd">        &quot;&quot;&quot;</span>
1032         <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">False</span>
1033         <span class="n">delay</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span> 
1034
1035         <span class="c">## evaluate if conditions to stop are met</span>
1036         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">abort</span><span class="p">:</span>
1037             <span class="k">return</span> 
1038
1039         <span class="c"># only can stop when RM is STARTED</span>
1040         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">!=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
1041             <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">True</span>
1042             <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- RESCHEDULING STOP ---- state </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="p">)</span>
1043         <span class="k">else</span><span class="p">:</span>
1044             <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot; ---- STOP CONDITIONS ---- </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> 
1045                     <span class="bp">self</span><span class="o">.</span><span class="n">conditions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">ResourceAction</span><span class="o">.</span><span class="n">STOP</span><span class="p">))</span>
1046
1047             <span class="n">stop_conditions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">conditions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">ResourceAction</span><span class="o">.</span><span class="n">STOP</span><span class="p">,</span> <span class="p">[])</span> 
1048             <span class="k">for</span> <span class="p">(</span><span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span> <span class="ow">in</span> <span class="n">stop_conditions</span><span class="p">:</span>
1049                 <span class="n">reschedule</span><span class="p">,</span> <span class="n">delay</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_needs_reschedule</span><span class="p">(</span><span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
1050                 <span class="k">if</span> <span class="n">reschedule</span><span class="p">:</span>
1051                     <span class="k">break</span>
1052
1053         <span class="k">if</span> <span class="n">reschedule</span><span class="p">:</span>
1054             <span class="n">callback</span> <span class="o">=</span> <span class="n">functools</span><span class="o">.</span><span class="n">partial</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">stop_with_conditions</span><span class="p">)</span>
1055             <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="n">delay</span><span class="p">,</span> <span class="n">callback</span><span class="p">)</span>
1056         <span class="k">else</span><span class="p">:</span>
1057             <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot; ----- STOPPING ---- &quot;</span><span class="p">)</span> 
1058             <span class="bp">self</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span>
1059 </div>
1060 <div class="viewcode-block" id="ResourceManager.deploy_with_conditions"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.deploy_with_conditions">[docs]</a>    <span class="k">def</span> <span class="nf">deploy_with_conditions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1061         <span class="sd">&quot;&quot;&quot; Deploy RM when all the conditions in self.conditions for</span>
1062 <span class="sd">        action &#39;READY&#39; are satisfied.</span>
1063
1064 <span class="sd">        &quot;&quot;&quot;</span>
1065         <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">False</span>
1066         <span class="n">delay</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span> 
1067
1068         <span class="c">## evaluate if conditions to deploy are met</span>
1069         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">abort</span><span class="p">:</span>
1070             <span class="k">return</span> 
1071
1072         <span class="c"># only can deploy when RM is either NEW, DISCOVERED or PROVISIONED </span>
1073         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">NEW</span><span class="p">,</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">DISCOVERED</span><span class="p">,</span>
1074                 <span class="n">ResourceState</span><span class="o">.</span><span class="n">RESERVED</span><span class="p">,</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">PROVISIONED</span><span class="p">]:</span>
1075             <span class="c">#### XXX: A.Q. IT SHOULD FAIL IF DEPLOY IS CALLED IN OTHER STATES!</span>
1076             <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">True</span>
1077             <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- RESCHEDULING DEPLOY ---- state </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="p">)</span>
1078         <span class="k">else</span><span class="p">:</span>
1079             <span class="n">deploy_conditions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">conditions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">ResourceAction</span><span class="o">.</span><span class="n">DEPLOY</span><span class="p">,</span> <span class="p">[])</span>
1080             
1081             <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- DEPLOY CONDITIONS ---- </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">deploy_conditions</span><span class="p">)</span> 
1082             
1083             <span class="c"># Verify all start conditions are met</span>
1084             <span class="k">for</span> <span class="p">(</span><span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span> <span class="ow">in</span> <span class="n">deploy_conditions</span><span class="p">:</span>
1085                 <span class="c"># Uncomment for debug</span>
1086                 <span class="c">#unmet = []</span>
1087                 <span class="c">#for guid in group:</span>
1088                 <span class="c">#    rm = self.ec.get_resource(guid)</span>
1089                 <span class="c">#    unmet.append((guid, rm._state))</span>
1090                 
1091                 <span class="c">#self.debug(&quot;---- WAITED STATES ---- %s&quot; % unmet )</span>
1092
1093                 <span class="n">reschedule</span><span class="p">,</span> <span class="n">delay</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_needs_reschedule</span><span class="p">(</span><span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
1094                 <span class="k">if</span> <span class="n">reschedule</span><span class="p">:</span>
1095                     <span class="k">break</span>
1096
1097         <span class="k">if</span> <span class="n">reschedule</span><span class="p">:</span>
1098             <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="n">delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy_with_conditions</span><span class="p">)</span>
1099         <span class="k">else</span><span class="p">:</span>
1100             <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;----- DEPLOYING ---- &quot;</span><span class="p">)</span>
1101             <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">()</span>
1102 </div>
1103 <div class="viewcode-block" id="ResourceManager.do_connect"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_connect">[docs]</a>    <span class="k">def</span> <span class="nf">do_connect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
1104         <span class="sd">&quot;&quot;&quot; Performs actions that need to be taken upon associating RMs.</span>
1105 <span class="sd">        This method should be redefined when necessary in child classes.</span>
1106 <span class="sd">        &quot;&quot;&quot;</span>
1107         <span class="k">pass</span>
1108 </div>
1109 <div class="viewcode-block" id="ResourceManager.do_disconnect"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_disconnect">[docs]</a>    <span class="k">def</span> <span class="nf">do_disconnect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
1110         <span class="sd">&quot;&quot;&quot; Performs actions that need to be taken upon disassociating RMs.</span>
1111 <span class="sd">        This method should be redefined when necessary in child classes.</span>
1112 <span class="sd">        &quot;&quot;&quot;</span>
1113         <span class="k">pass</span>
1114 </div>
1115 <div class="viewcode-block" id="ResourceManager.valid_connection"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
1116         <span class="sd">&quot;&quot;&quot;Checks whether a connection with the other RM</span>
1117 <span class="sd">        is valid.</span>
1118 <span class="sd">        This method need to be redefined by each new Resource Manager.</span>
1119
1120 <span class="sd">        :param guid: Guid of the current Resource Manager</span>
1121 <span class="sd">        :type guid: int</span>
1122 <span class="sd">        :rtype:  Boolean</span>
1123
1124 <span class="sd">        &quot;&quot;&quot;</span>
1125         <span class="c"># TODO: Validate!</span>
1126         <span class="k">return</span> <span class="bp">True</span>
1127 </div>
1128 <div class="viewcode-block" id="ResourceManager.do_discover"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_discover">[docs]</a>    <span class="k">def</span> <span class="nf">do_discover</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1129         <span class="bp">self</span><span class="o">.</span><span class="n">set_discovered</span><span class="p">()</span>
1130 </div>
1131 <div class="viewcode-block" id="ResourceManager.do_reserve"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_reserve">[docs]</a>    <span class="k">def</span> <span class="nf">do_reserve</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1132         <span class="bp">self</span><span class="o">.</span><span class="n">set_reserved</span><span class="p">()</span>
1133 </div>
1134 <div class="viewcode-block" id="ResourceManager.do_provision"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_provision">[docs]</a>    <span class="k">def</span> <span class="nf">do_provision</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1135         <span class="bp">self</span><span class="o">.</span><span class="n">set_provisioned</span><span class="p">()</span>
1136 </div>
1137 <div class="viewcode-block" id="ResourceManager.do_configure"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_configure">[docs]</a>    <span class="k">def</span> <span class="nf">do_configure</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1138         <span class="k">pass</span>
1139 </div>
1140 <div class="viewcode-block" id="ResourceManager.do_start"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_start">[docs]</a>    <span class="k">def</span> <span class="nf">do_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1141         <span class="bp">self</span><span class="o">.</span><span class="n">set_started</span><span class="p">()</span>
1142 </div>
1143 <div class="viewcode-block" id="ResourceManager.do_stop"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_stop">[docs]</a>    <span class="k">def</span> <span class="nf">do_stop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1144         <span class="bp">self</span><span class="o">.</span><span class="n">set_stopped</span><span class="p">()</span>
1145 </div>
1146 <div class="viewcode-block" id="ResourceManager.do_deploy"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1147         <span class="bp">self</span><span class="o">.</span><span class="n">set_ready</span><span class="p">()</span>
1148 </div>
1149 <div class="viewcode-block" id="ResourceManager.do_release"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_release">[docs]</a>    <span class="k">def</span> <span class="nf">do_release</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1150         <span class="bp">self</span><span class="o">.</span><span class="n">set_released</span><span class="p">()</span>
1151 </div>
1152 <div class="viewcode-block" id="ResourceManager.do_fail"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_fail">[docs]</a>    <span class="k">def</span> <span class="nf">do_fail</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1153         <span class="bp">self</span><span class="o">.</span><span class="n">set_failed</span><span class="p">()</span>
1154         <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">inform_failure</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">)</span>
1155 </div>
1156 <div class="viewcode-block" id="ResourceManager.set_started"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_started">[docs]</a>    <span class="k">def</span> <span class="nf">set_started</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
1157         <span class="sd">&quot;&quot;&quot; Mark ResourceManager as STARTED &quot;&quot;&quot;</span>
1158         <span class="bp">self</span><span class="o">.</span><span class="n">set_state</span><span class="p">(</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">,</span> <span class="s">&quot;_start_time&quot;</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
1159         <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;----- STARTED ---- &quot;</span><span class="p">)</span>
1160 </div>
1161 <div class="viewcode-block" id="ResourceManager.set_stopped"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_stopped">[docs]</a>    <span class="k">def</span> <span class="nf">set_stopped</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
1162         <span class="sd">&quot;&quot;&quot; Mark ResourceManager as STOPPED &quot;&quot;&quot;</span>
1163         <span class="bp">self</span><span class="o">.</span><span class="n">set_state</span><span class="p">(</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">STOPPED</span><span class="p">,</span> <span class="s">&quot;_stop_time&quot;</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
1164         <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;----- STOPPED ---- &quot;</span><span class="p">)</span>
1165 </div>
1166 <div class="viewcode-block" id="ResourceManager.set_ready"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_ready">[docs]</a>    <span class="k">def</span> <span class="nf">set_ready</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
1167         <span class="sd">&quot;&quot;&quot; Mark ResourceManager as READY &quot;&quot;&quot;</span>
1168         <span class="bp">self</span><span class="o">.</span><span class="n">set_state</span><span class="p">(</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">,</span> <span class="s">&quot;_ready_time&quot;</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
1169         <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;----- READY ---- &quot;</span><span class="p">)</span>
1170 </div>
1171 <div class="viewcode-block" id="ResourceManager.set_released"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_released">[docs]</a>    <span class="k">def</span> <span class="nf">set_released</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
1172         <span class="sd">&quot;&quot;&quot; Mark ResourceManager as REALEASED &quot;&quot;&quot;</span>
1173         <span class="bp">self</span><span class="o">.</span><span class="n">set_state</span><span class="p">(</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">,</span> <span class="s">&quot;_release_time&quot;</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
1174
1175         <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; </span><span class="si">%s</span><span class="s"> guid </span><span class="si">%d</span><span class="s"> ----- RELEASED ----- &quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_rtype</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">)</span>
1176         <span class="n">logger</span> <span class="o">=</span> <span class="n">Logger</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_rtype</span><span class="p">)</span>
1177         <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
1178 </div>
1179 <div class="viewcode-block" id="ResourceManager.set_failed"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_failed">[docs]</a>    <span class="k">def</span> <span class="nf">set_failed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
1180         <span class="sd">&quot;&quot;&quot; Mark ResourceManager as FAILED &quot;&quot;&quot;</span>
1181         <span class="bp">self</span><span class="o">.</span><span class="n">set_state</span><span class="p">(</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">FAILED</span><span class="p">,</span> <span class="s">&quot;_failed_time&quot;</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
1182
1183         <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; </span><span class="si">%s</span><span class="s"> guid </span><span class="si">%d</span><span class="s"> ----- FAILED ----- &quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_rtype</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">)</span>
1184         <span class="n">logger</span> <span class="o">=</span> <span class="n">Logger</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_rtype</span><span class="p">)</span>
1185         <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
1186 </div>
1187 <div class="viewcode-block" id="ResourceManager.set_discovered"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_discovered">[docs]</a>    <span class="k">def</span> <span class="nf">set_discovered</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
1188         <span class="sd">&quot;&quot;&quot; Mark ResourceManager as DISCOVERED &quot;&quot;&quot;</span>
1189         <span class="bp">self</span><span class="o">.</span><span class="n">set_state</span><span class="p">(</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">DISCOVERED</span><span class="p">,</span> <span class="s">&quot;_discover_time&quot;</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
1190         <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;----- DISCOVERED ---- &quot;</span><span class="p">)</span>
1191 </div>
1192 <div class="viewcode-block" id="ResourceManager.set_reserved"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_reserved">[docs]</a>    <span class="k">def</span> <span class="nf">set_reserved</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
1193         <span class="sd">&quot;&quot;&quot; Mark ResourceManager as RESERVED &quot;&quot;&quot;</span>
1194         <span class="bp">self</span><span class="o">.</span><span class="n">set_state</span><span class="p">(</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">RESERVED</span><span class="p">,</span> <span class="s">&quot;_reserved_time&quot;</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
1195         <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;----- RESERVED ---- &quot;</span><span class="p">)</span>
1196 </div>
1197 <div class="viewcode-block" id="ResourceManager.set_provisioned"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_provisioned">[docs]</a>    <span class="k">def</span> <span class="nf">set_provisioned</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
1198         <span class="sd">&quot;&quot;&quot; Mark ResourceManager as PROVISIONED &quot;&quot;&quot;</span>
1199         <span class="bp">self</span><span class="o">.</span><span class="n">set_state</span><span class="p">(</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">PROVISIONED</span><span class="p">,</span> <span class="s">&quot;_provision_time&quot;</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
1200         <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;----- PROVISIONED ---- &quot;</span><span class="p">)</span>
1201 </div>
1202 <div class="viewcode-block" id="ResourceManager.set_state"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_state">[docs]</a>    <span class="k">def</span> <span class="nf">set_state</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">state_time_attr</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
1203         <span class="sd">&quot;&quot;&quot; Set the state of the RM while keeping a trace of the time &quot;&quot;&quot;</span>
1204
1205         <span class="c"># Ensure that RM state will not change after released</span>
1206         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
1207             <span class="k">return</span> 
1208
1209         <span class="n">time</span> <span class="o">=</span> <span class="n">time</span> <span class="ow">or</span> <span class="n">tnow</span><span class="p">()</span>
1210         <span class="bp">self</span><span class="o">.</span><span class="n">set_state_time</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">state_time_attr</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
1211   </div>
1212 <div class="viewcode-block" id="ResourceManager.set_state_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_state_time">[docs]</a>    <span class="k">def</span> <span class="nf">set_state_time</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">state_time_attr</span><span class="p">,</span> <span class="n">time</span><span class="p">):</span>
1213         <span class="sd">&quot;&quot;&quot; Set the time for the RM state change &quot;&quot;&quot;</span>
1214         <span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state_time_attr</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
1215         <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">=</span> <span class="n">state</span>
1216 </div></div>
1217 <div class="viewcode-block" id="ResourceFactory"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceFactory">[docs]</a><span class="k">class</span> <span class="nc">ResourceFactory</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
1218     <span class="n">_resource_types</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
1219
1220     <span class="nd">@classmethod</span>
1221 <div class="viewcode-block" id="ResourceFactory.resource_types"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceFactory.resource_types">[docs]</a>    <span class="k">def</span> <span class="nf">resource_types</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
1222         <span class="sd">&quot;&quot;&quot;Return the type of the Class&quot;&quot;&quot;</span>
1223         <span class="k">return</span> <span class="n">cls</span><span class="o">.</span><span class="n">_resource_types</span>
1224 </div>
1225     <span class="nd">@classmethod</span>
1226 <div class="viewcode-block" id="ResourceFactory.get_resource_type"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceFactory.get_resource_type">[docs]</a>    <span class="k">def</span> <span class="nf">get_resource_type</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">rtype</span><span class="p">):</span>
1227         <span class="sd">&quot;&quot;&quot;Return the type of the Class&quot;&quot;&quot;</span>
1228         <span class="k">return</span> <span class="n">cls</span><span class="o">.</span><span class="n">_resource_types</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">rtype</span><span class="p">)</span>
1229 </div>
1230     <span class="nd">@classmethod</span>
1231 <div class="viewcode-block" id="ResourceFactory.register_type"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceFactory.register_type">[docs]</a>    <span class="k">def</span> <span class="nf">register_type</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">rclass</span><span class="p">):</span>
1232         <span class="sd">&quot;&quot;&quot;Register a new Ressource Manager&quot;&quot;&quot;</span>
1233         <span class="n">cls</span><span class="o">.</span><span class="n">_resource_types</span><span class="p">[</span><span class="n">rclass</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">()]</span> <span class="o">=</span> <span class="n">rclass</span>
1234 </div>
1235     <span class="nd">@classmethod</span>
1236 <div class="viewcode-block" id="ResourceFactory.create"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceFactory.create">[docs]</a>    <span class="k">def</span> <span class="nf">create</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">rtype</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
1237         <span class="sd">&quot;&quot;&quot;Create a new instance of a Ressource Manager&quot;&quot;&quot;</span>
1238         <span class="n">rclass</span> <span class="o">=</span> <span class="n">cls</span><span class="o">.</span><span class="n">_resource_types</span><span class="p">[</span><span class="n">rtype</span><span class="p">]</span>
1239         <span class="k">return</span> <span class="n">rclass</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
1240 </div></div>
1241 <div class="viewcode-block" id="populate_factory"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.populate_factory">[docs]</a><span class="k">def</span> <span class="nf">populate_factory</span><span class="p">():</span>
1242     <span class="sd">&quot;&quot;&quot;Find and rgister all available RMs</span>
1243 <span class="sd">    &quot;&quot;&quot;</span>
1244     <span class="c"># Once the factory is populated, don&#39;t repopulate</span>
1245     <span class="k">if</span> <span class="ow">not</span> <span class="n">ResourceFactory</span><span class="o">.</span><span class="n">resource_types</span><span class="p">():</span>
1246         <span class="k">for</span> <span class="n">rclass</span> <span class="ow">in</span> <span class="n">find_types</span><span class="p">():</span>
1247             <span class="n">ResourceFactory</span><span class="o">.</span><span class="n">register_type</span><span class="p">(</span><span class="n">rclass</span><span class="p">)</span>
1248 </div>
1249 <div class="viewcode-block" id="find_types"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.find_types">[docs]</a><span class="k">def</span> <span class="nf">find_types</span><span class="p">():</span>
1250     <span class="sd">&quot;&quot;&quot;Look into the different folders to find all the </span>
1251 <span class="sd">    availables Resources Managers</span>
1252 <span class="sd">    &quot;&quot;&quot;</span>
1253     <span class="n">search_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;NEPI_SEARCH_PATH&quot;</span><span class="p">,</span> <span class="s">&quot;&quot;</span><span class="p">)</span>
1254     <span class="n">search_path</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">search_path</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot; &quot;</span><span class="p">))</span>
1255    
1256     <span class="kn">import</span> <span class="nn">inspect</span>
1257     <span class="kn">import</span> <span class="nn">nepi.resources</span> 
1258     <span class="n">path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">nepi</span><span class="o">.</span><span class="n">resources</span><span class="o">.</span><span class="n">__file__</span><span class="p">)</span>
1259     <span class="n">search_path</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
1260
1261     <span class="n">types</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
1262
1263     <span class="k">for</span> <span class="n">importer</span><span class="p">,</span> <span class="n">modname</span><span class="p">,</span> <span class="n">ispkg</span> <span class="ow">in</span> <span class="n">pkgutil</span><span class="o">.</span><span class="n">walk_packages</span><span class="p">(</span><span class="n">search_path</span><span class="p">,</span> 
1264             <span class="n">prefix</span> <span class="o">=</span> <span class="s">&quot;nepi.resources.&quot;</span><span class="p">):</span>
1265
1266         <span class="n">loader</span> <span class="o">=</span> <span class="n">importer</span><span class="o">.</span><span class="n">find_module</span><span class="p">(</span><span class="n">modname</span><span class="p">)</span>
1267         
1268         <span class="k">try</span><span class="p">:</span>
1269             <span class="c"># Notice: Repeated calls to load_module will act as a reload of the module</span>
1270             <span class="k">if</span> <span class="n">modname</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">modules</span><span class="p">:</span>
1271                 <span class="n">module</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">modules</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">modname</span><span class="p">)</span>
1272             <span class="k">else</span><span class="p">:</span>
1273                 <span class="n">module</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">load_module</span><span class="p">(</span><span class="n">modname</span><span class="p">)</span>
1274
1275             <span class="k">for</span> <span class="n">attrname</span> <span class="ow">in</span> <span class="nb">dir</span><span class="p">(</span><span class="n">module</span><span class="p">):</span>
1276                 <span class="k">if</span> <span class="n">attrname</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&quot;_&quot;</span><span class="p">):</span>
1277                     <span class="k">continue</span>
1278
1279                 <span class="n">attr</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">attrname</span><span class="p">)</span>
1280
1281                 <span class="k">if</span> <span class="n">attr</span> <span class="o">==</span> <span class="n">ResourceManager</span><span class="p">:</span>
1282                     <span class="k">continue</span>
1283
1284                 <span class="k">if</span> <span class="ow">not</span> <span class="n">inspect</span><span class="o">.</span><span class="n">isclass</span><span class="p">(</span><span class="n">attr</span><span class="p">):</span>
1285                     <span class="k">continue</span>
1286
1287                 <span class="k">if</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">attr</span><span class="p">,</span> <span class="n">ResourceManager</span><span class="p">):</span>
1288                     <span class="n">types</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span>
1289
1290                     <span class="k">if</span> <span class="ow">not</span> <span class="n">modname</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">modules</span><span class="p">:</span>
1291                         <span class="n">sys</span><span class="o">.</span><span class="n">modules</span><span class="p">[</span><span class="n">modname</span><span class="p">]</span> <span class="o">=</span> <span class="n">module</span>
1292
1293         <span class="k">except</span><span class="p">:</span>
1294             <span class="kn">import</span> <span class="nn">traceback</span>
1295             <span class="kn">import</span> <span class="nn">logging</span>
1296             <span class="n">err</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
1297             <span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s">&quot;Resource.find_types()&quot;</span><span class="p">)</span>
1298             <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">&quot;Error while loading Resource Managers </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">err</span><span class="p">)</span>
1299
1300     <span class="k">return</span> <span class="n">types</span>
1301 </pre></div></div>
1302
1303           </div>
1304         </div>
1305       </div>
1306       <div class="clearer"></div>
1307     </div>
1308     <div class="related">
1309       <h3>Navigation</h3>
1310       <ul>
1311         <li class="right" style="margin-right: 10px">
1312           <a href="../../../genindex.html" title="General Index"
1313              >index</a></li>
1314         <li class="right" >
1315           <a href="../../../py-modindex.html" title="Python Module Index"
1316              >modules</a> |</li>
1317         <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
1318           <li><a href="../../index.html" >Module code</a> &raquo;</li> 
1319       </ul>
1320     </div>
1321     <div class="footer">
1322         &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
1323       Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
1324     </div>
1325   </body>
1326 </html>