Author: justi9
Date: 2010-08-23 17:03:20 -0400 (Mon, 23 Aug 2010)
New Revision: 4219
Modified:
mgmt/newdata/cumin/python/cumin/grid/main.py
mgmt/newdata/cumin/python/cumin/grid/submission.py
mgmt/newdata/cumin/python/cumin/usergrid/widgets.py
mgmt/newdata/cumin/python/cumin/usergrid/widgets.strings
Log:
For bz 618251
* Isolate the dag-specific submit logic in its own task
* Use a more narrowly focused dag submit form
* Correct some ad attributes for dag submit
Modified: mgmt/newdata/cumin/python/cumin/grid/main.py
===================================================================
--- mgmt/newdata/cumin/python/cumin/grid/main.py 2010-08-23 18:32:08 UTC (rev 4218)
+++ mgmt/newdata/cumin/python/cumin/grid/main.py 2010-08-23 21:03:20 UTC (rev 4219)
@@ -17,6 +17,7 @@
super(Module, self).__init__(app, name)
self.job_submit = JobSubmit(app)
+ self.dag_job_submit = DagJobSubmit(app)
self.vm_job_submit = VmJobSubmit(app)
# cls = app.model.com_redhat_grid.Job
Modified: mgmt/newdata/cumin/python/cumin/grid/submission.py
===================================================================
--- mgmt/newdata/cumin/python/cumin/grid/submission.py 2010-08-23 18:32:08 UTC (rev 4218)
+++ mgmt/newdata/cumin/python/cumin/grid/submission.py 2010-08-23 21:03:20 UTC (rev 4219)
@@ -89,6 +89,10 @@
self.links.add_child(link)
link = self.PoolSubmitLink \
+ (app, "dag_job_submit", app.grid.dag_job_submit)
+ self.links.add_child(link)
+
+ link = self.PoolSubmitLink \
(app, "vm_job_submit", app.grid.vm_job_submit)
self.links.add_child(link)
@@ -549,106 +553,104 @@
def render_title(self, session):
return "Memory"
-# class SubmissionDagAdd(SubmissionAdd):
-# def __init__(self, app, frame):
-# super(SubmissionDagAdd, self).__init__(app, frame)
+class DagJobSubmit(Task):
+ def __init__(self, app):
+ super(DagJobSubmit, self).__init__(app)
-# def get_add_form(self, app):
-# return SubmissionAddDagForm(app, self.name, self)
+ self.form = DagJobSubmitForm(app, self.name, self)
-# def get_title(self, session):
-# return "Create DAG submission"
+ def get_title(self, session, scheduler):
+ return "Submit DAG job"
-# class SubmissionAddDagForm(SubmissionAddForm):
-# def add_fields(self, app):
-# self.dag = self.DagField(app, "dag")
-# self.dag.input.size = 50
-# self.dag.required = True
-# self.dag.help = "DAG descriptor file location"
-# self.add_field(self.dag)
+ def do_invoke(self, session, scheduler, invoc,
+ description, dag_location, attrs={}):
+ ad = dict()
+
+ dag_dir, dag_file = os.path.split(dag_location)
-# self.requirements = self.RequirementsField(app, "requirements")
-# self.requirements.input.columns = 50
-# self.requirements.required = True
-# self.requirements.help = "Attributes controlling where and when " +
\
-# "this submission will run"
-# self.add_field(self.requirements)
+ ad["Submission"] = description
+ ad["Owner"] = invoc.user.name
+ ad["Cmd"] = "/usr/bin/condor_dagman"
+ ad["Iwd"] = dag_dir
+ ad["JobUniverse"] = 7 # Scheduler
+ ad["Out"] = "%s.out" % dag_file
+ ad["Err"] = "%s.err" % dag_file
+ ad["UserLog"] = "%s.log" % dag_file
+ ad["Requirements"] = "True"
+ ad["RemoveKillSig"] = "SIGUSR1"
+ ad["OnExitRemove"] = "ExitSignal =?= 11 || " + \
+ "(ExitCode =!= UNDEFINED && ExitCode >= 0 && ExitCode
<= 2)"
-# self.universe = Attribute(app, "universe")
-# self.universe.default = self.task.UNIVERSE["SCHEDULER"]
-# self.add_attribute(self.universe)
+ args = list()
+ args.append("-f")
+ args.append("-l .")
+ args.append("-Debug 3")
+ args.append("-Lockfile %s.lock" % dag_file)
+ args.append("-AutoRescue 1")
+ args.append("-DoRescueFrom 0")
+ args.append("-Dag %s" % dag_location)
-# self.attributes_ = self.DagAttributes(app, "attributes")
-# self.add_attribute(self.attributes_)
+ ad["Arguments"] = " ".join(args)
-# self.directory = self.Iwd(app, "directory")
-# self.add_attribute(self.directory)
+ vars = list()
+ vars.append("_CONDOR_DAGMAN_LOG=%s.out" % dag_file)
+ vars.append("_CONDOR_MAX_DAGMAN_LOG=0")
-# self.stdin = Attribute(app, "stdin")
-# self.add_attribute(self.stdin)
+ ad["Environment"] = " ".join(vars)
-# self.command = self.DagCommand(app, "command")
-# self.add_attribute(self.command)
+ descriptors = dict()
+ descriptors["Requirements"] = "com.redhat.grid.Expression"
+ descriptors["OnExitRemove"] = "com.redhat.grid.Expression"
-# self.stdout = self.StdoutField(app, "stdout")
-# self.stdout.input.size = 50
-# self.stdout.help = "Send process output to this file"
-# self.stdout.input.param.default = "diamond.dag.lib.out"
-# self.add_extra_field(self.stdout)
+ ad["!!descriptors"] = descriptors
-# self.stderr = self.StderrField(app, "stderr")
-# self.stderr.input.size = 50
-# self.stderr.help = "Send error output to this file"
-# self.stderr.input.param.default = "diamond.dag.lib.err"
-# self.add_extra_field(self.stderr)
+ invoc.description = "Submit DAG job '%s'" % description
-# self.usrlog = self.UsrLogField(app, "usrlog")
-# self.usrlog.input.size = 50
-# self.usrlog.help = "User Log File"
-# self.usrlog.input.param.default = "diamond.dag.dagman.log"
-# self.add_extra_field(self.usrlog)
+ self.qmf_call(invoc, scheduler, "SubmitJob", ad)
-# self.condor = self.CondorVersionField(app, "cv")
-# self.condor.required = True
-# self.condor.input.size = 50
-# self.condor.help = "Condor Version"
-# self.condor.input.param.default = "'7.4.3' 'Mar'
'16' '2010' 'BuildID:' 'RH-7.4.3-0.5.el5'
'PRE-RELEASE'"
-# self.add_extra_field(self.condor)
+class DagJobSubmitForm(ObjectTaskForm):
+ def __init__(self, app, name, task):
+ cls = app.model.com_redhat_grid.Scheduler
+ super(DagJobSubmitForm, self).__init__(app, name, task, cls)
-# class DagField(StringField):
-# def render_title(self, session):
-# return "DAG"
+ self.pool_name = Attribute(app, "pool")
+ self.add_attribute(self.pool_name)
-# def get_base_path(self, session):
-# dag = self.get(session)
-# base, sep, file = rpartition(dag, "/")
-# return base
+ self.description = JobDescriptionField(app, "description")
+ self.add_field(self.description)
-# class Iwd(Attribute):
-# def get(self, session):
-# return self.widget.dag.get_base_path(session)
+ self.location = self.LocationField(app, "location")
+ self.location.help = "Path to the DAG job file"
+ self.location.required = True
+ self.location.input.size = 50
+ self.add_field(self.location)
-# class CondorVersionField(StringField):
-# def render_title(self, session):
-# return "Condor Version"
+ from scheduler import SchedulerSelectField # XXX
-# class DagCommand(Attribute):
-# def get(self, session):
-# dag = self.widget.dag.get(session)
-# condor = self.widget.condor.get(session)
-# args = """-f -l . -Debug 3 -Lockfile diamond.dag.lock
-AutoRescue 1
-# -DoRescueFrom 0 -Dag diamond.dag -CsdVersion $CondorVersion:' %s '
%s"""
+ self.scheduler = SchedulerSelectField(app, "scheduler",
self.pool_name)
+ self.add_extra_field(self.scheduler)
-# cmd = "/usr/bin/condor_dagman"
-# return "%s %s" % (cmd, args % (condor, dag))
+ self.attrs = JobAttributesField(app, "attrs")
+ self.add_extra_field(self.attrs)
-# class DagAttributes(Attribute):
-# def get(self, session):
+ def process_submit(self, session):
+ self.validate(session)
-# ads = list()
-# ads.append("getenv=True")
-# ads.append("remove_kill_sig=SIGUSR1")
-# ads.append("on_exit_remove=( ExitSignal =?= 11 || (ExitCode =!=
UNDEFINED && ExitCode>=0 && ExitCode <= 2))")
-#
ads.append("environment=_CONDOR_DAGMAN_LOG=diamond.dag.dagman.out;_CONDOR_MAX_DAGMAN_LOG=0")
+ attrs = self.attrs.parse_attributes(session)
-# return "\n".join(ads)
+ if not self.errors.get(session):
+ scheduler = self.scheduler.get(session)
+ description = self.description.get(session)
+ location = self.location.get(session)
+
+ self.task.invoke(session,
+ scheduler,
+ description,
+ location,
+ attrs=attrs)
+
+ self.task.exit_with_redirect(session, scheduler)
+
+ class LocationField(StringField):
+ def render_title(self, session):
+ return "DAG file location"
Modified: mgmt/newdata/cumin/python/cumin/usergrid/widgets.py
===================================================================
--- mgmt/newdata/cumin/python/cumin/usergrid/widgets.py 2010-08-23 18:32:08 UTC (rev
4218)
+++ mgmt/newdata/cumin/python/cumin/usergrid/widgets.py 2010-08-23 21:03:20 UTC (rev
4219)
@@ -73,6 +73,9 @@
link = TaskLink(app, "job_submit", app.grid.job_submit)
self.add_child(link)
+ link = TaskLink(app, "dag_job_submit", app.grid.dag_job_submit)
+ self.add_child(link)
+
link = TaskLink(app, "vm_job_submit", app.grid.vm_job_submit)
self.add_child(link)
@@ -115,6 +118,9 @@
link = TaskLink(app, "job_submit", app.grid.job_submit)
self.links.add_child(link)
+ link = TaskLink(app, "dag_job_submit", app.grid.dag_job_submit)
+ self.links.add_child(link)
+
link = TaskLink(app, "vm_job_submit", app.grid.vm_job_submit)
self.links.add_child(link)
Modified: mgmt/newdata/cumin/python/cumin/usergrid/widgets.strings
===================================================================
--- mgmt/newdata/cumin/python/cumin/usergrid/widgets.strings 2010-08-23 18:32:08 UTC (rev
4218)
+++ mgmt/newdata/cumin/python/cumin/usergrid/widgets.strings 2010-08-23 21:03:20 UTC (rev
4219)
@@ -36,6 +36,7 @@
<ul style="list-style-type: none; margin: 1 0; padding: 0;">
<li>{job_submit}</li>
+ <li>{dag_job_submit}</li>
<li>{vm_job_submit}</li>
</ul>
</td>