250 likes | 375 Views
Selected Project Highlights : An Overview of Gush. Jeannie Albrecht Williams College http://gush.cs.williams.edu. Project Overview. How do experimenters actually use GENI? Goal: Develop abstractions and tools for addressing the challenges of managing distributed applications on GENI
E N D
Selected Project Highlights:An Overview of Gush Jeannie Albrecht Williams College http://gush.cs.williams.edu
Project Overview • How do experimenters actually use GENI? • Goal: Develop abstractions and tools for addressing the challenges of managing distributed applications on GENI • Make it easy for a range of users to run experiments on GENI • Strategy • Make minimal assumptions about resources and allocations • Leverage other services to locate resources/obtain credentials • Interface with other user tools to improve functionality • Hide complexity and use one common user interface to interact with different CFs (i.e., PlanetLab, ProtoGENI, ORCA)
Gush • A distributed application managementinfrastructure • Designed to simplify deployment of distributed applications • Provides abstractions for configuration and management • Allows users to “remotely control” GENI resources running experiments Start Application Describe Application Describe Application Acquire Resources Acquire Resources Configure Resources Configure Resources Start Application Monitor Application Monitor Application Cleanup Cleanup
Process Block 1 Join Network Process Block 2 Receive Files Process Block 2 Join Network Process Block 3 Send Files Step 1: Describe Application • Describe experiment using application “building blocks” • Create customized control flow for distributed applications • Application specification blocks are described using XML Application Block Component Block 1 Senders Component Block 2 Receivers Process Block 1 Prepare Files Barrier Block 1 Phase 1 Barrier Barrier Block 1 Phase 1 Barrier
Step 1: App Spec <gush> <project name="simple"> <software name="SimpleSoftwareName" type=“tar”> <package name="Package" type="web"> <path>http://sysnet.cs.williams.edu/~jeannie/software.tar</path> <dest_path>software.tar</dest_path> </package> </software> <component name="Cluster1"> <rspec> <num_hosts>20</num_hosts> </rspec> <software name="SimpleSoftwareName" /> <resources> <resource type=“geni-plc” group=“williams_gush2” /> <resource type=“geni-pg” group=“gush-jeannie” /> <resource type=“geni-orca” group=“gush-orca-jeannie” /> </resources> </component> <experiment name="simple"> <execution> <component_block name="cb1"> <component name="Cluster1" /> <process_block name="p2"> <process name="cat"> <path>cat</path> <cmdline> <arg>software.txt</arg> </cmdline> </process> </process_block> </component_block> </execution> </experiment> </project> </gush> SOFTWARE DEFINE RESOURCE POOL(S) DEFINE PROCESSES (EXECUTION)
User Interface Application Block Component Block Workflow Block Resource Discovery and Acquisition Barrier Block Process Block Software Process Mon Host Monitor Resource Manager Barriers Processes File Manager Communication Fabric I/O and Timers Gush Internal Structure
Step 2: Acquire Resources Describe Application Acquire Resources Configure Resources Start Application Monitor Application Cleanup • Gush supports experimentation with PlanetLab, ProtoGENI, and ORCA resources • How can we find “good” resources? • We may want machines with specific characteristics • Reserve machines a priori with specific characteristics on ProtoGENI and ORCA • Use SWORD (http://sword.cs.williams.edu) on PlanetLab to find “good” machines (see Gush wiki for more info)
Gush Resource Directory <?xml version="1.0" encoding="UTF-8"?> <gush> <resource_manager type=“geni-plc”> <port_map slice=”williams_gush2" port="61500"/> </resource_manager> <resource_manager type=“geni-pg”> <port_map slice=”gush-jeannie" port="61600"/> </resource_manager> <resource_manager type=“geni-orca”> <port_map slice=”gush-orca-jeannie" port="61700"/> </resource_manager> </gush> PlanetLab ProtoGENI ORCA Note: ProtoGENI and ORCA slivers must be created BEFORE starting Gush!
Leveraging Omni • When Gush controller starts, it parses resource directory • Controller contacts (via XML-RPC) each aggregate manager (AM) specified using common GENI API • Gush uses a modified omni client and the “sliverstatus” option • Hides CF-specific nuances and differences from experimenters • Parses (very different!) output from each AM and creates Gush resource pool…
PlanetLab Sliver at http://www.planet-lab.org:12346: {'geni_resources': [{'geni_error': '', 'geni_status': 'ready', 'geni_urn': 'urn:publicid:IDN+plc:williams+sliver+gush2:22629:10859:0', 'pl_boot_state': 'boot', 'pl_hostname': 'planetlab2.williams.edu', 'pl_last_contact': 'Mon Jul 25 21:03:26 2011'}, {'geni_error': '', 'geni_status': 'ready', 'geni_urn': 'urn:publicid:IDN+plc:williams+sliver+gush2:22629:11060:0', 'pl_boot_state': 'boot', 'pl_hostname': 'planetlab5.williams.edu', 'pl_last_contact': 'Mon Jul 25 21:01:31 2011'}, {'geni_error': '', 'geni_status': 'ready', 'geni_urn': 'urn:publicid:IDN+plc:williams+sliver+gush2:22629:10860:0', 'pl_boot_state': 'boot', 'pl_hostname': 'planetlab3.williams.edu', 'pl_last_contact': 'Mon Jul 25 20:57:30 2011'}, {'geni_error': '', 'geni_status': 'ready', 'geni_urn': 'urn:publicid:IDN+plc:williams+sliver+gush2:22629:11059:0', 'pl_boot_state': 'boot', 'pl_hostname': 'planetlab4.williams.edu', 'pl_last_contact': 'Mon Jul 25 21:01:59 2011'}, {'geni_error': '', 'geni_status': 'ready', 'geni_urn': 'urn:publicid:IDN+plc:williams+sliver+gush2:22629:10858:0', 'pl_boot_state': 'boot', 'pl_hostname': 'planetlab1.williams.edu', 'pl_last_contact': 'Mon Jul 25 12:30:39 2011'}], 'geni_status': 'ready', 'geni_urn': 'urn:publicid:IDN+plc:williams+slice+gush2', 'pl_expires': 'Thu Aug 25 13:41:44 2011', 'pl_login': 'williams_gush2'}
ProtoGENI Sliver at https://www.emulab.net/protogeni/xmlrpc/am: {'geni_resources': [{'geni_error': '', 'geni_status': 'changing', 'geni_urn': 'urn:publicid:IDN+emulab.net+sliver+45994', 'pg_manifest': {'attributes': {'component_manager_urn': 'urn:publicid:IDN+emulab.net+authority+cm', 'component_manager_uuid': '28a10955-aa00-11dd-ad1f-001143e453fe', 'component_urn': 'urn:publicid:IDN+emulab.net+node+pc44', 'component_uuid': 'de9875c1-773e-102b-8eb4-001143e453fe', 'exclusive': 1, 'hostname': 'pc44.emulab.net', 'sliver_urn': 'urn:publicid:IDN+emulab.net+sliver+45994', 'sliver_uuid': '19a4884f-b723-11e0-b47a-001143e453fe', 'sshdport': 22, 'virtual_id': 'geni1', 'virtualization_subtype': 'raw', 'virtualization_type': 'emulab-vnode', 'xmlns': 'http://www.protogeni.net/resources/rspec/0.1'}, 'children': [{'attributes': {'name': 'urn:publicid:IDN+emulab.net+image+emulab-ops//FEDORA10-STD'}, 'children': [], 'name': 'disk_image'}, {'attributes': {}, 'children': [{'attributes': {'authentication': 'ssh-keys', 'hostname': 'pc44.emulab.net', 'port': 22, 'username': 'jeannie'}, 'children': [], 'name': 'login'}], 'name': 'services'}], 'name': 'node'}, 'pg_status': 'changing’}], 'geni_status': 'unknown', 'geni_urn': 'urn:publicid:IDN+emulab.net+slice+gush-jeannie', 'pg_expires': '2011-07-26 01:02:41', 'pg_status': 'changing'}
ORCA Sliver at https://geni.renci.org:11443/orca/xmlrpc: ' ************************************************************* [ Reservation UID: b39ca6b3-e332-43d5-98fd-c96c8a5c8821 | Resource Type: renci.vm | Units: 1 | Status: Active | Notices: Reservation b39ca6b3-e332-43d5-98fd-c96c8a5c8821 (Slice urn:publicid:IDN+emulab.net+slice+gush-orca-jeannie) is in state [Active,None]; ] [ Manifest properties: {unit.id = 61f548fe-41fe-45ad-a48e-e82e2553a87e} {unit.manage.port = 6002} {unit.manage.ip = 152.54.1.93} {unit.state = 2} {unit.domain = rencivmsite} {unit.actorid = cc748912-d46d-423a-a3d7-24062b81c596} {unit.cpu = 1.2} {unit.sliceid = b9a97509-b83a-489b-a514-2419b3b3bb63} {unit.resourceType = renci.vm} {unit.sequence = 2} {unit.rid = b39ca6b3-e332-43d5-98fd-c96c8a5c8821} {unit.ec2.instance = i-3C3A071F} {unit.hostname.url = http://geni-orca.renci.org/owl/rencivmsite.rdf#rencivmsite/Domain/vm} {unit.memory = 1.7} {unit.ndl.adomain = <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:j.0="http://geni-orca.renci.org/owl/compute.owl#" xmlns:j.2="http://geni-orca.renci.org/owl/ethernet.owl#" xmlns:j.1="http://geni-orca.renci.org/owl/layer.owl#" xmlns:owl="http://www.w3.org/2002/07/owl#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" xmlns:j.4="http://geni-orca.renci.org/owl/domain.owl#" xmlns:j.3="http://geni-orca.renci.org/owl/collections.owl#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:j.5="http://geni-orca.renci.org/owl/topology.owl#" > <rdf:Descriptionrdf:about="http://geni-orca.renci.org/owl/rencivmsite.rdf#rencivmsite/Domain/SwitchingMatrix"> <j.1:switchingCapability rdf:resource="http://geni-orca.renci.org/owl/ethernet.owl#EthernetNetworkElement"/> <rdf:typerdf:resource="http://geni-orca.renci.org/owl/topology.owl#SwitchingMatrix"/> </rdf:Description>
ORCA <rdf:Descriptionrdf:about="http://geni-orca.renci.org/owl/domain.owl#VM"> <rdf:typerdf:resource="http://geni-orca.renci.org/owl/domain.owl#Service"/> <rdf:typerdf:resource="http://www.w3.org/2000/01/rdf-schema#Resource"/> <rdf:typerdf:resource="http://geni-orca.renci.org/owl/domain.owl#ServiceElement"/> <rdf:typerdf:resource="http://geni-orca.renci.org/owl/domain.owl#ResourceType"/> <j.4:resourceTypeRank rdf:datatype="http://www.w3.org/2001/XMLSchema#int">10</j.4:resourceTypeRank> </rdf:Description> <rdf:Descriptionrdf:about="http://geni-orca.renci.org/owl/rencivmsite.rdf#Renci/Euca/GigabitEthernet/1/ethernet"> <rdf:typerdf:nodeID="A0"/> <j.5:connectedTo rdf:resource="http://geni-orca.renci.org/owl/renciNet.rdf#RenciNet/Juniper/3200/GigabitEthernet/gB/1/ethernet"/> <j.1:bandwidth rdf:datatype="http://www.w3.org/2001/XMLSchema#long">1000000000</j.1:bandwidth> <rdf:typerdf:resource="http://geni-orca.renci.org/owl/topology.owl#NetworkTransportElement"/> <rdf:typerdf:nodeID="A1"/> <rdf:typerdf:resource="http://geni-orca.renci.org/owl/ethernet.owl#EthernetNetworkElement"/> <rdf:typerdf:resource="http://geni-orca.renci.org/owl/collections.owl#Item"/> <j.5:interfaceOf rdf:resource="http://geni-orca.renci.org/owl/rencivmsite.rdf#Renci/Euca"/> <j.5:hostInterfaceName>eth1</j.5:hostInterfaceName> <j.5:interfaceOf rdf:resource="http://geni-orca.renci.org/owl/rencivmsite.rdf#rencivmsite/Domain/vm"/> <j.5:linkTo rdf:resource="http://geni-orca.renci.org/owl/renciNet.rdf#RenciNet/Juniper/3200/GigabitEthernet/gB/1/ethernet"/> <rdf:typerdf:resource="http://www.w3.org/2000/01/rdf-schema#Resource"/> <j.1:feature rdf:resource="http://geni-orca.renci.org/owl/layer.owl#1G"/> <rdf:typerdf:resource="http://geni-orca.renci.org/owl/topology.owl#Interface"/> <rdf:typerdf:resource="http://geni-orca.renci.org/owl/topology.owl#NetworkElement"/> <j.1:hasBitRate rdf:resource="http://geni-orca.renci.org/owl/layer.owl#1G"/> <rdfs:SeeAlso>http://geni-orca.renci.org/owl/rencivmsite.rdf</rdfs:SeeAlso> <rdf:typerdf:resource="http://geni-orca.renci.org/owl/topology.owl#LayerNetworkElement"/> <rdf:typerdf:resource="http://geni-orca.renci.org/owl/topology.owl#ConnectionPoint"/> <rdfs:label>ge-0/0/[0-9]</rdfs:label> <rdf:typerdf:nodeID="A2"/> <rdf:typerdf:resource="http://www.w3.org/2002/07/owl#Thing"/> <j.1:metric rdf:datatype="http://www.w3.org/2001/XMLSchema#long">1000000000</j.1:metric> </rdf:Description>
ORCA <rdf:Descriptionrdf:about="http://geni-orca.renci.org/owl/rencivmsite.rdf#RenciVMSite/Domain/NetworkService/1"> <j.4:hasServiceElement rdf:resource="http://geni-orca.renci.org/owl/domain.owl#Node"/> <rdf:typerdf:resource="http://geni-orca.renci.org/owl/collections.owl#Item"/> <j.4:hasAccessMethod rdf:resource="http://geni-orca.renci.org/owl/domain.owl#ORCAActor"/> <rdf:typerdf:resource="http://geni-orca.renci.org/owl/domain.owl#NetworkService"/> <j.0:availableVMLabelSet rdf:resource="http://geni-orca.renci.org/owl/rencivmsite.rdf#Renci/Euca/availableVMLabelSet"/> <rdf:typerdf:nodeID="A0"/> <rdf:typerdf:resource="http://geni-orca.renci.org/owl/domain.owl#Service"/> <rdf:typerdf:nodeID="A3"/> <j.2:availableVLANSet rdf:resource="http://geni-orca.renci.org/owl/rencivmsite.rdf#Renci/Euca/availableVLANSet"/> <rdf:typerdf:resource="http://www.w3.org/2002/07/owl#Thing"/> <rdf:typerdf:nodeID="A2"/> <j.1:labelSet rdf:resource="http://geni-orca.renci.org/owl/rencivmsite.rdf#Renci/Port/Cisco/6509/GE/availablePortLabelSet"/> <rdf:typerdf:nodeID="A4"/> <j.1:labelSet rdf:resource="http://geni-orca.renci.org/owl/rencivmsite.rdf#Renci/Euca/availableVMLabelSet"/> <rdf:typerdf:resource="http://geni-orca.renci.org/owl/compute.owl#DataCenter"/> <rdf:typerdf:resource="http://geni-orca.renci.org/owl/ethernet.owl#EthernetNetworkElement"/> <rdf:typerdf:resource="http://geni-orca.renci.org/owl/topology.owl#NetworkElement"/> <j.0:availablePortLabelSet rdf:resource="http://geni-orca.renci.org/owl/rencivmsite.rdf#Renci/Port/Cisco/6509/TenGE/availablePortLabelSet"/> <j.1:labelSet rdf:resource="http://geni-orca.renci.org/owl/rencivmsite.rdf#Renci/Port/Cisco/6509/TenGE/availablePortLabelSet"/> <rdf:typerdf:nodeID="A5"/> <rdf:typerdf:resource="http://geni-orca.renci.org/owl/compute.owl#Server"/> <j.4:hasServiceElement rdf:resource="http://geni-orca.renci.org/owl/domain.owl#ORCAActor"/> <rdf:typerdf:nodeID="A1"/> <j.4:hasTopology rdf:resource="http://geni-orca.renci.org/owl/domain.owl#Node"/> <rdf:typerdf:resource="http://geni-orca.renci.org/owl/topology.owl#LayerNetworkElement"/> <j.1:availableLabelSet rdf:resource="http://geni-orca.renci.org/owl/rencivmsite.rdf#Renci/Euca/availableVMLabelSet"/> <rdf:typerdf:resource="http://www.w3.org/2000/01/rdf-schema#Resource"/> <rdf:typerdf:nodeID="A6"/> <rdf:typerdf:nodeID="A7"/>
<rdf:typerdf:resource="http://geni-orca.renci.org/owl/topology.owl#NetworkTransportElement"/> <rdf:typerdf:resource="http://geni-orca.renci.org/owl/topology.owl#NetworkTransportElement"/> <j.1:labelSet rdf:resource="http://geni-orca.renci.org/owl/rencivmsite.rdf#Renci/Euca/availableVLANSet"/> <j.1:atLayer rdf:resource="http://geni-orca.renci.org/owl/ethernet.owl#EthernetNetworkElement"/> <rdf:typerdf:resource="http://geni-orca.renci.org/owl/topology.owl#ConnectionPoint"/> <rdf:typerdf:resource="http://geni-orca.renci.org/owl/topology.owl#Interface"/> <j.0:availablePortLabelSet rdf:resource="http://geni-orca.renci.org/owl/rencivmsite.rdf#Renci/Port/Cisco/6509/GE/availablePortLabelSet"/> </rdf:Description> <rdf:Descriptionrdf:about="http://geni-orca.renci.org/owl/rencivmsite.rdf#Renci/Euca/availableVMLabelSet"> <j.0:hasUnitServer rdf:resource="http://geni-orca.renci.org/owl/orca.owl#ORCAUnitServer"/> <j.4:hasResourceType rdf:resource="http://geni-orca.renci.org/owl/domain.owl#VM"/> <j.3:size rdf:datatype="http://www.w3.org/2001/XMLSchema#int">12</j.3:size> </rdf:Description> <rdf:Descriptionrdf:about="http://geni-orca.renci.org/owl/orca.owl#ORCAUnitServer"> <rdf:typerdf:nodeID="A8"/> <rdf:typerdf:nodeID="A9"/> <rdf:typerdf:resource="http://geni-orca.renci.org/owl/compute.owl#ComputeElement"/> <rdf:typerdf:resource="http://www.w3.org/2000/01/rdf-schema#Resource"/> <rdf:typerdf:resource="http://geni-orca.renci.org/owl/compute.owl#ClassifiedServer"/> <rdf:typerdf:resource="http://geni-orca.renci.org/owl/compute.owl#UnitServer"/> <j.0:memoryCapacity rdf:datatype="http://www.w3.org/2001/XMLSchema#float">1.7</j.0:memoryCapacity> <j.1:metric rdf:datatype="http://www.w3.org/2001/XMLSchema#float">1.7</j.1:metric> <rdf:typerdf:nodeID="A10"/> <j.1:metric rdf:datatype="http://www.w3.org/2001/XMLSchema#float">1.2</j.1:metric> <j.0:cpuCapacity rdf:datatype="http://www.w3.org/2001/XMLSchema#float">1.2</j.0:cpuCapacity> <rdf:typerdf:nodeID="A11"/> </rdf:Description> <rdf:Descriptionrdf:about="http://geni-orca.renci.org/owl/rencivmsite.rdf#rencivmsite/Domain/vm"> <rdf:typerdf:resource="http://geni-orca.renci.org/owl/topology.owl#Device"/> <rdf:typerdf:resource="http://www.w3.org/2002/07/owl#Thing"/> <rdf:typerdf:resource="http://geni-orca.renci.org/owl/collections.owl#Collection"/> <j.5:hasInterface rdf:resource="http://geni-orca.renci.org/owl/rencivmsite.rdf#Renci/Euca/GigabitEthernet/1/ethernet"/> <rdf:typerdf:resource="http://geni-orca.renci.org/owl/topology.owl#NetworkDomain"/> ORCA
<j.4:hasService rdf:resource="http://geni-orca.renci.org/owl/rencivmsite.rdf#RenciVMSite/Domain/NetworkService/1"/> <rdfs:labelxml:lang="en">http://geni-orca.renci.org/owl/rencivmsite.rdf</rdfs:label> <j.5:hasSwitchMatrix rdf:resource="http://geni-orca.renci.org/owl/rencivmsite.rdf#rencivmsite/Domain/SwitchingMatrix"/> <j.1:isLabelProducer rdf:datatype="http://www.w3.org/2001/XMLSchema#boolean">true</j.1:isLabelProducer> <rdf:typerdf:resource="http://www.w3.org/2000/01/rdf-schema#Resource"/> <rdf:typerdf:nodeID="A12"/> <rdf:typerdf:nodeID="A2"/> <rdf:typerdf:resource="http://geni-orca.renci.org/owl/collections.owl#Set"/> <rdf:typerdf:resource="http://geni-orca.renci.org/owl/topology.owl#NetworkElement"/> <j.3:element rdf:resource="http://geni-orca.renci.org/owl/rencivmsite.rdf#Renci/Euca/PoP"/> </rdf:Description> </rdf:RDF> } ] Overall Sliver Status: ready' ORCA
Parsed Output <?xml version="1.0"?> <gush> <slice name="williams_gush2"> <expires>2011-08-25 13:41:44</expires> <node name="planetlab2.williams.edu"/> <node name="planetlab5.williams.edu"/> <node name="planetlab3.williams.edu"/> <node name="planetlab4.williams.edu"/> <node name="planetlab1.williams.edu"/> </slice> <slice name="gush-jeannie"> <expires>2011-07-26 01:02:41</expires> <node name="jeannie@pc44.emulab.net"/> </slice> <slice name=“gush-orca-jeannie”> <expires>2011-07-28 12:52:43</expires> <node name=“root@152.54.1.93:6002”/> </slice> </gush>
Step 3: Configure Resources Describe Application Acquire Resources Configure Resources Start Application Monitor Application Cleanup • Connect to and configure selected resources • Controller connects to and “remotely controls” the Gush clients on the experimenter’s behalf • Controller SSHsto resource, installs Gush client and other software as needed, starts client, client makes TCP connection to controller Client Client Client Client Client Client Client Controller Client
Step 4: Start Application Describe Application Acquire Resources Configure Resources Start Application Monitor Application Cleanup • Controller issues commands to clients telling them to start running applications/experiments • Senders begin running sender processes • Receivers begin running receiver processes Client Client Client Client Client Client Client Client Client Client Client Client Client Client Controller Client Client
Step 5: Monitor Application Describe Application Acquire Resources Configure Resources Start Application Monitor Application Cleanup • We want to make sure the processes keep running • Clients monitor experiment processes for failures • If a failure is detected, client notifies controller • Controller may tell client to restart failedprocess, or find new resource Process failed! Client Client Client Client Client Client Client Client Controller Client Restart process/Find new host.
Step 6: Cleanup Describe Application Acquire Resources Configure Resources Start Application Monitor Application Cleanup • Gush clients make sure all programs exited cleanly • Remove logs and software from remote machines (optional) • Disconnect clients from controller Client Client Client Client Client Client Client Client Client Client Client Client Client Client Controller Client Client
Gush in Action Recall our simple app spec… gush> load tests/simple.xml Project "simple" is selected. Experiment "simple" is selected. gush> run Starting experiment run. Running experiment simple... gush> The configuration matcher has finished matching. The resource allocator has finished successfully. williams_gush2@planetlab1.williams.edu:61500 has joined the mesh. The file transfer of Package to planetlab1.williams.edu has been completed. The software installation of Package on planetlab1.williams.edu was successful. williams_gush2@planetlab2.williams.edu:61500 has joined the mesh. The file transfer of Package to planetlab2.williams.edu has been completed. The software installation of Package on planetlab2.williams.edu was successful. williams_gush2@planetlab1.williams.edu:61500,24301: Hello World williams_gush2@planetlab2.williams.edu:61500,27717: Hello World The experiment has ended. gush> disconnect williams_gush2@planetlab1.williams.edu:61500 has decided to leave the mesh. williams_gush2@planetlab2.williams.edu:61500 has decided to leave the mesh. gush> quit
Nebula • Nebula (GUI) allows users to describe, run, monitor, & visualize applications • XML-RPC interface for managing applications programmatically
classGushXmlRpcServerextends XmlRpcServer { voidGushAddNode(HashMapproperties); voidGushRemoveNode(stringhostname); voidGushCreateResources(); voidGushLoadApp(stringfilename); voidGushRunApp(); voidGushDisconnectApp(stringhostname); voidGushQuit(); voidGushFailHost(stringhostname); voidsetXmlRpcClientUrl(stringclientUrl); } XML-RPC API allows programmatic access to Gush functions External services (including SWORD) use XML-RPC to add and remove resources from Gush resource pool Other Gush user interfaces (including Nebula) run applications using XML-RPC Gush XML-RPC Interface
Thank you! For more info: http://gush.cs.williams.edu