From e48bf49226b2a8e2d7118b1338024bd3701de178 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20Posp=C3=AD=C5=A1il?= Date: Wed, 12 Dec 2007 18:57:44 +0000 Subject: [PATCH] Updated: - new structure of the User's guide -- Introduction taken from the JGCUF paper (Cesnet TR) - proposed a new structure for Admin's and Developer's guide - added some .T generated files --- org.glite.lb.doc/Makefile | 13 +- org.glite.lb.doc/src/LBAG-Introduction.tex | 9 +- org.glite.lb.doc/src/LBDG-Introduction.tex | 3 + org.glite.lb.doc/src/LBDG.tex | 44 + org.glite.lb.doc/src/LBUG-Appendix.tex | 16 + org.glite.lb.doc/src/LBUG-Architecture.tex | 117 --- org.glite.lb.doc/src/LBUG-Caveats.tex | 88 -- org.glite.lb.doc/src/LBUG-Interaction.tex | 59 -- org.glite.lb.doc/src/LBUG-Introduction.tex | 1030 +++++++++++++++++++- org.glite.lb.doc/src/LBUG-QuickStartGuide.tex | 37 - org.glite.lb.doc/src/LBUG-Security.tex | 59 -- org.glite.lb.doc/src/LBUG-Tools.tex | 3 + org.glite.lb.doc/src/LBUG-UseCases.tex | 9 + org.glite.lb.doc/src/LBUG.tex | 26 +- org.glite.lb.doc/src/change_acl.tex | 5 +- org.glite.lb.doc/src/consumer_api.tex | 8 +- org.glite.lb.doc/src/definitions.tex | 21 +- org.glite.lb.doc/src/events.tex.T | 31 + org.glite.lb.doc/src/frontmatter.tex | 1 + .../src/images/LB-components-gather.pdf | Bin 0 -> 48193 bytes .../src/images/LB-components-query.pdf | Bin 0 -> 47744 bytes org.glite.lb.doc/src/images/seqtree.pdf | Bin 0 -> 5715 bytes org.glite.lb.doc/src/images/wms2-jobstat.pdf | Bin 0 -> 7328 bytes org.glite.lb.doc/src/log_usertag.tex | 5 +- .../src/{cmdln_interface.tex => logevent.tex} | 3 + org.glite.lb.doc/src/logging-arch-notif.pdf | Bin 67535 -> 0 bytes org.glite.lb.doc/src/notification_api.tex | 8 +- org.glite.lb.doc/src/producer_api.tex | 2 + org.glite.lb.doc/src/status.tex.T | 17 + org.glite.lb.doc/src/web_services.tex | 19 + 30 files changed, 1221 insertions(+), 412 deletions(-) create mode 100644 org.glite.lb.doc/src/LBDG-Introduction.tex create mode 100644 org.glite.lb.doc/src/LBDG.tex create mode 100644 org.glite.lb.doc/src/LBUG-Appendix.tex delete mode 100644 org.glite.lb.doc/src/LBUG-Architecture.tex delete mode 100644 org.glite.lb.doc/src/LBUG-Caveats.tex delete mode 100644 org.glite.lb.doc/src/LBUG-Interaction.tex delete mode 100644 org.glite.lb.doc/src/LBUG-QuickStartGuide.tex delete mode 100644 org.glite.lb.doc/src/LBUG-Security.tex create mode 100644 org.glite.lb.doc/src/LBUG-Tools.tex create mode 100644 org.glite.lb.doc/src/LBUG-UseCases.tex create mode 100644 org.glite.lb.doc/src/events.tex.T create mode 100644 org.glite.lb.doc/src/images/LB-components-gather.pdf create mode 100644 org.glite.lb.doc/src/images/LB-components-query.pdf create mode 100644 org.glite.lb.doc/src/images/seqtree.pdf create mode 100644 org.glite.lb.doc/src/images/wms2-jobstat.pdf rename org.glite.lb.doc/src/{cmdln_interface.tex => logevent.tex} (97%) delete mode 100644 org.glite.lb.doc/src/logging-arch-notif.pdf create mode 100644 org.glite.lb.doc/src/producer_api.tex create mode 100644 org.glite.lb.doc/src/status.tex.T create mode 100644 org.glite.lb.doc/src/web_services.tex diff --git a/org.glite.lb.doc/Makefile b/org.glite.lb.doc/Makefile index 3141d77..d5a6ca3 100644 --- a/org.glite.lb.doc/Makefile +++ b/org.glite.lb.doc/Makefile @@ -12,12 +12,16 @@ PREFIX=/opt/glite VPATH = ${top_srcdir}/src KPATH = TEXINPUTS=".:$(VPATH)//:" KPATHBIB = BIBINPUTS=".:$(VPATH)//:" + LATEX = $(KPATH) latex PDFLATEX = $(KPATH) pdflatex BIBTEX = $(KPATHBIB) bibtex DVIPS = $(KPATH) dvips +AT3=${stagedir}/sbin/glite-lb-at3 + +default all: generate LBUG.pdf LBAG.pdf LBDG.pdf -default: LBUG.pdf LBAG.pdf +generate: events.tex status.tex # %.dvi: %.tex # $(LATEX) $< @@ -34,7 +38,12 @@ default: LBUG.pdf LBAG.pdf $(PDFLATEX) $< $(PDFLATEX) $< +%.tex: %.tex.T + rm -f $@ + ${AT3} $< >$@ || rm -f $@ + chmod -w $@ >/dev/null + clean: - rm -rvf LBUG* LBAG* + rm -rvf LBUG* LBAG* LBDG* events.tex status.tex .PHONY: all clean purge ps pdf diff --git a/org.glite.lb.doc/src/LBAG-Introduction.tex b/org.glite.lb.doc/src/LBAG-Introduction.tex index 78c04d7..55d7858 100644 --- a/org.glite.lb.doc/src/LBAG-Introduction.tex +++ b/org.glite.lb.doc/src/LBAG-Introduction.tex @@ -1,3 +1,10 @@ \section{Introduction} -\endinput +This document should contain + +\subsection{deployment scenarios} +\subsection{instalation} +\subsection{configuration} +\subsection{complete RMPs description} +\subsection{daemons description} +\subsection{CLI tools description: purge/dump/load} diff --git a/org.glite.lb.doc/src/LBDG-Introduction.tex b/org.glite.lb.doc/src/LBDG-Introduction.tex new file mode 100644 index 0000000..78c04d7 --- /dev/null +++ b/org.glite.lb.doc/src/LBDG-Introduction.tex @@ -0,0 +1,3 @@ +\section{Introduction} + +\endinput diff --git a/org.glite.lb.doc/src/LBDG.tex b/org.glite.lb.doc/src/LBDG.tex new file mode 100644 index 0000000..ebdccc0 --- /dev/null +++ b/org.glite.lb.doc/src/LBDG.tex @@ -0,0 +1,44 @@ +\documentclass{egee} + +\input{definitions} + +\title{Logging and Bookkeeping} +\Subtitle{Developer's Guide} +\author{CESNET EGEE II JRA1 team} +\DocIdentifier{EGEE-II....} +\Date{\today} +\Activity{JRA1: Middleware Engineering and Integration} +\DocStatus{DRAFT} +\Dissemination{PUBLIC} +\DocumentLink{http://...} + +\Abstract{This developer's guide explains how to use the Logging and Bookkeeping +(\LB) service API. Logging, querying and notification API as well as the Web Services +Interface is described in details together with programming examples. } + +\begin{document} + +\input{frontmatter} +\tableofcontents + +\newpage +\input{LBDG-Introduction} + +\newpage +\input{producer_api} + +\newpage +\input{consumer_api} + +\newpage +\input{notification_api} + +\newpage +\input{web_services} + +\newpage +\bibliographystyle{unsrt} +\bibliography{lbjp} + +\end{document} + diff --git a/org.glite.lb.doc/src/LBUG-Appendix.tex b/org.glite.lb.doc/src/LBUG-Appendix.tex new file mode 100644 index 0000000..e1e575c --- /dev/null +++ b/org.glite.lb.doc/src/LBUG-Appendix.tex @@ -0,0 +1,16 @@ +\section*{Appendix} + +\section{\LB Event Types} +\label{a:events} +Complete list of all events' names together with their description follows. +% see events.tex.T +\input{events} + +\newpage +\section{\LB Job States} +\label{a:jobstat} +Complete list of all job' states together with their description follows. +% see status.tex.T +\input{status} + + diff --git a/org.glite.lb.doc/src/LBUG-Architecture.tex b/org.glite.lb.doc/src/LBUG-Architecture.tex deleted file mode 100644 index 69cfc09..0000000 --- a/org.glite.lb.doc/src/LBUG-Architecture.tex +++ /dev/null @@ -1,117 +0,0 @@ -\subsection{Service Architecture} - -Within the gLite WMS, upon creation - each job is assigned a~unique, virtually non-recyclable -\emph{job identifier} (JobId) in an~URL form. -The server part of the URL designates the \emph{bookkeeping server} which -gathers and provides information on the job for its whole life. - -High level view on the \LB\ architecture is shown in Fig.~\ref{fig-arch} -on page~\pageref{fig-arch}. - -\LB\ tracks jobs in terms of \emph{events} (\eg\ \emph{Transfer} from a~WMS -component to another one, \emph{Run} and \emph{Done} when the jobs starts -and stops execution, \dots). -Each event type carries its specific attributes. -The entire architecture is specialized for this purpose and is job-centric\Dash -any event is assigned to a~unique Grid job. - -\subsubsection{Event delivery and storage} -The events are gathered from various WMS components by the -\emph{\LB\ producer library} -and passed on to the \emph{locallogger} daemon, -running physically close to avoid -any sort of network problems. -The locallogger's task is storing the accepted event in a~local disk file. -Once it's done, confirmation is sent back and the logging library call -returns, reporting success. -Consequently, logging calls have local, virtually non-blocking semantics. - -Further on, event delivery is managed by the \emph{interlogger} daemon. -It takes the events from the locallogger (or the disk files on crash recovery), -and repeatedly tries to deliver them to the destination -bookkeeping server (known from the JobId) until it succeeds finally. -Therefore the entire event delivery is highly reliable. -However, in the standard mode described so far it is asynchronous -(there is a~synchronous mode for special usage not discussed here) -there is no direct way for the caller to see whether an event has been -already delivered. -Our experience shows that the semantics is suitable in the prevailing number -of cases while being the most efficient in the erratic Grid environment. - -The bookkeeping server processes the incoming events -to give a~higher level view -on the job states (\eg\ \emph{Submitted, Running, Done}), -each having an appropriate set of attributes again. -\LB\ provides a~public interface (Sect.~\ref{query-C}) -to retrieve them via synchronous queries. - -Further on, upon each event delivery to the \LB\ server the new computed -job state is matched against the set of registered requests for notification. -If some of them match, special events\Dash\emph{notifications} are generated -and passed to a~modified -\emph{notification interlogger}. -It takes over the notification from LB server, stores it into file and -periodically tries to deliver it to the address where the corresponding -notification client is listening. -If the user changes this address (IP or port) -\LB\ server instructs the notification interlogger to change -the destination of possible pending notifications. - -\subsubsection{Queries} -\label{arch-queries} -One part of the \LB\ interface is the query API (Sect.~\ref{query-C}). -Two types of queries are supported\Dash\emph{job queries} which return -one or more jobs, including a~detailed description of their states, -and \emph{event queries} returning the raw \LB\ events. -In general, job queries are used to track normal life of jobs, -event queries are used mostly for tracing abnormal behaviour. - -Each query is formed of several conditions (\eg\ concrete jobid's, -owner of jobs, particular job state etc.). -The \LB\ library formats the conditions into a~query message, passes it to -the server, and waits for the response which is passed to the user -synchronously. - -\subsubsection{Notifications} -\label{notification} -On the contrary, the notification API (Sect.~\ref{notify-C}) allows -the user to -register for notifications. These are delivered to the listening -client asynchronously, when the particular event (a~change of job status -typically) occurs. -The main purpose of this \LB\ functionality is avoiding unnecessary load -on the \LB\ server serving many repeated queries (polling) with the same -result most of the time. - -Using a~notification client (program that uses LB client -API to handle notifications) the user registers with a~\LB\ server -to receive notifications. -She must specify conditions under which the -notification is sent. These conditions are a~subset of the conditions -available for synchronous queries (Sect.~\ref{arch-queries}). -Currently due to implementation constraints, one -or more jobid's are required among the conditions and only -a~single occurrence of a~specific attribute is allowed. The registration is -sent to the \LB\ server in the same way as synchronous queries, -and stored there. -In response, the server generates a~unique notification ID which is used -by the user to refer to this notification further on. -The user may -change conditions which trigger notification, prolong validity of -the registration, remove the registration from LB server, -or even change the destination of notifications, \ie\ the address where -a~client listens for notifications. - -The registration is soft-state; it exists only for limited amount of time. The -validity is returned by LB server together with notification ID. - -While the registration is valid, -the user may stop the notification client and launch another, even -on a~different machine. -Notifications generated during the time when there was no client listening -for them are kept by the notification interlogger. -Once a~new listening address is announced to the -server, the pending notifications are delivered. - -\endinput diff --git a/org.glite.lb.doc/src/LBUG-Caveats.tex b/org.glite.lb.doc/src/LBUG-Caveats.tex deleted file mode 100644 index ac04a14..0000000 --- a/org.glite.lb.doc/src/LBUG-Caveats.tex +++ /dev/null @@ -1,88 +0,0 @@ -\section{Known Problems and Caveats} - -\subsection{Indexed attributes}\label{ConsIndx} -\LB\ queries can be fairly complicated and they can potentially return large -amounts of data. In such cases, there is a~risk of server overload. -In order to prevent the overload, every \LB\ server configuration -includes a~set of configurable \emph{indices}, empty by default -(job ID is always indexed). -In general, at least one indexed attribute must be -present in each query\,---\,queries over only attributes without indices -are refused. - -Unfortunately, in some cases queries that may be considered very important from -the user's point of view (like all user's jobs) fall into this category. -Indexing specific attributes makes these queries tractable -(while increasing the risk of server overload). -It's left up to the server administrator to decide which query types are -supported by configuring indices over attribute sets of desired queries using -the \texttt{glite-lb-bkindex} utility. -I.\,e.\ if the attribute \texttt{EDG\_WLL\_QUERY\_ATTR\_OWNER} is not indexed, -some of -queries in the presented examples -% odkazuje na totez :-( (\eg\ Sect.'s~\ref{JQ-auj},\ref{JQ-rj}) -(Sect.'s~\ref{JQ-auj}) -are forbidden. - -\subsection{Timeouts} - -All blocking \LB\ API calls are subject to timeouts. Timeout values can be changed -from their respective defaults with \texttt{edg\_wll\_SetParam} -call or using variables of the process environment (floating point number of seconds). - -\begin{tabular}{lcll} -affected calls&default(max)¶meter&env. variable\\ -async. logging&120 (1800)&\texttt{EDG\_WLL\_PARAM\_LOG\_TIMEOUT}&\texttt{EDG\_WL\_LOG\_TIMEOUT}\\ -sync. logging&120 (1800)&\texttt{EDG\_WLL\_PARAM\_LOG\_SYNC\_TIMEOUT}&\texttt{EDG\_WL\_LOG\_SYNC\_TIMEOUT}\\ -queries&120 (1800)&\texttt{EDG\_WLL\_PARAM\_QUERY\_TIMEOUT}&\texttt{EDG\_WL\_QUERY\_TIMEOUT}\\ -notifications&120 (1800)&\texttt{EDG\_WLL\_PARAM\_NOTIF\_TIMEOUT}&\texttt{EDG\_WL\_NOTIF\_TIMEOUT}\\ -\end{tabular} - -\subsection{Timestamps} -Timestamps of \LB\ event is recorded by the process calling a~logging API call. It is strongly recommended -to keep clocks of all systems that produce \LB\ events (UI, WM, WN) in reasonable synchronization so that -timestamp attributes of events and job status can be interpreted easily. - -On the other hand, timestamps are not authoritative when \LB\ events -are sorted in order to compute job state\Dash a~more robust mechanism -of the hierarchical \LB\ sequence code is used instead. -Consequently, strict timestamp sorting of events coming from desynchronised -sources may give different (incorrect) results from what \LB\ reports in job -state. - -\subsection{Size limitations} - -Current implementation of \LB\ has a~few built-in size limits, mostly related -to schema of underlaying MySQL database. By default, the limits are: - -\begin{tabular}{lc} -item & maximum size\\ -user certificate subject&255 bytes\\ -event attribute (JDL etc.) &16 megabytes\\ -tag name&200 bytes\\ -tag value&255 bytes\\ -job ACL&16 megabytes\\ -notification destination&200 bytes\\ -\end{tabular} - -The restriction on tag value is twofold. -Values up to 16\,MB may be logged and retrieved as raw events. -However, when reported in job state longer values are truncated to 255 bytes. -The restriction is inherited from MySQL limit on index size. - -\subsection{Running startup scripts} - -Startup scripts of the \LB\ service daemons should not be called without preconditions -being satisfied, \eg\ one should not try to start a~service when it is already running -or try to restart it from a~cron job without checking whether the machine is shutting down -at the time. - -\subsection{Dependencies} - -It is strongly discouraged to use \LB\ with different revisions -of external dependencies (MySQL, Globus Toolkit) -than those described in the release documentation. While the \LB\ has been designed to achieve -reasonable backward and forward compatibility, some disruptive changes in minor revisions -of external software have been observed before. - -\endinput diff --git a/org.glite.lb.doc/src/LBUG-Interaction.tex b/org.glite.lb.doc/src/LBUG-Interaction.tex deleted file mode 100644 index 85aabde..0000000 --- a/org.glite.lb.doc/src/LBUG-Interaction.tex +++ /dev/null @@ -1,59 +0,0 @@ -\subsection{Interactions with other Services} - -The main \LB\ functionality is keeping track of jobs managed by -the Workload Management System otherwise. -Therefore its basic usage is done internally by the WMS components. -However, the query and notification interface is completely available -to user-level applications. Upto limited extent (two event types) -this holds for the event-logging interface too. - -\subsubsection{Event sources} -\LB\ events are generated by the following WMS components: -\begin{description} -\item[User Interface] registers the job with \LB\ and provides details -on transfer of the job to the resource broker. -\item[Resource Broker,] consisting of several WMS components, -logs various events as the job is passed among these components, -as well as other important job-related information (\eg\ the chosen -destination Computing Element). -\item[Computing Element,] via the Job Wrapper script, provides the immediate -information on job execution. -\end{description} -Besides these WMS components the job payload may also log UserTag events -(see Sect.~\ref{log_usertag}) containing arbitrary user information. - -Checkpointable jobs also use \LB\ to keep track of the job progress. -This is done internally by the checkpoint support library. - -Finally, changes of job access control lists are done by logging -another event. This may be done directly by the user or using the WMS -user interface. - -\subsubsection{Queries} - -The \LB\ queries with a~user-visible output -are executed from within WMS User Interface -commands glite-job-status and glite-job-logging-info. - -Besides those several WMS components use \LB\ internally to query -information on job status which is relevant for their processing. - -\subsubsection{Notifications} - -Notifications on job state change are used by WMS GUI -to monitor the state of jobs periodically. - -\subsubsection{Component and Interaction Diagrams} -% \todo{nekdy priste} -% To help understanding the service a set of component and interaction -% diagrams might help. This section is not mandatory. - -\begin{figure}[h] -\centering -\includegraphics[width=.8\hsize]{logging-arch-notif} -\caption{Overview of the \LB\ architecture} -\label{fig-arch} -\end{figure} - - -\endinput diff --git a/org.glite.lb.doc/src/LBUG-Introduction.tex b/org.glite.lb.doc/src/LBUG-Introduction.tex index 70fbb7d..68e1bad 100644 --- a/org.glite.lb.doc/src/LBUG-Introduction.tex +++ b/org.glite.lb.doc/src/LBUG-Introduction.tex @@ -1,21 +1,1011 @@ \section{Introduction} -%This Section should give a brief summary of what the service described -%is supposed to achieve and how it fits into the overall -%architecture. It should contain subsections on the service internal -%architecture and its relations to other services. - -The Logging and Bookkeeping (\LB) service tracks jobs managed by -the gLite WMS (workload management system). -It gathers events from various WMS components in a~reliable way -and processes them in order to give a~higher level view, the -\emph{status of job}. - -Virtually all the important -data are fed to \LB\ internally from various gLite middleware -components, transparently from the user's point of view. -On the contrary, \LB\ provides public interfaces for querying the job -information synchronously as well as registering for asynchronous -notifications. -API's for this functionality are described in this document in detail. - -\endinput + +%historie: vyrobeno pro WMS v EDG, 1. a 2. verze (seq. èísla, +%cache a dotazy na stavy), v EGEE gLite---ustabilnìní, proxy + +The Logging and Bookkeeping service (\LB\ for short) was initially +developed in the EU DataGrid +project\footnote{\url{http://eu-datagrid.web.cern.ch/eu-datagrid/}} +as a~part of the +Workload Management System (WMS). +The development continues in the EGEE and EGEE-II projects, +where \LB became an independent part of the gLite middleware~\cite{glite}. + +\LB's primary purpose is tracking WMS jobs as they are processed by +individual Grid components, not counting on the WMS to provide this data. +The information gathered from individual sources is collected, stored in +a database and made available at a single contact point. The user get a +complete view on her job without the need to inspect several service logs +(which she may not be authorized to see in the entirety or she may not be +even aware of their existence). + +While \LB keeps track of submitted and running jobs, the information is +kept by the \LB service also after the job has been finished (successfully +completed its execution, failed, or has been canceled for any reason). The +information is usually available several days after the last event +related to the job arrived, to give user an opportunity to check the job +final state and eventually evaluate failure reasons. + +As \LB collects also information provided by the WMS, the WMS services are +no longer required to provide job-state querying interface. Most of the +WMS services can be even designed as stateless---they process a~job and +pass it over to another service, not keeping state information about the job +anymore. During development and deployment of the first WMS version this +approach turned to be essential in order to scale the services to the +required extent~\cite{jgc}. + +\LB must collect information about all important events in the Grid job +life. These include transitions between components or services, results +of matching and brokerage, waiting in a queue systems or start and end of +actual execution. +We decided to achieve this +goal through provision of an API (and the associated library) and +instrumenting individual WMS services and other Grid components with direct +calls to this API. But as \LB is a centralized service (there exists +a single point where all information about a particular job must +eventually arrive), direct synchronous transfer of data could have +prohibiting impact on the WMS operation. +The temporary unavailability or overload of the remote \LB service +must not prevent (nor block) the instrumented service to perform as usual. +An asynchronous model with a clear \emph{asynchronous delivery +semantics}, see Sect.~\ref{gathering}, is used to address this issue. + +As individual Grid components has only local and transient view about a +job, they are able to send only information about individual events. This +raw, fairly complex information is not +a~suitable form to be presented to the user for frequent queries. It must +be processed at the central service and users are presented primarily this +processed form. This form derives its form from the \emph{job state} and its +transition, not from the job events themselves. The raw information is +still available, in case more detailed insight is necessary. + +While the removal of state information from (some of) the WMS services +helped to achieve the high scalability of the whole WMS, the state +information is still essential for the decisions made within the resource +broker or during the matchmaking process. +\Eg decision on job resubmission is usually affected by the number of +previous resubmission attempts. This kind of information is currently +available in the \LB only, so the next ``natural'' requirement has been +to provide an interface for WMS (and other) services to the \LB to query +for the state information. However, this requirement contains two +contradictions: (i)~due to the asynchronous event delivery model, the \LB +information may not be up to date and remote queries may lead to unexpected +results +(or even inconsistent one---some older information may not be available for +one query but may arrive before a subsequent query is issued), +and (ii)~the dependence on a~remote service to provide vital state information +may block the local service if the remote one is not responding. +These problems are addressed by providing \emph{local view} on the \LB data, +see Sect.~\ref{local}. + + + + +\subsection{Concepts} + +\subsubsection{Jobs and events} +To keep track of user jobs on the Grid, we first need some reliable +way to identify them. This is accomplished by assigning a unique +identifier, which we call \emph{jobid} (``Grid jobid''), to every job +before it enters the Grid. A~unique jobid is assigned, making it the +primary index to unambiguously identify any Grid job. This jobid is then +passed between Grid +components together with the job description as the job flows through +the Grid; the components themselves may have (and usually do) their +own job identifiers, which are unique only within these components. + +Every Grid component dealing with the job during its lifetime +may be a source of information about the job. The \LB gathers information +from all the +relevant components. This information is obtained in the form of +\LB events, pieces of data generated by Grid components, which mark +important points in the job lifetime (\eg passing of job control +between the Grid components are important milestones in job lifetime +independently on the actual Grid architecture); see Appendix~\ref{a:events} +for a~complete list. We collect those +events, store them into a database and simultaneously process them to +provide higher level view on the job's state. The \LB collects redundant +information---the event scheme has been designed to be as redundant as +possible---and this redundancy is used to improve resiliency in a +presence of component or network failures, which are omnipresent on any +Grid. + +The \LB events themselves are structured into \emph{attribute}~= +\emph{value} pairs, the set of required and optional attributes is defined by the +event \emph{type} (or scheme). For the purpose of tracking job status on +the Grid and with the knowledge of WMS Grid middleware structure we +defined an \LB schema with specific \LB event +types\footnote{\url{https://edms.cern.ch/document/571273/}}. +The schema contains a common base, the attributes that must be assigned +to every single event. The primary key is the jobid, which is also one of +the required attributes. The other common attributes are currently the +timestamp of the event origin, generating component name and the event +sequence code (see Sect.~\ref{evprocess}). + +While the necessary and sufficient condition for a global jobid is +to be Grid-wide unique, additional desired property relates to the +transport of events through the network: All events belonging to the same +job must be sent to the same \LB database. This must be done on a~per +message basis, as each message may be generated by a different component. +The same problem is encountered +by users when they look for information about their job---they need +to know where to find the appropriate \LB database too. +While it is possible to devise a global service where each job registers +its jobid together with the address of the appropriate database, such a +service could easily become a bottleneck. We opted for another solution, +to keep the address of the \LB database within the jobid. This way, +finding appropriate \LB database address becomes a local operation +(at most parsing the jobid) and users can use the same mechanism when +connecting to the \LB database to retrieve information about a particular +job (users know its jobid). To simplify the situation even further, +the jobid has the form of an URL, where the protocol part is +``https'', server and port identify the machine running the appropriate +\LB server +(database) and the path contains base64 encoded MD5 hash of random +number, timestamp, PID of the generating process and IP address of the +machine, where the jobid was generated. Jobid in this form can be +used even in the web browser to obtain information about the job, +provided the \LB database runs a web server interface. This jobid is +reasonably unique---while in theory two different job identifications can +have the same MD5 hash, the probability is low enough for this jobid to +represent a globally unique job identification. + +%zajímá nás job, globální id, v¹echna data vzta¾ena k~nìmu, syrové události +% +%více zdrojù dat pro jeden job, redundance, shromá¾dìní na jednom místì + +\subsubsection{Event gathering} +\label{gathering} +%zdroje událostí, lokální semantika logování, store-and-forward + +As described in the previous section, information about jobs are +gathered from all the Grid components processing the job in the form +of \LB events. The gathering is based on the \emph{push} model where +the components are actively producing and sending events. The push model +offers higher performance and scalability than the pull model, where the +components are to be queried by the server. In the push model, the \LB +server does not even have to know the event sources, it is sufficient +to listen for and accept events on defined interface. + +The event delivery to the destination \LB server is asynchronous and +based on the store--and--forward model to minimize the performance +impact on component processing. Only the local processing is synchronous, +the \LB event is sent synchronously only to the nearest \LB component +responsible for event delivery. This component +is at the worst located in the same local area network (LAN) and usually +it runs on the same host as +the producing component. The event is stored there (using persistent +storage -- disk file) and confirmation is sent back to the +producing component. From the component's point of view, the +send event operation is fast and reliable, but its success only means +the event was accepted for later delivery. The \LB delivery components +then handle the event asynchronously and ensure its delivery to the +\LB server even in the presence of network failures and host reloads. + +It is important to note that this transport system does not guarantee +ordered delivery of events to the \LB server; it \emph{does} guarantee +reliable and secure delivery, however. The guarantees are statistical +only, as the protocol is not resilient to permanent disk or node crashes +nor to the complete purge of the data from local disk. Being part of the +trusted infrastructure, even the local \LB components should run on +a trusted and maintained machine, where additional reliability may be +obtained \eg by a RAID disk subsystem. + +\subsubsection{Event processing}% +\label{evprocess} + +%diagram stavù, mapování událostí na hrany + +%uspoøádání událostí -- seq. èísla, vèetnì shallow vìtví + +% ! abstraktne, nemame jeste komponenty + +% prichazeji udalosti, vice zdroju, zmenene poradi (az ztraty) +% redundantni informace +% motivace: usetrit uzivatele, hlasit agregovany stav jobu +As described in the previous section, \LB gathers raw events from various +Grid middleware components and aggregates them on a~single server +on a per-job basis. +The events contain a very low level detailed information about the job +processing at individual Grid components. This level of detail is +valuable for tracking various problems with the job and/or the +components, and as complementary events are gathered (\eg each job control +transfer is logged independently by two components), the information is +highly redundant. Moreover, the events could arrive in wrong order, +making the interpretation of raw information difficult and not +straightforward. +Users, on the other hand, are interested in a much higher view, the +overall state of their job. + +For these reasons the raw events undergo complex processing, yielding +a~high level view, the \emph{job state}, that is the primary type of data +presented to the user. +Various job states form nodes of the job state diagram (Fig.~\ref{f:jobstat}). +See Appendix~\ref{a:jobstat} for a list of the individual states. + +% stavovy automat +% obrazek: stavovy diagram + +\begin{figure} +\centering +\includegraphics[width=.8\hsize]{images/wms2-jobstat} +\caption{\LB\ job state diagram} +\label{f:jobstat} +\end{figure} + +% typ udalosti -> zmeny typu stavu +\LB\ defines a~\emph{job state machine} that is responsible for updating +the job state on receiving a~new event. +The logic of this algorithm is non-trivial; the rest of this section deals +with its main features. + +Transitions between the job states happen on receiving events of particular +type coming from particular sources. +There may be more distinct events assigned to a~single edge of the state diagram. +For instance, the job becomes \emph{Scheduled} when it enters batch system +queue of a~Grid computing element. +The fact is witnessed by either \emph{Transfer/OK} event reported by +the job submission service or by \emph{Accept} event reported by the computing +element. Receiving any one of these events (in any order) triggers the +state change. + +% fault tolerance +This way, the state machine is highly fault-tolerant---it can cope with +delayed, reordered or even lost events. +For example, when a~job is in the \emph{Waiting} state and the \emph{Done} +event arrives, it is not treated as inconsistency but it is assumed that +the intermediate events are delayed or lost and the job state is switched +to the \emph{Done} state directly. + +% udalosti nesou atributy, promitaji se do stavu +The \LB events carry various common and event-type specific attributes, +\eg \emph{timestamp} (common) or \emph{destination} (\emph{Transfer} type). +The job state record contains, besides the major state identification, +similar attributes, \eg +an array of timestamps indicating when the job entered each state, +or \emph{location}---identification of the Grid component which is currently +handling the job. +Updating the job state attributes is also the task of the state machine, +employing the above mentioned fault tolerance---despite a~delayed event +cannot switch +the major job state back +it still may carry valuable information to update the job state attributes. + +\subsubsection{Event ordering}% +\label{evorder} + +As described above, the ability to correctly order arriving events is +essential for the job state computation. +As long as the job state diagram was acyclic (which was true for the +initial WMS release), each event had its unique place in the expected sequence +hence event ordering could always be done implicitly from the +context. +However, this approach is not applicable once job resubmission +yielding cycles in the job state diagram was introduced. + +Event ordering that would rely on timestamps assigned to events upon +their generation, assuming strict clock synchronization over the Grid, +turned to be a~naive approach. +Clocks on real machines are not precisely synchronized and there are no reliable +ways to enforce synchronization across administrative domains. + +To demonstrate a problem with desynchronized clocks, that may lead to +wrong event interpretation, let us consider a~simplified example +in Tab.~\ref{t:cefail}. +% +\iffalse %stare +% usporadani udalosti -- seq. cisla +% priklad problemu +So far we assumed that the state machine is able to detect a~delayed event. +As the state diagram contains cycles, delay cannot be detected from the type +of the event only. +The simplest approach is relying on the event timestamps. +However, in the Grid environment one cannot assume strictly synchronized clocks. +Table~\ref{t:cefail} shows a~simplified example of the problem caused by delayed +clocks. +\fi +% +We assume that the workload manager (WM) sends the job to a~computing element +(CE)~A, where it starts running but the job dies in the middle. +The failure is detected and the job is resubmitted back to the WM which sends it to CE~B then. +However, if A's clock is ahead in time and B's clock is correct (which +means behind the A's clock), the events in the right column are treated +as delayed. The state machine will interpret events incorrectly, assuming +the job has been run on B before sending it to A. +The job would always (assuming the A's events arrive before B's events to +the \LB) be reported as ``\emph{Running} at A'' despite +the real state should follow the \emph{Waiting} \dots \emph{Running} sequence. +Even the \emph{Done} event can be sent by B with a timestamp that says +this happened before the job has been submitted to A and the job state +will end with a discrepancy---it has been reported to finish on B while +still reported to run on A. + +\begin{table}[hb] +\begin{tabular}{rlrl} +1.&WM: Accept& +6.&WM: Accept\\ +2.&WM: Match $A$& +7.&WM: Match $B$\\ +3.&WM: Transfer to $A$& +8.&WM: Transfer to $B$\\ +4.&CE~$A$: Accept & +9.&CE~$B$: Accept \\ +5.&CE~$A$: Run & +10.&CE~$B$: Run \\ +\dots & $A$ dies\\ +\end{tabular} +\caption{Simplified \LB events in the CE failure scenario} +\label{t:cefail} +\end{table} + +Therefore we are looking for a~more robust and general solution. We can +discover severe clock bias if the timestamp on an event is in a future +with respect to the time on an \LB server, but this is generally a dangerous +approach (the \LB server clock could be severely behind the real time). +We decided not to rely on absolute time as reported by timestamps, but to +introduce a kind of \emph{logical time} that is associated with the logic +of event generation. +The principal idea is arranging the pass through the job state +diagram (corresponding to a~particular job life), that may include +loops, into an execution tree that represents the job history. +Closing a~loop in the pass through the state diagram corresponds +to forking a~branch in the execution tree. +The scenario in Tab.~\ref{t:cefail} is mapped to the tree in +Fig.~\ref{f:seqtree}. +The approach is quite general---any finite pass through any state +diagram (finite directed graph) can be encoded in this way. + +\begin{figure} +\centering +\includegraphics[scale=.833]{images/seqtree} +\caption{Job state sequence in the CE failure scenario, arranged into a~tree. +Solid lines form the tree, arrows show state transitions.} +\label{f:seqtree} +\end{figure} + +Our goal is augmenting \LB events with sufficient information that +\begin{itemize} + \item identifies uniquely a~branch on the execution tree, + \item determines the sequence of events on the branch, + \item orders the branches themselves, which means that it determines + which one is more recent. +\end{itemize} +If such information is available, the execution tree can be +reconstructed on the fly as the events arrive, and even delayed events +are sorted into the tree correctly. An incoming event is considered +for job state computation only if it belongs to the most recent +branch. + +The situation becomes even more complicated when +the \emph{shallow resubmission} WM advanced feature is enabled. +In this mode WM may resubmit the job before being sure the previous attempt +is really unsuccessful, potentially creating multiple parallel instances +of the job. +The situation maps to several branches of the execution tree that +evolve really in parallel. +However, only one of the job instances becomes active (really running) finally; +the others are aborted. +Because the choice of active instance is done later, +it may not correspond to the most recent execution branch. +Therefore, when an event indicating the choice of active instance arrives, +the job state must be recomputed, using the corresponding active branch +instead the most recent one. + +Section~\ref{seqcode} describes the current implementation of event +ordering mechanism based on ideas presented here. + +\subsubsection{Queries and notifications}\label{retrieve} + +According to the GMA classification the user retrieves data from +the infrastructure in two modes, called +\emph{queries} and \emph{notifications} in~\LB. + +Querying \LB is fairly straightforward---the user specifies query +conditions, connects to the querying infrastructure endpoint, and +receives the results. +For ``single job'' queries, where jobid is known, the endpoint (the +appropriate \LB server) is inhered from the jobid. +More general queries must specify the \LB server explicitely, +and their semantics is intentionally restricted +to ``all such jobs known here''. +We trade off generality for performance and reliability, +leaving the problem of finding the right query endpoint(s), the right +\LB servers, to higher level information and service-discovery services. + +If the user is interested in one or more jobs, frequent polling of the +\LB server may be cumbersome for the user and creates unnecessary overload +on the sever. A notification subscription is therefore available, +allowing users to subscribe to receive notification whenever a~job +starts matching user specified conditions. +Every subscription contains also the location of the user's +listener; +successful subscription returns time-limited \emph{notification handle}. +During the validity period of the subscription, the \LB infrastructure +is responsible for queuing and reliable delivery of the notifications. +The user may even re-subscribe (providing the original handle) with different +listener location (\eg moving from office to home), and \LB re-routes +the notifications generated in the meantime to the new destination. +The \LB event delivery infrastructure is reused for the notification +transport. + +\subsubsection{Local views}\label{local} +% motivace proxy + +%As outlined in Sect.~\ref{reqs} +WMS components are, besides logging +information into \LB, interested in querying this information back in order +to avoid the need of keeping per-job state information. +However, despite the required information is present in \LB, +the standard mode of \LB operation is not suitable for this purpose due +to the following reasons: +\begin{itemize} +\item Query interface is provided on the \LB component which gathers +events belonging to the same job but coming from different sources. +Typically, this is a~remote service with respect to the event sources (WMS components). +Therefore the query operation is sensitive to any network failure that may +occur, blocking the operation of the querying service for indefinite time. +\item Due to the asynchronous logging semantics, there is a~non-zero time +window between successful completion of the logging call and the point in +time when the logged event starts affecting the query result. +This semantics may yield unexpected, seemingly inconsistent outcome. +\end{itemize} + +The problem can be overcome by introducing \emph{local view} on job data. +Besides forwarding events to +the server where events belonging to a~job are gathered from multiple sources, +\LB infrastructure can store the logged events temporarily +on the event source, and perform the processing described +in Sect.~\ref{evprocess}. +In this setup, the logging vs.\ query semantics can be synchronous---it is +guaranteed that a~successfully logged event is reflected in the result of +an immediately following query, +because no network operations are involved. +Only events coming from this particular physical node (but potentially +from all services running there) are considered, thus the locality of the view. +On the other hand, certain \LB events are designed to contain redundant +information, therefore the local view on processed data (job state) +becomes virtually complete on a~reasonably rich \LB data source like +the Resource Broker node. + + +\subsection{Current \LB implementation} +The principal components of the \LB service and their interactions +are shown in Figures~\ref{f:comp-gather} (gathering and transferring +\LB events) and~\ref{f:comp-query} (\LB query and notification services). + +\begin{figure} +\centering +\includegraphics[scale=.5]{images/LB-components-gather} +\caption{\LB components involved in gathering and transferring the events} +\label{f:comp-gather} +\end{figure} + +\subsubsection{\LB API and library} +Both logging events and querying the service are implemented via +calls to a~public \LB API. +The complete API (both logging and queries) +is available in ANSI~C binding, most of the querying capabilities also in C++. +These APIs are provided as sets of C/C++ header files and shared libraries. +The library implements communication protocol with other \LB components +(logger and server), including encryption, authentication etc. + +We do not describe the API here in detail; it is documented in~\LB User's +Guide\footnote{\url{https://edms.cern.ch/file/571273/1/LB-guide.pdf}}, +including complete reference and both simple and complex usage examples. + +Events can be also logged with a~standalone program (using the C~API in turn), +intended for usage in scripts. + +The query interface is also available as a~web-service provided by the +\LB server (Sect.~\ref{server}). + +\subsubsection{Logger} +The task of the \emph{logger} component is taking over the events from +the logging library, storing them reliably, and forwarding to the destination +server. +The component should be deployed very close to each source of events---on the +same machine ideally, or, in the case of computing elements with many +worker nodes, on the head node of the cluster% +\footnote{In this setup logger also serves as an application proxy, +overcoming networking issues like private address space of the worker nodes, +blocked outbound connectivity etc.}. + +Technically the functionality is realized with two daemons: +\begin{itemize} +\item \emph{Local-logger} accepts incoming events, +appends them in a~plain disk file (one file per Grid job), +and forwards to inter-logger. +It is kept as simple as possible in order to achieve +maximal reliability. +\item \emph{Inter-logger} accepts the events from the local-logger, +implements the event routing (currently trivial as the destination +address is a~part of the jobid), and manages +delivery queues (one per destination server). +It is also responsible for crash recovery---on startup, the queues are +populated with undelivered events read from the local-logger files. +Finally, the inter-logger purges the files when the events are delivered to +their final destination. +\end{itemize} + +\subsubsection{Server} +\label{server} +\emph{\LB server} is the destination component where the events are delivered, +stored and processed to be made available for user queries. +The server storage backend is implemented using MySQL database. + +Incoming events are parsed, checked for correctness, authorized (only the job +owner can store events belonging to a~particular job), and stored into the +database. +In addition, the current state of the job is retrieved from the database, +the event is fed +into the state machine (Sect.~\ref{evprocess}), and the job state updated +accordingly. + +On the other hand, the server exposes querying interface (Fig.~\ref{f:comp-query}, Sect.~\ref{retrieve}). +The incoming user queries are transformed into SQL queries on the underlying +database engine. +The query result is filtered, authorization rules applied, and the result +sent back to the user. + +While using the SQL database, its full query power is not made available +to end users. +In order to avoid either intentional or unintentional denial-of-service +attacks, the queries are restricted in such a~way that the transformed SQL +query must hit a~highly selective index on the database. +Otherwise the query is refused, as full database scan would yield unacceptable +load. +The set of indices is configurable, and it may involve both \LB system +attributes (\eg job owner, computing element, +timestamps of entering particular state,~\dots) and user defined ones. + +The server also maintains the active notification handles +(Sect.~\ref{retrieve}), providing the subscription interface to the user. +Whenever an event arrives and the updated job state is computed, +it is matched against the active handles% +\footnote{The current implementation enforces specifying an~actual jobid +in the subscription hence the matching has minimal performance impact.}. +Each match generates a~notification message, an extended \LB event +containing the job state data, notification handle, +and the current user's listener location. +The event is passed to the \emph{notification inter-logger} +via persistent disk file and directly (see Fig.~\ref{f:comp-query}). +The daemon delivers events in the standard way, using the specified +listener as destination. +In addition, the server generates control messages when the user re-subscribes, +changing the listener location. +Inter-logger recognizes these messages, and changes its routing of all +pending events belonging to this handle accordingly. + + +% asi nepotrebujeme \subsubsection{Clients} + +\subsubsection{Proxy} +\emph{\LB proxy} is the implementation of the local view concept +(Sect.~\ref{local}). +When deployed (on the Resource Broker node in the current gLite middleware) +it takes over the role of the local-logger daemon---it accepts the incoming +events, stores them in files, and forwards them to the inter-logger. + +In addition, the proxy provides the basic principal functionality of \LB server, +\ie processing events into job state and providing a~query interface, +with the following differences: +\begin{itemize} +\item only events coming from sources on this node are considered; hence +the job state may be incomplete, +\item proxy is accessed through local UNIX-domain socket instead of network +interface, +\item no authorization checks are performed---proxy is intended for +privileged access only (enforced by the file permissions on the socket), +\item aggressive purge strategy is applied---whenever a~job reaches +a~known terminal state (which means that no further events are expected), it is purged +from the local database immediately, +\item no index checks are applied---we both trust the privileged parties +and do not expect the database to grow due to the purge strategy. +\end{itemize} + +\subsubsection{Sequence codes for event ordering}% +\label{seqcode} + +As discussed in Sect.~\ref{evorder}, sequence codes are used as logical +timestamps to ensure proper event ordering on the \LB server. The +sequence code counter is incremented whenever an event is logged and the +sequence code must be passed between individual Grid components together +with the job control. +However, a single valued counter is not sufficient to support detection of +branch forks within the execution tree. +When considering again the Computing Element failure scenario described +in Sect.~\ref{evorder}, there is no way to know that the counter value of +the last event logged by the failed CE A is 5 (Tab.~\ref{t:cefail}). + +\begin{table}[b] +\begin{tabular}{rlrl} +1:x&WM: Accept& +4:x&WM: Accept\\ +2:x&WM: Match $A$& +5:x&WM: Match $B$\\ +3:x&WM: Transfer to $A$& +6:x&WM: Transfer to $B$\\ +3:1&CE~$A$: Accept & +6:1&CE~$B$: Accept \\ +3:2&CE~$A$: Run & +6:2&CE~$B$: Run \\ +\dots & $A$ dies\\ +\end{tabular} +\caption{The same CE failure scenario: hierarchical sequence codes. +``x'' denotes an undefined and unused value.} +\label{t:cefail2} +\end{table} + + +Therefore we define a~hierarchical \emph{sequence code}---an array of +counters, each corresponding to a~single Grid component class handling the job% +\footnote{Currently the following gLite components: Network Server, Workload +Manager, Job Controller, Log Monitor, Job Wrapper, and the application itself.}. +Table~\ref{t:cefail2} shows the same scenario with a~simplified two-counter +sequence code. The counters correspond to the WM and CE component classes +and they are incremented when each of the components logs an event. +When WM receives the job back for resubmission, +the CE counter becomes irrelevant (as the job control is on WM now), +and the WM counter is incremented again. + +%Events on a~branch are ordered following the lexicographical order +%of the sequence codes. +%Branches are identified according to the WM counter as WM is +%currently the only component where branching can occur. + +The state machine keeps the current (highest seen) code for the job, +being able to detect a~delayed event by simple lexicographic comparison +of the sequence codes. +Delayed events are not used for major state computation, then. +Using another two assumptions (that are true for the current +implementation): +\begin{itemize} + \item events coming from a~single component arrive in order, + \item the only branching point is WM, +\end{itemize} +it is safe to qualify events with lower WM counter (than the already +received one) to belong to inactive +branches, hence ignore them even for update of job state attributes. + +\subsection{User interaction} +\begin{figure} +\centering +\includegraphics[scale=.5]{images/LB-components-query} +\caption{\LB queries and notifications} +\label{f:comp-query} +\end{figure} + +So far we focused on the \LB internals and the interaction between its +components. +In this section we describe the interaction of users with the service. + +\subsubsection{Event submission} +%implicitní -- registrace jobu, systémové události na middlewarových komponentách +The event submission is mostly implicit, +\ie it is done transparently by the Grid middleware components +on behalf of the user. +Typically, whenever an important point in the job life is reached, +the involved middleware component logs an appropriate \LB event. +This process is not directly visible to the user. + +A specific case is the initial registration of the job. +This must be done synchronously, as otherwise subsequent events logged for +the same job may be refused with a ``no such job'' error report. +Therefore submission of a job to the WMS is the only synchronous event +logging that does not return until the job is successfully registered with +the \LB server. + +% explicitní -- user tagy, ACL +However, the user may also store information into the \LB explicitly +by logging user events---\emph{tags} (or annotations) of the +form ``name = value''. +Authorization information is also manipulated in this way, see +\LB User's Guide for details. + + +\subsubsection{Retrieving information} +From the user point of view, the information retrieval is the most +important interaction with the \LB service. + +%dotazy na stav +The typical \LB usage are queries on the high-level job state information. +\LB supports not only single job queries, it is also possible to +retrieve information about jobs matching a specific condition. +The conditions may refer to both the \LB system attributes +and the user annotations. Rather complex query semantics can be +supported, \eg +\emph{Which of my jobs annotated as ``apple'' or ``pear'' are already +scheduled for execution and are heading to the ``garden'' computing element?} +The \LB User's +Guide\footnote{\url{https://edms.cern.ch/file/571273/1/LB-guide.pdf}} provides a~series of similar examples of +complex queries. + +%dotazy na události +As another option, the user may retrieve raw \LB events. +Such queries are mostly used for debugging, identification of repeating +problems, and similar purposes. +The query construction refers to event attributes rather +than job state. + +The query language supports common comparison operators, and it allows +two-level nesting of conditions (logically \emph{and}-ed and \emph{or}-ed). +Our experience shows that it is sufficiently strong to cover most user +requirements while being simple enough to keep the query cost reasonable. +Complete reference of the query language can be found in~\LB User's Guide. + +\ludek{%notifikace +The other mode of user interactions are the \LB notifications +(Sect.~\ref{retrieve}).} + +\subsubsection{Caveats} +\LB is designed to perform well in the unreliable distributed Grid +environment. +An unwelcome but inevitable consequence of this design +are certain contra-intuitive features in the system behavior, +namely: +\begin{itemize} +\item +Asynchronous, possibly delayed event delivery may yield seemingly +inconsistent view on the job state \wrt\ information that is available +to the user via different channels. +\Eg the user may know that her job terminated because of monitoring the +application progress directly, but the \LB \emph{Done} events indicating +job termination are delayed so that \LB reports the job to be still +in the \emph{Running} state. + +\item +% sekvenèní èísla -- ¹patnì øazené události jsou ignorovány pro výpoèet stavu +Due to the reasons described in Sect.~\ref{evorder} \LB is rather sensitive +to event ordering based on sequence codes. +The situation becomes particularly complicated when there are multiple +branches of job execution. +Consequently the user may see an \LB event that is easily interpreted that +it should switch the job state, however, it has no effect in fact +because of being (correctly) sorted to an already inactive branch. + +\item +% purge -- data z~\LB\ zmizí +\LB is not a~permanent job data storage. The data get purged from the +server on timeout, unrelated to any user's action. +Therefore, the \LB query may return ``no such job'' error message (or not +include the job in a list of retrieved jobs) even if the same previous +\LB query had no such problems. + +\end{itemize} + +\subsection{Security issues} +The events passed between the \LB components as well as the results of +their processing provide detailed information about the corresponding job and +its life. Being used by the users to check status of their jobs and also by +other Grid components to control the job, the information on jobs has to be +reliable and reflect the real jobs' utilization of the Grid. Also, some user +communities (\eg biomedicine researchers) often process sensitive data and +require the information about their processing is kept private so that only the +job owner can access not only the result of the computation but also all +information about the job run. Last but not least, according to legislation of +some countries the information on users' jobs can be treated as the user +private data, which requires an increased level of protection. \LB therefore +must pay special attention to security aspects and access control to the data. + +All \LB components communicate solely over authenticated channels. The TLS +protocol~\cite{tls} is used as the authentication mechanism and each of the +\LB uses an X.509 public key certificate to establish a mutually +authenticated connection. The users usually use their proxy +certificates~\cite{proxycert} when accessing the \LB server and retrieving +information about jobs. +\ludek{Proxy certificates were introduced by the Grid Security +Infrastructure\~cite{gsi} from the Globus project and extend the concepts of +standard public key certificates and identity providers and allows a user to +issue a certificate for herself. Such a proxy certificate is used as a means +for Single Sign-On and rights delegation~\cite{delegation}.} +The proxy +certificate can also contain other information necessary to create a secure +connection, \eg information used for authorization. The \LB security layer is +implemented using the the Generic Security Service API~\cite{gssapi}, which +makes it easier to port the application to an environment using mechanism other +than PKI (\eg Kerberos). + +Apart from providing an authentication mechanism, the TLS protocol also allows +the communicating parties to exchange an encryption key that is used to encrypt +all subsequent communication. The \LB components encrypt all network +communication to keep the messages private. Therefore, together with the access control +rules implemented by the \LB server, the infrastructure provides very high +level of privacy protection. + +By default, access to a job information is only allowed to the user who +submitted the job (the job owner). The job owner can also assign an access +control list to her job in the \LB specifying other users who are allowed +to read the +data from \LB. The ACLs are represented in the GridSite GACL +format~\cite{gacl1,gacl2}, which is a simplified version of common Extensible +Access Control Markup Language (XACML)~\cite{xacml}. The ACLs are stored in +the \LB database along with the job information and are checked at each access to +the data. The GridSite XML policy engine is used for policy evaluation. The +ACLs are under control of the job owner, who can add and remove entries in the +ACL arbitrarily using the \LB API or command-line tools. Each entry of an ACL +can specify either a user subject name or a name of a VOMS group. The +VOMS~\cite{voms2} is a VO attribute provider service, which is maintained +by the EGEE project. It allows to assign a user with groups and roles +membership and issues to the users attribute certificates containing +information about their current attributes. These attribute certificate are +embedded in the user proxy certificate and checked by the \LB server at each +user request handling. + +%Only the Read semantics is implemented so far, for the +%future we consider more complex access control, \eg implementing the access +%control for Write operations (per event) so that particular events could be +%only logged by allowed components. That would allow to generate more +%trusted results since currently each components can log arbitrary events. +%Malicious component can make the \LB server produce inappropriate results. + +Besides of using the ACLs, the \LB administrator can also specify a~set of +privileged users with access to all job records on a particular \LB +server. These privileged users can \eg +collect information on usage and produce a monitoring data based on the \LB +information. + +%Data trustworthiness - the events aren't signed, no real non-reputability or +%traceability of the event sources. + +Since the hostname of the \LB server is part of the job identification, it is +easy for the user to check that the correct \LB server was contacted and no +server spoofing took place and thus the data received from the server can be +trusted. The \LB server on the other hand has no means of checking that the +logged events originated from an authorized component. Everyone on the Grid +possessing a valid certificate from a~trusted CA can send an event to the \LB and +let it store and process the event and possibly change the status of the +corresponding job. This way a malicious user or service can confuse the \LB +server by a forged events. This behavior is not a critical issue in the current +model and the way in which \LB is used, however, we are designing a solution +addressing this weakness. We plan to use the VOMS attributes issued to a +selected components. These VOMS attributes must be presented when critical +events are logged to the \LB server. + +\ludek{\subsection{Performance and scalability} +The \LB service was designed with performance and +scalability issues in mind. We have developed a series of tests of the +individual \LB components to measure the actual behavior under +stress conditions. These tests give us a good performance estimate of +the \LB service and help us identify and remove possible bottlenecks. + +The testing itself is done by feeding the \LB components with events +prepared beforehand, using whatever protocol appropriate for the given +component. The feeding program uses a set of predefined events of a +typical job which we have chosen from the production \LB server +database. Timestamp is taken before the first event is sent, then the +feeding program begins sending events of individual jobs (the jobs are +all the same, the only difference is the jobid; the number of jobs used is +configurable). The tested component is instrumented in the source code +to break normal event processing at selected points (\eg discard +events immediately after being read to measure the input channel +performance, or discard events instead of sending them to the next +component, etc.). This segmentation of event processing enables to +identify places in the code which may slow down the event transfer. +Optionally the events may be discarded by the next component in the +logical path. The last event of the last job is special termination +event, which is recognized when being discarded; then the second +timestamp is taken and the difference between the two gives us total +time necessary to pass given number of jobs through. + +Note that due to the asynchronous nature of the \LB service measuring for +example the time it takes to send given number of jobs does not give +us the required result, thus event (or job) throughput---when the +producer receives acknowledgment about successful send operation, it +is not guaranteed that the event passed through the component. + +The results shown in table~\ref{perf:results} give the overall +throughput components (events are discarded by the next component +on the path), with the exception of proxy, where the throughput to the +database is measured. It can be seen that the majority of code is fast +enough to handle even high event rates and that most components are up +to our goal to handle one million of jobs per day. The first line +indicates how fast we are able to ``generate'' events in the feeding +program. + +\begin{table}[hbt] +\begin{tabular}{l|r} +{\bf Component} & {\bf Job throughput (jobs/day)} \\ +\hline +Test producer & 153,600,000 \\ +Locallogger & 101,700 \\ +Interlogger & 5,335,100 \\ +Proxy & 1,267,110 \\ +\end{tabular} +\caption{Performance testing results} +\label{perf:results} +\end{table} + +During the performance testing we have identified two possible +bottlenecks: +\begin{itemize} +\item Opening connections and establishing SSL sessions is very +expensive operation. It hinders mainly the performance of locallogger, +because the current implementation uses one SSL session for +event. +\item Database operations. Storing events into database is expensive, +but inevitable; however we were able to optimize for example the +code checking for duplicated events. +\end{itemize} + +In the current work we are addressing the issue of SSL operations by +introducing concept of SSL connection pools, which enables components +to reuse existing connections transparently without need to tear-down +and setup new SSL contexts. } + +\subsection{Advanced use} + +The usability of the \LB service is not limited to the simple tasks +described earlier. It can be easily extended to support real-time job +monitoring (not only the notifications) and the aggregate information +collected in the \LB servers is a valuable source of data used for post-mortem +statistical analysis of jobs and also the Grid infrastructure behavior. +Moreover, \LB data can be used to improve scheduling decisions. + +\subsubsection{\LB and real time monitoring} +The \LB server is extended to provide quickly and without any substantial +load on the database engine the following data: +\begin{enumerate} +\item number of jobs in the system grouped by internal status +(\emph{Submitted}, \emph{Running}, \emph{Done},~\ldots), +\item number of jobs that reached final state in the last +hour, +\item associated statistics like average, maximum, and minimum time spent +by jobs in the system, +\item number of jobs that entered the WMS system in the last hour. +\end{enumerate} +\LB server can be regularly queried to provide this data to give an +overview about both jobs running on the Grid and also the behavior of the +Grid infrastructure as seen from the job (or end user) perspective. +Thus \LB\ becomes a~data source for various real-tim Grid monitoring tools. + +\subsubsection{R-GMA feed} +The \LB server also supports streaming the most important data---the job +state changes---to another monitoring system. It works as the +notification service, sending information about job state changes to +a~specific listener that is the interface to a monitoring interface. +As a~particular example of such a generic service, the R-GMA feed component +has been developed. It supports sending job state changes to +the R-GMA infrastructure that is part of the Grid monitoring +infrastructure used in the EGEE Grid. + +Currently, only basic information about job state changes is provided +this way, taking into account the security limitation of the R-GMA. + +\subsubsection{\LB Job Statistics} +Data collected within the \LB servers are regularly purged, complicating +thus any long term post-mortem statistical analysis. Without a Job +Provenance, the data from the \LB must be copied in a controlled way and +made available in an environment where even non-indexed queries can be +asked. + +Using the \LB Job Statistics tools, one dump file per job is created +when the job reaches a~terminal state. These dump files can be +further processed to provide and XML encoded Job History Record% +\footnote{\url{http://egee.cesnet.cz/en/Schema/LB/JobRecord}} that +contains all the relevant information from the job life. The Job History +Records are fed into a statistical tools to reveal interesting information +about the job behavior within the Grid. + +This functionality is being replaced by the direct download of all the +relevant data from the Job Provenance. + +\subsubsection{Computing Element reputability rank} +Production operation of the EGEE middleware showed +that misbehaving computing elements may have significant impact on +the overall Grid performance. +The most serious problem is the ``black hole'' effect---a~CE that +accepts jobs at a~high rate but they all fail there. +Such CE usually appears to be free in Grid information services +so the resource brokers keep to assign further jobs to it. + +\LB data contain sufficient information to identify similar problems. +By processing the incoming data the information +was made available as on-line auxiliary statistics like +rate of incoming jobs per CE, rate of job failure, average duration of job etc. +The implementation is lightweight, allowing very high query rate. +On the RB the statistics are available as ClassAd +functions, allowing the user to specify that similarly misbehaving +CE's should be penalized or completely avoided +when RB decides where jobs get submitted. + + diff --git a/org.glite.lb.doc/src/LBUG-QuickStartGuide.tex b/org.glite.lb.doc/src/LBUG-QuickStartGuide.tex deleted file mode 100644 index 59251b3..0000000 --- a/org.glite.lb.doc/src/LBUG-QuickStartGuide.tex +++ /dev/null @@ -1,37 +0,0 @@ -\section{Quickstart Guide} -% The quickstart guide should explain in simple terms and with examples -% how a user is supposed to achieve the most common usecases. E.g. how -% to submit and cancel a job, how to receive a job's output. How to -% create a grid file, move it around, locate it, and delete it. How to -% monitor the progress on an application etc. - -\subsection{Command-Line Tools} -This section describes usage of event-logging \LB\ command in the two -cases which are ment for the end-user: adding a~user description (tag) -to a~job, and changing a~job access control list. - -\subsubsection{Logging a UserTag event} -\label{log_usertag} -\input{log_usertag} - -\subsubsection{Changing Job Access Control List} -\label{change_acl} -\input{change_acl} - - -%% \subsection{\LB Producer API} -%% \todo{honik} -%% This API is not public at the moment, it may change later. -%% \input{producer_api} - - -\subsection{\LB\ Querying API} -%\todo{valtri} -\input{consumer_api} - - -\subsection{\LB\ Notification API} -\input{notification_api} - - -\endinput diff --git a/org.glite.lb.doc/src/LBUG-Security.tex b/org.glite.lb.doc/src/LBUG-Security.tex deleted file mode 100644 index 87f19bf..0000000 --- a/org.glite.lb.doc/src/LBUG-Security.tex +++ /dev/null @@ -1,59 +0,0 @@ -\subsection{Security and Access Control} - -The \LB\ infrastructure ensures high level of security for information it -processes. All the \LB\ components communicate solely over authenticated -connections and users who query the \LB\ server also must authenticate properly -using their PKI certificates. All messages sent over the network are encrypted -and their content is not accessible to unauthorized people. - -By default, information about a job stored in the \LB\ server is only available -to the user who submitted the job, i.e. the job owner. Besides this default -functionality, the \LB\ server also allows the job owner to share job -information with another users. Each job can be assigned an access control list -(ACL) that specifies another users who are also allowed to access the job -information. The management of ACL's is entirely under control of the job owner -so she can modify the ACL arbitrarily, specifying the set of users who have -access to the job information. The users in the ACL's can be specified using -either the subject names from their X.509 certificates or names of VOMS groups. - -Current ACL for a job is returned as part of the job status information -returned by the \verb'glite-job-status' command. The commands output ACL's in -the original XML format as specified by GACL/GridSite. - -Example of an ACL: -\begin{verbatim} - - - VOCE/VOCE - - - - /O=CESNET/O=Masaryk University/CN=Daniel Kouril - - - -\end{verbatim} - -This ACL allows access to all people in the VOMS group /VOCE in virtual -organization VOCE, but denies access to user Daniel Kouril (even if he was a -member of the /VOCE group). - -The job owner herself is not specified in the ACL as she is always allowed to -access the information regardless the content of the job ACL. - -An ACL for a job can be changed using the \verb'glite-lb-logevent' command-line -program, see section~\ref{change_acl}. - -%provided in the example subdirectory. In order to use change\_acl, the \LB\ -%daemons locallogger and interlogger must be running. The usage of the command -%is as follows: -% -%\LB\ server configuration -%In order to support the VOMS groups in the ACL's, -%glite_lb_bkserverd must be able to verify client's VOMS proxy certificate using -%a trusted VOMS service certificate stored on a local disk. Default directory -%with trusted VOMS certificates is /etc/grid-security/vomsdir, another location -%can be specified using by either the -V option to glite_lb_bkserverd or setting -%the VOMS_CERT_DIR environment variable. - -\endinput diff --git a/org.glite.lb.doc/src/LBUG-Tools.tex b/org.glite.lb.doc/src/LBUG-Tools.tex new file mode 100644 index 0000000..53dc8ca --- /dev/null +++ b/org.glite.lb.doc/src/LBUG-Tools.tex @@ -0,0 +1,3 @@ +\section{Tools description} + +\input{logevent} diff --git a/org.glite.lb.doc/src/LBUG-UseCases.tex b/org.glite.lb.doc/src/LBUG-UseCases.tex new file mode 100644 index 0000000..6926c08 --- /dev/null +++ b/org.glite.lb.doc/src/LBUG-UseCases.tex @@ -0,0 +1,9 @@ +\section{Use Cases} + +This section describes usage of event-logging \LB\ command in the two +cases which are ment for the end-user: adding a~user description (tag) +to a~job, and changing a~job access control list. + +\input{log_usertag} +\input{change_acl} + diff --git a/org.glite.lb.doc/src/LBUG.tex b/org.glite.lb.doc/src/LBUG.tex index 3f80078..2468a6e 100644 --- a/org.glite.lb.doc/src/LBUG.tex +++ b/org.glite.lb.doc/src/LBUG.tex @@ -1,5 +1,4 @@ \documentclass{egee} -%\usepackage{doxygen} \input{definitions} @@ -13,36 +12,33 @@ \Dissemination{PUBLIC} \DocumentLink{http://...} -\Abstract{ -This user's guide explains how to use the Logging and Bookkeeping (\LB) service. -The service architecture is described briefly. -Examples on using \LB\ event logging command to log a~user tag and change job ACL are given, -as well as \LB\ query and notification API use cases. -% The reference section contains complete description of both the logging command and the API's. -} +\Abstract{This user's guide explains how to use the Logging and Bookkeeping +(\LB) service from the user's point of view. The service architecture is +described thoroughly. Examples on using \LB\ event logging command to log +a~user tag and change job ACL are given, as well as \LB\ query and notification +use cases. } \begin{document} \input{frontmatter} -\newpage \tableofcontents \newpage \input{LBUG-Introduction} -\input{LBUG-Architecture} -\input{LBUG-Security} -\input{LBUG-Interaction} \newpage -\input{LBUG-QuickStartGuide} +\input{LBUG-Tools} \newpage -\input{LBUG-ReferenceGuide} +\input{LBUG-UseCases} +\appendix \newpage -\input{LBUG-Caveats} +\input{LBUG-Appendix} +\newpage \bibliographystyle{unsrt} \bibliography{lbjp} \end{document} + diff --git a/org.glite.lb.doc/src/change_acl.tex b/org.glite.lb.doc/src/change_acl.tex index fec34e2..0543347 100644 --- a/org.glite.lb.doc/src/change_acl.tex +++ b/org.glite.lb.doc/src/change_acl.tex @@ -1,6 +1,9 @@ +\subsection{Changing Job Access Control List} +\label{change_acl} + In order to change ACL for a job a special event \verb+ChangeACL+ is used. This event can be logged by the job owner using the glite-lb-logevent command (see also -Sect.~\ref{cmdln_interface}). General template for changing the ACL is as follows: +Sect.~\ref{glite-lb-logevent}). General template for changing the ACL is as follows: \begin{verbatim} glite-lb-logevent -e ChangeACL -s UserInterface -p --permission 1 \ -j \ diff --git a/org.glite.lb.doc/src/consumer_api.tex b/org.glite.lb.doc/src/consumer_api.tex index a779acc..4a760ba 100644 --- a/org.glite.lb.doc/src/consumer_api.tex +++ b/org.glite.lb.doc/src/consumer_api.tex @@ -1,3 +1,5 @@ +\section{\LB\ Querying API} + \def\partitle#1{\par{\textbf{#1}}\par} \label{ConsOview} @@ -14,7 +16,7 @@ capabilities. In the presented examples only the C \LB\ API (Sect.~\ref{query-C}) is considered. The C++ API (Sect.~\ref{query-CPP}) covers the same functionality. -\subsubsection{Returned results} +\subsection{Returned results} \LB\ server returns errors which are classified as hard and soft errors. The main difference between these categories is that in the case of soft @@ -59,7 +61,7 @@ It may take the following values: Default value is EDG\_WLL\_QUERYRES\_NONE. -\subsubsection{Job queries} +\subsection{Job queries} \partitle{Job status} \label{JS} @@ -457,7 +459,7 @@ interval. \end{verbatim} -\subsubsection{Event queries and application specific queries} +\subsection{Event queries and application specific queries} \label{ASQ} Event queries and job queries are similar. Obviously, the return type is different\Dash the \LB\ raw events. diff --git a/org.glite.lb.doc/src/definitions.tex b/org.glite.lb.doc/src/definitions.tex index 1be4fb7..34fcba3 100644 --- a/org.glite.lb.doc/src/definitions.tex +++ b/org.glite.lb.doc/src/definitions.tex @@ -1,6 +1,17 @@ -\def\LB{L\&B} -\def\eg{e.\,g.} -\def\ie{i.\,e.} -\def\Dash{\,---\,\penalty-1000} -\def\todo#1{\par\textbf{TODO:} #1\par} +\usepackage{xspace} +%\usepackage{doxygen} +\def\LB{L\&B\xspace} +\def\JP{JP\xspace} +%\def\eg{e.\,g.} +\def\eg{for example\xspace} +\def\Eg{For example\xspace} +%\def\ie{i.\,e.} +\def\ie{that is\xspace} +\def\wrt{with respect to\xspace} +\def\Dash{---\penalty-1000} + +\long\def\TODO#1{\par\noindent\textbf{TODO:} {\sl#1}\par} +\long\def\ludek#1{} + +\hyphenation{plug-in} diff --git a/org.glite.lb.doc/src/events.tex.T b/org.glite.lb.doc/src/events.tex.T new file mode 100644 index 0000000..6fe5c52 --- /dev/null +++ b/org.glite.lb.doc/src/events.tex.T @@ -0,0 +1,31 @@ +@@@{ +gen qq{ +% !! Automatically generated file. Do not edit. +% !! Change the corresponding template file $ARGV +}; +@@@} + +\begin{tabularx}{\textwidth}{l>{\bfseries}lX} +@@@{ +my $flesh = 'gLite'; #XXX +my $fleshno = 0; +my $eventno = $fleshno; +for my $e (sort { $event->{order}->{$a} <=> $event->{order}->{$b} } + $event->getTypes) { + my $u = uc $e; + my $c = getTypeComment $event $e; + + if ($flesh ne $event->{flesh}->{$e}) { + $flesh = $event->{flesh}->{$e}; + gen "% new flesh $flesh \n"; + $fleshno += 100; + $eventno = $fleshno; + } + $eventno++; + gen "$eventno. \& $e: \& $c \\\\ \n"; +} +@@@} +\end{tabularx} + +\endinput + diff --git a/org.glite.lb.doc/src/frontmatter.tex b/org.glite.lb.doc/src/frontmatter.tex index a3c0931..732dcec 100644 --- a/org.glite.lb.doc/src/frontmatter.tex +++ b/org.glite.lb.doc/src/frontmatter.tex @@ -37,3 +37,4 @@ \end{tabularx} \input{copyright} +\clearpage diff --git a/org.glite.lb.doc/src/images/LB-components-gather.pdf b/org.glite.lb.doc/src/images/LB-components-gather.pdf new file mode 100644 index 0000000000000000000000000000000000000000..479548860df6aa808d48cc23d6c989064044f7c2 GIT binary patch literal 48193 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

mx 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 Dp0uyF literal 0 HcmV?d00001 diff --git a/org.glite.lb.doc/src/images/wms2-jobstat.pdf b/org.glite.lb.doc/src/images/wms2-jobstat.pdf new file mode 100644 index 0000000000000000000000000000000000000000..fb3464807c597633804ac29c6f9a35a1e34a40fa GIT binary patch literal 7328 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 literal 0 HcmV?d00001 diff --git a/org.glite.lb.doc/src/log_usertag.tex b/org.glite.lb.doc/src/log_usertag.tex index 9f01701..d9d6abb 100644 --- a/org.glite.lb.doc/src/log_usertag.tex +++ b/org.glite.lb.doc/src/log_usertag.tex @@ -1,4 +1,5 @@ - +\subsection{Logging a UserTag event} +\label{log_usertag} User tag is an arbitrary ``name=value'' pair with which the user can assign additional information to a job. Further on, LB can be queried @@ -7,7 +8,7 @@ based also on values of user tags. In order to add user tag for a job a special event \verb+UserTag+ is used. This event can be logged by the job owner using the glite-lb-logevent command (see also -sec.\ref{cmdln_interface}). Here we suppose the command is used from user's running +sec.\ref{glite-lb-logevent}). Here we suppose the command is used from user's running application because a correct setting of environment variables needed by the command is assured. diff --git a/org.glite.lb.doc/src/cmdln_interface.tex b/org.glite.lb.doc/src/logevent.tex similarity index 97% rename from org.glite.lb.doc/src/cmdln_interface.tex rename to org.glite.lb.doc/src/logevent.tex index ddf2a55..6c427f5 100644 --- a/org.glite.lb.doc/src/cmdln_interface.tex +++ b/org.glite.lb.doc/src/logevent.tex @@ -1,3 +1,6 @@ +\subsection{glite-lb-logevent} +\label{glite-lb-logevent} + Besides the API's \LB\ offers its users a simple command-line interface for logging events. The command glite-lb-logevent is used for this purpose. However, it is intended for internal WMS debugging tests in the first place and should not diff --git a/org.glite.lb.doc/src/logging-arch-notif.pdf b/org.glite.lb.doc/src/logging-arch-notif.pdf deleted file mode 100644 index 09a39200ae0d94b69ed3853b7251c414195b432c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67535 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

YIN5& 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\bfseries}lX} +@@@{ +for my $stat ($status->getTypesOrdered) { + my $c = getTypeComment $status $stat; + + gen "$stat: \& $c \\\\ \n"; + } +@@@} +\end{tabularx} +\endinput diff --git a/org.glite.lb.doc/src/web_services.tex b/org.glite.lb.doc/src/web_services.tex new file mode 100644 index 0000000..983cc5f --- /dev/null +++ b/org.glite.lb.doc/src/web_services.tex @@ -0,0 +1,19 @@ +\subsection{Using \LB\ Web Service} + +The \LB\ web service interface currently reflects the functionality of legacy +\LB\ query API (Sect.~\ref{query-C}). + +The following sections describe the operations defined in the \LB\ WSDL +file as well as its custom types. + +For the sake of readability this documentation does not follow the structure +of WSDL strictly, avoiding to duplicate information which is already present +here. +Conseqently, the SOAP messages are not documented, for example, as they +are derived from operation inputs and outputs mechanically. +The same holds for types: \eg\ we do not document defined elements +which correspond 1:1 to types but are required due to the literal SOAP +encoding. + +For exact definition of the operations and types see the WSDL file. + -- 1.8.2.3