33{
34
35 void SlurmDriver :: testInvariant () const
36 {
38 }
39
40 SlurmDriver :: SlurmDriver ()
41 {
42 m_b_job_name = false;
43 m_b_account = false;
44 m_b_run_time = false;
45
47 }
48
49 ::StatusCode SlurmDriver ::
50 doManagerStep (Detail::ManagerData&
data)
const
51 {
53 using namespace msgEventLoop;
56 {
57 case Detail::ManagerStep::batchScriptVar:
58 {
59 data.batchInit =
"export PATH LD_LIBRARY_PATH PYTHONPATH";
60 }
61 break;
62
63 case Detail::ManagerStep::submitJob:
64 case Detail::ManagerStep::doResubmit:
65 {
66 auto all_set = m_b_job_name && m_b_account && m_b_run_time;
67 if (!all_set)
68 {
72
73 ANA_MSG_ERROR(
"All parameters need to be set before job can be submitted");
74 return ::StatusCode::FAILURE;
75 }
76
78
81
82 assert (!
data.batchJobIndices.empty());
83 assert (
data.batchJobIndices.back() + 1 ==
data.batchJobIndices.size());
84 const std::size_t njob =
data.batchJobIndices.size();
85
86 if(!
data.options.castBool(Job::optBatchSharedFileSystem,
true))
87 {
88 int status=gSystem->CopyFile(
"RootCore.par",(
data.submitDir+
"/submit/RootCore.par").c_str());
89 if(status != 0)
91 }
92
93 {
94 std::ofstream
file ((
data.submitDir +
"/submit/submit").c_str());
95
96 file <<
"#!/bin/bash \n";
98 file <<
"#SBATCH --job-name=" << m_job_name <<
"\n";
99 file <<
"#SBATCH --output=slurm-%j.out\n";
100 file <<
"#SBATCH --error=slurm-%j.err\n";
101 file <<
"#SBATCH --account=" << m_account <<
"\n";
102 if(!m_partition .
empty())
file <<
"#SBATCH --partition=" << m_partition <<
"\n";
103 file <<
"#SBATCH --time=" << m_run_time <<
"\n";
104 if(!m_memory .
empty())
file <<
"#SBATCH --mem=" << m_memory <<
"\n";
105 if(!m_constraint.empty())
file <<
"#SBATCH --constraint=" << m_constraint <<
"\n";
107 file <<
data.options.castString(Job::optBatchSlurmExtraConfigLines) <<
"\n";
109
110 file <<
data.options.castString(Job::optBatchSlurmWrapperExec);
111 file <<
"./run ${SLURM_ARRAY_TASK_ID}\n";
112 }
113
114 {
115 std::ostringstream
cmd;
116 cmd <<
"cd " <<
data.submitDir <<
"/submit && sbatch --array=0-" << njob-1 <<
" " <<
data.options.castString (Job::optSubmitFlags) <<
" submit";
117 if (gSystem->Exec (
cmd.str().c_str()) != 0)
119 }
120 data.submitted =
true;
121 }
122 break;
123
124 default:
125 break;
126 }
127 return ::StatusCode::SUCCESS;
128 }
129
130
131 void SlurmDriver :: SetJobName(std::string job_name)
132 {
133 m_b_job_name = true;
134 m_job_name = job_name;
135 }
136 void SlurmDriver :: SetAccount(std::string account)
137 {
138 m_b_account = true;
139 m_account = account;
140 }
141 void SlurmDriver :: SetPartition(std::string partition)
142 {
144 }
145 void SlurmDriver :: SetRunTime(std::string run_time)
146 {
147 m_b_run_time = true;
148 m_run_time = run_time;
149 }
150 void SlurmDriver :: SetMemory(std::string memory)
151 {
153 }
154 void SlurmDriver :: SetConstrain(std::string constraint)
155 {
156 m_constraint = constraint;
157 }
158
159}
#define RCU_NEW_INVARIANT(x)
#define RCU_READ_INVARIANT(x)
char data[hepevt_bytes_allocation_ATLAS]
#define RCU_THROW_MSG(message)
static const Attributes_t empty