Modifying ECCE to work with SLURM

In the ECCE file apps/siteconfig/QueueManagers, add

  1. <span class="com">#</span><span class="pln">
  2. </span><span class="typ">QueueManagers</span><span class="pun">:</span><span class="pln"> </span><span class="typ">LoadLeveler</span><span class="pln"> \
  3. </span><span class="typ">Maui</span><span class="pln"> \
  4. EASY \
  5. PBS \
  6. LSF \
  7. </span><span class="typ">Moab</span><span class="pln"> \
  8. SGE \
  9. </span><span class="typ">Shell</span><span class="pln">\
  10. </span><span class="typ">Slurm</span><span class="pln">
  11. </span><span class="com">#</span>
<span class="com">#</span><span class="pln">
</span><span class="typ">QueueManagers</span><span class="pun">:</span><span class="pln">      </span><span class="typ">LoadLeveler</span><span class="pln"> \
            </span><span class="typ">Maui</span><span class="pln"> \
            EASY \
            PBS \
            LSF \
            </span><span class="typ">Moab</span><span class="pln"> \
            SGE \
            </span><span class="typ">Shell</span><span class="pln">\
            </span><span class="typ">Slurm</span><span class="pln">

</span><span class="com">#</span>

and add this to the end of the file:

  1. <span class="com">###############################################################################</span><span class="pln">
  2. </span><span class="com"># SLURM</span><span class="pln">
  3. </span><span class="com"># Simple Linux Utility for Resource Management</span><span class="pln">
  4. </span><span class="com">#</span><span class="pln">
  5. </span><span class="com">#</span><span class="pln">
  6. </span><span class="typ">Slurm</span><span class="pun">|</span><span class="pln">submitCommand</span><span class="pun">:</span><span class="pln"> sbatch </span><span class="com">##script##</span><span class="pln">
  7. </span><span class="typ">Slurm</span><span class="pun">|</span><span class="pln">cancelCommand</span><span class="pun">:</span><span class="pln"> scancel </span><span class="com">##id##</span><span class="pln">
  8. </span><span class="typ">Slurm</span><span class="pun">|</span><span class="pln">queryJobCommand</span><span class="pun">:</span><span class="pln"> squeue
  9. </span><span class="typ">Slurm</span><span class="pun">|</span><span class="pln">queryMachineCommand</span><span class="pun">:</span><span class="pln"> sinfo </span><span class="pun">-</span><span class="pln">p </span><span class="com">##queue##</span><span class="pln">
  10. </span><span class="typ">Slurm</span><span class="pun">|</span><span class="pln">queryQueueCommand</span><span class="pun">:</span><span class="pln"> squeue </span><span class="pun">-</span><span class="pln">a
  11. </span><span class="typ">Slurm</span><span class="pun">|</span><span class="pln">queryDiskUsageCommand</span><span class="pun">:</span><span class="pln"> df </span><span class="pun">-</span><span class="pln">k
  12. </span><span class="typ">Slurm</span><span class="pun">|</span><span class="pln">jobIdParseExpression</span><span class="pun">:</span><span class="pln"> </span><span class="pun">.*</span><span class="pln">
  13. </span><span class="typ">Slurm</span><span class="pun">|</span><span class="pln">jobIdParseLeadingText</span><span class="pun">:</span><span class="pln"> job</span>
<span class="com">###############################################################################</span><span class="pln">
</span><span class="com"># SLURM</span><span class="pln">
</span><span class="com"># Simple Linux Utility for Resource Management</span><span class="pln">
</span><span class="com">#</span><span class="pln">
</span><span class="com">#</span><span class="pln">
</span><span class="typ">Slurm</span><span class="pun">|</span><span class="pln">submitCommand</span><span class="pun">:</span><span class="pln">           sbatch </span><span class="com">##script##</span><span class="pln">
</span><span class="typ">Slurm</span><span class="pun">|</span><span class="pln">cancelCommand</span><span class="pun">:</span><span class="pln">           scancel </span><span class="com">##id##</span><span class="pln">
</span><span class="typ">Slurm</span><span class="pun">|</span><span class="pln">queryJobCommand</span><span class="pun">:</span><span class="pln">         squeue
</span><span class="typ">Slurm</span><span class="pun">|</span><span class="pln">queryMachineCommand</span><span class="pun">:</span><span class="pln">     sinfo </span><span class="pun">-</span><span class="pln">p </span><span class="com">##queue##</span><span class="pln">
</span><span class="typ">Slurm</span><span class="pun">|</span><span class="pln">queryQueueCommand</span><span class="pun">:</span><span class="pln">       squeue </span><span class="pun">-</span><span class="pln">a
</span><span class="typ">Slurm</span><span class="pun">|</span><span class="pln">queryDiskUsageCommand</span><span class="pun">:</span><span class="pln">   df </span><span class="pun">-</span><span class="pln">k
</span><span class="typ">Slurm</span><span class="pun">|</span><span class="pln">jobIdParseExpression</span><span class="pun">:</span><span class="pln">    </span><span class="pun">.*</span><span class="pln">
</span><span class="typ">Slurm</span><span class="pun">|</span><span class="pln">jobIdParseLeadingText</span><span class="pun">:</span><span class="pln">   job</span>

