r5668 - trunk/sage/python/sage/aviary
by tmckay@fedoraproject.org
Author: tmckay
Date: 2013-01-30 17:56:34 +0000 (Wed, 30 Jan 2013)
New Revision: 5668
Modified:
trunk/sage/python/sage/aviary/aviaryoperations.py
Log:
Original fix for missing "args" value was incorrect
BZ848344
Modified: trunk/sage/python/sage/aviary/aviaryoperations.py
===================================================================
--- trunk/sage/python/sage/aviary/aviaryoperations.py 2013-01-29 20:35:50 UTC (rev 5667)
+++ trunk/sage/python/sage/aviary/aviaryoperations.py 2013-01-30 17:56:34 UTC (rev 5668)
@@ -302,7 +302,7 @@
except:
# Someone may be unhappy if this is a required param!
# Let the downstream code generate an error
- pass
+ args.append("")
# Add empty list for Aviary's basic requirement value...
args.append([])
11 years, 2 months
r5667 - branches/elephant/cumin/python/cumin/gridhadoop
by croberts@fedoraproject.org
Author: croberts
Date: 2013-01-29 20:35:50 +0000 (Tue, 29 Jan 2013)
New Revision: 5667
Modified:
branches/elephant/cumin/python/cumin/gridhadoop/datanode.py
branches/elephant/cumin/python/cumin/gridhadoop/jobtracker.py
branches/elephant/cumin/python/cumin/gridhadoop/namenode.py
branches/elephant/cumin/python/cumin/gridhadoop/tasktracker.py
Log:
No longer hard-coding the "hadoop-host" value. For now, we are just choosing the first one from the list. Long term, cumin will have a higher-level page where the hadoop-host (scheduler) is selected, followed by the rest of the UI as it pertains to grid-hadoop.
Modified: branches/elephant/cumin/python/cumin/gridhadoop/datanode.py
===================================================================
--- branches/elephant/cumin/python/cumin/gridhadoop/datanode.py 2013-01-25 20:06:44 UTC (rev 5666)
+++ branches/elephant/cumin/python/cumin/gridhadoop/datanode.py 2013-01-29 20:35:50 UTC (rev 5667)
@@ -67,7 +67,8 @@
#need to make this work for user/grid-hadoop path too somehow
# this is way less than ideal
frame = self.page.page_widgets_by_path[self.path.rsplit(".", 11)[0] + self.frame_path]
- return frame.get_href(session, id, "grid2.lab.bos.redhat.com")
+ hadoop_schedulers = self.app.remote.get_hosts("SCHEDULER", "HADOOP")
+ return frame.get_href(session, id, hadoop_schedulers[0])
class DataNodeDelete(ObjectSelectorTask):
def __init__(self, app, selector, name):
Modified: branches/elephant/cumin/python/cumin/gridhadoop/jobtracker.py
===================================================================
--- branches/elephant/cumin/python/cumin/gridhadoop/jobtracker.py 2013-01-25 20:06:44 UTC (rev 5666)
+++ branches/elephant/cumin/python/cumin/gridhadoop/jobtracker.py 2013-01-29 20:35:50 UTC (rev 5667)
@@ -73,7 +73,8 @@
frame = self.page.page_widgets_by_path[self.path.rsplit(".", 7)[0] + self.frame_path]
#if isinstance(frame, TagObjectFrame):
- return frame.get_href(session, id, "grid2.lab.bos.redhat.com")
+ hadoop_schedulers = self.app.remote.get_hosts("SCHEDULER", "HADOOP")
+ return frame.get_href(session, id, hadoop_schedulers[0])
class JobTrackerDelete(ObjectSelectorTask):
def __init__(self, app, selector, name):
Modified: branches/elephant/cumin/python/cumin/gridhadoop/namenode.py
===================================================================
--- branches/elephant/cumin/python/cumin/gridhadoop/namenode.py 2013-01-25 20:06:44 UTC (rev 5666)
+++ branches/elephant/cumin/python/cumin/gridhadoop/namenode.py 2013-01-29 20:35:50 UTC (rev 5667)
@@ -72,8 +72,8 @@
# this is way less than ideal
frame = self.page.page_widgets_by_path[self.path.rsplit(".", 7)[0] + self.frame_path]
- return frame.get_href(session, id, "grid2.lab.bos.redhat.com")
-
+ hadoop_schedulers = self.app.remote.get_hosts("SCHEDULER", "HADOOP")
+ return frame.get_href(session, id, hadoop_schedulers[0])
class NameNodeCreate(Task):
def __init__(self, app, name):
Modified: branches/elephant/cumin/python/cumin/gridhadoop/tasktracker.py
===================================================================
--- branches/elephant/cumin/python/cumin/gridhadoop/tasktracker.py 2013-01-25 20:06:44 UTC (rev 5666)
+++ branches/elephant/cumin/python/cumin/gridhadoop/tasktracker.py 2013-01-29 20:35:50 UTC (rev 5667)
@@ -67,7 +67,8 @@
#need to make this work for user/grid-hadoop path too somehow
# this is way less than ideal
frame = self.page.page_widgets_by_path[self.path.rsplit(".", 11)[0] + self.frame_path]
- return frame.get_href(session, id, "grid2.lab.bos.redhat.com")
+ hadoop_schedulers = self.app.remote.get_hosts("SCHEDULER", "HADOOP")
+ return frame.get_href(session, id, hadoop_schedulers[0])
class TaskTrackerDelete(ObjectSelectorTask):
def __init__(self, app, selector, name):
11 years, 3 months
r5666 - branches/elephant/cumin/python/cumin/gridhadoop
by croberts@fedoraproject.org
Author: croberts
Date: 2013-01-25 20:06:44 +0000 (Fri, 25 Jan 2013)
New Revision: 5666
Added:
branches/elephant/cumin/python/cumin/gridhadoop/jobtracker.strings
branches/elephant/cumin/python/cumin/gridhadoop/namenode.strings
Modified:
branches/elephant/cumin/python/cumin/gridhadoop/jobtracker.py
branches/elephant/cumin/python/cumin/gridhadoop/namenode.py
Log:
Dummy details page for name node and job tracker. Should wind-up refactoring the "details" pages at some point.
Modified: branches/elephant/cumin/python/cumin/gridhadoop/jobtracker.py
===================================================================
--- branches/elephant/cumin/python/cumin/gridhadoop/jobtracker.py 2013-01-24 20:11:08 UTC (rev 5665)
+++ branches/elephant/cumin/python/cumin/gridhadoop/jobtracker.py 2013-01-25 20:06:44 UTC (rev 5666)
@@ -14,6 +14,10 @@
from sage.util import *
+from wooly.util import StringCatalog
+
+strings = StringCatalog(__file__)
+
class JobTrackerAdapter(HadoopAdapter):
def get_sage_results(self, values):
owner_filter = self.get_owner_filter(values['session'])
Added: branches/elephant/cumin/python/cumin/gridhadoop/jobtracker.strings
===================================================================
--- branches/elephant/cumin/python/cumin/gridhadoop/jobtracker.strings (rev 0)
+++ branches/elephant/cumin/python/cumin/gridhadoop/jobtracker.strings 2013-01-25 20:06:44 UTC (rev 5666)
@@ -0,0 +1,7 @@
+[JobTrackerDetails.html]
+<div class="{class}">
+ <ul>
+ <li>Name: {name}</li>
+ <li>More details to come...</li>
+ </ul>
+</div>
\ No newline at end of file
Modified: branches/elephant/cumin/python/cumin/gridhadoop/namenode.py
===================================================================
--- branches/elephant/cumin/python/cumin/gridhadoop/namenode.py 2013-01-24 20:11:08 UTC (rev 5665)
+++ branches/elephant/cumin/python/cumin/gridhadoop/namenode.py 2013-01-25 20:06:44 UTC (rev 5666)
@@ -12,6 +12,10 @@
from sage.util import *
+from wooly.util import StringCatalog
+
+strings = StringCatalog(__file__)
+
class NameNodeAdapter(HadoopAdapter):
def get_sage_results(self, values):
owner_filter = self.get_owner_filter(values['session'])
Added: branches/elephant/cumin/python/cumin/gridhadoop/namenode.strings
===================================================================
--- branches/elephant/cumin/python/cumin/gridhadoop/namenode.strings (rev 0)
+++ branches/elephant/cumin/python/cumin/gridhadoop/namenode.strings 2013-01-25 20:06:44 UTC (rev 5666)
@@ -0,0 +1,7 @@
+[NameNodeDetails.html]
+<div class="{class}">
+ <ul>
+ <li>Name: {name}</li>
+ <li>More details to come...</li>
+ </ul>
+</div>
\ No newline at end of file
11 years, 3 months
r5665 - branches/elephant/cumin/python/cumin/gridhadoop
by croberts@fedoraproject.org
Author: croberts
Date: 2013-01-24 20:11:08 +0000 (Thu, 24 Jan 2013)
New Revision: 5665
Added:
branches/elephant/cumin/python/cumin/gridhadoop/datanode.strings
branches/elephant/cumin/python/cumin/gridhadoop/tasktracker.strings
Modified:
branches/elephant/cumin/python/cumin/gridhadoop/datanode.py
branches/elephant/cumin/python/cumin/gridhadoop/tasktracker.py
Log:
Adding stubs for the object "details" page for data node and task tracker.
Modified: branches/elephant/cumin/python/cumin/gridhadoop/datanode.py
===================================================================
--- branches/elephant/cumin/python/cumin/gridhadoop/datanode.py 2013-01-22 20:40:52 UTC (rev 5664)
+++ branches/elephant/cumin/python/cumin/gridhadoop/datanode.py 2013-01-24 20:11:08 UTC (rev 5665)
@@ -12,6 +12,10 @@
from sage.util import *
+from wooly.util import StringCatalog
+
+strings = StringCatalog(__file__)
+
class DataNodeAdapter(HadoopAdapter):
def get_sage_results(self, values):
owner_filter = self.get_owner_filter(values['session'])
Added: branches/elephant/cumin/python/cumin/gridhadoop/datanode.strings
===================================================================
--- branches/elephant/cumin/python/cumin/gridhadoop/datanode.strings (rev 0)
+++ branches/elephant/cumin/python/cumin/gridhadoop/datanode.strings 2013-01-24 20:11:08 UTC (rev 5665)
@@ -0,0 +1,7 @@
+[DataNodeDetails.html]
+<div class="{class}">
+ <ul>
+ <li>Name: {name}</li>
+ <li>More details to come...</li>
+ </ul>
+</div>
\ No newline at end of file
Modified: branches/elephant/cumin/python/cumin/gridhadoop/tasktracker.py
===================================================================
--- branches/elephant/cumin/python/cumin/gridhadoop/tasktracker.py 2013-01-22 20:40:52 UTC (rev 5664)
+++ branches/elephant/cumin/python/cumin/gridhadoop/tasktracker.py 2013-01-24 20:11:08 UTC (rev 5665)
@@ -12,6 +12,10 @@
from sage.util import *
+from wooly.util import StringCatalog
+
+strings = StringCatalog(__file__)
+
class TaskTrackerAdapter(HadoopAdapter):
def get_sage_results(self, values):
owner_filter = self.get_owner_filter(values['session'])
Added: branches/elephant/cumin/python/cumin/gridhadoop/tasktracker.strings
===================================================================
--- branches/elephant/cumin/python/cumin/gridhadoop/tasktracker.strings (rev 0)
+++ branches/elephant/cumin/python/cumin/gridhadoop/tasktracker.strings 2013-01-24 20:11:08 UTC (rev 5665)
@@ -0,0 +1,7 @@
+[TaskTrackerDetails.html]
+<div class="{class}">
+ <ul>
+ <li>Name: {name}</li>
+ <li>More details to come...</li>
+ </ul>
+</div>
\ No newline at end of file
11 years, 3 months
r5664 - branches/tmckay/sage/python/sage/aviary
by tmckay@fedoraproject.org
Author: tmckay
Date: 2013-01-22 20:40:52 +0000 (Tue, 22 Jan 2013)
New Revision: 5664
Modified:
branches/tmckay/sage/python/sage/aviary/aviaryoperations.py
Log:
Tweak after test
Modified: branches/tmckay/sage/python/sage/aviary/aviaryoperations.py
===================================================================
--- branches/tmckay/sage/python/sage/aviary/aviaryoperations.py 2013-01-22 19:56:02 UTC (rev 5663)
+++ branches/tmckay/sage/python/sage/aviary/aviaryoperations.py 2013-01-22 20:40:52 UTC (rev 5664)
@@ -1356,7 +1356,7 @@
"getMasterID",
page_size, mode, resID)
- self.client_pool.return_object(query_client)
+ self.client_pool.return_object(client)
return res;
@@ -1381,8 +1381,7 @@
else:
# no status for the call itself?
status = "OK"
- if hasattr(result, "results"):
- data = result.results
+ data = result
return (status, data)
if callback:
11 years, 3 months
r5663 - in branches/tmckay/sage: python/sage/aviary rpc-defs/aviary
by tmckay@fedoraproject.org
Author: tmckay
Date: 2013-01-22 19:56:02 +0000 (Tue, 22 Jan 2013)
New Revision: 5663
Modified:
branches/tmckay/sage/python/sage/aviary/aviaryoperations.py
branches/tmckay/sage/rpc-defs/aviary/aviary-common.xsd
Log:
Add routines for collector types (but do they work?)
Modified: branches/tmckay/sage/python/sage/aviary/aviaryoperations.py
===================================================================
--- branches/tmckay/sage/python/sage/aviary/aviaryoperations.py 2013-01-18 23:19:32 UTC (rev 5662)
+++ branches/tmckay/sage/python/sage/aviary/aviaryoperations.py 2013-01-22 19:56:02 UTC (rev 5663)
@@ -74,9 +74,10 @@
class BaseServerList(object):
# Nice, friendly strings for error messages on lookup
- _nice = {"JOB": "job service",
- "QUERY_SERVER": "query service",
- "HADOOP": "hadoop service"}
+ _nice = {("SCHEDULER","JOB"): "job service",
+ ("CUSTOM","QUERY_SERVER"): "query service",
+ ("SCHEDULER","HADOOP"): "hadoop service",
+ ("COLLECTOR",""): "collector service"}
def __init__(self, resource, subtype):
self.servers = None
@@ -84,7 +85,7 @@
self.resource = resource
self.subtype = subtype
try:
- self.nice = BaseServerList._nice[subtype]
+ self.nice = BaseServerList._nice[(resource,subtype)]
except:
self.nice = subtype
@@ -1213,6 +1214,38 @@
self.client_pool.return_object(client)
return res;
+# This class mimics the ResourceID structure that Aviary expects
+class ResourceID(object):
+ def __init__(self,
+ resource="COLLECTOR",
+ pool="", name="", address="", sub_type="", birthdate=None):
+ self.resource = resource
+ self.pool = pool
+ self.name = name
+ self.address = address
+ self.sub_type = sub_type
+ self.birthdate = birthdate
+
+ def set(self, resID):
+ resID.resource = self.resource
+ if self.pool:
+ resID.poool = self.pool
+ if self.name:
+ resID.name = self.name
+ if self.address:
+ resID.address = self.address
+ if self.sub_type:
+ resID.subtype = self.sub_type
+ if not self.birthdate is None:
+ resID.birthdate = self.birthdate
+
+class AttributeRequest(object):
+ def __init__(self, res_id, name_list):
+ assert isinstance(res_id, ResourceID)
+
+ self.res_id = res_id
+ self.name_list = name_list
+
class _AviaryCollectorMethods(_AviaryCommon):
def __init__(self, locator, transports, datadir, collector_servers):
@@ -1228,10 +1261,147 @@
"COLLECTOR",
"")
-
# Equivalence? We don't want no stinking QMF structural equivalence!
self.use_MethodResult_for_sync_calls = False
+ def get_collector(self, host, ids):
+ return self._get_object(host, ids, "getCollector")
+
+ def get_negotiator(self, host, ids):
+ return self._get_object(host, ids, "getNegotiator")
+
+ def get_scheduler(self, host, ids):
+ return self._get_object(host, ids, "getScheduler")
+
+ def get_submitter(self, host, ids):
+ return self._get_object(host, ids, "getSubmitter")
+
+ def get_master(self, host, ids):
+ return self._get_object(host, ids, "getMaster")
+
+ def get_slot(self, host, ids):
+ return self._get_object(host, ids, "getSlot")
+
+ def get_master_id(self, host, page_size, mode=None, offset=None):
+ return self._get_obj_by_id(host, page_size, mode, offset, "getMasterID")
+
+ def get_slot_id(self, host, page_size, mode=None, offset=None):
+ return self._get_obj_by_id(host, page_size, mode, offset, "getSlotID")
+
+ def get_attributes(self, host, request):
+ if not type(request) in (list, tuple):
+ request = [request]
+
+ def my_process_results(result):
+ data = None
+ result = self._pretty_result(result, host)
+ if isinstance(result, Exception):
+ status = result
+ else:
+ status = _AviaryCommon._get_status(result.status)
+ if status == "OK" and hasattr(result, "results"):
+ data = result.results
+ return (status, data)
+
+ client = self.client_pool.get_object()
+ self._setup_client(client,
+ self.servers,
+ host,
+ "getAttributes")
+
+ res = self._call_sync(self.call_client_retry,
+ my_process_results,
+ client,
+ "getAttributes",
+ request)
+
+ self.client_pool.return_object(client)
+ return res;
+
+ def _get_obj_by_id(self, host, page_size, mode, offset, meth_name):
+
+ if offset:
+ assert isinstance(offset, ResourceID)
+
+ assert mode is None or mode in ("BEFORE", "AFTER")
+
+ def my_process_results(result):
+ # Fix up the exception message if necessary
+ result = self._pretty_result(result, host)
+ if isinstance(result, Exception):
+ status = result
+ data = None
+ else:
+ status = 0
+ if not hasattr(result, "results"):
+ result.results = []
+ data = result
+ return (status, data)
+
+ client = self.client_pool.get_object()
+ if offset:
+ resID = client.factory.create("ns1:ResourceID")
+ offset.set(resID)
+ else:
+ resID = None
+
+ self._setup_client(client,
+ self.servers,
+ host,
+ "getMasterID")
+
+ res = self._call_sync(self.call_client_retry,
+ my_process_results,
+ client,
+ "getMasterID",
+ page_size, mode, resID)
+
+ self.client_pool.return_object(query_client)
+ return res;
+
+
+ def _get_object(self, host, ids, meth_name, callback=None):
+ if callback:
+ assert callable(callback)
+
+ if type(ids) not in (list, tuple):
+ ids = (ids)
+
+ client = self.client_pool.get_object()
+ self._setup_client(client,
+ self.servers,
+ host,
+ meth_name)
+
+ def result_tuple(result, host):
+ data = None
+ result = self._pretty_result(result, host)
+ if isinstance(result, Exception):
+ status = result
+ else:
+ # no status for the call itself?
+ status = "OK"
+ if hasattr(result, "results"):
+ data = result.results
+ return (status, data)
+
+ if callback:
+ def my_callback(result):
+ self.client_pool.return_object(client)
+ callback(*result_tuple(result, host))
+
+ t = CallThread(self.call_client_retry, my_callback,
+ client, meth_name, ids)
+ t.start()
+ else:
+ def my_process_results(result):
+ return result_tuple(result, host)
+
+ res = self._call_sync(self.call_client_retry, my_process_results,
+ client, meth_name, ids)
+ self.client_pool.return_object(client)
+ return res;
+
class AviaryOperations(Catalog):
def __init__(self, name, datadir,
locator_uri="",
Modified: branches/tmckay/sage/rpc-defs/aviary/aviary-common.xsd
===================================================================
--- branches/tmckay/sage/rpc-defs/aviary/aviary-common.xsd 2013-01-18 23:19:32 UTC (rev 5662)
+++ branches/tmckay/sage/rpc-defs/aviary/aviary-common.xsd 2013-01-22 19:56:02 UTC (rev 5663)
@@ -48,8 +48,9 @@
<xs:complexType name="Attribute">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
- <xs:element name="type" type="tns:AttributeType"/>
+ <xs:element name="type" type="tns:AttributeType" minOccurs="0"/>
<xs:element name="value" type="xs:string"/>
+ <xs:element name="desc" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<!-- might just want to use the following just for returning data like in getJobDetails -->
@@ -62,6 +63,8 @@
<xs:restriction base="xs:string">
<xs:enumeration value="LINUX"/>
<xs:enumeration value="WINDOWS"/>
+ <xs:enumeration value="OSX"/>
+ <xs:enumeration value="OTHER"/>
<!-- can expand later -->
</xs:restriction>
</xs:simpleType>
@@ -69,6 +72,7 @@
<xs:restriction base="xs:string">
<xs:enumeration value="INTEL"/>
<xs:enumeration value="X86_64"/>
+ <xs:enumeration value="OTHER"/>
<!-- can expand later -->
</xs:restriction>
</xs:simpleType>
@@ -105,8 +109,12 @@
<xs:sequence>
<xs:element name="name" type="xs:string" minOccurs="0"/>
<xs:element name="owner" type="xs:string" minOccurs="0"/>
- <xs:element name="qdate" type="xs:int" minOccurs="0"/>
+ <xs:element name="qdate" type="xs:int" minOccurs="0"/>
</xs:sequence>
+ <!-- where this submission was created in the condor space -->
+ <!-- TODO: tactical hiding for backward compat, revisit -->
+ <xs:attribute name="pool" type="xs:string"/>
+ <xs:attribute name="scheduler" type="xs:string"/>
</xs:complexType>
<xs:complexType name="JobID">
<xs:sequence>
@@ -150,7 +158,7 @@
<xs:element name="removed" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
- <xs:complexType name="SubmissionSummary">
+ <xs:complexType name="SubmissionSummary">
<xs:sequence>
<xs:element name="id" type="tns:SubmissionID"/>
<xs:element name="status" type="tns:Status"/>
@@ -197,24 +205,151 @@
</xs:simpleType>
<xs:complexType name="ResourceID">
<xs:sequence>
- <xs:element name="resource" type="tns:ResourceType"/>
+ <xs:element name="resource" type="tns:ResourceType" default="COLLECTOR"/>
<xs:element name="pool" type="xs:string" minOccurs="0"/>
<xs:element name="name" type="xs:string" minOccurs="0"/>
+ <xs:element name="address" type="xs:string" minOccurs="0"/>
<xs:element name="sub_type" type="xs:string" minOccurs="0"/>
+ <xs:element name="birthdate" type="xs:int" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ResourceLocation">
<xs:sequence>
<xs:element name="id" type="tns:ResourceID"/>
- <xs:element name="location" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="location" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="ScanMode">
- <!-- a set of options for selecting how we scan a contiguous set of ids -->
- <!-- only meaningful when used with an offset -->
<xs:restriction base="xs:string">
- <xs:enumeration value="AFTER"/>
- <xs:enumeration value="BEFORE"/>
- </xs:restriction>
- </xs:simpleType>
+ <xs:enumeration value="AFTER"/>
+ <xs:enumeration value="BEFORE"/>
+ </xs:restriction>
+ <!-- a set of options for selecting how we scan a contiguous set of ids -->
+ <!-- only meaningful when used with an offset -->
+ </xs:simpleType>
+ <xs:complexType name="CollectorSummary">
+ <xs:sequence>
+ <xs:element name="running_jobs" type="xs:int"/>
+ <xs:element name="idle_jobs" type="xs:int"/>
+ <xs:element name="total_hosts" type="xs:int"/>
+ <xs:element name="claimed_hosts" type="xs:int"/>
+ <xs:element name="unclaimed_hosts" type="xs:int"/>
+ <xs:element name="owner_hosts" type="xs:int"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="Collector">
+ <xs:sequence>
+ <xs:element name="id" type="tns:ResourceID"/>
+ <xs:element name="status" type="tns:Status"/>
+ <xs:element name="summary" type="tns:CollectorSummary" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="MasterSummary">
+ <xs:sequence>
+ <xs:element name="arch" type="tns:ArchType"/>
+ <xs:element name="os" type="tns:OSType"/>
+ <xs:element name="real_uid" type="xs:int"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="Master">
+ <xs:sequence>
+ <xs:element name="id" type="tns:ResourceID"/>
+ <xs:element name="status" type="tns:Status"/>
+ <xs:element name="summary" type="tns:MasterSummary" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="NegotiatorSummary">
+ <xs:sequence>
+ <xs:element name="match_rate" type="xs:double"/>
+ <xs:element name="matches" type="xs:int"/>
+ <xs:element name="duration" type="xs:int"/>
+ <xs:element name="schedulers" type="xs:int"/>
+ <xs:element name="active_submitters" type="xs:int"/>
+ <xs:element name="idle_jobs" type="xs:int"/>
+ <xs:element name="jobs_considered" type="xs:int"/>
+ <xs:element name="rejections" type="xs:int"/>
+ <xs:element name="total_slots" type="xs:int"/>
+ <xs:element name="candidate_slots" type="xs:int"/>
+ <xs:element name="trimmed_slots" type="xs:int"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="Negotiator">
+ <xs:sequence>
+ <xs:element name="id" type="tns:ResourceID"/>
+ <xs:element name="status" type="tns:Status"/>
+ <xs:element name="summary" type="tns:NegotiatorSummary" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="SchedulerSummary">
+ <xs:sequence>
+ <xs:element name="queue_created" type="xs:dateTime"/>
+ <xs:element name="max_jobs_running" type="xs:int"/>
+ <xs:element name="users" type="xs:int"/>
+ <xs:element name="ads" type="xs:int"/>
+ <xs:element name="running" type="xs:int"/>
+ <xs:element name="held" type="xs:int"/>
+ <xs:element name="idle" type="xs:int"/>
+ <xs:element name="removed" type="xs:int"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="Scheduler">
+ <xs:sequence>
+ <xs:element name="id" type="tns:ResourceID"/>
+ <xs:element name="status" type="tns:Status"/>
+ <xs:element name="summary" type="tns:SchedulerSummary" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="SlotType">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="STATIC"/>
+ <xs:enumeration value="PARTITIONABLE"/>
+ <xs:enumeration value="DYNAMIC"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="SlotSummary">
+ <xs:sequence>
+ <xs:element name="arch" type="tns:ArchType"/>
+ <xs:element name="os" type="tns:OSType"/>
+ <xs:element name="activity" type="xs:string"/>
+ <xs:element name="state" type="xs:string"/>
+ <xs:element name="cpus" type="xs:int"/>
+ <xs:element name="disk" type="xs:int"/>
+ <xs:element name="memory" type="xs:int"/>
+ <xs:element name="swap" type="xs:int"/>
+ <xs:element name="mips" type="xs:int"/>
+ <xs:element name="load_avg" type="xs:double"/>
+ <xs:element name="start" type="xs:string"/>
+ <xs:element name="domain" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="Slot">
+ <xs:sequence>
+ <xs:element name="id" type="tns:ResourceID"/>
+ <xs:element name="status" type="tns:Status"/>
+ <xs:element name="slot_type" type="tns:SlotType" default="STATIC" minOccurs="0"/>
+ <xs:element name="summary" type="tns:SlotSummary" minOccurs="0"/>
+ <xs:element name="dynamic_slots" type="tns:Slot" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="SubmitterID">
+ <xs:sequence>
+ <xs:element name="name" type="xs:string" minOccurs="0"/>
+ <xs:element name="machine" type="xs:string" minOccurs="0"/>
+ <xs:element name="scheduler" type="xs:string" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="SubmitterSummary">
+ <xs:sequence>
+ <xs:element name="running" type="xs:int"/>
+ <xs:element name="held" type="xs:int"/>
+ <xs:element name="idle" type="xs:int"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="Submitter">
+ <xs:sequence>
+ <xs:element name="id" type="tns:SubmitterID"/>
+ <xs:element name="status" type="tns:Status"/>
+ <xs:element name="summary" type="tns:SubmitterSummary" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
</xs:schema>
11 years, 3 months
r5662 - branches/tmckay/sage/python/sage/aviary
by tmckay@fedoraproject.org
Author: tmckay
Date: 2013-01-18 23:19:32 +0000 (Fri, 18 Jan 2013)
New Revision: 5662
Modified:
branches/tmckay/sage/python/sage/aviary/aviaryoperations.py
Log:
Move boiler plate for server list into _init_server_list
Modified: branches/tmckay/sage/python/sage/aviary/aviaryoperations.py
===================================================================
--- branches/tmckay/sage/python/sage/aviary/aviaryoperations.py 2013-01-18 22:41:44 UTC (rev 5661)
+++ branches/tmckay/sage/python/sage/aviary/aviaryoperations.py 2013-01-18 23:19:32 UTC (rev 5662)
@@ -346,12 +346,10 @@
self.Owner = owner
class _AviaryCommon(object):
- def __init__(self, transports, servers, wsdl, resource, subtype):
+ def __init__(self, transports, wsdl):
+ self.servers = None
self.transports = transports
- self.servers = servers
- self.resource = resource
- self.subtype = subtype
self.client_pool = ClientPool(wsdl, None)
# Things in Aviary that were born as swap-ins/analogs for
@@ -361,6 +359,24 @@
# to wrap results this way. Let it be controlled.
self.use_MethodResult_for_sync_calls = True
+ def _init_servers_list(self,
+ locator,
+ urls,
+ def_port,
+ def_service,
+ resource, subtype):
+
+ self.resource = resource
+ self.subtype = subtype
+ if locator:
+ self.servers = ServerList(locator, resource, subtype)
+ elif urls and type(urls) == str:
+ self.servers = FixedServerList(urls,
+ def_port,
+ def_service,
+ resource,
+ subtype)
+
def get_hosts(self, resource, subtype):
if resource == "ANY" or \
(resource == self.resource and \
@@ -485,29 +501,18 @@
class _AviaryJobMethods(_AviaryCommon):
def __init__(self, locator, transports, datadir, job_servers):
- resource = "SCHEDULER"
- subtype = "JOB"
- if locator:
- servers = ServerList(locator,
- resource, subtype)
- elif job_servers and type(job_servers) == str:
- servers = FixedServerList(job_servers,
- "9090",
- "/services/job/",
- resource,
- subtype)
- else:
- servers = None
-
wsdl = "file:" + os.path.join(get_datadir(datadir, "job"),
"aviary-job.wsdl")
- super(_AviaryJobMethods, self).__init__(transports,
- servers,
- wsdl,
- resource,
- subtype)
+ super(_AviaryJobMethods, self).__init__(transports, wsdl)
+ self._init_servers_list(locator,
+ job_servers,
+ "9090",
+ "/services/job/",
+ "SCHEDULER",
+ "JOB")
+
def set_job_attribute(self, scheduler, job_id, name, value, callback, submission):
assert callable(callback)
@@ -685,29 +690,19 @@
class _AviaryQueryMethods(_AviaryCommon):
def __init__(self, locator, transports, datadir, query_servers):
- resource = "CUSTOM"
- subtype = "QUERY_SERVER"
- if locator:
- servers = ServerList(locator,
- resource, subtype)
- elif query_servers and type(query_servers) == str:
- servers = FixedServerList(query_servers,
- "9091",
- "/services/query/",
- resource,
- subtype)
- else:
- servers = None
-
wsdl = "file:" + os.path.join(get_datadir(datadir,"query"),
"aviary-query.wsdl")
+
+ super(_AviaryQueryMethods, self).__init__(transports, wsdl)
- super(_AviaryQueryMethods, self).__init__(transports,
- servers,
- wsdl,
- resource,
- subtype)
+ self._init_servers_list(locator,
+ query_servers,
+ "9091",
+ "/services/query/",
+ "CUSTOM",
+ "QUERY_SERVER")
+
def fetch_job_data(self, job_server, job_id, ftype, file, start, end,
scheduler_name, submission, *args, **kwargs):
'''
@@ -1017,29 +1012,18 @@
class _AviaryHadoopMethods(_AviaryCommon):
def __init__(self, locator, transports, datadir, hadoop_servers):
-
- resource = "SCHEDULER"
- subtype = "HADOOP"
- if locator:
- servers = ServerList(locator,
- resource, subtype)
- elif hadoop_servers and type(hadoop_servers) == str:
- servers = FixedServerList(hadoop_servers,
- "9090",
- "/services/hadoop/",
- resource,
- subtype)
- else:
- servers = None
-
+
wsdl = "file:" + os.path.join(get_datadir(datadir, "hadoop"),
"aviary-hadoop.wsdl")
+
+ super(_AviaryHadoopMethods, self).__init__(transports, wsdl)
- super(_AviaryHadoopMethods, self).__init__(transports,
- servers,
- wsdl,
- resource,
- subtype)
+ self._init_servers_list(locator,
+ hadoop_servers,
+ "9090",
+ "/services/hadoop/",
+ "SCHEDULER",
+ "HADOOP")
# Equivalence? We don't want no stinking QMF structural equivalence!
self.use_MethodResult_for_sync_calls = False
@@ -1232,29 +1216,19 @@
class _AviaryCollectorMethods(_AviaryCommon):
def __init__(self, locator, transports, datadir, collector_servers):
- resource = "COLLECTOR"
- subtype = ""
- if locator:
- servers = ServerList(locator,
- resource, subtype)
- elif collector_servers and type(collector_servers) == str:
- servers = FixedServerList(collector_servers,
- "9000",
- "/services/collector/",
- resource,
- subtype)
- else:
- servers = None
-
wsdl = "file:" + os.path.join(get_datadir(datadir, "collector"),
"aviary-collector.wsdl")
+
+ super(_AviaryCollectorMethods, self).__init__(transports, wsdl)
- super(_AviaryCollectorMethods, self).__init__(transports,
- servers,
- wsdl,
- resource,
- subtype)
+ self._init_servers_list(locator,
+ collector_servers,
+ "9000",
+ "/services/collector/",
+ "COLLECTOR",
+ "")
+
# Equivalence? We don't want no stinking QMF structural equivalence!
self.use_MethodResult_for_sync_calls = False
11 years, 3 months
r5661 - branches/tmckay/sage/python/sage/aviary
by tmckay@fedoraproject.org
Author: tmckay
Date: 2013-01-18 22:41:44 +0000 (Fri, 18 Jan 2013)
New Revision: 5661
Modified:
branches/tmckay/sage/python/sage/aviary/aviaryoperations.py
Log:
Add skeleton collector method type
Modified: branches/tmckay/sage/python/sage/aviary/aviaryoperations.py
===================================================================
--- branches/tmckay/sage/python/sage/aviary/aviaryoperations.py 2013-01-18 22:24:28 UTC (rev 5660)
+++ branches/tmckay/sage/python/sage/aviary/aviaryoperations.py 2013-01-18 22:41:44 UTC (rev 5661)
@@ -1229,6 +1229,35 @@
self.client_pool.return_object(client)
return res;
+class _AviaryCollectorMethods(_AviaryCommon):
+ def __init__(self, locator, transports, datadir, collector_servers):
+
+ resource = "COLLECTOR"
+ subtype = ""
+ if locator:
+ servers = ServerList(locator,
+ resource, subtype)
+ elif collector_servers and type(collector_servers) == str:
+ servers = FixedServerList(collector_servers,
+ "9000",
+ "/services/collector/",
+ resource,
+ subtype)
+ else:
+ servers = None
+
+ wsdl = "file:" + os.path.join(get_datadir(datadir, "collector"),
+ "aviary-collector.wsdl")
+
+ super(_AviaryCollectorMethods, self).__init__(transports,
+ servers,
+ wsdl,
+ resource,
+ subtype)
+
+ # Equivalence? We don't want no stinking QMF structural equivalence!
+ self.use_MethodResult_for_sync_calls = False
+
class AviaryOperations(Catalog):
def __init__(self, name, datadir,
locator_uri="",
@@ -1268,6 +1297,11 @@
self.mechs.append(_AviaryHadoopMethods(self.locator,
transports,
datadir, hadoop_servers))
+
+ if collector_servers:
+ self.mechs.append(_AviaryCollectorMethods(self.locator,
+ transports,
+ datadir, collector_servers))
self.add_mechanisms(self.mechs)
def get_hosts(self, resource, subtype=""):
11 years, 3 months
r5660 - in branches/tmckay: cumin/bin cumin/etc cumin/python/cumin mint/python/mint sage/python/sage/aviary
by tmckay@fedoraproject.org
Author: tmckay
Date: 2013-01-18 22:24:28 +0000 (Fri, 18 Jan 2013)
New Revision: 5660
Modified:
branches/tmckay/cumin/bin/cumin-data
branches/tmckay/cumin/etc/cumin.conf
branches/tmckay/cumin/python/cumin/config.py
branches/tmckay/mint/python/mint/main.py
branches/tmckay/sage/python/sage/aviary/aviaryoperations.py
Log:
Add aviary-collector-servers config
Modified: branches/tmckay/cumin/bin/cumin-data
===================================================================
--- branches/tmckay/cumin/bin/cumin-data 2013-01-18 21:52:28 UTC (rev 5659)
+++ branches/tmckay/cumin/bin/cumin-data 2013-01-18 22:24:28 UTC (rev 5660)
@@ -42,6 +42,7 @@
mint.sasl_mech_list = values.sasl_mech_list.upper()
mint.aviary_query_servers = values.aviary_query_servers
+ mint.aviary_collector_servers = values.aviary_collector_servers
mint.aviary_locator = values.aviary_locator
mint.aviary_key = values.aviary_key
mint.aviary_cert = values.aviary_cert
Modified: branches/tmckay/cumin/etc/cumin.conf
===================================================================
--- branches/tmckay/cumin/etc/cumin.conf 2013-01-18 21:52:28 UTC (rev 5659)
+++ branches/tmckay/cumin/etc/cumin.conf 2013-01-18 22:24:28 UTC (rev 5660)
@@ -36,6 +36,11 @@
# Default is shown.
# aviary-query-servers: http://localhost:9091
+# The value for this parameter is a comma separated list of URLs for Aviary
+# collector servers. If the Aviary locator is used, this value will be overriden.
+# Default is shown.
+# aviary-collector-servers: http://localhost:9000
+
# The locator allows Cumin to retrie ve values for Aviary job servers and
# Aviary query servers automatically. If the Aviary locator is enabled the
# values for aviary-job-servers and aviary-query-servers will be overriden.
Modified: branches/tmckay/cumin/python/cumin/config.py
===================================================================
--- branches/tmckay/cumin/python/cumin/config.py 2013-01-18 21:52:28 UTC (rev 5659)
+++ branches/tmckay/cumin/python/cumin/config.py 2013-01-18 22:24:28 UTC (rev 5660)
@@ -99,7 +99,7 @@
def __init__(self, section_name="data", strict_section=False):
super(CuminDataConfig, self).__init__(section_name)
- data = BrokeredConfigSection(self, self.section_name, strict_section)
+ data = CuminDataConfigSection(self, self.section_name, strict_section)
_common_data_section(self, data, self.section_name)
class CuminReportConfig(CuminConfig):
@@ -206,6 +206,14 @@
param = ConfigParameter(self, "aviary-prefer-condor", bool)
param.default = True
+class CuminDataConfigSection(BrokeredConfigSection):
+ def __init__(self, config, name, strict_section=False):
+ super(CuminDataConfigSection, self).__init__(config, name,
+ strict_section)
+ # data uses the collector service, too
+ param = ConfigParameter(self, "aviary-collector-servers", str)
+ param.default = "http://localhost:9000"
+
class CuminWebConfigSection(BrokeredConfigSection):
def __init__(self, config, name, strict_section=False):
super(CuminWebConfigSection, self).__init__(config, name,
Modified: branches/tmckay/mint/python/mint/main.py
===================================================================
--- branches/tmckay/mint/python/mint/main.py 2013-01-18 21:52:28 UTC (rev 5659)
+++ branches/tmckay/mint/python/mint/main.py 2013-01-18 22:24:28 UTC (rev 5660)
@@ -53,6 +53,7 @@
# Aviary interface.
self.aviary_query_servers = ""
+ self.aviary_collector_servers = ""
self.aviary_key = ""
self.aviary_cert = ""
self.aviary_root_cert = ""
@@ -123,6 +124,7 @@
None, # we don't care about job_servers
self.aviary_query_servers,
None, # or hadoop servers
+ self.aviary_collector_servers,
key=self.aviary_key,
cert=self.aviary_cert,
root_cert=self.aviary_root_cert,
@@ -136,12 +138,16 @@
log.info("%s Aviary locator interface" % \
((self.aviary_locator and \
- (self.aviary_query_servers) and \
+ (self.aviary_query_servers or \
+ self.aviary_collector_servers) and \
imports_ok) and "Enabled" or "Disabled"))
log.info("%s Aviary interface for query operations." % \
((self.aviary_query_servers and imports_ok) and "Enabled" or "Disabled"))
+ log.info("%s Aviary interface for collector operations." % \
+ ((self.aviary_collector_servers and imports_ok) and "Enabled" or "Disabled"))
+
def init(self):
log.info("Initializing %s", self)
Modified: branches/tmckay/sage/python/sage/aviary/aviaryoperations.py
===================================================================
--- branches/tmckay/sage/python/sage/aviary/aviaryoperations.py 2013-01-18 21:52:28 UTC (rev 5659)
+++ branches/tmckay/sage/python/sage/aviary/aviaryoperations.py 2013-01-18 22:24:28 UTC (rev 5660)
@@ -1235,6 +1235,7 @@
job_servers=True,
query_servers=True,
hadoop_servers=True,
+ collector_servers=True,
key="", cert="", root_cert="", domain_verify=True):
super(AviaryOperations, self).__init__()
11 years, 3 months
r5659 - branches/tmckay/sage/rpc-defs/aviary
by tmckay@fedoraproject.org
Author: tmckay
Date: 2013-01-18 21:52:28 +0000 (Fri, 18 Jan 2013)
New Revision: 5659
Added:
branches/tmckay/sage/rpc-defs/aviary/aviary-collector.wsdl
branches/tmckay/sage/rpc-defs/aviary/aviary-collector.xsd
Log:
Add in collector service definitions
Added: branches/tmckay/sage/rpc-defs/aviary/aviary-collector.wsdl
===================================================================
--- branches/tmckay/sage/rpc-defs/aviary/aviary-collector.wsdl (rev 0)
+++ branches/tmckay/sage/rpc-defs/aviary/aviary-collector.wsdl 2013-01-18 21:52:28 UTC (rev 5659)
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+/*
+ * Copyright 2000-2012 Red Hat, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://grid.redhat.com/aviary-collector/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:coll="http://collector.aviary.grid.redhat.com" xmlns:ns="http://common.aviary.grid.redhat.com" targetNamespace="http://grid.redhat.com/aviary-collector/" name="aviary-collector">
+ <wsdl:types>
+ <xsd:schema targetNamespace="http://grid.redhat.com/aviary-collector/">
+ <xsd:import schemaLocation="aviary-collector.xsd" namespace="http://collector.aviary.grid.redhat.com"/>
+ </xsd:schema>
+ </wsdl:types>
+ <wsdl:message name="GetCollectorRequest">
+ <wsdl:part name="parameters" element="coll:GetCollector"/>
+ </wsdl:message>
+ <wsdl:message name="GetCollectorResponse">
+ <wsdl:part name="parameters" element="coll:GetCollectorResponse"/>
+ </wsdl:message>
+ <wsdl:message name="GetMasterRequest">
+ <wsdl:part name="parameters" element="coll:GetMaster"/>
+ </wsdl:message>
+ <wsdl:message name="GetMasterResponse">
+ <wsdl:part name="parameters" element="coll:GetMasterResponse"/>
+ </wsdl:message>
+ <wsdl:message name="GetMasterIDRequest">
+ <wsdl:part name="parameters" element="coll:GetMasterID"/>
+ </wsdl:message>
+ <wsdl:message name="GetMasterIDResponse">
+ <wsdl:part name="parameters" element="coll:GetMasterIDResponse"/>
+ </wsdl:message>
+ <wsdl:message name="GetNegotiatorRequest">
+ <wsdl:part name="parameters" element="coll:GetNegotiator"/>
+ </wsdl:message>
+ <wsdl:message name="GetNegotiatorResponse">
+ <wsdl:part name="parameters" element="coll:GetNegotiatorResponse"/>
+ </wsdl:message>
+ <wsdl:message name="GetSchedulerRequest">
+ <wsdl:part name="parameters" element="coll:GetScheduler"/>
+ </wsdl:message>
+ <wsdl:message name="GetSchedulerResponse">
+ <wsdl:part name="parameters" element="coll:GetSchedulerResponse"/>
+ </wsdl:message>
+ <wsdl:message name="GetSlotRequest">
+ <wsdl:part name="parameters" element="coll:GetSlot"/>
+ </wsdl:message>
+ <wsdl:message name="GetSlotResponse">
+ <wsdl:part name="parameters" element="coll:GetSlotResponse"/>
+ </wsdl:message>
+ <wsdl:message name="GetSlotIDRequest">
+ <wsdl:part name="parameters" element="coll:GetSlotID"/>
+ </wsdl:message>
+ <wsdl:message name="GetSlotIDResponse">
+ <wsdl:part name="parameters" element="coll:GetSlotIDResponse"/>
+ </wsdl:message>
+ <wsdl:message name="GetSubmitterRequest">
+ <wsdl:part name="parameters" element="coll:GetSubmitter"/>
+ </wsdl:message>
+ <wsdl:message name="GetSubmitterResponse">
+ <wsdl:part name="parameters" element="coll:GetSubmitterResponse"/>
+ </wsdl:message>
+ <wsdl:message name="GetAttributesRequest">
+ <wsdl:part name="parameters" element="coll:GetAttributes"/>
+ </wsdl:message>
+ <wsdl:message name="GetAttributesResponse">
+ <wsdl:part name="parameters" element="coll:GetAttributesResponse"/>
+ </wsdl:message>
+ <wsdl:portType name="AviaryCollector">
+ <wsdl:operation name="getCollector">
+ <wsdl:input message="tns:GetCollectorRequest"/>
+ <wsdl:output message="tns:GetCollectorResponse"/>
+ </wsdl:operation>
+ <wsdl:operation name="getMaster">
+ <wsdl:input message="tns:GetMasterRequest"/>
+ <wsdl:output message="tns:GetMasterResponse"/>
+ </wsdl:operation>
+ <wsdl:operation name="getMasterID">
+ <wsdl:input message="tns:GetMasterIDRequest"/>
+ <wsdl:output message="tns:GetMasterIDResponse"/>
+ </wsdl:operation>
+ <wsdl:operation name="getNegotiator">
+ <wsdl:input message="tns:GetNegotiatorRequest"/>
+ <wsdl:output message="tns:GetNegotiatorResponse"/>
+ </wsdl:operation>
+ <wsdl:operation name="getScheduler">
+ <wsdl:input message="tns:GetSchedulerRequest"/>
+ <wsdl:output message="tns:GetSchedulerResponse"/>
+ </wsdl:operation>
+ <wsdl:operation name="getSlot">
+ <wsdl:input message="tns:GetSlotRequest"/>
+ <wsdl:output message="tns:GetSlotResponse"/>
+ </wsdl:operation>
+ <wsdl:operation name="getSlotID">
+ <wsdl:input message="tns:GetSlotIDRequest"/>
+ <wsdl:output message="tns:GetSlotIDResponse"/>
+ </wsdl:operation>
+ <wsdl:operation name="getSubmitter">
+ <wsdl:input message="tns:GetSubmitterRequest"/>
+ <wsdl:output message="tns:GetSubmitterResponse"/>
+ </wsdl:operation>
+ <wsdl:operation name="getAttributes">
+ <wsdl:input message="tns:GetAttributesRequest"/>
+ <wsdl:output message="tns:GetAttributesResponse"/>
+ </wsdl:operation>
+ </wsdl:portType>
+ <wsdl:binding name="AviaryCollectorSOAPBinding" type="tns:AviaryCollector">
+ <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+ <wsdl:operation name="getCollector">
+ <soap:operation soapAction="http://grid.redhat.com/aviary-collector/collector"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="getMaster">
+ <soap:operation soapAction="http://grid.redhat.com/aviary-collector/master"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="getMasterID">
+ <soap:operation soapAction="http://grid.redhat.com/aviary-collector/master/id"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="getNegotiator">
+ <soap:operation soapAction="http://grid.redhat.com/aviary-collector/negotiator"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="getScheduler">
+ <soap:operation soapAction="http://grid.redhat.com/aviary-collector/scheduler"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="getSlot">
+ <soap:operation soapAction="http://grid.redhat.com/aviary-collector/slot"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="getSlotID">
+ <soap:operation soapAction="http://grid.redhat.com/aviary-collector/slot/id"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="getSubmitter">
+ <soap:operation soapAction="http://grid.redhat.com/aviary-collector/submitter"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="getAttributes">
+ <soap:operation soapAction="http://grid.redhat.com/aviary-collector/attributes"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:service name="AviaryCollectorService">
+ <wsdl:port name="AviaryCollectorSOAPPort" binding="tns:AviaryCollectorSOAPBinding">
+ <soap:address location="http://localhost"/>
+ </wsdl:port>
+ </wsdl:service>
+</wsdl:definitions>
Added: branches/tmckay/sage/rpc-defs/aviary/aviary-collector.xsd
===================================================================
--- branches/tmckay/sage/rpc-defs/aviary/aviary-collector.xsd (rev 0)
+++ branches/tmckay/sage/rpc-defs/aviary/aviary-collector.xsd 2013-01-18 21:52:28 UTC (rev 5659)
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 2000-2012 Red Hat, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:coll="http://collector.aviary.grid.redhat.com" xmlns:mrg="http://common.aviary.grid.redhat.com" targetNamespace="http://collector.aviary.grid.redhat.com">
+ <xs:import namespace="http://common.aviary.grid.redhat.com" schemaLocation="aviary-common.xsd"/>
+ <!-- declare message-level elements using anonymous complex types for simpler generated types -->
+ <!-- use of refs, inheritance into anonymous types, etc. eschewed for simplicity and interop -->
+ <xs:element name="GetCollector">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="ids" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:attribute name="partialMatches" type="xs:boolean" default="true"/>
+ <xs:attribute name="includeSummaries" type="xs:boolean" default="true"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetCollectorResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="results" type="mrg:Collector" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetNegotiator">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="ids" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:attribute name="partialMatches" type="xs:boolean" default="true"/>
+ <xs:attribute name="includeSummaries" type="xs:boolean" default="true"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetNegotiatorResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="results" type="mrg:Negotiator" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetScheduler">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="ids" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:attribute name="partialMatches" type="xs:boolean" default="true"/>
+ <xs:attribute name="includeSummaries" type="xs:boolean" default="true"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetSchedulerResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="results" type="mrg:Scheduler" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetSubmitter">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="ids" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:attribute name="partialMatches" type="xs:boolean" default="true"/>
+ <xs:attribute name="includeSummaries" type="xs:boolean" default="true"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetSubmitterResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="results" type="mrg:Submitter" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <!-- Slot and Master are the resource types that most influence scale -->
+ <xs:element name="GetMaster">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="ids" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:attribute name="partialMatches" type="xs:boolean" default="true"/>
+ <xs:attribute name="includeSummaries" type="xs:boolean" default="true"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetMasterResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="results" type="mrg:Master" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetMasterID">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="size" type="xs:int"/>
+ <xs:element name="mode" type="mrg:ScanMode" minOccurs="0"/>
+ <!-- the resource id in the offset is our "iterator" pointer -->
+ <xs:element name="offset" type="mrg:ResourceID" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetMasterIDResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="results" type="mrg:Master" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="remaining" type="xs:int"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetSlot">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="ids" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:attribute name="partialMatches" type="xs:boolean" default="true"/>
+ <xs:attribute name="includeSummaries" type="xs:boolean" default="true"/>
+ <xs:attribute name="includeDynamic" type="xs:boolean" default="true"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetSlotResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="results" type="mrg:Slot" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <!-- retrieving by page size and offset ONLY applies to STATIC and PARTITIONABLE slot types -->
+ <xs:element name="GetSlotID">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="size" type="xs:int"/>
+ <xs:element name="mode" type="mrg:ScanMode" minOccurs="0"/>
+ <!-- the resource id in the offset is our "iterator" pointer -->
+ <xs:element name="offset" type="mrg:ResourceID" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetSlotIDResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="results" type="mrg:Slot" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="remaining" type="xs:int"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:complexType name="AttributeRequest">
+ <xs:sequence>
+ <xs:element name="id" type="mrg:ResourceID"/>
+ <xs:element name="names" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="AttributeResponse">
+ <xs:sequence>
+ <xs:element name="id" type="mrg:ResourceID"/>
+ <xs:element name="attrs" type="mrg:Attribute" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="status" type="mrg:Status"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="GetAttributes">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="ids" type="coll:AttributeRequest" minOccurs="1" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:attribute name="valuesOnly" type="xs:boolean" default="false"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="GetAttributesResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="results" type="coll:AttributeResponse" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="status" type="mrg:Status"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
11 years, 3 months