Architectural Design Document: Software Engineering Project (2IP40)
Architectural Design Document: Software Engineering Project (2IP40)
Project Group 1
This document contains the Architectural Design for the SPINGRID system. This project is
one of seven assignments for the course 2IP40 Software Engineering at Eindhoven University of
Technology. The architectural design was developed using the software requirements described
in [SRD]. The document complies with the Architectural Design Document (ADD) from the
Software Engineering Standard, as set by the European Space Agency [ESA].
1 Introduction 7
1.1 Purpose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2 Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3 List of definitions and abbreviations . . . . . . . . . . . . . . . . . . . . . . . 8
1.3.1 Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3.2 Abbreviations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4 Documents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4.1 Reference Documents . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4.2 Applicable Documents . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.5 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2 System overview 11
2.1 Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2 Basic design and context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3 Design decisions and preliminary information . . . . . . . . . . . . . . . . . . 12
2.3.1 Java Runtime Environment . . . . . . . . . . . . . . . . . . . . . . . . 12
2.3.2 MySQL in combination with JDBC . . . . . . . . . . . . . . . . . . . 13
2.3.3 XML Parser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.3.4 HTTP Message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3 System context 14
4 System design 15
4.1 Design Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.2 Decomposition description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.2.1 Dispatcher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.2.2 Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.2.3 Agent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
5 Component description 21
5.1 General Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.1.1 Logger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.1.2 HTTP Message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.1.3 JSDL Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
5.2 Dispatcher Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.2.1 IOProcessor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.2.2 ClientCommunicator . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
5.2.3 ClientTranslator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
5.2.4 ClientManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.2.5 AgentCommunicator . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.2.6 AgentTranslator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.2.7 AgentManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.2.8 DatabaseManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.3 Client Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.3.1 IOProcessor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.3.2 Translator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5.3.3 Communicator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.4 Agent Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.4.1 IOProcessor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.4.2 Distributor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.4.3 JobScheduler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.4.4 JobExecutor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.4.5 DataManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.4.6 Translator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.4.7 Communicator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
6.2.1 General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
6.2.2 Dispatcher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
6.2.3 Agent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
6.3 Resources to maintain the system . . . . . . . . . . . . . . . . . . . . . . . . . 58
A Communication protocol 83
A.1 Client ↔ Dispatcher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
A.1.1 Register . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
A.1.2 Log In . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
A.1.3 Send commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
A.2 Agent ↔ Dispatcher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
A.2.1 Identification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
A.2.2 Polling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
A.3 HTTP Status codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
A.4 MySQL Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Introduction
1.1 Purpose
The Architectural Design Document (ADD) describes the basic system design for the soft-
5 ware to be made during the SPINGRID project. It describes the physical model; this is a
decomposition of the software into components. Each component is described in terms of
its external interfaces and the dependencies on other components, this in order to allow the
programmers in the next phase of the project to work in parallel.
1.2 Scope
10 The software implements a computational grid. This grid is able to execute jobs when it
receives an application accompanied by a set of data files. By hiding the complexity of grid
technology the system will be easy to use. Usability is also increased by offering a web-based
front-end for users to access the system.
15 1.3.1 Definitions
Agent Application that is used by a resource provider to retrieve and execute
jobs.
Application A non-interactive data processing application consisting of executables,
scripts and/or auxiliary data files that reads one or more input data files
and writes one ore more output files.
Application Provider An application provider can offer a set of applications to the SPINGRID
system. They can restrict access for projects and for resource providers to
their applications.
Client Application that is used by all the users except the resource provider who
uses the agent application.
Computational Grid A hardware and software infrastructure that enables coordinated resource
sharing within dynamic organizations consisting of individuals, institutions
and resources.
Customer Dutch Space B.V.
Dispatcher A dispatcher acts like a server and manages the distribution of jobs over
the computational grid.
Data Provider A data provider can offer a set of datafiles to the SPINGRID system. They
can restrict access for projects and for resource providers to their datafiles.
Job Specification of application, configuration data, input and/or output data
files and scheduler specific data (priority, preferred resource, etc).
Job Provider Job providers are users that offer a job to a project. They have to be a
member of that particular project.
GRP A generic package that is converted from a HTTP response and is formatted
as two strings (status code and message).
GSP A generic package that can be converted to a HTTP request header and is
formatted as a list of pairs of two strings (variable and value).
PM Project Manager.
Project A collection of jobs with specified access rights to which users (project
members) can be assigned.
Project Administrator The project administrators administrate projects and can assign and re-
move job providers, configure a project and restrict access for resource
providers.
Resource Provider Resource providers are users that offer time on their computers to the
SPINGRID system. They can restrict access to their computer for appli-
cation providers and projects.
Role The actions and activities assigned to a person.
SPINGRID A computational grid using SPINGRID software.
SPINGRID Software Software developed by Dutch Space and TU/e to build computational grids
for distributed data processing.
SPINGRID System The full name of the entire system.
System Administrator The system administrator oversees the entire SPINGRID system and has
the right to configure the system, to create and remove projects and assign
and remove project administrators.
SPINGRID Architectural Design Document 1.0.0 8
CHAPTER 1. INTRODUCTION
1.3.2 Abbreviations
ADD Architectural Design Document
ESA European Space Agency
DDD Detailed Design Document
GRP Generic Receive Package
GSP Generic Send Package
HTTP Hypertext Transfer Protocol
JRE Java Runtime Environment
OMT Object Modeling Technique
SRD Software Requirements Document
UML Unified Modeling Language
1.4 Documents
[ESA] ESA Software Engineering Standards (ESA PSS-05-0 Issue 2), ESA Board
for Software Standardization and Control (BSSC), 1991
[JSDL] Job Submission Description Language (JSDL) Specification, Version 1.0,
November 2005
[DDD] Detailed Design Document, SPINGRID team, TU/e, not yet available
[UML] Practical UML: A Hands-On Introduction for Developers, Togethersoft,
2000
1.5 Overview
Chapter 2 of this document is a short introduction to the general context of the SPINGRID
system to be made and the background of the project. It also discusses the systems design
25 decisions. In chapter 3 the relationship of the SPINGRID system with external systems is
described. Chapter 4 describes the decomposition of the system in subcomponents and the
relations between them. Each of these subcomponents is specified in detail in chapter 5.
Chapter 6 gives an estimate of the resources needed to develop and maintain the SPINGRID
system. The last chapter, chapter 7, provides two traceability matrices. One matrix traces
30 each Software Requirement (SR) to a part of the architectural design described in chapter 5,
the other one does the reverse.
System overview
2.1 Background
The function and purpose of this project are described in [URD, sections 2.1, 2.2 and 2.4].
The environment in which the system the system runs is described in [URD, section 2.5].
As already decided in [SRD], the SPINGRID system will consist of three components on
the highest level. These three components will be implemented as three applications. These
components are called agent, dispatcher and client and the relations between them and with
the users can be seen in figure 2.1.
45 The agent is used by the resource provider. All resource providers requirements, as de-
scribed in the [URD, section 4.4], are fulfilled by the agent. An agent is connected to one or
more independent dispatchers.
The client is used by the application, data and job providers. All application, data and job
providers requirements, as described in the [URD, sections 4.6, 4.7 and 4.8], are fulfilled by
50 the client. The system admin and project admin also use the client and these requirements
([URD sections 4.3 and 4.5]) are also fulfilled by the client. A client is connected to one
dispatcher. The main difference and therefore the reason to make a agent and client, is that
the agent is communicating with the dispatcher on regular basis, this is not the case with a
client. Communication between the client and dispatcher only exists when a commando is
55 given by the user, for example submitting a job.
The dispatcher acts like a server and manages the distribution of jobs over the compu-
tational grid. A dispatcher is connected to zero or more agents and to zero or more clients.
Dispatchers operate independently.
[SRD] describes how the user requirements are transformed into a logical model. This logical
60 model mainly describes the relation between the different entities in the product. After the
software requirements and the logical model are transformed into an architectural model, this
architectural model can be transformed into a detailed design which is done in [DDD].
65 As stated in the User Requirements Document [URD] the design decision was made to im-
plement all software parts of the SPINGRID system in Java. The main reason for this
is the platform independency that Java provides. This platform independency enables the
SPINGRID software to be run on a large variety of computers, allowing more computers to
participate in the grid. Other considerations were maintainability and the high availability
70 of Java implementations.
The SPINGRID software will require Sun JRE 1.4.2 or 1.5.0.
The SPINGRID dispatcher program needs a relational database to store its data. For this
purpose, it will use MySQL as the database, and it will use JDBC, with the MySQL Con-
75 nector/J driver, to access the database. This requires the java.sql package, which is supplied
with Sun J2SE 1.4.2, and Sun J2SE 1.5.0.
Additionally, the MySQL Connector/J JDBC driver is required, which is available from the
MySQL website1 . In Debian GNU/Linux, this is available in the libmysql-java package.
80 For parsing XML, the SPINGRID software will use JAXP, specifically the javax.xml.parsers.
DocumentBuilder class. This requires the javax.xml.parsers, org.xml.sax, and the org.w3c.dom
packages, all of which are supplied with Sun J2SE 1.4.2 and Sun J2SE 1.5.0.
The HTTP Message component can build and parse HTTP Messages. A component using
85 the HTTP Message component can send HTTP Messages over the network without knowing
the exact layout of such a HTTP Message. Note that the HTTP Message component will be
build by the SPINGRID team.
1
http://dev.mysql.com/downloads/connector/j/3.1.html
System context
90 The environment in which the SPINGRID system runs is generally described in [URD, section
2.5] and [SRD, section 2.4].
System design
95 The method used to design the component model is the Object Oriented design method OMT.
The present model is a decomposition view into components and is made with [UML].
4.2.1 Dispatcher
(A1)
IOProcessor
(A2) (A2)
(D1) (D1)
Database
Manager
• (A2): IDOutputProcessor
• (B1): IDCCommandInput
• (B2): IDUserCommands, IDProjectAdminCommands, IDSystemAdminCommands, ID-
JobProviderCommands, IDApplicationProviderCommands, IDDataProviderCommands
105 • (D1): IDQueryHandler
• (C1): IDACommandInput
• (C2): IDResourceProviderCommands
• (E1): IDCPackageInput
• (F1): IDAPackageInput
110 The components and interfaces of the dispatcher application are displayed in figure 4.1. The
component and interfaces descriptions can be found in section 5.2.
The dispatcher application will use several threads. Firstly, every time a command is received,
instances of ClientTranslator/AgentTranslator ClientManager/AgentManager will be created
in independent threads, thus allowing several commands to be performed at the same time.
115 The other components can run in one thread together.
IOProcessor
This component of the dispatcher takes input from and gives output to the user of the
software. However, there will not be much input from the user as the dispatcher is mostly
remote-controlled (by the System Admin). One input command could be shutdown. The
120 output will mostly consist of logs.
DB
125 ClientManager
The ClientManager receives commands from ClientTranslator and verifies the access rights
of the user that sent the command. It interacts with the database to gather data that was
requested and to update the desired settings.
ClientTranslator
130 When a method in the ClientTranslator is called, it translates the parameters of the method
into a GSP. The GSPs are then send to the ClientCommunicator. GRPs from the Client-
Communicator are evaluated so that the appropriate methods in the ClientManager can be
called.
ClientCommunicator
135 This component takes care of the communication with the Client using HTTP.
AgentManager
The AgentManager receives messages and commands from AgentTranslator. The messages
can be either a request for a job, a ‘working-update’ and a ‘job-completed’ message. The
commands are used to perform the desired actions. The AgentManager contacts the database
140 to retrieve and update information about jobs and change settings.
AgentTranslator
When a method in the AgentTranslator is called, it translates the parameters of the method
into a GSP. The GSPs are then send to the AgentCommunicator. GRPs from the Agent-
Communicator are evaluated so that the appropriate methods in the AgentManager can be
145 called.
AgentCommunicator
This component takes care of the communication with the Agent using HTTP.
4.2.2 Client
The components and interfaces of the client application are displayed in figure 4.2. The
150 component and interfaces descriptions can be found in section 5.3.
(A1)
(B1)
(C1)
IOProcessor Translator Communicator
(A2)
• (A1): ICInputProcessor
• (A2): ICOutputProcessor
• (B1): ICUserCommands, ICProjectAdminCommands, ICSystemAdminCommands, ICJobProvider-
155 Commands, ICApplicationProviderCommands, ICDataProviderCommands
• (C1): ICCommunicator
All of the components in the client application will run in a single thread.
IOProcessor
This component of the client is responsible for processing the input of the user (this can
160 be a human being, but also an automated process generating input for the client). If the
input is valid, the component calls the corresponding method in the Translator component.
Otherwise, it will let the user know the input is invalid. Furthermore, other components can
tell this component to output messages to the user.
Translator
165 When a method in the Translator is called, it translates the parameters of the method into
a GSP. The GSPs are then send to the Communicator. GRPs from the Communicator are
evaluated so that the appropriate message can be send to the user through the IOProcessor.
Communicator
4.2.3 Agent
The components and interfaces of the agent application are displayed in figure 4.3. The
175 component and interfaces descriptions can be found in section 5.2.
(A1)
IOProcessor
(B1) (A2)
(B2) (D1)
(C1) (C3)
(C2) (E1)
JobExecutor
• (A1): IAInputProcessor
• (A2): IAOutputProcessor
• (B1): IADistributorForIOProcessor
• (C1): IAJobSchedulerForDistributor
• (C2): IAJobSchedulerForJobExecutor
• (C3): IAJobSchedulerForDataManager
• (D1): IADataManager
• (F1): IAResourceProviderCommands
• (G1): IACommunicator
The components of the agent application will run in several threads. The Translator and
Communicator will be in the same thread. All the other components will run in another
190 thread. For every job that will be executed, another thread will be created.
IOProcessor
The IOProcessor manages the input received from and output given to the user. It redirects
input to and receives output from the Distributor.
Distributor
195 The Distributor receives tasks from the IOProcessor and the JobScheduler and passes it to
the Translator. This component is seperated from the Translator for multi-threading reasons.
JobScheduler
The JobScheduler is the main component of the agent. It asks the Communicator (through
the Distributor and the Translator) to ask the dispatcher for a job. If a job is received, the
200 DataManager is asked to download the necessary data. When this is done, the JobExecutor
will launch the job process. After the job has been completed, the DataManager is asked to
upload the results. The Communicator component will inform the dispatcher that the job
has been completed.
JobExecutor
205 The JobExecutor is the component which will execute the job.
DataManager
The DataManager will download data needed to perform jobs and will upload results when
jobs are completed.
Translator
210 When a method in the Translator is called, it translates the parameters of the method into
a GSP. The GSPs are then send to the Communicator. GRPs from the Communicator are
evaluated so that the appropriate message can be send to the user through the Distributor.
Communicator
The Communicator component parses the configuration file that describes the characteristics
215 of the machine on which the Agent is running. When the component polls the dispatcher for
jobs, it sends this information to the dispatcher. Furthermore, the Communicator component
will inform the dispatcher of the status of the Agent.
Component description
220 All the components in the SPINGRID system are described in this chapter. Note that every
method can raise an exception if something goes wrong. An example of this can be if the
user is calling the method and the user is not authorized to call this method with the given
arguments. The different types of exceptions are described in [DDD]. For now we will say that
all methods can raise zero or more exceptions which are all a subclass of SPINGRIDException.
5.1.1 Logger
Every application should contain at least the Logger component. This component should be
tight to every other component that wants to log actions to the log files. For clarity, this
component has not been put in figures 4.1, 4.2 and 4.3.
230 Type The Logger is a component in the SPINGRID project and is part of all applications.
Function The function of this component is to log the actions of the applications. It is
capable of logging regular messages and error messages separately.
Interfaces
1. ILogger
• Log(String msg)
This method should be called when an important regular event has happened that
240 needs to be logged in a log file. This method then appends the give string to the log
file.
• Error(String msg)
This method should be called when an error message needs to be logged. The error
245 message is appended to the standard error log file.
Every application should contain at least the HTTP Message component. This component
is a subcomponent of all components that handle communication. On the requesting side as
250 well as the responding side.
Type HTTP Message is a component in the SPINGRID project and is part of all applica-
tions. It is always a subcomponent of a communication component.
Function Increase maintainability and make it easier to update to a newer HTTP version.
Dependencies None.
Interfaces
265 1. IHTTPRequest
270 – An HTTPRequest object. Its fields get the value of the corresponding param-
eters. Content will also be parsed to a list of variables.
• String getHTTPVersion()
This method should be called if a component wants to know the HTTP version is
used.
280
Results:
– HTTPVersion field
• String getMethod()
This method should be called if a component wants to know which method is used
in the request.
285
Results:
– Method field
• String getURL()
This method should be called if a component wants to know which URL is requested.
Results:
290 – URL field
• String getContent()
This method should be called get information from the data in the message.
Results:
– Content field
2. IHTTPResponse
• String getHTTPVersion()
This method should be called if a component wants to know the HTTP version is
340 used.
Results:
– HTTPVersion field
• String getCodeN()
This method should be called if a component wants to know the statuscode.
345
Results:
– Statuscode number field
• String getCodeS()
This method should be called if a component wants to know the statusname.
Results:
350 – Statusname field
• String getContent()
This method should be called if a component want the content in the response.
Results:
– Content field
This component deals with parsing JSDL descriptions. It is only used by the Dispatcher
and Agent applications.
Type JSDL Description is a component in the SPINGRID project and is part of most
380 applications.
Function The function of this component is to parse a JSDL Job Description, ex-
tracting the information embedded inside it.
390 Interfaces
(a) IJSDLParser
• String GetJobName(JSDL jobdesc)
This method should be called to retrieve the job’s name from a JSDL job de-
scription.
395
Results:
– A string containing the job’s name.
• String GetJobDescription(JSDL jobdesc)
This method should be called to retrieve the job’s description from a JSDL job
description.
400
Results:
– A string containing the job’s description.
• String[] GetJobAnnotations(JSDL jobdesc)
This method should be called to retrieve the job’s annotation(s) from a JSDL
job description.
405
Results:
– An array of strings containing the job’s annotation(s).
• String[] GetJobProjects(JSDL jobdesc)
This method should be called to retrieve the job’s project name(s) from a JSDL
job description.
410
Results:
– An array of strings containing the job’s project name(s).
• String GetApplicationName(JSDL jobdesc)
This method should be called to retrieve the job application’s name from a
JSDL job description.
415
Results:
– A string containing the job application’s name.
• String GetApplicationVersion(JSDL jobdesc)
This method should be called to retrieve the job application’s version from a
JSDL job description.
420
Results:
– A string containing the job application’s version.
• String GetApplicationDescription(JSDL jobdesc)
This method should be called to retrieve the job application’s description from
a JSDL job description.
425
Results:
– A string containing the job application’s description.
515 – A range specifying the allowed values for the total disk space.
• Range GetTResourceCount(JSDL jobdesc)
This method should be called to retrieve the job’s required total resource count
from a JSDL job description.
Results:
520 – A range specifying the allowed values for the total resource count.
• DataStaging[] GetDataStaging(JSDL jobdesc)
This method should be called to retrieve the datastaging specification(s) from
a JSDL job description.
Results:
525 – An array of datastagings containing the datastaging specification(s) for
this job.
5.2.1 IOProcessor
Function This component has the function to process inputs from the outside world and
process outputs from the other components of the dispatcher.
Interfaces
• Input(String[] args)
This method should be called when the outside world has a sequence of characters
540 ready to process. This sequence will be stored in the args variable.
• Output(String str)
This method should be called when another component wants to send a sequence of
545 characters to standard output. This sequence will be printed in the console.
5.2.2 ClientCommunicator
Function This component has the function to communicate with the client. This is one
of the two components in the dispatcher application able to communicate with the outside
world.
1. Receiver
Contains a loop that receives HTTP requests from a client and creates instances of a
communication class.
565 2. Communication
Handles the request, uses a blocking method to get the result from the dispatcher and
sends this back to the client.
5.2.3 ClientTranslator
Type The ClientTranslator is a component in the SPINGRID project and is part of the
dispatcher application.
Dependencies None.
Interface
5.2.4 ClientManager
595 The ClientManager receives commands from ClientTranslator and verifies the access rights
of the user that sent the command. It interacts with the database to gather data that was
requested.
The verification of the acces rights has to be done in every method listed below. This implies
that the method needs some kind of identification of the user to verify this. The identification
600 will be provided to the method as an argument. These arguments are left out of this document
to keep the methods less complex. The identification will be further explained in the the
[DDD].
Type The ClientManager is a component in the SPINGRID project and is part of the
dispatcher application.
Dependencies None.
Interfaces
• Shutdown()
Signals the ClientManager that the dispatcher will shut down.
• RemoveJob(int job)
This method should be called to remove a job from the SPINGRID system.
680
• AddApplicationProvider(String username)
This method should be called to add an application provider to the SPINGRID sys-
tem.
• AddDataProvider(String username)
695 This method should be called to add a data provider to the SPINGRID system.
• RemoveDataProvider(String username)
This method should be called to remove a data provider from the SPINGRID sys-
tem.
700
• RemoveProject(String projectname)
This method should be called to remove a project from the SPINGRID system. If
there are job providers who where only allowed to provide jobs for the given project
715 then they will loose the role of job provider. If the project admin was only project
admin of the given project then he will loose the role of project admin.
• JobList GetJobList()
This method should be called to get a list of jobs from the SPINGRID system.
720
Results:
– A list with all the jobs in the SPINGRID system.
• UserList GetProjectAdmins()
This method should be called to get a list of project admins from the SPINGRID
system.
725
Results:
– A list with all the project admins from the SPINGRID system.
• RemoveJob(int job)
This method should be called to remove a job from the SPINGRID system.
• JobList GetJobList()
This method should be called to get a list of jobs from the given job provider.
755
Results:
– A list with the jobs which are provided by the given job provider.
• ApplicationList GetApplicationList()
This method should be called to get a list of applications which the job provider can
use.
760
Results:
– A list with the applications which the job provider can use.
6. IDApplicationProviderCommands
• AddApplication(URL application)
This method should be called to add an application to the SPINGRID system.
765
• RemoveApplication(String application)
This method should be called to remove an application from the SPINGRID system.
• DisapproveJobProvider(String jobprovider)
This method should be called to disapprove a job provider to use his applications.
780
• ApplicationList GetApplicationList()
This method should be called to get a list of all the application provider’s provided
applications.
Results:
785 – A list with the application provider’s provided applications.
• AddData(URL data)
This method should be called to add data to the SPINGRID system.
• RemoveData(String data)
800 This method should be called to remove data from the SPINGRID system.
• ApproveJobProvider(String jobprovider)
This method should be called to approve a job provider to use the data of the data
810 provider.
• DisapproveJobProvider(String jobprovider)
This method should be called to disapprove a job provider to use the data of the
data provider.
815
• DataList GetDataList()
This method should be called to get a list of all the data provider’s provided data.
Results:
– A list with the data provider’s provided data.
835 Function This component has the function to communicate with the agent. This is one
of the two components in the dispatcher application able to communicate with the outside
world.
1. Receiver
840 Contains a loop that receives HTTP requests from an agent and creates instances of a
communication class.
2. Communication
Handles the request, uses a blocking method to get the result from the dispatcher and
845 sends this back to the agent.
Interfaces None.
5.2.6 AgentTranslator
850 Type The AgentTranslator is a component in the dispatcher application of the SPINGRID
project.
Dependencies None.
860 Interface
5.2.7 AgentManager
The AgentManager receives messages and commands from AgentTranslator. The messages
can be either a request for a job, a ‘working-update’ and a ‘job-completed’ message. The
commands are used to perform the desired actions. The AgentManager contacts the database
870 to retrieve and update information about jobs and change settings.
The dispatcher needs to know which agent changes the settings and calculates a job. This
means that an agent needs some kind of agent identification and that this identification needs
to be provided to the methods listed below as an argument. These arguments are left out of
this document to keep the methods less complex. The identification will be further explained
875 in the the [DDD].
Dependencies None.
Interface
890 • Shutdown()
Signals the AgentManager that the dispatcher will shut down.
• AddProject(String project)
895 This method should be called to allow jobs from the given project to be calculated
by the resource.
• RemoveProject(String project)
This method should be called to disallow jobs from the given project to be calculated
900 by the resource.
• ApproveApplication(String application)
This method should to approve an application to be executed by the resource.
• ApproveApplicationProvider(String applicationprovider)
910 This method should be called to approve the applications of an application provider
to be executed by the resource.
• ApproveJobProvider(String jobprovider)
This method should be called to approve the jobs of a job provider to be calculated
by the resource.
920
5.2.8 DatabaseManager
935 Type The DatabaseManager is a component in the dispatcher application of the SPINGRID
project.
Dependencies SQL-database.
950 Interfaces
5.3.1 IOProcessor
Type The IOProcessor is a component in the client application of the SPINGRID project.
Function This component has the function to process inputs from the outside world and
process outputs from the other components of the client.
Dependencies None.
970 Interfaces
• Input(String[] args)
This method should be called when the user of the client application has a sequence
of characters ready to process. The method calls the appropriated method from the
975 Translator component when the input is valid.
• Output(String str)
This method should be called when the Translator wants to send a message to the
980 user of the client application. The sequence of characters is sent to standard output.
5.3.2 Translator
Type The Translator is a component in the SPINGRID project and is part of the client
application.
985 Purpose Translator implements software requirements SR 2010, SR 2011, SR 2020, SR 2021,
SR 2030, SR 2031, SR 2040, SR 2041, SR 2060, SR 2070, SR 2080, SR 2090, SR 2100, SR 4010,
SR 4011, SR 4020, SR 4021, SR 4030, SR 4031, SR 4032, SR 4033, SR 4040, SR 4041, SR 4042,
SR 4043, SR 4050, SR 4051, SR 4060, SR 4070, SR 5010, SR 5011, SR 5020, SR 5021, SR 5030,
SR 5040, SR 5050, SR 5070, SR 5071, SR 6010, SR 6011, SR 6020, SR 6021, SR 6030, SR 6040,
990 SR 6050, SR 6060, SR 6061, SR 7010, SR 7011, SR 7012, SR 7013, SR 7020, SR 7030, SR 7040,
and SR 8000.
Function When a method in the Translator is called, it translates the parameters of the
method into a GSP. The GSPs are then send to the Communicator. GRPs from the Com-
municator are evaluated so that the appropriate message can be send to the user
Dependencies None.
Interfaces
• sendAddApplicationProvider(String username)
This method should be called to add an application provider to the SPINGRID sys-
1060 tem.
• sendRemoveApplicationProvider(String username)
This method should be called to remove an application provider from the SPINGRID
system.
1065
• sendAddDataProvider(String username)
This method should be called to add a data provider to the SPINGRID system.
• sendRemoveDataProvider(String username)
1070 This method should be called to remove a data provider from the SPINGRID sys-
tem.
• sendRemoveProject(String projectname)
1085 This method should be called to remove a project from the SPINGRID system. If
there are job providers who where only allowed to provide jobs for the given project
then they will loose the role of job provider. If the project admin was only project
admin of the given project then he will loose the role of project admin.
– A list with the resources which have worked in the given project.
• sendRemoveJob(int job)
This method should be called to remove a job from the SPINGRID system.
1120
• ApplicationList sendGetApplicationList()
1130 This method should be called to get a list of applications which the job provider can
use.
Results:
– A list with the applications which the job provider can use.
• sendRemoveApplication(String application)
This method should be called to remove an application from the SPINGRID system.
1140
• sendApproveJobProvider(String jobprovider)
This method should be called to approve a job provider’s own applications.
• ApplicationList sendGetApplicationList()
This method should be called to get a list of all the application provider’s provided
1155 applications.
Results:
– A list with the application provider’s provided applications.
• AddData(URL data)
This method should be called to add data to the SPINGRID system.
1170
• RemoveData(String data)
This method should be called to remove data from the SPINGRID system.
• DisapproveJobProvider(String jobprovider)
1185 This method should be called to disapprove a job provider to use the data of the
data provider.
• DataList GetDataList()
This method should be called to get a list of all the data provider’s provided data.
1190
Results:
– A list with the data provider’s provided data.
• ProjectList GetProjectList()
This method should be called to get a list of projects which use the data of the data
provider.
1195
Results:
– A list with the projects using the data provider’s data.
• ProjectList GetApplicationList()
This method should be called to get a list of applications which use the data of the
data provider.
1200
Results:
– A list with the applications using the data provider’s data.
5.3.3 Communicator
Type The Communicator is a component in the SPINGRID project and is part of all
applications.
Function This component has the function to communicate with the dispatcher.
1215 Interfaces
5.4.1 IOProcessor
Type The IOProcessor is a component in the agent application of the SPINGRID project.
1230 Purpose IOProcessor implements software requirements SR 3010, SR 3020, SR 3021, SR 3030,
SR 3031, SR 3040, SR 3050, SR 3051, SR 3060, SR 3061, SR 3070, SR 3071, SR 8000 and
SR 9030.
Function This component manages the input received from and output given to the user.
It redirects input to and receives output from the Distributor.
Dependencies None.
Interfaces
• Input(String[] args)
1240 This method should be called when the user of the agent application has a sequence
of strings ready to process. The method calls the appropriated method from IADis-
tributorForIOProcessor, which is implemented in the Distributor.
5.4.2 Distributor
1250 Type The Distributor is a component in the the agent application of the SPINGRID project.
Function This component receives tasks from the IOProcessor and the JobScheduler and
passes it to the Translator. This component is separated from the Translator for multi-
1255 threading reasons.
Dependencies None.
Interfaces
1260 • StartScheduler()
This method calls Start() in IAJobScheduler which is implemented in JobScheduler.
• StopScheduler()
This method calls Stop() in IAJobScheduler which is implemented in JobScheduler.
1265
• AddInterval(Interval a, Interval b)
This method calls AddInterval(Interval a, Interval b) in IAJobScheduler which is
implemented in JobScheduler.
• sendAddProject(String projectname)
1275 This method calls sendAddProject(String projectname) in IATranslator which is
implemented in Translator.
• sendRemoveProject(String projectname)
This method calls sendRemoveProject(String projectname) in IATranslator which
1280 is implemented in Translator.
• sendApproveApplication(String applicationname)
This method calls sendApproveApplication(String applicationname) in IATransla-
tor which is implemented in Translator.
1285
• sendDisapproveApplication(String applicationname)
This method calls sendDisapproveApplication(String applicationname) in IATrans-
lator which is implemented in Translator.
• sendDisapproveApplicationProvider(String applicationprovidername)
1295 This method calls sendDisapproveApplicationProvider(String applicationprovider-
name) in IATranslator which is implemented in Translator.
• sendApproveJobProvider(String jobprovidername)
This method calls sendApproveJobProvider(String jobprovidername) in IATransla-
1300 tor which is implemented in Translator.
• sendDisapproveJobProvider(String jobprovidername)
This method calls sendDisapproveJobProvider(String jobprovidername) in IATrans-
lator which is implemented in Translator.
1305
• ProjectList sendGetUsing()
This method calls sendGetUsing() in IATranslator which is implemented in Trans-
lator.
• sendPoll()
This method calls sendPoll() in IATranslator which is implemented in Translator.
5.4.3 JobScheduler
1315 Type The JobScheduler is a component in the agent application of the SPINGRID project.
Function This component is responsible for scheduling jobs. This means that the compo-
nent needs to:
1320 • download data through the DataManager which is needed to execute jobs.
Interfaces
• Start()
This method is called when the JobScheduler should begin with scheduling jobs.
1330
• Stop()
This method is called when the JobScheduler should stop with scheduling jobs.
• AddInterval(Interval a, Interval b)
1335 This method is called when an interval should be added when the resource can be
used.
• RemoveInterval(Interval a, Interval b)
This method is called when an interval should be removed when the resource can
1340 be used.
• receivePoll(Object Job)
This method is called when the answer to a poll is received.
• GiveResult(String Status)
This method should be called when the status of a job has changed.
• GiveUploadResult(String Status)
This method should be called when the status of a upload order has changed.
1355
5.4.4 JobExecutor
Type The JobExecutor is a component in the agent application of the SPINGRID project.
Function This component executes jobs. A signal will be send to the JobScheduler when
1360 a job is done executing.
Dependencies None.
Interfaces
• StopJob(int job)
This method should be called when a job needs to stop executing.
1370
5.4.5 DataManager
Type The DataManager is a component in the SPINGRID project and is part of the agent
application.
1375 Function This component will download data needed to perform jobs and will upload
results when jobs are completed.
Dependencies None.
Interfaces
5.4.6 Translator
1390 Type The Translator is a component in the agent application of the SPINGRID project.
Function When a method in the Translator is called, it translates the parameters of the
method into a GSP. The GSPs are then send to the Communicator. GRPs from the Com-
1395 municator are evaluated so that the appropriate message can be send to the user through the
Distributor.
Dependencies None.
Interfaces
• sendAddProject(String project)
This method should be called to allow jobs from the given project to be calculated
by the resource.
• sendApproveApplication(String application)
1410 This method should to approve an application to be executed by the resource.
• sendDisapproveApplication(String application)
This method should be called to disapprove an application to executed by the re-
source.
1415
• sendApproveApplicationProvider(String applicationprovider)
This method should be called to approve the applications of an application provider
• sendApproveJobProvider(String jobprovider)
1425 This method should be called to approve the jobs of a job provider to be calculated
by the resource.
• sendDisapproveJobProvider(String jobprovider)
This method should be called to disapprove the jobs of a job provider to be calculated
1430 by the resource.
• ProjectList sendGetUsing()
This method should be called to get a list of project which use the resource.
Results:
1435 – A list with the projects using the resource provider’s resource.
5.4.7 Communicator
Type The Communicator is a component in the agent application of the SPINGRID project.
1445 Function This component has the function to communicate with the dispatcher.
Interfaces
The following resources are used to build the various SPINGRID software applications:
• 7 NEC Versa P520 notebooks with an 1.4GHz Intel Celeron processor, 512 MB primary
1465 and 40 GB seondary storage. These systems are mainly used for writing documents,
coding and testing of the system.
• 1 Dell computer with an Intel Pentium IV 3,0 GHz, 1024 MB primary and 40 GB
secondary storage, running Windows XP Pro. This system is mainly used for writing
documents, coding and testing of the system.
1470 • 1 Dell computer with an Intel Pentium IV 3,0 GHz, 1024 MB primary and 40 GB
secondary storage, running Debian GNU/Linux 3.1. This system is mainly used for
writing documents, coding and testing of the system.
The software applications will be used on multiple computer systems, but all these systems
1475 will have at least the following resources (depending which application they will run). The
client application does not have any requirements besides the general requirements.
6.2.1 General
• 2 GB RAM
• Dedicated machine
1485 • Linux
6.2.3 Agent
• 128 MB RAM
Although the development team will not perform any maintenance on the SPINGRID software
after the transfer phase, in the case that maintenance is done, it is strongly recommended to
use at least the configuration used during the development phase.
There are a couple of software requirements (described in [SRD]) which are not coupled with
one or more methods in this document. This happened because of the nature of those software
requirements. Most of the time this is the case when the whole SPINGRID system implements
the software requirement. But there are also software requirements for which it was not clear
1500 how to implement them. The software requirements which are not coupled with methods in
this document are described below.
• [SR 2050] The system admin has the option to change the system settings.
It is unclear at this time what the different system settings are.
• [SR 7120]: A private data object is provided by precisely one job provider.
1510 This is a restriction on the database and therefor cannot be coupled with a method.
1525 • [SR 9031]: Interaction with the system will be provided by a web-based user
interface.
There are no methods coupled with this software requirement because this software
requirement has a low priority. The input/output-processor components in the three
applications can implement these when desired.
1530 • [SR 9040]: The SPINGRID system will be able to process at least 40 exe-
cuting jobs at a time.
The whole SPINGRID system is responsible for implementing this software requirement.
• [SR 9050]: The SPINGRID system will select the resource that will be used
for processing a job.
1535 The dispatcher application is responsible for implementing this software requirement.
• [SR 9060]: The SPINGRID system shall only send jobs to resources if their
characteristics at least match the characteristics required by the job and
application used in the job.
The dispatcher application is responsible for implementing this software requirement
1540 and that can be achieved by using JSDL.
• [SR 9070]: The SPINGRID system shall provide a trust model as described
in appendix A of [URD].
It is unclear if the whole trust model is implemented. Note that the approve and
disapprove methods implement this software requirement partly.
1545 • [SR 9080]: The (un-)installation of the SPINGRID system will not require
a computer expert.
The whole SPINGRID system is responsible for implementing this software requirement.
• [SR 9090]: When there are at least 2 dispatchers in the system and one of
them disappears, the system will continue without malfunction.
1550 The whole SPINGRID system is responsible for implementing this software requirement.
• [SR 9100]: When all the dispatchers in the system are down and one of them
is restarted, the system will continue without malfunction.
The whole SPINGRID system is responsible for implementing this software requirement.
• [SR 9110]: If one of the resources disappears while performing a job, the
1555 system will requeue the job.
The dispatcher application is responsible for implementing this software requirement.
• [SR 9120]: A job will be declared failed after it has been requeued for a
configurable number of times.
The dispatcher application is responsible for implementing this software requirement.
1560 • [SR 9140]: The SPINGRID system will be implemented in Java according
to (a tailored version of ) the BSSC Java Coding Standards.
The whole SPINGRID system is responsible for implementing this software requirement.
• [SR 9150]: The system will be able to run for at least a week without inter-
ruption.
1565 The whole SPINGRID system is responsible for implementing this software requirement.
• [SR 9170]: The total time in which none of the dispatchers responds will
not exceed one hour a day.
The whole SPINGRID system is responsible for implementing this software requirement.
• [SR 9180]: The SPINGRID system is able to sent a notification to the job
1570 provider when a job is completed, failed or removed.
The whole SPINGRID system is responsible for implementing this software requirement.
All other software requirements, which are not mentioned above, are coupled with one or
more methods. This table can be found below this text. A method will be referred by first
a character G, C, D or A which stands for a general, client, dispatcher or agent component.
1575 Then the component name after which a dot follows and the method name. A * as method
name stands for all the methods in that component. When two or more methods have the
same name in the same component then a tag is added: (A), (D), (P) or (S) which stands
for a method which can be called by the application provider, data provider, project admin,
resource provider or the system admin.
SR 1424 GJSDLDescription.GetTPhysicalMemory
SR 1425 GJSDLDescription.GetTVirtualMemory
SR 1426 GJSDLDescription.GetTDiskSpace
SR 1427 GJSDLDescription.GetTResourceCount
SR 1510 GJSDLDescription.GetDataStaging
SR 1520 GJSDLDescription.GetDataStaging
SR 1530 GJSDLDescription.GetDataStaging
SR 1540 GJSDLDescription.GetDataStaging
SR 1550 GJSDLDescription.GetDataStaging
SR 1560 GJSDLDescription.GetDataStaging
SR 2010 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendAddApplicationProvider,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.AddApplicationProvider,
DDatabaseManager.PerformQuery
SR 2011 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendRemoveApplicationProvider,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.RemoveApplicationProvider,
DDatabaseManager.PerformQuery
SR 2020 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendAddDataProvider,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.AddDataProvider,
DDatabaseManager.PerformQuery
SR 2021 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendRemoveDataProvider,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.RemoveDataProvider,
DDatabaseManager.PerformQuery
SR 2030 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendAddProjectAdmin,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.AddProjectAdmin,
DDatabaseManager.PerformQuery
SR 2031 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendRemoveProjectAdmin,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.RemoveProjectAdmin,
DDatabaseManager.PerformQuery
SR 2040 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendAddProject,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.AddProject,
DDatabaseManager.PerformQuery
SR 2041 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendRemoveProject,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.RemoveProject,
DDatabaseManager.PerformQuery
SR 2050 See text above.
SR 2060 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendGetJobList(S),
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.GetJobList(S),
DDatabaseManager.PerformQuery
SR 2070 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendGetProjectAdmins,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.GetProjectAdmins,
DDatabaseManager.PerformQuery
SR 2080 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendGetApprovedApplicationProviders,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.GetApprovedApplicationProviders,
DDatabaseManager.PerformQuery
SR 2090 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendGetApprovedDataProviders,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.GetApprovedDataProviders,
DDatabaseManager.PerformQuery
SR 2100 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendGetResourceCalculations,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.GetResourceCalculations,
DDatabaseManager.PerformQuery
SR 3010 GHTTPMessage.*,
AIOProcessor.Input,
ADistributor.sendPoll,
ATranslator.sendPoll,
AJobScheduler.receivePoll,
ACommunicator.send,
DAgentCommunicator.*,
DAgentTranslator.*,
DAgentManager.Poll,
DDatabaseManager.PerformQuery
SR 3011 GHTTPMessage.*
SR 3020 GHTTPMessage.*,
AIOProcessor.Input,
ADistributor.sendAddProject,
ATranslator.sendAddProject,
ACommunicator.send,
DAgentCommunicator.*,
DAgentTranslator.*,
DAgentManager.AddProject,
DDatabaseManager.PerformQuery
SR 3021 GHTTPMessage.*,
AIOProcessor.Input,
ADistributor.sendRemoveProject,
ATranslator.sendRemoveProject,
ACommunicator.send,
DAgentCommunicator.*,
DAgentTranslator.*,
DAgentManager.RemoveProject,
DDatabaseManager.PerformQuery
SR 3030 GHTTPMessage.*,
AIOProcessor.Input,
ADistributor.AddInterval,
AJobScheduler.AddInterval
SR 3031 GHTTPMessage.*,
AIOProcessor.Input,
ADistributor.RemoveInterval,
AJobScheduler.RemoveInterval
SR 3040 GHTTPMessage.*,
AIOProcessor.Input,
ADistributor.sendGetUsing,
ATranslator.sendGetUsing,
ACommunicator.send,
DAgentCommunicator.*,
DAgentTranslator.*,
DAgentManager.GetUsing,
DDatabaseManager.PerformQuery
SR 3050 GHTTPMessage.*,
AIOProcessor.Input,
ADistributor.sendApproveApplication,
ATranslator.sendApproveApplication,
ACommunicator.send,
DAgentCommunicator.*,
DAgentTranslator.*,
DAgentManager.ApproveApplication,
DDatabaseManager.PerformQuery
SR 3051 GHTTPMessage.*,
AIOProcessor.Input,
ADistributor.sendDisapproveApplication,
ATranslator.sendDisapproveApplication,
ACommunicator.send,
DAgentCommunicator.*,
DAgentTranslator.*,
DAgentManager.DisapproveApplication,
DDatabaseManager.PerformQuery
SR 3060 GHTTPMessage.*,
AIOProcessor.Input,
ADistributor.sendApproveApplicationProvider,
ATranslator.sendApproveApplicationProvider,
ACommunicator.send,
DAgentCommunicator.*,
DAgentTranslator.*,
DAgentManager.ApproveApplicationProvider,
DDatabaseManager.PerformQuery
SR 3061 GHTTPMessage.*,
AIOProcessor.Input,
ADistributor.sendDisapproveApplicationProvider,
ATranslator.sendDisapproveApplicationProvider,
ACommunicator.send,
DAgentCommunicator.*,
DAgentTranslator.*,
DAgentManager.DisapproveApplicationProvider,
DDatabaseManager.PerformQuery
SR 3070 GHTTPMessage.*,
AIOProcessor.Input,
ADistributor.sendApproveJobProvider,
ATranslator.sendApproveJobProvider,
ACommunicator.send,
DAgentCommunicator.*,
DAgentTranslator.*,
DAgentManager.ApproveJobProvider,
DDatabaseManager.PerformQuery
SR 3071 GHTTPMessage.*,
AIOProcessor.Input,
ADistributor.sendDisapproveJobProvider,
ATranslator.sendDisapproveJobProvider,
ACommunicator.send,
DAgentCommunicator.*,
DAgentTranslator.*,
DAgentManager.DisapproveJobProvider,
DDatabaseManager.PerformQuery
SR 4010 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendApproveJobProvider(P),
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.ApproveJobProvider(P),
DDatabaseManager.PerformQuery
SR 4011 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendDisapproveJobProvider(P),
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.DisapproveJobProvider(P),
DDatabaseManager.PerformQuery
SR 4020 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendApproveResourceProvider,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.ApproveResourceProvider,
DDatabaseManager.PerformQuery
SR 4021 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendDisapproveResourceProvider,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.DisapproveResourceProvider,
DDatabaseManager.PerformQuery
SR 4030 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendApproveDataset,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.ApproveDataSet,
DDatabaseManager.PerformQuery
SR 4031 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendDisapproveDataset,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.DisapproveDataSet,
DDatabaseManager.PerformQuery
SR 4032 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendApproveDataProvider,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.ApproveDataProvider,
DDatabaseManager.PerformQuery
SR 4033 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendDisapproveDataProvider,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.DisapproveDataProvider,
DDatabaseManager.PerformQuery
SR 4040 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendApproveApplication,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.ApproveApplication,
DDatabaseManager.PerformQuery
SR 4041 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendDisapproveApplication,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.DisapproveApplication,
DDatabaseManager.PerformQuery
SR 4042 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendApproveApplicationProvider,
CCommunicator.Send,
DClientCommunicator.*,
DClientManager.DClientTranslator.*,
DClientManager.ApproveApplicationProvider,
DDatabaseManager.PerformQuery
SR 4043 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendDisapproveApplicationProvider,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.DisapproveApplicationProvider,
DDatabaseManager.PerformQuery
SR 4050 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendAllowOwnApplication,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.AllowOwnApplication,
DDatabaseManager.PerformQuery
SR 4051 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendDisallowOwnApplication,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.DisallowOwnApplication,
DDatabaseManager.PerformQuery
SR 4060 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendRemoveJob(P),
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.RemoveJob(P),
DDatabaseManager.PerformQuery
SR 4070 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendGetJobList(P),
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.GetJobList(P),
DDatabaseManager.PerformQuery
SR 5010 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendAddApplication,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.AddApplication,
DDatabaseManager.PerformQuery
SR 5011 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendRemoveApplication,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.RemoveApplication,
DDatabaseManager.PerformQuery
SR 5020 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendApproveApplicationToProject,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.ApproveApplicationToProject,
DDatabaseManager.PerformQuery
SR 5021 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendDisapproveApplicationFromProject,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.DisapproveApplicationToProject,
DDatabaseManager.PerformQuery
SR 5030 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendGetApplicationsList(A),
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.GetApplicationList(A),
DDatabaseManager.PerformQuery
SR 5040 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendGetTotalUsed,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.GetTotalUsed,
DDatabaseManager.PerformQuery
SR 5050 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.GetProjectList,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.GetProjectList(A),
DDatabaseManager.PerformQuery
SR 5060 See text above.
SR 5070 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendApproveJobProvider(A),
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.ApproveJobProvider(A),
DDatabaseManager.PerformQuery
SR 5071 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendDisapproveJobProvider(A),
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.DisapproveJobProvider(A),
DDatabaseManager.PerformQuery
SR 6010 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendAddData,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.AddData,
DDatabaseManager.PerformQuery
SR 6011 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendRemoveData,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.RemoveData,
DDatabaseManager.PerformQuery
SR 6020 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendApproveDataToProject,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.ApproveDataToProject,
DDatabaseManager.PerformQuery
SR 6021 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendDisapproveDataFromProject,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.DisapproveDataToProject,
DDatabaseManager.PerformQuery
SR 6030 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendGetProjectList,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.GetProjectList(D),
DDatabaseManager.PerformQuery
SR 6040 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendGetDataList,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.GetDataList,
DDatabaseManager.PerformQuery
SR 6050 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendGetApplicationsList(D),
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.GetApplicationList(D),
DDatabaseManager.PerformQuery
SR 6060 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendApproveJobProvider(D),
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.ApproveJobProvider(D),
DDatabaseManager.PerformQuery
SR 6061 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendDisapproveJobProvider(D),
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.DisapproveJobProvider(D),
DDatabaseManager.PerformQuery
SR 7010 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendOfferJob,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.OfferJob,
DDatabaseManager.PerformQuery
SR 7011 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendRemoveJob(J),
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.RemoveJob(J),
DDatabaseManager.PerformQuery
SR 7012 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendOfferJob,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.OfferJob,
DDatabaseManager.PerformQuery
SR 7013 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendOfferJob,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.OfferJob,
DDatabaseManager.PerformQuery
SR 7020 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendGetApplicationList,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.GetApplicationList(J),
DDatabaseManager.PerformQuery
SR 7030 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendGetResults,
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.GetResults,
DDatabaseManager.PerformQuery
SR 7040 GHTTPMessage.*,
CIOProcessor.Input,
CTranslator.sendGetJobList(J),
CCommunicator.Send,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.GetJobList(J),
DDatabaseManager.PerformQuery
SR 7070 GJSDLDescription.*
SR 7110 See text above.
SR 7120 See text above.
SR 7130 See text above.
SR 7140 GJSDLDescription.*
SR 7150 See text above.
SR 8000 GHTTPMessage.*,
AIOProcessor.Input,
CIOProcessor.Input,
CTranslator.sendLogIn,
CCommunicator.Send,
DIOProcessor.Input,
DClientCommunicator.*,
DClientTranslator.*,
DClientManager.LogIn,
DDatabaseManager.PerformQuery
SR 9000 See text above.
SR 9010 See text above.
SR 9020 See text above.
SR 9030 AIOProcessor.Input,
CIOProcessor.Input,
DIOProcessor.Input
SR 9031 See text above.
SR 9040 See text above.
SR 9050 See text above.
SR 9060 See text above.
SR 9070 See text above.
SR 9080 See text above.
SR 9090 See text above.
SR 9100 See text above.
SR 9110 See text above.
SR 9120 See text above.
SR 9130 GHTTPMessage.*
SR 9140 See text above.
SR 9150 See text above.
SR 9160 GLogger.Log,
GLogger.Error
CTranslator.sendDisapproveApplicationFromProject SR 5021
CTranslator.sendRemoveDataProvider SR 2021
CTranslator.sendApproveDataProvider SR 4032
CTranslator.sendGetDataList SR 6040
CTranslator.sendDisapproveDataFromProject SR 6021
CTranslator.sendApproveJobProvider(P) SR 4010
CTranslator.GetProjectList SR 5050
CTranslator.sendOfferJob SR 7010, SR 7012, SR 7013
CTranslator.sendGetApplicationsList(A) SR 5030
CTranslator.sendGetResourceCalculations SR 2100
CTranslator.sendDisapproveJobProvider(P) SR 4011
CTranslator.sendApproveDataToProject SR 6020
CTranslator.sendRemoveJob(J) SR 7011
CTranslator.sendGetApprovedApplicationProviders SR 2080
CTranslator.sendDisapproveDataset SR 4031
CTranslator.sendGetProjectList SR 6030
CTranslator.sendDisapproveJobProvider(D) SR 6061
CTranslator.sendApproveApplication SR 4040
CTranslator.sendLogIn SR 8000
CTranslator.sendGetJobList(J) SR 7040
CTranslator.sendGetProjectAdmins SR 2070
CTranslator.sendAddApplication SR 5010
CTranslator.sendDisapproveJobProvider(A) SR 5071
CTranslator.sendAddApplicationProvider SR 2010
CTranslator.sendApproveJobProvider(A) SR 5070
CTranslator.sendApproveJobProvider(D) SR 6060
CTranslator.sendApproveDataset SR 4030
CTranslator.sendRemoveProject SR 2041
CTranslator.sendDisapproveApplication SR 4041
CTranslator.sendDisapproveApplicationProvider SR 4043
CTranslator.sendRemoveApplication SR 5011
CTranslator.sendRemoveApplicationProvider SR 2011
CTranslator.sendGetJobList(P) SR 4070
CTranslator.sendAddProject SR 2040
CTranslator.sendApproveApplicationProvider SR 4042
CTranslator.sendRemoveData SR 6011
DAgentCommunicator.* SR 3061, SR 3010, SR 3040, SR 3070,
SR 3071, SR 3020, SR 3021, SR 3050,
SR 3051, SR 3060
DAgentManager.DisapproveApplication SR 3051
DAgentManager.Poll SR 3010
DAgentManager.ApproveApplication SR 3050
DAgentManager.GetUsing SR 3040
DAgentManager.RemoveProject SR 3021
DAgentManager.ApproveApplicationProvider SR 3060
DAgentManager.AddProject SR 3020
DAgentManager.ApproveJobProvider SR 3070
DAgentManager.DisapproveApplicationProvider SR 3061
DAgentManager.DisapproveJobProvider SR 3071
DAgentTranslator.* SR 3061, SR 3010, SR 3040, SR 3070,
SR 3071, SR 3020, SR 3021, SR 3050,
SR 3051, SR 3060
DClientCommunicator.* SR 6061, SR 4031, SR 5030, SR 4032,
SR 4060, SR 4033, SR 2030, SR 2031,
SR 2060, SR 2090, SR 6010, SR 6011,
SR 6040, SR 4010, SR 7010, SR 4011,
SR 7011, SR 7012, SR 4040, SR 7040,
SR 5010, SR 7013, SR 2010, SR 4041,
SR 5011, SR 4070, SR 5040, SR 4042,
SR 2040, SR 2011, SR 4043, SR 2041,
SR 5070, SR 5071, SR 2070, SR 6020,
SR 2100, SR 6021, SR 6050, SR 4020,
SR 7020, SR 4021, SR 4050, SR 5020,
SR 2020, SR 4051, SR 5021, SR 2021,
SR 5050, SR 2080, SR 6030, SR 6060,
SR 4030, SR 7030, SR 8000
DClientManager.GetApprovedApplicationProviders SR 2080
DClientManager.ApproveJobProvider(A) SR 5070
DClientManager.RemoveProject SR 2041
DClientManager.AddApplication SR 5010
DClientManager.DisapproveJobProvider(A) SR 5071
DClientManager.GetJobList(J) SR 7040
DClientManager.GetProjectAdmins SR 2070
DClientManager.LogIn SR 8000
DClientManager.ApproveApplication SR 4040
DClientManager.GetTotalUsed SR 5040
DClientManager.ApproveJobProvider(D) SR 6060
DClientManager.GetResults SR 7030
DClientManager.DisapproveApplication SR 4041
DClientManager.RemoveJob(J) SR 7011
DClientManager.RemoveApplicationProvider SR 2011
DClientManager.DisapproveJobProvider(P) SR 4011
DClientManager.ApproveDataToProject SR 6020
DClientManager.RemoveApplication SR 5011
DClientManager.GetProjectList(D) SR 6030
DClientManager.GetResourceCalculations SR 2100
DClientManager.OfferJob SR 7010, SR 7012, SR 7013
DClientManager.ApproveJobProvider(P) SR 4010
DClientManager.AddProject SR 2040
DClientManager.GetDataList SR 6040
DClientManager.DisapproveDataToProject SR 6021
DClientManager.DisapproveJobProvider(D) SR 6061
DClientManager.DisapproveDataSet SR 4031
DClientManager.GetJobList(P) SR 4070
DClientManager.RemoveData SR 6011
DClientManager.ApproveApplicationProvider SR 4042
DClientManager.AddData SR 6010
DClientManager.GetApplicationList(D) SR 6050
DClientManager.DClientTranslator.* SR 4042
DClientManager.ApproveResourceProvider SR 4020
DClientManager.GetApprovedDataProviders SR 2090
DClientManager.GetApplicationList(J) SR 7020
DClientManager.AddApplicationProvider SR 2010
DClientManager.DisapproveApplicationToProject SR 5021
DClientManager.GetJobList(S) SR 2060
DClientManager.ApproveDataSet SR 4030
DClientManager.GetProjectList(A) SR 5050
DClientManager.RemoveProjectAdmin SR 2031
DClientManager.DisapproveResourceProvider SR 4021
DClientManager.GetApplicationList(A) SR 5030
DClientManager.AddProjectAdmin SR 2030
DClientManager.AllowOwnApplication SR 4050
DClientManager.DisapproveDataProvider SR 4033
DClientManager.ApproveApplicationToProject SR 5020
DClientManager.RemoveJob(P) SR 4060
DClientManager.AddDataProvider SR 2020
DClientManager.RemoveDataProvider SR 2021
DClientManager.ApproveDataProvider SR 4032
DClientManager.DisallowOwnApplication SR 4051
DClientManager.DisapproveApplicationProvider SR 4043
DClientTranslator.* SR 6061, SR 4031, SR 5030, SR 4032,
SR 4060, SR 4033, SR 2030, SR 2031,
SR 2060, SR 2090, SR 6010, SR 6011,
SR 6040, SR 4010, SR 7010, SR 4011,
SR 7011, SR 7012, SR 4040, SR 7040,
SR 5010, SR 7013, SR 2010, SR 4041,
SR 5011, SR 4070, SR 5040, SR 2040,
SR 2011, SR 4043, SR 2041, SR 5070,
SR 5071, SR 2070, SR 6020, SR 2100,
SR 6021, SR 6050, SR 4020, SR 7020,
SR 4021, SR 4050, SR 5020, SR 2020,
SR 4051, SR 5021, SR 2021, SR 5050,
SR 2080, SR 6030, SR 6060, SR 4030,
SR 7030, SR 8000
GJSDLDescription.GetTCPUTime SR 1422
GJSDLDescription.GetTCPUCount SR 1423
GJSDLDescription.GetICPUSpeed SR 1415
GJSDLDescription.GetApplicationDescription SR 1330
GJSDLDescription.GetICPUCount SR 1417
GJSDLDescription.GetApplicationVersion SR 1320
GJSDLDescription.GetOperatingSystem SR 1413
GJSDLDescription.GetINetworkBandwidth SR 1418
GJSDLDescription.GetApplicationName SR 1310
GJSDLDescription.GetTPhysicalMemory SR 1424
GJSDLDescription.GetExclusiveExecution SR 1412
GJSDLDescription.GetFileSystems SR 1411
GJSDLDescription.GetCandidateHosts SR 1410
GJSDLDescription.GetGetJobProjects SR 1240
GJSDLDescription.GetJobName SR 1210
GJSDLDescription.GetTResourceCount SR 1427
GJSDLDescription.* SR 7070, SR 7140
GJSDLDescription.GetIPhysicalMemory SR 1419
GJSDLDescription.GetTVirtualMemory SR 1425
GLogger.Error SR 9160
GLogger.Log SR 9160
Communication protocol
The protocol describes how communication will take place between the different software
1585 programs. The communication is done using HTTP POST requests sent by the agent en
client to the dispatcher. The dispatcher then responds with a HTTP response. The protocol
should be implemented by the HTTP Message component which is present in the client, agent
and dispatcher. We use this kind of communication, because this would allow the client and
agent to operate behind a firewall or NAT configuration. An HTTP request is actually a
1590 string containing pairs of variables and values and a HTTP response contains a HTTP status
code and a string.
1. Hello
D
2. Random String
i
C s
l 3. Hash p
i a
4. OK or NOK
e t
n 5. Command
c
t h
6. Response e
r
The communication is graphically shown in figure A.1. The client can send three types of
packets to the dispatcher:
A.1.1 Register
1600 Before a user can use the services provided by the SPINGRID system, it needs to register
itself with the dispatcher. It does by sending a register-packet to the dispatcher:
Variable Value
command Register
username (username)
password (password)
The fields username and password contain the desired username and password for the user.
A.1.2 Log In
1605 Before the client can perform his actions, it needs to log in. It does this by sending an
hello-packet to the dispatcher:
Variable Value
command Login Ask
username (username)
The dispatcher generates a random string and sends this back to the client as an HTTP
response (1). Both the dispatcher and the client then use the random string and the username
1610 of the user operating the client to calculate a hash. This means that the dispatcher should
know all passwords of all users. The client then sends his hash back to the dispatcher in a
hash-packet:
Variable Value
command Login Hash
username (username)
hash (hash)
1615 The dispatcher compares its own hash with the received hash. If the hashes are equal the
client is considered authenticated and a ”LoginOK” string is returned. If the hashes are not
equal a ”LoginNOK” is returned.
After the client has logged in, it can send commands to the dispatcher. A command-packet
1620 has the form of
Variable Value
command (command)
username (username)
hash (hash)
arg1 (arg1)
arg2 (arg2)
... ...
argn (argn)
The dispatcher then responds containing a HTTP status code and a string. The client can
1625 take action depending on the HTTP status code (see section A.3).
D
1. Agent ID
i
s
A
2. Agent ID / ACK p
g
a
e 3. Poll
t
n
4. Response
c
t
h
e
r
In every instance of communication the client will send a string using HTTP POST and the
dispatcher will then send a response. There is no situation in which the dispatcher initiates
the communication. The packets have the same form as in the client protocol (see section
1630 A.1).
A.2.1 Identification
Before the agent can get a job, it needs to identify itself in the SPINGRID system. It does
this by sending its AgentID and specifications to the dispatcher. If the agent is new, it sends
an empty AgentID:
1635
Variable Value
command Identify
agentid null
specs (specifications)
The dispatcher responds with a new unique AgentID. After the agent has received the new
id, it can use it to identify itself. After identification the agent can send commands in the
1640 same way as the client does.
A.2.2 Polling
On regular intervals, the agent needs to poll the dispatcher, notifying it of its presence. A
polling packet has the form of:
Variable Value
command Poll
agentid (agentid)
1645 status (status)
The status can be either asking for a job (asking), just completed a job (completed) or
currently calculating on a job (calculating). The dispatcher will respond with an HTTP
response.
In the table below an enumeration of all HTTP status codes that can be sent by the dispatcher
is found.
HTTP Code Meaning
200 The command has a valid syntax
202 The command was accepted
207 The command was not accepted
400 The command was not recognized or wrong parameters given
401 The command was not executed, because the client was not properly authenticated
404 Not found
500 While the dispatcher was executing the command, an unknown error occurred.
1655 Sometimes the dispatcher needs to return the result of a query. This query is in the form of
a table, but it is only possible to send strings. Therefor, the tables have to be converted to a
string and back. This is done in the following way:
In this section the command-line syntax of the dispatcher application is described. To start
the dispatcher use:
• exit
Shuts down the dispatcher application.
1675 • kill
Terminates the dispatcher application instantly, without shutting down individual com-
ponents.
In this section the command-line syntax of the client application is described. The general
1680 form of a command is:
Variable explanation:
1690
Different roles:
appprov application provider
datprov data provider
jobprov job provider
projadmin project admin
sysadmin system admin
1695
Possible Commands:
1750 In this section the command-line syntax of the client application is described. To start the
agent use:
1755 The program will wait for one of the following commands:
• approve {<application>|<user>|<project>}
Trust an application on the resource, trust all applications from an application provider
1760 or trust all jobs from a user on the resource or trust a project on your resource.
• disapprove {<application>|<user>}
Distrust an application on the resource, distrust all applications from an application
provider or distrust all jobs from a user on your resource.
• exit
1765 Shuts down the agent application.
• kill
Terminates the agent application instantly, without shutting down individual compo-
nents.
• list using
1770 List all projects that are using or have been using the resource.