C++
Generator.cpp
#include <arc/GUID.h>
#include "Generator.h"
Generator::Generator() {
}
Generator::~Generator() {
logger.msg(
Arc::INFO,
"Shutting down scheduler");
scheduler.stop();
logger.msg(
Arc::INFO,
"Scheduler stopped, exiting");
}
logger.msg(
Arc::INFO,
"Received DTR %s back from scheduler in state %s", dtr->get_id(), dtr->get_status().str());
dtr->get_logger()->deleteDestinations();
counter.dec();
}
void Generator::start() {
logger.msg(
Arc::INFO,
"Starting DTR threads");
scheduler.SetDumpLocation("/tmp/dtr.log");
scheduler.start();
}
void Generator::run(const std::string& source, const std::string& destination) {
logger.msg(
Arc::ERROR,
"No valid credentials found, exiting");
return;
}
log->addDestination(*dest);
if (!(*dtr)) {
logger.msg(
Arc::ERROR,
"Problem creating dtr (source %s, destination %s)", source, destination);
return;
}
dtr->set_tries_left(5);
counter.inc();
}
Generator.h
#ifndef GENERATOR_H_
#define GENERATOR_H_
#include <arc/Thread.h>
#include <arc/Logger.h>
#include <arc/data-staging/Scheduler.h>
private:
std::list<Arc::LogDestination*> root_destinations;
public:
Generator();
~Generator();
void start();
void run(const std::string& source, const std::string& destination);
};
#endif
generator-main.cpp
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <signal.h>
#include <arc/StringConv.h>
#include "Generator.h"
static bool run = true;
static void do_shutdown(int) {
run = false;
}
static void usage() {
std::cout << "Usage: generator [num mock transfers]" << std::endl;
std::cout << " generator source destination" << std::endl;
std::cout << "To use mock transfers ARC must be built with configure --enable-mock-dmc" << std::endl;
std::cout << "The default number of mock transfers is 10" << std::endl;
}
int main(int argc, char** argv) {
signal(SIGTTOU,SIG_IGN);
signal(SIGTTIN,SIG_IGN);
signal(SIGINT, do_shutdown);
Generator generator;
int num = 10;
if (argc == 1 || argc == 2) {
if (argc == 2 && (std::string(argv[1]) ==
"-h" || !
Arc::stringto(argv[1], num))) {
usage();
return 1;
}
generator.start();
for (int i = 0; i < num; ++i) {
std::string destination =
"mock://mockdest/mock." +
Arc::tostring(i);
generator.run(source, destination);
}
}
else if (argc == 3) {
generator.start();
generator.run(argv[1], argv[2]);
}
else {
usage();
return 1;
}
while (generator.counter.get() > 0 && run) {
sleep(1);
}
return 0;
}
Python
17 class DTRGenerator(arc.DTRCallback):
21 self.root_logger = arc.Logger_getRootLogger()
22 self.stream = arc.LogStream(sys.stdout)
23 self.root_logger.addDestination(self.stream)
24 self.root_logger.setThreshold(arc.DEBUG)
25 self.cfg = arc.UserConfig(
'',
'')
27 arc.DTR.LOG_LEVEL = self.root_logger.getThreshold()
30 self.scheduler = arc.Scheduler()
31 self.scheduler.start()
37 def add(self, source, dest):
40 dtrlog = arc.createDTRLogger(self.root_logger,
"DTR")
41 dtrlog.__deref__().addDestination(self.stream)
42 dtrlog.__deref__().setThreshold(arc.DEBUG)
45 dtrptr = arc.createDTRPtr(source, dest, self.cfg, self.id, os.getuid(), dtrlog)
50 dtrptr.registerCallback(self.scheduler, arc.SCHEDULER)
52 arc.DTR.push(dtrptr, arc.SCHEDULER)
54 while dtrptr.get_status() != arc.DTRStatus.ERROR
and dtrptr.get_status() != arc.DTRStatus.DONE:
56 print dtrptr.get_status().str()
59 def receiveDTR(self, dtr):
60 print 'Received back DTR', dtr.get_id()
64 print "Usage: python dtr_generator.py source destination"
66 generator = DTRGenerator()
67 generator.add(args[1], args[2])
69 if __name__ ==
'__main__':
Java
import nordugrid.arc.*;
class DTRGenerator extends Scheduler {
private Logger logger;
private LogDestination logdest;
private SimpleCondition cond;
public DTRGenerator() {
logger = new Logger(Logger.getRootLogger(), "Generator");
logdest = new LogStream_ostream(arc.getStdout());
Logger.getRootLogger().addDestination(logdest);
Logger.getRootLogger().setThreshold(
LogLevel.DEBUG);
cond = new SimpleCondition();
}
public void receiveDTR(DTRPointer dtr) {
Logger.getRootLogger().addDestination(logdest);
logger.msg(
LogLevel.INFO,
"Received DTR " + dtr.get_id() +
" in state " + dtr.get_status().str());
Logger.getRootLogger().removeDestinations();
cond.signal();
}
private void run(final String source, final String dest) {
Scheduler scheduler = new Scheduler();
scheduler.start();
UserConfig cfg = new UserConfig();
String id = "1234";
DTRLogger dtrlog = arc.createDTRLogger(Logger.getRootLogger(),
"DTR");
dtrlog.addDestination(logdest);
User user = new User();
DTRPointer dtr = arc.createDTRPtr(source, dest, cfg, id, user.get_uid(), dtrlog);
logger.msg(
LogLevel.INFO,
"Created DTR "+ dtr.get_id());
cond._wait();
scheduler.stop();
}
public static void main(String[] args) {
if (args.length != 2) {
System.out.println("Usage: java DTRGenerator source destination");
return;
}
DTRGenerator gen = new DTRGenerator();
gen.run(args[0], args[1]);
}
}