ATLAS Offline Software
Functions
CondorDriver.cxx File Reference
#include <EventLoop/CondorDriver.h>
#include <AsgMessaging/StatusCode.h>
#include <EventLoop/BatchJob.h>
#include <EventLoop/Job.h>
#include <EventLoop/ManagerData.h>
#include <EventLoop/MessageCheck.h>
#include <RootCoreUtils/Assert.h>
#include <RootCoreUtils/ThrowMsg.h>
#include <TSystem.h>
#include <fstream>
#include <memory>
#include <sstream>
#include <cstdlib>
#include <filesystem>

Go to the source code of this file.

Functions

 ClassImp (EL::CondorDriver) namespace EL
 

Function Documentation

◆ ClassImp()

ClassImp ( EL::CondorDriver  )
Author
Nils Krumnack

Definition at line 32 of file CondorDriver.cxx.

35 {
36  void CondorDriver ::
37  testInvariant () const
38  {
39  RCU_INVARIANT (this != 0);
40  }
41 
42 
43 
44  CondorDriver ::
45  CondorDriver ()
46  {
47  RCU_NEW_INVARIANT (this);
48  }
49 
50 
51 
52  ::StatusCode CondorDriver ::
53  doManagerStep (Detail::ManagerData& data) const
54  {
55  RCU_READ_INVARIANT (this);
56  using namespace msgEventLoop;
57  ANA_CHECK (BatchDriver::doManagerStep (data));
58  switch (data.step)
59  {
60  case Detail::ManagerStep::batchScriptVar:
61  {
62  data.batchInit = "export PATH LD_LIBRARY_PATH PYTHONPATH";
63  }
64  break;
65 
66  case Detail::ManagerStep::submitJob:
67  case Detail::ManagerStep::doResubmit:
68  {
69  // name of tarball being made (this needs to match BatchDriver.cxx)
70  const std::string tarballName("AnalysisPackage.tar.gz");
71 
72  if (!data.resubmit)
73  {
74  if(!data.options.castBool(Job::optBatchSharedFileSystem,true))
75  {
76  const std::string newLocation = data.submitDir + "/submit/" + tarballName;
77  int status=gSystem->CopyFile(tarballName.c_str(),newLocation.c_str());
78  if(status != 0)
79  RCU_THROW_MSG( ("failed to copy " + tarballName + " to " + newLocation).c_str() );
80  }
81  }
82 
83  {
84  std::ofstream file ((data.submitDir + "/submit/submit").c_str());
85  file << "executable = run\n";
86  file << "universe = vanilla\n";
87  file << "log = submit/run.log\n";
88  file << "output = submit/log-$(Item).out\n";
89  file << "error = submit/log-$(Item).err\n";
90  file << "initialdir = " << data.submitDir << "\n";
91  if(!data.options.castBool(Job::optBatchSharedFileSystem,true))
92  { // Transfer data with non-shared file-systems
93  file << "should_transfer_files = YES\n";
94  file << "when_to_transfer_output = ON_EXIT\n";
95  file << "transfer_input_files = submit/" << tarballName << ", submit/segments, submit/config.root\n";
96  file << "transfer_output_files = fetch, status\n";
97  if (char* x509userproxy = std::getenv("X509_USER_PROXY")) {
98  std::filesystem::path proxyPath(x509userproxy);
99  std::filesystem::path proxyPathDestination(data.submitDir + "/submit/" + proxyPath.filename().string());
100  std::filesystem::copy(proxyPath,
101  proxyPathDestination,
102  std::filesystem::copy_options::overwrite_existing);
103  file << "x509userproxy = " << proxyPathDestination.string() <<"\n";
104  }
105  else {
106  ANA_MSG_INFO("X509_USER_PROXY not set");
107  }
108  }
109  file << "arguments = $(Item)\n";
110  file << "\n" << data.options.castString (Job::optCondorConf) << "\n";
111  file << "queue in ( ";
112  bool first {true};
113  for (std::size_t index : data.batchJobIndices)
114  {
115  if (first)
116  first = false;
117  else
118  file << ", ";
119  file << index;
120  }
121  file << " )\n";
122  }
123 
124  {
125  std::ostringstream cmd;
126  cmd << "cd " << data.submitDir << "/submit && condor_submit "
127  << data.options.castString (Job::optSubmitFlags) << " submit";
128  if (gSystem->Exec (cmd.str().c_str()) != 0)
129  RCU_THROW_MSG (("failed to execute: " + cmd.str()).c_str());
130  }
131  data.submitted = true;
132  }
133  break;
134 
135  default:
136  break;
137  }
138  return ::StatusCode::SUCCESS;
139  }
140 }
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
athena.path
path
python interpreter configuration --------------------------------------—
Definition: athena.py:128
index
Definition: index.py:1
rerun_display.cmd
string cmd
Definition: rerun_display.py:67
ANA_CHECK
#define ANA_CHECK(EXP)
check whether the given expression was successful
Definition: Control/AthToolSupport/AsgMessaging/AsgMessaging/MessageCheck.h:324
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ANA_MSG_INFO
#define ANA_MSG_INFO(xmsg)
Macro printing info messages.
Definition: Control/AthToolSupport/AsgMessaging/AsgMessaging/MessageCheck.h:290
file
TFile * file
Definition: tile_monitor.h:29
RCU_INVARIANT
#define RCU_INVARIANT(x)
Definition: Assert.h:201
DeMoScan.index
string index
Definition: DeMoScan.py:364
SCT_ConditionsAlgorithms::CoveritySafe::getenv
std::string getenv(const std::string &variableName)
get an environment variable
Definition: SCT_ConditionsUtilities.cxx:17
DeMoScan.first
bool first
Definition: DeMoScan.py:536
merge.status
status
Definition: merge.py:17
RCU_THROW_MSG
#define RCU_THROW_MSG(message)
Definition: PrintMsg.h:58
calibdata.copy
bool copy
Definition: calibdata.py:27
RCU_READ_INVARIANT
#define RCU_READ_INVARIANT(x)
Definition: Assert.h:229
RCU_NEW_INVARIANT
#define RCU_NEW_INVARIANT(x)
Definition: Assert.h:233