Also, edit apps/scripts/eccejobmonitor and add (without line numers):

  1. <span class="lit">2124</span><span class="pln"> </span><span class="typ">LogMsg</span><span class="pln"> </span><span class="str">"Globus status from eccejobstore: $state"</span><span class="pun">;</span><span class="pln">
  2. </span><span class="lit">2125</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
  3. </span><span class="lit">2126</span><span class="pln"> </span><span class="kwd">elsif</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$q eq </span><span class="str">'slurm'</span><span class="pun">)</span><span class="pln">
  4. </span><span class="lit">2127</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  5. </span><span class="lit">2128</span><span class="pln"> $cmd </span><span class="pun">=</span><span class="pln"> </span><span class="str">"squeue 2>&1"</span><span class="pun">;</span><span class="pln">
  6. </span><span class="lit">2129</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">open</span><span class="pun">(</span><span class="pln">QUERY</span><span class="pun">,</span><span class="pln"> </span><span class="str">"$cmd |"</span><span class="pun">))</span><span class="pln">
  7. </span><span class="lit">2130</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  8. </span><span class="lit">2131</span><span class="pln"> $gotState </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
  9. </span><span class="lit">2132</span><span class="pln"> </span><span class="kwd">while</span><span class="pln"> </span><span class="pun">()</span><span class="pln">
  10. </span><span class="lit">2133</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  11. </span><span class="lit">2134</span><span class="pln"> </span><span class="typ">LogMsg</span><span class="pln"> </span><span class="str">"JobCheck: Slurm qstat line: $_"</span><span class="pun">;</span><span class="pln">
  12. </span><span class="lit">2135</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="str">/^\s*$id/</span><span class="pun">)</span><span class="pln">
  13. </span><span class="lit">2136</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  14. </span><span class="lit">2137</span><span class="pln"> </span><span class="kwd">my</span><span class="pln"> $state </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">split</span><span class="pun">)[</span><span class="lit">5</span><span class="pun">];</span><span class="pln">
  15. </span><span class="lit">2138</span><span class="pln">
  16. </span><span class="lit">2139</span><span class="pln"> </span><span class="pun">&</span><span class="typ">MsgSendUp</span><span class="pun">(</span><span class="str">"Slurm job id '$id' in state '$state'"</span><span class="pun">);</span><span class="pln">
  17. </span><span class="lit">2140</span><span class="pln">
  18. </span><span class="lit">2141</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">grep </span><span class="pun">{</span><span class="pln">$state eq $_</span><span class="pun">}</span><span class="pln"> qw</span><span class="pun">{</span><span class="pln">R
  19. </span><span class="lit">2142</span><span class="pln"> t</span><span class="pun">})</span><span class="pln">
  20. </span><span class="lit">2143</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  21. </span><span class="lit">2144</span><span class="pln"> $status </span><span class="pun">=</span><span class="pln"> $JOB_STATE_RUNNING</span><span class="pun">;</span><span class="pln">
  22. </span><span class="lit">2145</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
  23. </span><span class="lit">2146</span><span class="pln"> </span><span class="kwd">elsif</span><span class="pln"> </span><span class="pun">(</span><span class="pln">grep </span><span class="pun">{</span><span class="pln">$state eq $_</span><span class="pun">}</span><span class="pln"> qw</span><span class="pun">{</span><span class="pln">PD</span><span class="pun">})</span><span class="pln">
  24. </span><span class="lit">2147</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  25. </span><span class="lit">2148</span><span class="pln"> $status </span><span class="pun">=</span><span class="pln"> $JOB_STATE_PENDING</span><span class="pun">;</span><span class="pln">
  26. </span><span class="lit">2149</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
  27. </span><span class="lit">2150</span><span class="pln"> $gotState </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
  28. </span><span class="lit">2151</span><span class="pln"> </span><span class="kwd">last</span><span class="pun">;</span><span class="pln">
  29. </span><span class="lit">2152</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
  30. </span><span class="lit">2153</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
  31. </span><span class="lit">2154</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$gotState </span><span class="pun">==</span><span class="pln"> </span><span class="lit">0</span><span class="pun">)</span><span class="pln">
  32. </span><span class="lit">2155</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  33. </span><span class="lit">2156</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$gJobCheckState </span><span class="pun">!=</span><span class="pln"> $JOB_STATE_NONE</span><span class="pun">)</span><span class="pln">
  34. </span><span class="lit">2157</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  35. </span><span class="lit">2158</span><span class="pln"> $status </span><span class="pun">=</span><span class="pln"> $JOB_STATE_DONE</span><span class="pun">;</span><span class="pln">
  36. </span><span class="lit">2159</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
  37. </span><span class="lit">2160</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
  38. </span><span class="lit">2161</span><span class="pln"> close QUERY</span><span class="pun">;</span>
<span class="lit">2124</span><span class="pln"> </span><span class="typ">LogMsg</span><span class="pln"> </span><span class="str">"Globus status from eccejobstore: $state"</span><span class="pun">;</span><span class="pln">
</span><span class="lit">2125</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
</span><span class="lit">2126</span><span class="pln"> </span><span class="kwd">elsif</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$q eq </span><span class="str">'slurm'</span><span class="pun">)</span><span class="pln"> 
</span><span class="lit">2127</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="lit">2128</span><span class="pln"> $cmd </span><span class="pun">=</span><span class="pln"> </span><span class="str">"squeue 2>&1"</span><span class="pun">;</span><span class="pln">
</span><span class="lit">2129</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">open</span><span class="pun">(</span><span class="pln">QUERY</span><span class="pun">,</span><span class="pln"> </span><span class="str">"$cmd |"</span><span class="pun">))</span><span class="pln">
</span><span class="lit">2130</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="lit">2131</span><span class="pln"> $gotState </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="lit">2132</span><span class="pln"> </span><span class="kwd">while</span><span class="pln"> </span><span class="pun">()</span><span class="pln">
</span><span class="lit">2133</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> 
</span><span class="lit">2134</span><span class="pln"> </span><span class="typ">LogMsg</span><span class="pln"> </span><span class="str">"JobCheck: Slurm qstat line: $_"</span><span class="pun">;</span><span class="pln">
</span><span class="lit">2135</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="str">/^\s*$id/</span><span class="pun">)</span><span class="pln">
</span><span class="lit">2136</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="lit">2137</span><span class="pln"> </span><span class="kwd">my</span><span class="pln"> $state </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">split</span><span class="pun">)[</span><span class="lit">5</span><span class="pun">];</span><span class="pln">
</span><span class="lit">2138</span><span class="pln"> 
</span><span class="lit">2139</span><span class="pln"> </span><span class="pun">&</span><span class="typ">MsgSendUp</span><span class="pun">(</span><span class="str">"Slurm job id '$id' in state '$state'"</span><span class="pun">);</span><span class="pln">
</span><span class="lit">2140</span><span class="pln"> 
</span><span class="lit">2141</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">grep </span><span class="pun">{</span><span class="pln">$state eq $_</span><span class="pun">}</span><span class="pln"> qw</span><span class="pun">{</span><span class="pln">R
</span><span class="lit">2142</span><span class="pln"> t</span><span class="pun">})</span><span class="pln">
</span><span class="lit">2143</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="lit">2144</span><span class="pln"> $status </span><span class="pun">=</span><span class="pln"> $JOB_STATE_RUNNING</span><span class="pun">;</span><span class="pln">
</span><span class="lit">2145</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
</span><span class="lit">2146</span><span class="pln"> </span><span class="kwd">elsif</span><span class="pln"> </span><span class="pun">(</span><span class="pln">grep </span><span class="pun">{</span><span class="pln">$state eq $_</span><span class="pun">}</span><span class="pln"> qw</span><span class="pun">{</span><span class="pln">PD</span><span class="pun">})</span><span class="pln">
</span><span class="lit">2147</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="lit">2148</span><span class="pln"> $status </span><span class="pun">=</span><span class="pln"> $JOB_STATE_PENDING</span><span class="pun">;</span><span class="pln">
</span><span class="lit">2149</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
</span><span class="lit">2150</span><span class="pln"> $gotState </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
</span><span class="lit">2151</span><span class="pln"> </span><span class="kwd">last</span><span class="pun">;</span><span class="pln">
</span><span class="lit">2152</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
</span><span class="lit">2153</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
</span><span class="lit">2154</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$gotState </span><span class="pun">==</span><span class="pln"> </span><span class="lit">0</span><span class="pun">)</span><span class="pln">
</span><span class="lit">2155</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> 
</span><span class="lit">2156</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$gJobCheckState </span><span class="pun">!=</span><span class="pln"> $JOB_STATE_NONE</span><span class="pun">)</span><span class="pln">
</span><span class="lit">2157</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="lit">2158</span><span class="pln"> $status </span><span class="pun">=</span><span class="pln"> $JOB_STATE_DONE</span><span class="pun">;</span><span class="pln">
</span><span class="lit">2159</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
</span><span class="lit">2160</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
</span><span class="lit">2161</span><span class="pln"> close QUERY</span><span class="pun">;</span>

Now when you’re adding or modifying a machine with ecce -admin you can select Slurm. You’ll still need to edit your CONFIG.xxxx file after the machine creation and add account information etc.

 

Leave a Reply

Your email address will not be published. Required fields are marked *