From 06a2846a157fdf3d17440eebd27128ae6a05c9a3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20Posp=C3=AD=C5=A1il?= Date: Mon, 4 Jun 2007 17:04:40 +0000 Subject: [PATCH] First attempt to remove org.glite.lb.client-interface - many remaining TODOs and FIXMEs - see https://meta.cesnet.cz/mediawiki/index.php/LB_and_JP_cleanup --- org.glite.lb.client-interface/IMPORTANT-README | 39 + org.glite.lb.client-interface/Makefile | 93 +- org.glite.lb.client-interface/doc/C.dox | 19 - org.glite.lb.client-interface/doc/CPP.dox | 16 - org.glite.lb.client-interface/doc/api/Makefile | 9 - org.glite.lb.client-interface/doc/api/api.tex | 1800 -------------------- .../doc/api/fig/logging-arch.eps | 1714 ------------------- .../doc/api/fig/logging-arch.pdf | 92 - org.glite.lb.client/Makefile | 63 +- org.glite.lb.client/examples/log_usertag_proxy.c | 2 +- .../interface/Job.h | 5 +- .../interface/JobStatus.h.T | 0 .../interface/Notification.h | 6 +- .../interface/ServerConnection.h | 4 +- .../interface/consumer.h | 109 +- .../interface/consumer_fake.h | 0 .../interface/dump.h | 0 .../interface/load.h | 0 .../interface/notification.h | 10 +- .../interface/producer.h.T | 49 - .../interface/producer_fake.h | 0 .../interface/purge.h | 0 .../interface/statistics.h | 2 +- org.glite.lb.client/src/Event.cpp.T | 6 +- org.glite.lb.client/src/Notification.cpp | 2 +- org.glite.lb.client/src/connection.c | 2 +- org.glite.lb.client/src/consumer.c | 2 +- org.glite.lb.client/src/dump.c | 4 +- org.glite.lb.client/src/load.c | 5 +- org.glite.lb.client/src/logevent.c.T | 2 +- org.glite.lb.client/src/notification.c | 2 +- org.glite.lb.client/src/prod_proto.c | 2 +- org.glite.lb.client/src/producer.c | 5 +- org.glite.lb.client/src/purge.c | 4 +- org.glite.lb.client/src/statistics.c | 2 +- org.glite.lb.client/src/uiwrap.c.T | 2 +- org.glite.lb.common/Makefile | 32 +- .../interface/CountRef.h | 0 .../interface/Event.h.T | 18 +- .../interface/LoggingExceptions.h | 0 org.glite.lb.common/interface/connpool.h | 2 +- org.glite.lb.common/interface/context-int.h | 3 +- .../interface/context.h | 0 .../interface/events.h.T | 56 +- org.glite.lb.common/interface/events_parse.h | 2 +- .../interface/jobstat.h.T | 24 +- org.glite.lb.common/interface/lb_perftest.h | 2 +- org.glite.lb.common/interface/log_proto.h | 11 +- org.glite.lb.common/interface/mini_http.h | 3 +- .../interface/notifid.h | 0 org.glite.lb.common/interface/query_rec.h | 109 ++ org.glite.lb.common/interface/timeouts.h | 20 + org.glite.lb.common/interface/xml_conversions.h | 14 +- org.glite.lb.common/interface/xml_parse.h | 14 +- org.glite.lb.common/src/context.c | 2 +- org.glite.lb.common/src/events.c.T | 2 +- org.glite.lb.common/src/events_parse.c.T | 3 +- org.glite.lb.common/src/lb_perftest.c | 2 +- org.glite.lb.common/src/notifid.c | 2 +- org.glite.lb.common/src/param.c | 11 +- org.glite.lb.common/src/query_rec.c | 2 +- org.glite.lb.common/src/status.c.T | 2 +- org.glite.lb.common/src/trio.c | 3 +- org.glite.lb.common/src/xml_conversions.c | 10 + org.glite.lb.common/src/xml_parse.c.T | 18 +- 65 files changed, 422 insertions(+), 4017 deletions(-) create mode 100644 org.glite.lb.client-interface/IMPORTANT-README delete mode 100644 org.glite.lb.client-interface/doc/C.dox delete mode 100644 org.glite.lb.client-interface/doc/CPP.dox delete mode 100755 org.glite.lb.client-interface/doc/api/Makefile delete mode 100644 org.glite.lb.client-interface/doc/api/api.tex delete mode 100644 org.glite.lb.client-interface/doc/api/fig/logging-arch.eps delete mode 100644 org.glite.lb.client-interface/doc/api/fig/logging-arch.pdf rename {org.glite.lb.client-interface => org.glite.lb.client}/interface/Job.h (98%) rename {org.glite.lb.client-interface => org.glite.lb.client}/interface/JobStatus.h.T (100%) rename {org.glite.lb.client-interface => org.glite.lb.client}/interface/Notification.h (95%) rename {org.glite.lb.client-interface => org.glite.lb.client}/interface/ServerConnection.h (99%) rename {org.glite.lb.client-interface => org.glite.lb.client}/interface/consumer.h (68%) rename {org.glite.lb.client-interface => org.glite.lb.client}/interface/consumer_fake.h (100%) rename {org.glite.lb.client-interface => org.glite.lb.client}/interface/dump.h (100%) rename {org.glite.lb.client-interface => org.glite.lb.client}/interface/load.h (100%) rename {org.glite.lb.client-interface => org.glite.lb.client}/interface/notification.h (96%) rename {org.glite.lb.client-interface => org.glite.lb.client}/interface/producer.h.T (90%) rename {org.glite.lb.client-interface => org.glite.lb.client}/interface/producer_fake.h (100%) rename {org.glite.lb.client-interface => org.glite.lb.client}/interface/purge.h (100%) rename {org.glite.lb.client-interface => org.glite.lb.client}/interface/statistics.h (97%) rename {org.glite.lb.client-interface => org.glite.lb.common}/interface/CountRef.h (100%) rename {org.glite.lb.client-interface => org.glite.lb.common}/interface/Event.h.T (99%) rename {org.glite.lb.client-interface => org.glite.lb.common}/interface/LoggingExceptions.h (100%) rename {org.glite.lb.client-interface => org.glite.lb.common}/interface/context.h (100%) rename {org.glite.lb.client-interface => org.glite.lb.common}/interface/events.h.T (84%) rename {org.glite.lb.client-interface => org.glite.lb.common}/interface/jobstat.h.T (81%) rename {org.glite.lb.client-interface => org.glite.lb.common}/interface/notifid.h (100%) create mode 100644 org.glite.lb.common/interface/query_rec.h create mode 100644 org.glite.lb.common/interface/timeouts.h diff --git a/org.glite.lb.client-interface/IMPORTANT-README b/org.glite.lb.client-interface/IMPORTANT-README new file mode 100644 index 0000000..469e260 --- /dev/null +++ b/org.glite.lb.client-interface/IMPORTANT-README @@ -0,0 +1,39 @@ +This module is now obsolete. + +Files moved from ./interface to org.glite.lb.client/interface: + +consumer_fake.h +consumer.h +dump.h +Job.h +JobStatus.h.T +load.h +notification.h +Notification.h +producer_fake.h +producer.h.T +purge.h +ServerConnection.h +statistics.h + + +Files moved from ./interface to org.glite.lb.common/interface: + +context.h +CountRef.h +Event.h.T +events.h.T +jobstat.h.T +LoggingExceptions.h +notifid.h + + +Files moved form ./doc to org.glite.lb.client/doc: + +C.dox +CPP.dox +api/api.tex +api/Makefile +api/fig/logging-arch.eps +api/fig/logging-arch.pdf + diff --git a/org.glite.lb.client-interface/Makefile b/org.glite.lb.client-interface/Makefile index f8de8a1..fa5226d 100644 --- a/org.glite.lb.client-interface/Makefile +++ b/org.glite.lb.client-interface/Makefile @@ -1,93 +1,2 @@ # Default values -top_srcdir=. -builddir=build -top_builddir=${top_srcdir}/${builddir} -stagedir=. -distdir=. -globalprefix=glite -lbprefix=lb -package=glite-lb-client-interface -version=0.0.0 -PREFIX=/opt/glite - --include Makefile.inc --include ../project/version.properties - -version=${module.version} - -SUFFIXES = .T - -VPATH=${top_srcdir}/interface -AT3=${stagedir}/sbin/glite-lb-at3 - -STAGETO=include/${globalprefix}/${lbprefix} -STATIC_H=consumer.h context.h dump.h load.h notification.h notifid.h purge.h \ - Notification.h CountRef.h Job.h LoggingExceptions.h ServerConnection.h \ - statistics.h -FAKE_H=consumer_fake.h producer_fake.h -GEN_H=events.h jobstat.h producer.h Event.h JobStatus.h interface_version.h - - -generate: ${GEN_H} - -all compile: generate - -check: - @echo No unit test required for interface-only module. - -%.h: %.h.T - rm -f $@ - ${AT3} $< >$@ || rm -f $@ - chmod -w $@ >/dev/null - -interface_version.h: ${top_srcdir}/project/version.properties - echo "#define GLITE_LB_CLIENT_INTERFACE \"${version}\"" >$@ - -ifdef LB_STANDALONE -stage: generate -else -stage: generate doc -endif - $(MAKE) install PREFIX=${stagedir} DOSTAGE=yes - -dist: distsrc distbin - -distsrc: - mkdir -p ${top_srcdir}/${package}-${version} - cd ${top_srcdir} && GLOBIGNORE="${package}-${version}" && cp -Rf * ${package}-${version} - cd ${top_srcdir} && tar -czf ${distdir}/${package}-${version}_src.tar.gz --exclude-from=project/tar_exclude ${package}-${version} - rm -rf ${top_srcdir}/${package}-${version} - -distbin: - $(MAKE) install PREFIX=${top_srcdir}/tmpbuilddir - cd ${top_srcdir}/tmpbuilddir && tar -czf ${top_srcdir}/${distdir}/${package}-${version}_bin.tar.gz * - rm -rf ${top_srcdir}/tmpbuilddir - -doc: generate - cp ${top_srcdir}/doc/*.dox . - echo "PROJECT_NUMBER = ${version}" >> C.dox - echo "PROJECT_NUMBER = ${version}" >> CPP.dox - doxygen C.dox - doxygen CPP.dox - -ifdef LB_STANDALONE -install: generate -else -install: generate doc -endif - -mkdir -p ${PREFIX}/${STAGETO} - -mkdir -p ${PREFIX}/share/doc/${package}-${version} - install -m 644 ${GEN_H} ${PREFIX}/${STAGETO} - install -m 644 ${top_srcdir}/LICENSE ${PREFIX}/share/doc/${package}-${version} - cd ${top_srcdir}/interface && install -m 644 ${STATIC_H} ${PREFIX}/${STAGETO} -ifndef LB_STANDALONE - cp -r C CPP ${PREFIX}/share/doc/${package}-${version} -# cp -r ${top_srcdir}/doc/api/{Makefile,api.tex,fig} ${PREFIX}/share/doc/${package}-${version}/api -endif - if [ x${DOSTAGE} = xyes ]; then \ - cd ${top_srcdir}/interface && install -m 644 ${FAKE_H} ${PREFIX}/${STAGETO} ; \ - fi - -clean: - rm -rf *.h *.dox C/ CPP/ - +all compile: diff --git a/org.glite.lb.client-interface/doc/C.dox b/org.glite.lb.client-interface/doc/C.dox deleted file mode 100644 index 5ec7442..0000000 --- a/org.glite.lb.client-interface/doc/C.dox +++ /dev/null @@ -1,19 +0,0 @@ -PROJECT_NAME = "Glite LB Client: C - Interface" -OUTPUT_DIRECTORY = C -OPTIMIZE_OUTPUT_FOR_C = YES -INPUT = ./events.h \ - ./jobstat.h \ - ./producer.h \ - ../interface/context.h \ - ../interface/notifid.h \ - ../interface/notification.h \ - ../interface/consumer.h -SHOW_DIRECTORIES = NO -FULL_PATH_NAMES = NO -EXTRACT_ALL = YES -PDF_HYPERLINKS = YES -USE_PDFLATEX = YES -MACRO_EXPANSION = YES -EXPAND_ONLY_PREDEF = YES -PREDEFINED = _EDG_WLL_EVENT_COMMON -HAVE_DOT = NO diff --git a/org.glite.lb.client-interface/doc/CPP.dox b/org.glite.lb.client-interface/doc/CPP.dox deleted file mode 100644 index 1ee044c..0000000 --- a/org.glite.lb.client-interface/doc/CPP.dox +++ /dev/null @@ -1,16 +0,0 @@ -PROJECT_NAME = "Glite LB Client: CPP - Interface" -OUTPUT_DIRECTORY = CPP -INPUT = ../build/Event.h \ - ../build/JobStatus.h \ - ../interface/Job.h \ - ../interface/CountRef.h \ - ../interface/LoggingExceptions.h \ - ../interface/ServerConnection.h \ - ../interface/Notification.h -SHOW_DIRECTORIES = NO -FULL_PATH_NAMES = NO -EXTRACT_ALL = YES -PDF_HYPERLINKS = YES -USE_PDFLATEX = YES -#HAVE_DOT = YES -#CALL_GRAPH = YES diff --git a/org.glite.lb.client-interface/doc/api/Makefile b/org.glite.lb.client-interface/doc/api/Makefile deleted file mode 100755 index 6a6f660..0000000 --- a/org.glite.lb.client-interface/doc/api/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -# Makefile for LaTeX, EGEE-JRA1-Testplan - -DOCUMENT=api -DELIVERY=TEMPLATE-$(VERSION) -SRC=. -STYLEPATH := $(SRC)/../../../org.glite.templates-latex-style -VERSION=`cat $(SRC)/VERSION` - -include $(STYLEPATH)/Makefile.template diff --git a/org.glite.lb.client-interface/doc/api/api.tex b/org.glite.lb.client-interface/doc/api/api.tex deleted file mode 100644 index 48aa4d7..0000000 --- a/org.glite.lb.client-interface/doc/api/api.tex +++ /dev/null @@ -1,1800 +0,0 @@ -\documentclass{egee} - -\usepackage{graphicx} -\usepackage{amsbsy} -\usepackage{xspace} - -\ifx\pdfoutput\undefined -\def\driver{dvips} -\def\vsuffix{eps} -\let\bsuffix=\vsuffix -\else -\def\driver{pdftex} -\def\vsuffix{pdf} -\def\bsuffix{jpg} -\fi - -\def\LB{L\&B\xspace} -\def\ie{i.\,e.\xspace} -\def\eg{e.\,g.\xspace} -\def\wrt{w.\,r.\,t.\xspace} -%\def\labelitemi{\textbf{--}} - - -\title{\LB API Reference} -\DocIdentifier{EGEE-doc-identifier} -\Date{\today} -\Activity{JRA1: Middleware} -\DocStatus{DRAFT} -\Subtitle{just to show everything works} %No SubTitle -\Dissemination{PUBLIC} -\DocumentLink{http://cern.ch} -\Abstract{% -\LB API reference. -} - - -\begin{document} - -\parindent=0pt -\parskip=\smallskipamount - -\tableofcontents - -\makeatletter -\def\jobid{\textit{JobId}\xspace} -\def\@tti[#1]{\item[{\normalfont\texttt{#1}}]\catcode`\_=8} -\def\tti{\catcode`\_=11\noexpand\@tti} -\newlength{\tw} - -\def\synopsis{\catcode`\_=11\noexpand\@synopsis} -\def\@synopsis#1#2{ -\tw=\linewidth -\advance\tw-2em -\texttt{#1(}\\ -\strut\hskip2em\begin{tabularx}\tw{>{\begingroup\tt}l<{\endgroup}lX} -#2 -\end{tabularx}\\ -\texttt) -\catcode`\_=8 -} - -\def\Synopsis{\subsubsection*{Synopsis}} -\def\Description{\subsubsection*{Description}} -\def\Return{\subsubsection*{Return values}} - -\begin{thebibliography}{9} -\bibitem[R1]{lbarch}\emph{\LB Architecture release 2}, DataGrid-01-TED-0141. -\bibitem[R2]{lbdraft}\emph{Logging and Bookkeeping Service for the DataGrid}, -DataGrid-01-TEN-0109. -\bibitem[R3]{lbdraft2} -\emph{Logging and Bookkeeping Service for the DataGrid, release~2}, -DataGrid-01-TEN-0132. -\bibitem[R4]{lbadvanced} -\emph{\LB Advanced Queries Extensions}, -DataGrid-01-TEN-0125. -\bibitem[R5]{naming}\emph{Naming Conventions}, DataGrid-12-D12.2-0201. -\bibitem[R6]{draft-abela}\emph{draft-abela-ulm-05}. - -\end{thebibliography} - -\section*{Purpose of this Document} -This document provides a~consistent overview of the API to the \LB (logging and bookkeeping) service of WMS (workload management system) of the EU Datagrid -middleware. -It is inteded for both WP1 developers using the service, -as well as WP1-external users. - -This document obsoletes previous documents providing the API -description~\cite{lbdraft,lbadvanced} and the respecive sections -of~\cite{lbdraft2}. - -\newpage - -\section{\LB Service Overview} -It is not a~purpose of this document to discuss architecture issues of -the \LB service. -However, we provide a~brief overview so that this document is more or less -self-contained. -Further details can be found in~\cite{lbdraft2} and mainly in~\cite{lbarch}. - -Purpose of the service is monitoring a~job from being submitted to the WMS, -going through various stages of planning its execution, being run, -and finally either successfully or unsuccessfully terminating. -End users are able to query the service in order to get information on -an overall status of their jobs, as well as detailed logging information. - -The service works with the following principal data entities: -\begin{description} -\item[Job] corresponds to a~user job (unit task) being submitted to the WMS. -A job is referenced with a~unique identifier -- \jobid. -\item[Event] is a~unit record on anything significant \wrt job life, \eg\ its -submission, assignment of a~suitable computing resource, starting execution -etc. An event is always uniquely associated to a~particular job. -\end{description} - -\begin{figure} -\begin{center} -\includegraphics[width=.8\hsize]{fig/logging-arch.\vsuffix} -\end{center} -\caption{\LB service architecture} -\textbf{FIXME: make it up to date} -\label{f:arch} -\end{figure} - -Figure~\ref{f:arch} shows principal components of the \LB service -and data flow among them. - -\textbf{TODO: daemons, dataflow} - -\subsection{Events} -\label{s:events} - -Every event carries event type and information necessary for identifying the -time and origin of the event (\jobid and string identifying the event -sender). In addition, in release~2, every event includes its sequence code (generated by logging library -when the event is logged, see Sect.~\ref{s:sequence}). -Event type determines additional -data that the event contains. Event types are as follows (because there are many -changes and clarifications since release~1, we list all event types including those with unchanged -type-specific data items): - -\def\jobregister{\emph{Job\-Register}} -\def\jobtransfer{\emph{Job\-Transfer}} -\def\jobaccepted{\emph{Job\-Accepted}} -\def\jobrefused{\emph{Job\-Re\-fused}} -\def\jobenqueue{\emph{Job\-EnQueued}} -\def\jobdequeue{\emph{Job\-DeQueued}} - -\def\helpercall{\emph{Helper\-Call}} -\def\helperret{\emph{Helper\-Return}} - -\def\txfrev{\jobtransfer, \jobaccepted, \jobrefused} - -\def\jobpending{\emph{Job\-Pending}} -\def\jobmatch{\emph{Job\-Match}} - -\def\jobpurge{\emph{Job\-Purge}} -\def\jobabort{\emph{Job\-Abort}} -\def\jobcancel{\emph{Job\-Cancel}} -\def\jobrun{\emph{Job\-Run\-ning}} -\def\jobdone{\emph{Job\-Done}} -\def\jobcleared{\emph{Job\-Cleared}} -\def\jobresub{\emph{Job\-Resubmission}} - -\def\jobchkpt{\emph{Job\-Chkpt}} -\def\joblistener{\emph{Job\-Listener}} -\def\jobcurjdl{\emph{Job\-Cur\-Descr}} - -\subsubsection{Job transfer between components} - -\begin{description} - -\item[\jobtransfer] -- The sender of this event attempted to transfer a~job -to some other component via extenal interface, \eg UI to Network Server or JSS to Condor-G. -This event contains identification of the -other component which the job is being sent to (component name, hostname and network port number) and possibly the job -description being transferred in language this component accepts (job description for NS, RSL -for Globus job-manager, ClassAd for Condor-G). -Result, \ie{} success or failure, of the transfer (as seen by the sender) -and new internal job ID assigned by the other component (if known) must be included. Following result codes are recognized: -\begin{itemize} -\item START -- the sending component has started or is about to start the transfer -\item OK -- job was sent successfully -\item REFUSED -- job was refused by the other component -\item FAIL -- transfer failed for other reason than explicit refusal (\eg network timeout) -\end{itemize} - -\item[\jobaccepted] -- Receiving component accepted the job via external interface. This -event pairs with \jobtransfer\ and should contain identification of the sending component (if possible) and the locally assigned job id (Condor, Globus, \dots). -This event is issued by the receiving component where possible (on JSS to Condor-G transfer, Log Monitor should log this event). - -\item[\jobrefused] -- Receiving component could not accept the job, the reason being a part of the event. - -\item[\jobenqueue] -- The job is inserted into a queue, \eg the queue holding the job after it is received by Network Server and before it is processed by Workload Manager. The data items are the same as in \jobtransfer\ except new internal job ID is not present and the destination is interpreted as queue name. - -\item[\jobdequeue] -- The job is removed from queue. The data items are the same as in \jobaccepted. - -\item[\helpercall] -- Helper component is called during the job processing. The type-specific data include -the name of called Helper, whether the logging component is called or calling one, and optionally parameters -passed to the Helper. - -\item[\helperret] -- Call to Helper returns. The type-specific data include -the name of called Helper, whether the logging component is called or calling one, and optionally -the return data from the Helper (\ie\ modified ClassAd or description of modifications to the input ClassAd). -\end{description} - - -\subsubsection{Job state changes during processing inside a component} - -\begin{description} -\item[\jobrun] -- The job was started on the selected computing element -(its node) by the local resource management system. -\item[\jobresub] -- Reports the result of resubmission decision after the job has failed. Data items include -the result (will/won't be resubmitted), the reason string, and tag -- value of the attribute on which the decision is based. -\item[\jobdone] -- Job has exited, has been successfully cancelled or is considered to be in terminal state by Condor-G. -This event contains status code: -\begin{itemize} -\item OK -- the job has completed successfully from the point of view of WMS -(Unix return code can be non-zero) -\item FAIL -- the job has failed to run -\item CANCELLED -- the job was cancelled by user request -\end{itemize} -In addition to status code, reason for the change (especially with FAIL status code) and process exit code should be filled in, if available. -\item[\jobcancel] -- Cancel operation has been attempted on the job. The event -carries the status code: -\begin{itemize} -\item REQ -- request acknowledged -\item REFUSE -- request declined by this component -\item DONE -- request completed by whole WMS -\item ABORT -- request refused by whole WMS -\end{itemize} -Reason string is also included. -\item[\jobabort] -- Job processing was stopped by WMS due to error condition, the event contains the reason for abort. -\item[\jobcleared] -- Job results (output files) were handed over to the user; all temporary files were removed. -\item[\jobpurge] -- Generated when the job is purged from bookkeping server's database. This event is stored only in -a logging server. -\end{description} - - -\subsubsection{Workload Manager or Helpers} - -\begin{description} -\item[\jobmatch] -- Appriopriate match (\ie\ the CE) was found. -This event contains the ID of selected CE. -\item[\jobpending] -- This event is logged by WM when there was no match -found for given job (\eg\ not enough information was found, requested -resources are not available at the moment, job dependency condition is not -satisfied) and the job is going to be requeued. -The event describes reason why the jobs remains in the queue. -\end{description} - -\subsubsection{Store special information in \LB} -\begin{description} -\item[\jobregister] -- Logged by job creator (UI or Job Partitioner) in order to register the job -or its subjobs with bookkeeping server. This event includes the job description (JDL), parent job ID -(if subjob), number of subjobs to create in \LB, and the seed for subjob ID generation. This event -should be logged synchronously for a job that is not a subjob of another job. - -\item[\jobchkpt] -- An application-specific checkpoint was created (logged by checkpointing API). -Checkpoint tag and ClassAd strings should be included. -\item[\joblistener] -- Use by UI to store listener network port information for interactive jobs. -Listener port number, hostname and service name (multiple ports can be advertised) must be included. -\item[\jobcurjdl] -- This optional event can be used to report ClassAd describing the current -state of job processing (output from Helper modules). -\end{description} - -\subsection{Event sources} -The following table describes which events should be logged by -particular workload management architecture components: -\\ - -{\raggedright - -%\begin{table}[h] -\newlength\kratsi -\setlength{\kratsi}{\textwidth} -\addtolength{\kratsi}{-5mm} -\begin{tabularx}{\kratsi}{@{}lX} -UI & \jobregister, \joblistener, \jobtransfer, \jobcancel, \jobabort \\ -NS & \jobaccepted, \jobrefused, \jobenqueue, \jobcancel, \jobabort \\ -WM & \jobdequeue, \helpercall, \helperret, \jobenqueue, \jobpending, \jobcurjdl, \jobcancel, \jobabort \\ -Helper & \helpercall, \helperret, \jobcurjdl, \jobmatch \\ -JSS & \jobdequeue, \jobtransfer, \jobcancel, \jobabort \\ -LM & \jobtransfer, \jobaccepted, \jobrefused, \jobrun, \jobresub, \jobenqueue, \jobdone, \jobcancel, \jobabort \\ -user app. (CE) & \jobchkpt \\ -Job Wrapper & optionally \jobrun, \jobdone \\ -sandbox storage & \jobcleared \\ -bkserver & \jobpurge\\ -\end{tabularx} -%\end{table} -}% end of \raggedright - -\subsection{Job Status} -\label{s:status} -During its life within WMS a~job passes a~sequence of \emph{job states}. -The following lists briefly describes all possible states. -\begin{description} -\item[\em Submitted] -- Job is entered by the user to the User Interface or registered by Job Partitioner but not yet transferred to Network Server for processing or not yet processed by DAGMan (if subjob) -\item[\em Waiting] -- Job has been accepted by NS and is waiting for Workload Manager processing or is being processed by WM or DAGMan's Helpers -(\eg WM is busy, no appropriate Computing\-Element (cluster) has been found yet, required dataset is not -available, job is waiting for resource allocation) -\item[\em Ready] -- The job has been processed by WM or DAGMan and their Helper modules (especially, appropriate ComputingElement has been found) but not yet transferred to the Computing Element (local batch system queue) via Job Submission Service and Condor-G -\item[\em Scheduled] -- Job is waiting in the queue on the ComputingElement (this state never occurs with DAG/partitioned job) -\item[\em Running] -- Job is running or DAGMan is processing its subjobs (if the job is DAG/partitioned) -\item[\em Done] -- Job has exited or is considered to be in a terminal state by Condor-G (\eg submission to CE has failed in an unrecoverable way). -This also includes user-initiated cancellation of the job. -\item[\em Aborted] -- Job processing was aborted by WMS (waiting in the Workload Manager queue or ComputingElement for too long, over-use of quotas, expiration of -user credentials,~\ldots) -%\item[\em Cancelled] -- Job has been successfully cancelled by user request -\item[\em Cleared] -- Output sandbox was transferred to the user or removed due to the timeout - -\end{description} - -\section{API Design} - -\subsection{General Conventions} - -\textbf{TODO} - -\subsubsection{Return values} -The return type of most of the API functions is return \verb'int'. -Unless specified otherwise the returned values are as follows: -\begin{description} -\item[0] success -\item[errno] an error occured, the nature of the error -matches meaning of one of standard \verb'' error codes. -\item[\LB specific] a~few errors can't be intuitively mapped to \verb'', therefore the are specific \LB error codes, starting from \verb'EDG_WLL_ERROR_BASE'. -\end{description} -See Sect.~\ref{s:error} for details on error handling. - -Few API function return \verb'char *'. In such a~case \verb'NULL' indicates -an error, non-null value means success. - -\subsection{Function arguments} -In the following description the function arguments are classified as follows: -\begin{description} -\item[IN] pure input argument, not modified by the function. -If it is a~pointer, the C prototype includes \verb'const' (which is omitted in -this document for the sake of readability). -\item[OUT] pure output argument. The function expects a~pointer and fills in -the pointed object. - -If the argument is \verb'**', or a~structure containing pointers, -the returned objects are \emph{always} dynamically allocated, -and has to be freed when not used anymore. -The same holds for directly returned pointers. - -\item[INOUT] an argument taken as an input and modified by the function. -Typically it is the \LB context. - -\end{description} - -\subsubsection{Datatypes} -The API uses two classes of custom datatypes: -\begin{description} -\item[opaque types] (\eg context, jobid) do not expose their structure -to the user. -The only way to access them is via the API functions. -The internal structure of those may be subject to change. - -\item[transparent types] (\eg event, status) expose the structure to the -user. The structure is documented and no incompatible changes will be done -without notice. -\end{description} - -\subsection{Job Identifier} -Handling of the \jobid is not restricted to the \LB subsystem only, -it belongs to the common part of the entire WMS software. -However, it is stronly related to the \LB service, therefore we describe -it here for completness. - -\textbf{TODO} - -\iffalse -\subsubsection{Interface} -%\code{\#include "edg/workload/common/jobid/jobid.h"} - -\subsubsection{Datatypes} -\begin{description} -\tti[edg_wlc_JobId] Representation of the \jobid. -Opaque type, it's contents is hidden to the API users and should be -manipulated with the access methods only. -\end{description} -\subsubsection{Functions} -\fi - - - - -\subsection{Context and Parameter Settings} -\label{s:context} - -All the API functions refer to a~\emph{context} argument. -The context type \verb'edg_wll_Context' is opaque. -Context objects preserve various status information -(\eg\ connection to server) among the API calls. -The API caller can create many context objects, those are guaranteed -to be independent on one another. -In this way thread-safety of the library is achieved -- -one context object has to be used by only one thread at time. - -Context is used to set and keep various parameters of the library -(\eg\ default server addresses, timeouts, \dots). -Upon initialization, all the parameters are assinged default values. -However, many of the parameters take their default value from environment -variables. If the corresponding environment variable is set, -the parameter is initialized to its value instead of the default. -Note that a~few parameters cannot be assigned default value; consequently -setting them either in environment or with an explicit API call -is mandatory before using the appropriate part of the API. - -The context also stores details on errors of the recent API call. - -For use with the \emph{producer} calls (see Sect.~\ref{s:producer}) -the context has to be assigned a~single \jobid -(with the \verb'edg_wll_SetLoggingJob' call, see Sect.~\ref{s:sequence}), -and keeps track of an event \emph{sequence code} for the job -(detailed description in~\cite{lbarch}). - -\Synopsis -\synopsis{int edg_wll_InitContext}{ -edg_wll_Context *&OUT&context to be initialized -} - -\synopsis{void edg_wll_FreeContext}{ -edg_wll_Context&IN&context to be freed -} -% -\Description -\verb'edg_wll_InitContext' allocates and initializes a~new context object. -\verb'edg_wll_FreeContext' performs the necessary cleanup (closing pending -connections etc.) and destroys the object. -% -\Return -\verb'edg_wll_InitContext' returns 0 on success, -ENOMEM if \verb'malloc' fails. - -\Synopsis - -\synopsis{int edg_wll_SetParam}{ -edg_wll_Context context & INOUT & context to operate on\\ -edg_wll_ContextParam param & IN & parameter to set (see bellow) \\ -\dots & IN & parameter value to set\\ -} - -\synopsis{int edg_wll_GetParam}{ -edg_wll_Context context & INOUT & context to operate on\\ -edg_wll_ContextParam param & IN & parameter to get (see bellow) \\ -\dots & OUT & pointer to output variable\\ -} - -\Description -\verb'edg_wll_SetParam' sets a~context parameter to a~given value. -If the value is NULL (pointer type) or 0 (int), the parameter is reset -to its default value (or the value given by environment variable), -in exactly the same way as on context initialization. - -\verb'edg_wll_GetParam' retrieves the current value of the parameter. -Even if it is a~default, an actual value is always returned, not NULL or 0. - -All the context parameters are described in the following list. -\def\paritem[#1]{\item[\normalfont EDG\_WLL\_PARAM\_#1]\leavevmode\hbox{}\\} -\begin{quote} -\begin{description} -\paritem[HOST] -Hostname that will appear as the source of generated events. - -\begin{tabularx}\linewidth{@{}lX} -Type& \verb'char *'\\ -Default& return value of \verb'gethostname'\\ -Environment& GLOBUS\_HOSTNAME -\end{tabularx} - -\paritem[SOURCE] -Identification of the service which is logging: -\begin{itemize} -\item EDG\_WLL\_SOURCE\_USER\_INTERFACE -\item EDG\_WLL\_SOURCE\_NETWORK\_SERVER -\item EDG\_WLL\_SOURCE\_WORKLOAD\_MANAGER -\item EDG\_WLL\_SOURCE\_BIG\_HELPER -\item EDG\_WLL\_SOURCE\_JOB\_SUBMISSION -\item EDG\_WLL\_SOURCE\_LOG\_MONITOR -\item EDG\_WLL\_SOURCE\_LRMS -\item EDG\_WLL\_SOURCE\_APPLICATION -\end{itemize} - -\begin{tabularx}\linewidth{@{}lX} -Type& \verb'edg_wll_Source'\\ -Default& N/A, hence it must be set before any producer call\\ -Environment& EDG\_WLL\_LOG\_SOURCE -(split according to the pattern ``source[/instance]'' eventually) -\end{tabularx} - -\paritem[INSTANCE] -Identification of an instance of the service -if more than one may appear on a~single host. -In case of EDG\_WLL\_SOURCE\_APPLICATION the instance is supposed to -identify the concrete application too. - -\begin{tabularx}\linewidth{@{}lX} -Type& \verb'char *'\\ -Default& N/A\\ -Environment& EDG\_WLL\_LOG\_SOURCE -(split according to the pattern ``source/instance'')\\ -\end{tabularx} - -\paritem[LEVEL] -Logging level, \ie\ severity of messages. Supported values -are: -\begin{itemize} -\item EDG\_WLL\_LOG\_SYSTEM -- \LB system important events, -\item EDG\_WLL\_LOG\_DEBUG -- debugging and informational events. -\end{itemize} - -\begin{tabularx}\linewidth{@{}lX} -Type& \verb'edg_wll_Lvl'\\ -Default& EDG\_WLL\_LOG\_SYSTEM\\ -Environment& N/A -\end{tabularx} - -\paritem[DESTINATION] -Name of the host where to send the events, \ie\ the local-logger machine. - -\begin{tabularx}\linewidth{@{}lX} -Type& \verb'char *'\\ -Default& localhost\\ -Environment& EDG\_WLL\_LOG\_DESTINATION (split accorting to the pattern -``hostname[:port]'') -\end{tabularx} - -\paritem[DESTINATION\_PORT] -Port where the local-logger listens. - -\begin{tabularx}\linewidth{@{}lX} -Type& \verb'int'\\ -Default& 9002\\ -Environment& EDG\_WLL\_LOG\_DESTINATION (split accorting to the pattern -``hostname[:port]'') -\end{tabularx} - -\paritem[LOG\_TIMEOUT] -Timeout for asynchronous logging calls. -Theoretically, it's not possible to set infinite timeout, -however, we suppose that the maximal possible value of \verb'struct timeval' -is sufficient. - -\begin{tabularx}\linewidth{@{}lX} -Type& \verb'struct timeval *'\\ -Default& \textbf{TODO}\\ -Environment& EDG\_WLL\_LOG\_TIMEOUT -\end{tabularx} - -\paritem[LOG\_SYNC\_TIMOUT] -Timeout for synchronous logging calls. - -\begin{tabularx}\linewidth{@{}lX} -Type& \verb'struct timeval *'\\ -Default& \textbf{TODO}\\ -Environment& EDG\_WLL\_LOG\_SYNC\_TIMEOUT -\end{tabularx} - -\paritem[QUERY\_SERVER] -Hostname of the \LB server to query, -applicable only for calls which do not specify \jobid explicitely. - -\begin{tabularx}\linewidth{@{}lX} -Type& \verb'char *'\\ -Default& N/A, hence must be set before a~call which requires the value\\ -Environment& EDG\_WLL\_QUERY\_SERVER (split according to the pattern -``hostname[:port]'' eventually) -\end{tabularx} - -\paritem[QUERY\_SERVER\_PORT] -\LB server port. - -\begin{tabularx}\linewidth{@{}lX} -Type& \verb'int'\\ -Default& 9000\\ -Environment& EDG\_WLL\_QUERY\_SERVER (split according to the pattern -``hostname[:port]'')\\ -\end{tabularx} - -\paritem[QUERY\_TIMEOUT] -Maximal time to wait for a~response to a~query. - -\begin{tabularx}\linewidth{@{}lX} -Type& \verb'struct timeval *query_timeout'\\ -Default& \textbf{TODO}\\ -Environment& EDG\_WLL\_QUERY\_TIMEOUT -\end{tabularx} - -\paritem[QUERY\_LIMIT] -Maximal number of records that a~query may return. -It is used to prevent overloading both server and network by queries that -may return unusably huge datasets. - -\begin{tabularx}\linewidth{@{}lX} -Type& \verb'int'\\ -Default& unlimited\\ -Environment& N/A -\end{tabularx} - -\paritem[X509\_PROXY] -X509 proxy credentials file for logging or querying authentication. - -\begin{tabularx}\linewidth{@{}lX} -Type& \verb'char *'\\ -Default& GSI credential search mechanism is applied\\ -Environment& X509\_USER\_PROXY -\end{tabularx} - -\paritem[X509\_KEY] -X509 key file to use for logging or querying authentication. -X509\_CERT has to be set to a~matching certificate file. -If X509\_PROXY is set, X509\_KEY and X509\_CERT parameters are ignored. - -\begin{tabularx}\linewidth{@{}lX} -Type& \verb'char *'\\ -Default& GSI credential search mechanism is applied\\ -Environment& X509\_USER\_KEY -\end{tabularx} - -\paritem[X509\_CERT] -X509 certificate file for logging or querying authentication. -X509\_KEY has to be set to a~matching key file. -If X509\_PROXY is set, X509\_KEY and X509\_CERT parameters are ignored. - -\begin{tabularx}\linewidth{@{}lX} -Type& \verb'char *'\\ -Default& GSI credential search mechanism is applied\\ -Environment& X509\_USER\_CERT -\end{tabularx} - - - - -\end{description} -\end{quote} - -\Return -The functions return 0 on success and EINVAL if \verb'param' -is not a~valid context parameter. - - -\subsection{Error Handling} -\label{s:error} - -Besides returning an error code, -the API calls record any error details within the \LB context. - -Further on, the API distinguishes between \emph{hard} and \emph{soft} -errors. -In the case of soft error some output data may still be available -(\eg E2BIG -- the result is too big so that it is truncated but its part -is still available). -In case soft errror it is the user responsibility to check the output -and free the data eventually. -Possible soft errors are always indicated in the API description. - -\Synopsis -\synopsis{int edg_wll_Error}{ -edg_wll_Context ctx & IN & context\\ -char ** text & OUT & standard error message\\ -char ** desc & OUT & error details (if any)\\ -} - -\Description -Retrieve recent API call error. -Besides an error code a~standard error message related to the code -is returned (\eg ``No such file or directory'' in the case of ENOENT), -and any details on the error (\eg it should be the filename in the case of ENOENT). -Any of \verb'text' of \verb'desc' can be NULL. No value is retrieved then. - -\Return -The code of recent error. - - -\subsection{Event and Job Status Representation} -In the producer part events are not handled as explicit objects -- -on the other hand, they are created on the fly by the logging calls, -based on context data as well as the particular functions arguments. - -The consumer API part represents an event as a~union \verb'edg_wll_Event' -defined as follows: -\begin{quote} -\begin{verbatim} -typedef union _edg_wll_Event { - edg_wll_EventCode type; - edg_wll_AnyEvent any; - edg_wll_TransferEvent transfer; - ... -} edg_wll_Event; - -typedef struct _edg_wll_AnyEvent { - edg_wll_EventCode type; - struct timeval timestamp; - char *host; - int level; - int priority; - edg_wlc_JobId jobId; - char *seqcode; - char *user; - edg_wll_Source source; - char *src_instance; -} edg_wll_AnyEvent; -\end{verbatim} - -\end{quote} - -The \verb'edg_wll_AnyEvent' contains the common fields of all the event types. -It's guaranteed that the same fields are contained in all the event type -specific structures (\verb'edg_wll_TransferEvent' etc.) on matching positions. -Therefore it's always legal to access the \verb'type' union field to find -out the type of event, and then \verb'any' for the common fields only, -or the corresponding type-specific structure. - -Full definitions of the structures including field types are presented -in Appendix~\ref{a:events}. - -Job status is represented by a~flat \verb'edg_wll_JobStat' structure -(as there is more overlap of data fields among various job states, -following the event union scheme is irrelevant). -Among others, the structure contains the fields: -\def\ttitem[#1]{\item[\normalfont\texttt{#1}]} -\begin{quote} -\raggedright -\begin{description} -\ttitem[state] -- numeric code of the status (EDG\_WLL\_JOB\_SUBMITTED, EDG\_WLL\_JOB\_WAITING, \dots) -\ttitem[type] -- type of the job (EDG\_WLL\_JOB\_SIMPLE or EDG\_WLL\_JOB\_DAG) -\ttitem[children] -- list of subjob \jobid's -\ttitem[children\_histogram] -- number of children in particular states -\ttitem[children\_states] -- full status information of the children -\end{description} -\end{quote} -Note that not all the fields are always filled in, see Sect.~\ref{s:jobstat}. -Full description of the structure can be found in Appendix~\ref{a:events}. - -\subsection{Connection Management} -The producer and consumer parts of the \LB API involve two communication -channels. -Connection data are stored within the context object. -Management of the corresponding network connections is performed -transparently by the \LB -library and it is hidden to the API user. - -The connections are soft-state: they may or may not be preserved across -subsequent API calls, the library may also cache several connections to -different servers. - -%\subsection{Environment Variables} - -\subsection{Producer} -\label{s:producer} -The \emph{producer} part of the library is responsible for -pushing the events into the \LB infrastructure. -It operates in the following modes: -\begin{description} -\item[Asynchronous] calls return as soon as possible, even if -the destination \LB server or a~network connection is down. -A~successful return from the API call -indicates that the event has been accepted by the \LB infrastructure, -persistently stored on the local-logger disk, and will be delivered to -the \LB server reliably. -However, there is no guarantee on time when the delivery actually occurs. - -In addition, the API provides a~flush call to ensure that the previously -sent events are actually stored at the server. -\item[Synchronous] calls do not return successfully -until the logged event is stored at the server. -This may take indefinite time. -A~synchornous call is not equivalent to a~corresponding asynchronous one -followed by the flush call -- synchronous events get precedence, -they may get stored while other previously logged -events heading to the same server may still be delayed (\eg\ because of -slow link). - -Even synchronous calls needn't wait for completition of the operation -undefinitely. -On the contrary, the library defines a~timeout for synchronous calls -(see EDG\_WLL\_PARAM\_LOG\_TIMEOUTS in Sect.~\ref{s:context}), -despite the default value is much larger than for asynchronous counterparts. - -\end{description} - -In general, plain asynchronous calls should be used whenever possible. -Despite asynchronous they are still reliable. -The entire \LB service was initially designed and is optimized for delivery of -asynchronous events. -The synchornous calls and mainly the flush call can take long time and consume -considerable amount of resources, therefore they should be used with care. -The API users are encouraged to design their code with the asynchronicity -of the \LB service in mind rather then relying on synchronous calls. - -\iffalse -Connection between the \LB library and a~local-logger daemon -is established transparently on the logging calls and may or may not be cached. -The following context parameters are taken in account: -\begin{description} -\item[log\_host, log\_port] -- local-logger daemon to connect to, -\item[proxy\_file, key\_file, cert\_file] -- user identity, -\item[log\_async\_timeout, log\_sync\_timeout] -- timeout values for asynchronous and synchronous calls, -\item[log\_level, log\_service, log\_instance] -- current logging level, and identification of the service. -\end{description} -Some of the paramaters need not be set, environment variables as well as default -values are considered then. See Sect.~\ref{s:context} for details. -\fi - -The producer part of the API can be split further into the following -groups: -\begin{itemize} -\item \emph{Sequence code handling calls} allow to retrieve and set the current -sequence code (used by the \LB service for clock-skew resistent event ordering). -\item \emph{Job registration calls} register a~job (and its subjobs) -with the \LB service. -\item \emph{Generic logging calls} capable of logging any defined event. -\item \emph{Specialized logging calls} -- one function per event. -\end{itemize} - -\subsubsection{Sequence Code Handling} -\label{s:sequence} - -\Synopsis -\synopsis{char *edg_wll_GetSequenceCode}{ -edg_wll_Context context&IN&where to retrieve the code from\\ -} - -\synopsis{int edg_wll_SetLoggingJob}{ -edg_wll_Context context&INOUT&the context to use\\ -edg_wlc_JobId job&IN&\jobid to use in following logging calls\\ -char *code&IN&code string as received from the previous component\\ -int flags&IN&one of EDG_WLL_SEQ_NORMAL or EDG_WLL_SEQ_DUPLICATE\\ -} - -\Description -\LB service uses the \emph{sequence codes} to disambiguate the seqence -of events generated by a~job cycling among several WMS components -(\eg\ failure and resubmission) in an environment where clocks needn't -be strictly synchronized. -Details of the mechanism can be found in~\cite{lbarch}. - -Each WMS component, when it passes control of a~job to another component, -is responsible for retrieving the sequence code from the current logging -context (via \verb'edg_wll_GetSequenceCode') -and pass it as an opaque string to the receiving component via their common -communication protocol (\eg\ within a~ClassAd attribute). -The receiving component initializes its logging context for the given job -(via \verb'edg_wll_SetLoggingJob') -with the received string before calling any logging functions. - -If the job control passes through a~component several times but the -component is stateless (\eg\ the Log Monitor), -it may happen that this call is issued several times with the same -\verb'code'. -In such a~case this must be identified with the -EDG\_WLL\_SEQ\_DUPLICATE flag. \LB service relies on event timestamps then. -\emph{Despite unavoidable in some situations this option is dangerous; -its misuse can emerge into incorrect job status computation.} -Therefore usage of this flag should be cross-checked with~\cite{lbarch} -whether all conditions required for proper \LB functionality are met. - -\Return - -\subsubsection{Job Registration} - -\Synopsis - -\synopsis{int edg_wll_RegisterJob}{ -edg_wll_Context context& IN& logging context\\ -edg_wlc_jobid job&IN&\jobid of the registered job\\ -int type&IN&one of EDG_WLL_JOB_SIMPLE or EDG_WLL_JOB_DAG\\ -char *jdl&IN&original (user specified) JDL of the job\\ -char *ns&IN& contact string (URL) of the Network Server handling the job\\ -int num_subjobs&IN&number of subjobs \\ -char *seed&IN& seed for generating the subjobs \jobid's\\ -edg_wlc_JobId **subjobs&OUT& array of generated subjob \jobid's\\ -} - -\synopsis{int edg_wll_RegisterJobSync}{\dots} - -\synopsis{int edg_wll_RegisterSubjobs}{ -edg_wll_Context context&IN& logging context\\ -edg_wlc_JobId *parent&IN& parent \jobid\\ -char **jdls&IN& JDL's of the subjobs\\ -edg_wlc_JobId *subjobs&IN& array of subjob \jobid's\\ -} - -\Description -\verb'edg_wll_RegisterJob' sets the current job of the logging context to -\verb'job', initializes the corresponding sequence code, and registers -the job (including certain critical information -- NS contact, and implicitly -the job owner) with \LB service via logging a~special event. -If the job is a~DAG the \verb'edg_wll_RegisterJob' -also generates the required number of subjob \jobid's and -creates the $\textit{parent}\rightarrow\textit{children}$ association -at the \LB server. -The \verb'seed' argument is used to initialize the subjob \jobid generator. -It's guaranteed that given the same seed and parent \jobid, the -same sequence of \jobid's is generated. - -A~component should also call \verb'edg_wll_RegisterJob' when job type (simple -or DAG) changes. - -\verb'edg_wll_RegisterJob' is a~synchronous variant of the call, -it takes exactly the same arguments. -The synchronous call is usually prefered when registering a~job for the first -time. Further change of the type can be usually logged with the more efficient -plain (asynchronous) call. - -Complementary, the \verb'edg_wll_RegisterSubjobs' call -registers each of the \verb'subjobs' and creates the -$\textit{child}\rightarrow\textit{parent}$ associations at the \LB server. - - -\subsubsection{Generic Logging Calls} - -\Synopsis -\synopsis{int edg_wll_LogEvent}{ -edg_wll_Context context & INOUT & context to work with \\ -edg_wll_EventCode event & IN & event type \\ -char *fmt & IN & format string \\ -\dots& IN & event specific values according to \verb'fmt' -} - -\synopsis{int edg_wll_LogEventSync}{ -edg_wll_Context context & INOUT & context to work with \\ -edg_wll_EventCode event & IN & event type \\ -char *fmt & IN & format string \\ -\dots& IN & event specific values according to \verb'fmt' -} - -\synopsis{int edg_wll_LogFlush}{ -edg_wll_Context context & INOUT & context to work with \\ -struct timeval *timeout & INOUT & wait at most this much time for completition, -remaining time on return -} - -\synopsis{int edg_wll_LogFlushAll}{ -edg_wll_Context context & INOUT & context to work with \\ -struct timeval *timeout & INOUT & wait at most this much time for completition, -remaining time on return -} - -\Description -\verb'edg_wll_LogEvent' (asynchronous) -and \verb'edg_wll_LogEventSync' (synchronous) are generic logging functions. -The event type (as described in Sect.~\ref{s:events}) is determined by the 2nd -argument. The API defines corresponding constants with prefix -\verb'EDG_WLL_EVENT_'. - -The 3rd argument \verb'fmt' is expected to be a~\verb'printf'-like -format string which, together with the remaining arguments, builds -a well-formed ULM~\cite{draft-abela} string. -For each of the described event types there's a~predefined string constant -prefixed with \verb'EDG_WLL_FORMAT_'. - -\verb'edg_wll_LogFlush' instructs the interlogger daemon to deliver -all pending events related to the current job -and waits at most \verb'timeout' for completition. -\verb'edg_wll_LogFlushAll' does the same for all jobs known to the -interlogger (as the events may originate from other processes, -the caller has no control on destination servers -- therefore the -FlushAll call may take unpredictable time). - -\Return -The function return the following codes and set the error details within -the context: - -\begin{tabularx}\hsize{lX} -0 & successful completition \\ -EINVAL & bad \jobid, unknown event code, or the format string together -with the remaining arguments does not form a~valid event, \\ -ENOSPC & \LB infrastructure failed to accept the event due to lack of disk -space etc., \\ -ENOMEM & failed to allocate memory, \\ -ECONREFUSED & cannot connect to the specified local logger, \\ -EAGAIN & non-blocking return (\eg\ timeout) -- needn't be an error, -the event still may be delivered but we can't guarantee it anymore -(even in the case of synchronous call). -It makes sense to attempt logging the same event later, duplicates are ignored. -\\ -\end{tabularx} - -\begin{tabularx}\hsize{lX} -EDG\_WLL\_ERROR\_NOJOBID & logging call attempted without assigning \jobid -to the context (see Sect.~\ref{s:sequence}). -\end{tabularx} - -In addition, the synchronous call may return further errors propagated -from the \LB server: - -\begin{tabularx}\hsize{lX} -EPERM & the user is not authorized to add events to this job, \\ -EEXIST & exactly the same event -has been already stored (this could be reported due to the synchronous -nature of the call, but the duplicates' treatment is exactly the same as -in asynchronous call\,---\,they are ignored).\\ -\dots \\ -\end{tabularx} - -\iffalse -The \verb'edg_wll_LogFlush' call may also return: - -\begin{tabularx}\hsize{lX} -EDG\_WLL\_ERROR\_INTERLOG\_TIMEOUT& The local-logger was contacted but the inter-logger -did not respond within the timeout,\\ -EDG\_WLL\_ERROR\_INTERLOG\_CONLOST& Inter-logger lost connection to one or more -servers,\\ -EDG\_WLL\_ERROR\_INTERLOG\_AGAIN& Not all pending events were delivered -within the timeout. -\end{tabularx} -\fi - -\subsubsection{Specialized Logging Calls} - -Besides the generic logging calls the API also provides specialized -calls for each event type (see Appendix~\ref{a:special} for details). -Those calls don't include the \verb'event' argument (as the even type -is given by the function name) and the format string (the format is fixed -for a~given event type). -The number as well as types of further arguments are determined -by the event type hence fixed. - - -\subsubsection{Logging User Information} -Besides the ``system'' \LB events used to track a~job during its life within -WMS, the \LB service also supports \emph{user} events. -In this way, users are able to log and retrieve application-specific -information. - -All the information is pushed into \LB service via the \emph{UserTags} event, -containing one or more $\textit{name}=\textit{value}$ pairs. -%The events can be logged either with generic logging calls or with -%the following shortcut: - -\Synopsis -\synopsis{edg_wll_LogUserTag}{ -edg_wll_Context context &IN& logging context\\ -char * name&IN& name of the tag\\ -char * value&IN& corresponding value\\ -} - -\iffalse -\synopsis{edg_wll_LogUserTags}{ -edg_wll_Context context &IN& logging context\\ -char ** names &IN& names of the tags\\ -char ** values & IN& corresponding values of the tags\\ -} -\fi - -\Description -The first call logs a~simple \emph{UserTags} event, -containing a~sigle $\textit{name}=\textit{value}$ pair. -The second call is a~more general variant allowing to log more -pairs within a~single event -- it is provided for performance reasons; -it should be used when more pairs are logged simultaneously. -From the point of view of further status queries \verb'edg_wll_LogUserTags' or -a~sequence of several corresponding \verb'edg_wll_LogUserTag''s is equivalent, -as long as the \verb'names' are distinct. - - -\subsection{Consumer} - -%\subsubsection{Job Status} -%\label{s:status} - -\subsubsection{Job Status Query} -\label{s:jobstat} -\Synopsis -\synopsis{int edg_wll_JobStatus}{ -edg_wll_Context context & IN& context\\ -edg_wlc_JobId jobid & IN & \jobid of the job being queried\\ -%int resolution & IN & resolution of the state machine, currently only -%EDG_WLL_STAT_STD\\ -int flags & IN & bitwise OR of EDG_WLL_STAT_* constants (see bellow) -determining which of the optional status fields should be retrieved\\ -edg_wll_JobStat *status & OUT & structure to fill in -} - -\Description -The call queries the \LB server which stores information about the \verb'job' -(possibly opening a~network connection to the server) -and retrieves the job status information. - -The \verb'flags' argument deterimines which of the result structure fields -will be actually filled, in addition to all ``basic'' fields -which are always returned: -\def\rmitem[#1]{\item[\normalfont#1]} -\begin{quote} -\begin{description} -%\rmitem[EDG\_WLL\_STAT\_BASIC] -- only ``short'' fields, \ie\ all except -%job descriptions (JDL, various ClassAd's, RSL, \dots) and any subjob information, -% -\rmitem[EDG\_WLL\_STAT\_CLASSADS] -- job description fields, -\rmitem[EDG\_WLL\_STAT\_CHILDREN] -- list of subjob \jobid's, -\rmitem[EDG\_WLL\_STAT\_CHILDSTAT] -- apply the flags recursively to -all subjobs. -\end{description} -\end{quote} - - -\Return -\begin{tabularx}\hsize{lX} -0&success\\ -EINVAL& Invalid argument, \eg\ unknown or inappropriate condition, -invalid \jobid object etc.\\ -EPERM& User is not authorized to retrieve data on this job.\\ -ENOENT& The job was not found. \\ -ECONREFUSED& Connection refused, \eg\ the server is not running. -\end{tabularx} - - -\subsubsection{General Queries} -\Synopsis -\synopsis{int edg_wll_QueryJobs}{ -edg_wll_Context context& INOUT& context\\ -edg_wll_QueryRec *conditions& IN & query conditions\\ -int flags &IN& status fields to retrieve (see Sect.~\ref{s:jobstat})\\ -edg_wll_JobId **jobs&OUT& matching \jobid's \\ -edg_wll_JobStat **states &OUT& states of matching jobs (if requested)\\ -} - -\Description -Query the \LB server given by the context parameters -QUERY\_SERVER (see Sect.~\ref{s:context}). -Return the jobs satisfying all the query conditions (see bellow). - -The \verb'edg_wll_QueryRec' structure specifies an atomic query condition -and is defined as follows: - -\begin{verbatim} -typedef struct _edg_wll_QueryRec { - edg_wll_QueryAttr attr; - edg_wll_QueryOp op; - char *tag; - union { - int i; - char *c; - struct timeval t; - edg_wlc_JobId j; - } value, value2; -} edg_wll_QueryRec; -\end{verbatim} - -The atomic condition is always a~comparison of an \emph{atrribute} -and value of a~given type provided in an appropriate member of the -\verb'value' union. - -Valid comparisons are -EDG\_WLL\_QUERY\_OP\_EQUAL, -EDG\_WLL\_QUERY\_OP\_LESS, -EDG\_WLL\_QUERY\_OP\_GREATER, -and EDG\_WLL\_QUERY\_OP\_WITHIN. -Meaning of the former three ones is straightforward -the last operation is a~check whether the attribute falls -into the interval given by \verb'value' (low limit) and \verb'value2' -(high limit). -It becomes useful with more complex and-or queries (see bellow). - -\def\qitem[#1]{\item[\normalfont EDG\_WLL\_QUERY\_ATTR\_#1]} - -\verb'edg_wll_QueryJobs' retrieves information on jobs for which the -\emph{current} status satisfies the query conditions. -Attributes valid for quering are: -\begin{quote} -\begin{description} -\qitem[JOBID] (\verb'edg_wlc_JobId'). \jobid. -If this attribute is specified, the server hostname/port taken from -the \jobid is used instead of the QUERY\_SERVER context parameter. -\qitem[OWNER] (\verb'char *'). Job owner (X509 certificate subject). -\qitem[STATUS] (\verb'int'). Job status, see Sect.~\ref{s:status}. -\qitem[LOCATION] (\verb'char *'). Hostname of the machine where the job is -being processed. -\qitem[DESTINATION] (\verb'char *'). Computing Element where the job was, is, or will be executed. -\qitem[DONECODE] (\verb'int'). Minor status of job termination, -one of EDG\_WLL\_STAT\_DONE\_OK, EDG\_WLL\_STAT\_DONE\_FAIL, or EDG\_WLL\_STAT\_DONE\_CANCEL, see Sect.~\ref{s:status}. -\qitem[USERTAG] (\verb'char *'). -User defined tag, the tag name has to be specified in \verb'tag'. -User tags are also interpreted in the ``status'' manner -- -if several \emph{UserTags} events containing the same tag name were logged, -the new value overwrites the older ones. -\end{description} -\end{quote} -In addition, \verb'edg_wll_QueryJobs' called with nonzero \verb'flags' -also returns states of the matching jobs. -The meaning of \verb'flags' is the same as for \verb'edg_wll_JobStatus'. - -\Return -\begin{tabularx}\hsize{lX} -0&success\\ -EINVAL& Invalid argument, \eg\ unknown or inappropriate condition, -invalid \jobid object etc.\\ -EPERM (soft)& The user is not authorized to access all data matching -the query. \\ -ENOENT& No jobs satisfying the query conditions were found.\\ -E2BIG (soft)& Result set size exceeds either the size set by the context parameter -QUERY\_LIMIT or the server imposed limit. -The call still returns the truncated output.\\ -ECONREFUSED& Connection refused, \eg\ the server is not running. -\end{tabularx} - -\begin{tabularx}\hsize{lX} -EDG\_WLL\_ERROR\_NOINDEX & The query is refused by the server being -too general, potentially causing server overload. See the discussion -in Sect.~\ref{s:index}. -\end{tabularx} - -\Synopsis -\synopsis{int edg_wll_QueryJobsExt}{ -edg_wll_QueryRec **conditions& IN & query conditions\\ -int flags &IN& status fields to retrieve (see Sect.~\ref{s:jobstat})\\ -edg_wll_JobId **jobs&OUT& matching \jobid's \\ -edg_wll_JobStat **states &OUT& states of matching jobs (if requested)\\ -} - -\def\attr{\textit{attr}} -\def\val{\textit{val}} -\def\And{\textrm{\ and\ }} -\def\Or{\textrm{\ or\ }} - -\Description -A~more general ``and-or'' variant of \verb'edg_wll_QueryJobs'. -It allows queries in the form -$$ -(\attr_1 = \val_a \Or \attr_1 = \val_b) \And (\attr_2 = \val_c \Or \attr_2=\val_d \Or \attr_3=\val_e) -$$ -The \verb'conditions' are not an array of atomic conditions -but an array (NULL-terminated) of pointers to arrays of conditions. -All conditions in one of the inner arrays should always refer -the same attribute, and are considered logicaly OR-ed, -\ie\ at least one of the conditions within the array has to be satisfied. -On the other hand, the arrays as a~whole are considered logicaly AND-ed. - -The restriction on the structure of the query expression (two nested -levels only) as well as enforcing the same attribute within conditions at the -lower level are imposed due to performance reasons. -An arbitrary complex queries might easily result into unacceptable load on -the \LB\ server. -On the other hand, we believe that a~vast majority of feasible queries -is covered with this interface. - -\Return -Same as \verb'edg_wll_QueryJobs'. In addition EINVAL is returned also -when conditions in one or more inner arrays does not refer to the same -attribute. - - -\Synopsis -\synopsis{int edg_wll_QueryEvents}{ -edg_wll_Context context& INOUT& context\\ -edg_wll_QueryRec *job_conditions& IN & query conditions on current job status\\ -edg_wll_QueryRec *event_conditions& IN & query conditions on the events\\ -edg_wll_Event **events &OUT& matching events\\ -} - -\Description -Query the \LB server given by the context parameters -QUERY\_SERVER (see Sect.~\ref{s:context}). -Return the events satisfying -\verb'job_conditions' and \verb'event_conditions'. -If \verb'job_conditions' is not null, the \emph{current} states of the -the jobs, which the retrieved events are related to, have to satisfy the -conditions. -In addtion, further conditions can be applied on the retrieved events. - -Valid attributes for \verb'job_conditions' are same as for -\verb'edg_wll_QueryJobs'. - -Valid attributes for \verb'event_conditions' are: -\begin{quote} -\begin{description} -%\qitem[JOBID] (\verb'edg_wlc_JobId'). \jobid. -%\qitem[OWNER] (\verb'char *'). Job owner. -\qitem[TIME] (\verb'struct timeval *'). Event timestamp. -\qitem[LEVEL] (\verb'int'). Logging level. -\qitem[HOST] (\verb'char *'). Hostname where the event was generated. -\qitem[SOURCE] (\verb'int'). Service which logged the events, -see the SOURCE context parameter in Sect.~\ref{s:context} for allowed values. -\qitem[INSTANCE] (\verb'char *'). Instance of the service, see Sect.~\ref{s:context} for details. -\qitem[EVENT\_TYPE] (\verb'int'). Event type, see Sect.~\ref{s:events}. -\qitem[USERTAG] (\verb'char *'). -User defined tag, the tag name has to be specified in \verb'tag'. -User tags among event conditions are interpreted in a~different way -\wrt\ those in job status. -All events from the whole job history are retrieved -if they satisfy the conditions, not only the most recent one. - -\end{description} -\end{quote} - -\Return -Same as \verb'edg_wll_QueryJobs'. - -\Synopsis -\synopsis{int edg_wll_QueryEventsExt}{ -edg_wll_Context context& INOUT& context\\ -edg_wll_QueryRec **job_conditions& IN & query conditions on current job status\\ -edg_wll_QueryRec **event_conditions& IN & query conditions on the events\\ -edg_wll_Event **events &OUT& matching events\\ -} - -\Description -\begin{sloppypar} -Analogous ``and-or'' extension of \verb'edg_wll_QueryEvents'. -See the description of \verb'edg_wll_QueryJobsExt' for details -on the allowed query structure and exact meaning of arguments. -\end{sloppypar} - -\subsubsection{Convenience Wrappers} - -\Synopsis -\synopsis{edg_wll_UserJobs}{ -edg_wll_Context context &INOUT \\ -edg_wlc_JobId **jobs &OUT & \jobid's of the current user's jobs\\ -edg_wll_JobStat **states &OUT & states of the jobs \\ -} - -\synopsis{edg_wll_JobLog}{ -edg_wll_Context context &INOUT \\ -edg_wlc_JobId job &IN& \jobid to query \\ -edg_wll_Event **events &OUT& retrieved events -} - -\Description -\verb'edg_wll_UserJobs' queries the current server for all jobs of the -current user. -If the \verb'states' argument is not null, BASIC (see Sect.~\ref{s:jobstat}) -states of the jobs are retrieved as well. - -\verb'edg_wll_JobLog' retrieves all events related to a~given job. - -\Return -Same as \verb'edg_wll_QueryJobs' (the functions are wrappers around -the general queries only). - -\subsubsection{Server Indexed Attributes} -\label{s:index} -The consumer API is quite general, allowing the caller to submit -a wide range of queries. -On the other hand, -a na\"\i ve query can easily emerge into a~full scan of the \LB server -database. As the database is expected to grow very large, the full scan -is unacceptable due to performance reasons. - -In order to allow efficient queries, the server has to index certain attributes -and use the indices as primary selection criteria. -Each server indexes the data on JOBID and OWNER of the job. -In addition the -server's configuration can specify a~further set of indexed attributes -including enumerated user tags. -The user tags are indexed in both their job-status and event-related semantics. - -Each query must include at least one condition on an indexed attribute. -Otherwise, the query is rejected by the server. - -\Synopsis -\synopsis{int edg_wll_GetIndices}{ -edg_wll_Context context &INOUT\\ -edg_wll_QueryAttr **attrs&OUT& array of indexed attributes\\ -char ***userTags &OUT& array of indexed user tags\\ -} -\Description -Query the server configuration for indexed attributes. -Returns the indexed standard \LB attributes in \verb'attrs' -and possibly the indexed user tags in \verb'userTags'. - -\subsubsection{Result Set Size} -In order to further prevent inefficient queries which may result in a~very huge -result set, causing both server and network overload, the consumer -part of the \LB service can impose two limits on the result set size: -\begin{itemize} -\item \emph{Server side} (hard) limit is given by the server configuration, -and it cannot be changed by the user. -\item \emph{Client side} (soft) limit is stored within a~context object -and can be set by the user. -\end{itemize} -The limits are expressed as a~maximal number of entries (\ie\ jobs or events) -returned. -On each query, the client advertises its current limit to the server, -and the server enforces the smaller one of the two limits then. - -Should a~query result in a~larger output, the result is truncated but still -returned to the caller. -Triggering the limit is indicated by returning E2BIG error code. - -The client limit can be manipulated with the Set/Get parameter calls -(see Sect.~\ref{s:context}). - -\Synopsis -\synopsis{edg_wll_GetServerLimit}{ -edg_wll_Context & INOUT \\ -int *limit &OUT & server limit -} - -\Description -Retrieve the current server query result size limit. - - -\section{C++ Binding} -C++ \LB{} server API is closely modelled after the C \LB{} server -API. It consists of the following classes: -\begin{description} - -\item{\emph{JobId}}\\ -Class representing \jobid; this class is not in -fact part of C++ \LB API, as it is shared by all WP1 components. - -\item{\emph{LoggingException}}\\ -Derived from -\emph{edg::workload::common::utilities::Exception}, this class -communicates the error conditions back to C++ \LB API clients. - -\item{\emph{ServerConnection}}\\ -Encapsulates the notion of context of C \LB API. All -functions taking as the parameter the \emph{edg\_wll\_Context} and not specific -to jobs are reflected in methods of \emph{ServerConnection} class. - -\item{\emph{Job}}\\ -Represents the job and defines job specific query methods; -all C \LB API functions taking as parameters \emph{edg\_wll\_Context} and -\emph{edg\_wlc\_JobId} are reflected here. - -\item{\emph{JobStatus}}\\ -Closely related to the \emph{Job} class, this class holds data -about job status, ie. the attribute -- value pairs specific -for a given job state. - -\item{\emph{Event}}\\ -Represents events stored in the bookkeeping -server database; the data are stored as attribute -- value pairs. - -\item{\emph{QueryRecord}}\\ -A helper class for specifying queries to \LB -database. -\end{description} - -\noindent More detailed description of these classes and their methods -follows. - -\subsection*{LoggingException} - -\subsection*{QueryRecord} -Class used to create \verb|AND| queries to the \LB -database, encapsulates \emph{edg\_qll\_QueryRec}. Every object of that -class holds a condition on exactly one attribute of the result; query -methods then take vectors of \emph{QueryRecord} objects as parameters -with logical \verb|AND| semantics. - -\subsubsection*{Constants} -\begin{description} -\item{ -\begin{verbatim} - enum Attr { - UNDEF=0, /**< Not-defined value, used to terminate lists etc. */ - JOBID, /**< Job Id \see _edg_wll_QueryRec */ - OWNER, /**< Job owner \see _edg_wll_QueryRec */ - STATUS, /**< Current job status */ - LOCATION, /**< Where is the job processed */ - DESTINATION,/**< Destination CE */ - DONECODE, /**< Minor done status (OK,fail,cancel) */ - USERTAG, /**< User tag (not implemented yet) */ - TIME, /**< Timestamp \see _edg_wll_QueryRec */ - LEVEL, /**< Logging level (see "dglog.h") * \see _edg_wll_QueryRec */ - HOST, /**< Where the event was generated */ - SOURCE, /**< Source component */ - INSTANCE, /**< Instance of the source component */ - EVENT_TYPE, /**< Event type \see _edg_wll_QueryRec */ - }; - - enum Op { EQUAL=1, LESS, GREATER }; -\end{verbatim} - These constants are used to identify attributes and conditions on -them. Listed attributes are the only ones permitted to query, they -form a subset of all possible attributes. -} -\end{description} - -\subsubsection*{Constructors} -\begin{description} -\item{ -\begin{verbatim} - -QueryRecord(const Attr, const Op, const std::string &); -QueryRecord(const Attr, const Op, const int); -QueryRecord(const Attr, const Op, const struct timeval &); -QueryRecord(const Attr, const Op, const edg::workload::common::jobid::JobId&); -\end{verbatim} -} -There is a constructor for every attribute type allowed in a -query. Supported types include integers, strings, times and \jobid's. - -\end{description} - -\subsection*{Event} -This class provides methods for getting event attribute names and -values. - -\subsubsection*{Constructors} -Constructors are used internally by the library, as the client is not -suposed to create objects of \emph{Event} class. - -\subsubsection*{Event type} -\begin{description} -\item{ - -\begin{verbatim} - enum Type { - UNDEF = 0, - TRANSFER, /**< Start, success, or failure of job transfer to another component */ - ACCEPTED, /**< Accepting job (successful couterpart to Transfer) */ - REFUSED, /**< Refusing job (unsuccessful couterpart to Transfer) */ - ENQUEUED, /**< The job has been enqueued in an inter-component queue */ - DEQUEUED, /**< The job has been dequeued from an inter-component queue */ - HELPERCALL, /**< Helper component is called */ - HELPERRETURN, /**< Helper component is returning the control */ - RUNNING, /**< Executable started */ - RESUBMISSION, /**< Result of resubmission decision */ - DONE, /**< Execution terminated (normally or abnormally) */ - CANCEL, /**< Cancel operation has been attempted on the job */ - ABORT, /**< Job aborted by system */ - CLEAR, /**< Job cleared, output sandbox removed */ - PURGE, /**< Job is purged from bookkepping server */ - MATCH, /**< Matching CE found */ - PENDING, /**< No match found yet */ - REGJOB, /**< New job registration */ - CHKPT, /**< Application-specific checkpoint record */ - LISTENER, /**< Listening network port for interactive control */ - CURDESCR, /**< current state of job processing (optional event) */ - USERTAG, /**< user tag -- arbitrary name=value pair */ - TYPE_MAX - }; -\end{verbatim} -} -Symbolic constants defining possible event types. - -\item{\verb|Type type|}\\ -The event type given by one of the constants above. - -\item{\verb|const std::string & name(void) const|}\\ -Returns string representation of the event's type (ie. ``JobDone''). - -\end{description} - -\subsubsection*{Attributes} -\begin{description} -\leftmargin10pt\listparindent20pt - -\item{\verb|enum AttrType { INT_T, STRING_T, TIMEVAL_T, PORT_T, LOGSRC_T, JOBID_T }|}\\ -Constants determining event attribute types. - -\item{\verb|const std::vector > &getAttrs(void) const|}\\ -This method returns the vector of attribute name and type pairs. The -type is given by the symbolic constant above, for a list of possible -attributes see the header file {\tt edg/workload/logging/client/Event.h}. - -\item{ -\begin{verbatim} -int getValInt(Attr) const -std::string getValString(Attr) const -struct timeval getValTime(Attr) const -const edg::workload::common::jobid::JobId getValJobId(Attr) const -\end{verbatim} -} -Methods for accessing event attribute's value. There is one method for -every supported attribute type. For some attributes the returned -integer values can be defined by symbolic constants; for a list of -allowed constants see the header file -{\tt edg/workload/logging/client/Event.h}. -The \verb|int getValInt(Attr)| method should be used for -the \verb|PORT_T| and \verb|LOGSRC_T| attribute types. - -\item{\verb|const std::string & getAttrName(Attr) const|}\\ -Converts a symbolic attribute name to string representation. - -\end{description} - -\subsection*{ServerConnection class} -Objects of this class represent one bookkeeping server. Underlying -network connections are handled automatically by the library, the -class defines methods for setting connection parameters and general -queries to the \LB database. - -\subsubsection*{Constructors} -\begin{description} -\item{\verb|ServerConnection()|}\\ Creates new object and initializes -it according to the environment variables. -\end{description} - -\subsubsection*{Query parameters} -These methods are dealing with various parameters of connection to the -\LB server. The connections however are managed intrinsically by the -library itself. - -\begin{description} -\item{\verb|void setQueryServer(const std::string&)|}\\ -Set the hostname of \LB server to query. - -\item{\verb|void setQueryTimeout(int)|}\\ -Set timeout for server response. - -\item{\verb|void setX509Proxy(const std::string&)|}\\ -Use the X509 proxy stored in file named in parameter for -authentication. - -\item{\verb|void setX509Cert(const std::string&, const std::string&)|}\\ -Use X509 certificate (certificate filename in the first parameter, private -key stored in file named in the second parameter) for authentication. - -\item{\verb|std::pair getQueryServer() const|}\\ -Returns the hostname and port of the currently used \LB server. - -\item{\verb|int getQueryTimeout() const|}\\ -Returns currently used query timeout. - -\end{description} - -\subsubsection*{Queries} -\begin{description} -\item{\verb|std::vector singleTags(void)|}\\ -\item{\verb|std::vector > multiTags(void)|}\\ - -\item{\verb|std::pair getLimits(void) const|}\\ -Get the hard (first) and soft (second) limit on the number of results -(records) returned by the \LB server in one query. - -\item{\verb|void setSoftLimit(int)|}\\ -Set the soft (client side) limit on the number of query results. - -\item{ -\begin{verbatim} -void queryEvents( -const std::vector& job_cond, -const std::vector& event_cond, -std::vector&) const; -\end{verbatim} -} -Return all events satisfying conditions in the second parameter logged -by jobs satisfying conditions in the first parameter. Result is in the -last parameter. - -\item{ -\begin{verbatim} -std::string queryEventsAggregate( -const std::vector& job_cond, -const std::vector& event_cond, -enum AggOp const op, -std::string const attr) const; -\end{verbatim} -} -The same as above, but do not return particular events. The result of -aggregation operation (currently minimum, maximum and number of -results) on attribute in the fourth parameter is returned instead. - -\item{ -\begin{verbatim} -void queryJobs( -const std::vector& query, -std::vector& ids) const; -\end{verbatim} -} -Return \jobid's of jobs satisfying the query conditions in the first -parameter, result is in the second parameter. - -\item{ -\begin{verbatim} -void queryJobStates( -const std::vector& query, -int flags, -std::vector & states) const; -\end{verbatim} -} -Return states of jobs satisfying the conditions in the first -parameter. The second parameter determines the detail of information -returned on each job, result is in the last parameter. - -\item{\verb|void userJobs(std::vector &) const|}\\ -Returns \jobid's of all jobs owned by the user (as determined by the -X509 proxy or certificate) known by the \LB server. - -\item{\verb|void userJobStates(std::vector& stateList) const|}\\ -Same as above, but return job states instead of \jobid's. - -\end{description} - -\subsection*{Job} -The \emph{Job} class represent individual job in the \LB database and -provides methods for accessing it's state and events stored in the \LB -database. - -\subsubsection*{Constructors} -\begin{description} -\item{\verb|Job(void)|}\\ -Default constructor, creates empty object. - -\item{\verb|Job(const edg::workload::common::jobid::JobId &)|}\\ -Creates object representing job with given \jobid. -\end{description} - -\subsubsection*{Job properties} -\begin{description} - -\item{ -\begin{verbatim} -static const int STAT_CLASSADS; /**< various job description fields */ -static const int STAT_CHILDREN; /**< list of subjob JobId's */ -static const int STAT_CHILDSTAT; /**< apply the flags recursively to subjobs */ -\end{verbatim} -} -These constants differentiate the level of detail returned in job -status information by the \LB. - -\item{\verb|JobStatus status(int) const|}\\ -Returns \emph{JobStatus} object holding information about the job, the -requested level of detail is passed as an argument determined by the -above constants. - -\item{\verb|void log(std::vector &) const|}\\ -Fill in the passed vector argument with all events logged for this job. - -\item{\verb|const std::pair queryListener(const std::string & name) const|}\\ -Return the name and port of the listener for interactive jobs. - -\end{description} - -\subsection*{JobStatus} -The \emph{JobStatus} class represents the result of job status query -to the \LB database. - -\subsubsection*{Constructors} -All constructors are used internally by the \LB client library. - -\subsubsection*{Properties} -All information about job status are encoded as an attribute -name--value pairs, for every attribute type there is a corresponding -method to obtains that attribute's value. - -\begin{description} - -\item{ -\begin{verbatim} -int getValInt(Attr) const; -std::string getValString(Attr) const; -struct timeval getValTime(Attr) const; -const edg::workload::common::jobid::JobId getValJobId(Attr) const; -bool getValBool(Attr) const; -const std::vector getValIntList(Attr) const; -const std::vector getValStringList(Attr) const; -const std::vector getValJobStatusList(Attr) const; -\end{verbatim} -} -Access methods for various attribute types. Each method takes an -attribute symbolic name as an argument. - -\end{description} - -\subsection*{Event} -The \emph{Event} class represents one event stored in the \LB -database. All information about particular event are accessible as an -attribute name--value pairs. Every type of event (and instance of the -\emph{Event} class) defines set of mandatory and optional attributes. - - -\subsubsection*{Constructors} -Constructors are used internally by the \LB client library. - -\subsubsection*{Properties} - -\begin{description} -\item{ -\verb|const std::vector > & getAttrs(void) const;| -}\\ -Return list of defined attributes for this instance. The attributes -are given as a name--type pairs, where both name and type are given by -symbolic constants. For every supported attribute type there is a -corresponding method to obtain value of such attribute; in addition -values of enumerated types (whose values are defined as symbolic -constants and there is a \emph{edg\_wll\_ToString()} function) -can be obtained in string form by calling the \emph{getValString()} method. - -\item{ -\begin{verbatim} -int getValInt(Attr) const; -std::string getValString(Attr) const; -struct timeval getValTime(Attr) const; -const edg::workload::common::jobid::JobId getValJobId(Attr) const; -const std::string & getAttrName(Attr) const; -\end{verbatim} -} -Access methods for supported attribute types, argument is an symbolic -name of the requested attribute. - -\end{description} - -% \section{Use Cases} - -\appendix -\section{Event and Job Status Structures} -\label{a:events} -\section{Specialized Logging Calls} -\label{a:special} - -\end{document} diff --git a/org.glite.lb.client-interface/doc/api/fig/logging-arch.eps b/org.glite.lb.client-interface/doc/api/fig/logging-arch.eps deleted file mode 100644 index 12dcd35..0000000 --- a/org.glite.lb.client-interface/doc/api/fig/logging-arch.eps +++ /dev/null @@ -1,1714 +0,0 @@ -%!PS-Adobe-2.0 EPSF-2.0 -%%BoundingBox: -41 242 799 858 -%%Creator: CorelDRAW! -%%Title: logging-arch.eps -%%CreationDate: Fri May 25 08:33:21 2001 - -%%DocumentFonts: AvantGarde-Book -%%+ AvantGarde-BookOblique -%%+ AvantGarde-Demi -%%DocumentProcessColors: Black -%%EndComments -%%BeginProlog -/AutoFlatness false def -% -------------- POSTSCRIPT PROLOG FOR CORELDRAW 3.X ------ -% Copyright 1992 Corel Corporation. All rights reserved. -/wCorelDict 300 dict def wCorelDict begin/bd{bind def}bind def -/ld{load def}bd/xd{exch def}bd/_ null def -/$c 0 def/$m 0 def/$y 0 def/$k 0 def/$t 1 def -/$n _ def/$o 0 def/$fil 0 def/$bkg false def -/$C 0 def/$M 0 def/$Y 0 def/$K 0 def/$T 1 def -/$N _ def/$O 0 def/$PF false def/$ctm matrix currentmatrix def -/$ptm matrix def/$ttm matrix def/$stm matrix def -/$fst 128 def/$pad 0 def/$rox 0 def/$roy 0 def -currentscreen/@dsp xd/$dsp/@dsp def/$dsa xd -/$dsf xd/$sdf false def/$SDF false def/$Scra 0.0 def -/$sv 0 def/@cp/closepath ld/@gs/gsave ld/@gr/grestore ld -/@np/newpath ld/@sv{/$sv save def}bd/@rs{$sv restore}bd -/@ss{exch $Scra add exch load setscreen}bd -AutoFlatness{/$cpx ([Error: PathTooComplex; OffendingCommand: AnyPaintingOperator]\n) def -/@err1{$cpx print flush newpath}bd/@ifl{dup currentflat exch sub 10 gt -{@err1 exit}{currentflat 2 add setflat}ifelse}bd -/@fill/fill ld/fill{currentflat{{@fill}stopped{@ifl}{exit}ifelse -}bind loop setflat}bd/@eofill/eofill ld/eofill{currentflat{{@eofill} -stopped{@ifl}{exit}ifelse}bind loop setflat}bd -/@clip/clip ld/clip{currentflat{{@clip}stopped{initclip @ifl}{exit -}ifelse}bind loop setflat}bd/@eoclip/eoclip ld -/eoclip{currentflat{{@eoclip}stopped{initclip @ifl}{exit}ifelse -}bind loop setflat}bd/@stroke/stroke ld/stroke{currentflat{{@stroke} -stopped{@ifl}{exit}ifelse}bind loop setflat}bd}if -/InRange{3 -1 roll 2 copy le{pop}{exch pop}ifelse -2 copy ge{pop}{exch pop}ifelse}bd/wDstChck{2 1 roll dup 3 -1 roll -eq{1 add}if}bd/@dot{dup mul exch dup mul add 1 exch sub 2 div}bd -/@lin{exch pop abs 1 exch sub}bd/@MN{2 copy le{pop}{exch pop}ifelse}bd -/setcmykcolor where{pop}{/setcmykcolor{4 1 roll -3{3 index add 1 @MN 1 exch sub 3 1 roll}repeat -setrgbcolor pop}bd}ifelse/setoverprint{/$op xd}bd -/currentoverprint{$op}bd/setsepcolor{1 exch sub setgray}bd -/checksepcolor{1 exch sub dup setgray 1 eq exch 1 eq and not}bd -/setprocesscolor{ColorSeparationMode 0 eq{setcmykcolor}{ -0 4 $ink sub index exch pop 5 1 roll 4{pop}repeat -setsepcolor}ifelse}bd/findcmykcustomcolor{5 array astore}bd -/setcustomcolor where{pop}{/setcustomcolor{ColorSeparationMode 0 eq{ -exch aload pop pop 4{4 index mul 4 1 roll}repeat -5 -1 roll pop setcmykcolor}{exch aload pop -CurrentInkName eq{4 index}{0}ifelse 6 1 roll -5{pop}repeat setsepcolor}ifelse}bd}ifelse/colorimage where{pop}{ -/colorimage{pop pop pop pop pop{currentfile $dat readhexstring pop pop} -repeat pop}bd}ifelse/@tc{dup 1 ge{pop}{4{dup -6 -1 roll mul exch}repeat pop}ifelse}bd/@scc{1 eq setoverprint -dup _ eq{pop setprocesscolor pop}{findcmykcustomcolor -exch setcustomcolor}ifelse ColorSeparationMode 0 eq{true}{ -currentgray 1 eq currentoverprint and not}ifelse}bd -/@sft{/$tx $tllx $pxf add dup $tllx gt{$pwid sub}if def -/$ty $tury $pyf sub dup $tury lt{$phei add}if def}bd -/@stb{pathbbox/$ury xd/$urx xd/$lly xd/$llx xd}bd -/@ep{{cvx exec}forall}bd/@tp{@sv/$in true def -2 copy dup $lly le{/$in false def}if $phei sub $ury ge{/$in false def}if -dup $urx ge{/$in false def}if $pwid add $llx le{/$in false def}if -$in{@np 2 copy m $pwid 0 rl 0 $phei neg rl $pwid neg 0 rl -0 $phei rl clip @np $pn cvlit load aload pop -7 -1 roll 5 index sub 7 -1 roll 3 index sub translate -/$ctm matrix currentmatrix def @ep pop pop pop pop}{pop pop}ifelse -@rs}bd/@th{@sft 0 1 $tly 1 sub{dup $psx mul $tx add{ -dup $llx gt{$pwid sub}{exit}ifelse}loop exch $phei mul $ty exch sub -0 1 $tlx 1 sub{$pwid mul 3 copy 3 -1 roll add exch -@tp pop}for pop pop}for}bd/@tv{@sft 0 1 $tlx 1 sub{dup $pwid mul $tx add -exch $psy mul $ty exch sub{dup $ury lt{$phei add}{exit}ifelse}loop -0 1 $tly 1 sub{$phei mul 3 copy sub @tp pop}for -pop pop}for}bd/@pf{@gs $ctm setmatrix $pm concat -@stb eoclip Bburx Bbury $pm itransform/$tury xd/$turx xd -Bbllx Bblly $pm itransform/$tlly xd/$tllx xd -/$wid $turx $tllx sub def/$hei $tury $tlly sub def -@gs $vectpat{1 0 0 0 0 _ $o @scc{eofill}if}{$t $c $m $y $k $n $o @scc{ -$tllx $tlly translate $wid $hei scale <00> 8 1 false [ 8 0 0 1 0 0 ]{}imagemask -/$bkg true def}if}ifelse @gr $wid 0 gt $hei 0 gt and{ -$pn cvlit load aload pop/$pd xd 3 -1 roll sub/$phei xd -exch sub/$pwid xd/$tlx $wid $pwid div ceiling 1 add def -/$tly $hei $phei div ceiling 1 add def $psx 0 eq{@tv}{@th}ifelse}if -@gr @np/$bkg false def}bd/@dlt{ColorSeparationMode 0 eq{ -/$dc $toc $tot mul $frc $frt mul dup/$c xd sub $fst 1 sub div def -/$dm $tom $tot mul $frm $frt mul dup/$m xd sub $fst 1 sub div def -/$dy $toy $tot mul $fry $frt mul dup/$y xd sub $fst 1 sub div def -/$dk $tok $tot mul $frk $frt mul dup/$k xd sub $fst 1 sub div def -true}{$frt $frc $frm $fry $frk $frn $o @scc -dup{/$frk 1 currentgray sub def}{/$frk 0 def}ifelse -$tot $toc $tom $toy $tok $ton $o @scc dup{/$tok 1 currentgray sub def}{ -/$tok 0 def}ifelse or dup{/$c 0 def/$m 0 def/$y 0 def/$k $frk def -/$dc 0 def/$dm 0 def/$dy 0 def/$dk $tok $frk sub $fst 1 sub div def}if -}ifelse}bd/@ftl{1 index 4 index sub dup $pad mul dup/$pdw xd -2 mul sub $fst div/$wid xd 2 index sub/$hei xd -pop translate $c $m $y $k 4 copy ColorSeparationMode 0 ne -{1 exch sub setgray pop pop pop}{setcmykcolor}ifelse -0 0 moveto 0 $hei lineto $pdw $hei lineto $pdw 0 lineto 0 0 lineto fill -$pdw 0 translate $fst{4 copy ColorSeparationMode 0 ne -{1 exch sub setgray pop pop pop}{setcmykcolor}ifelse -0 0 moveto 0 $hei lineto $wid $hei lineto $wid 0 lineto 0 0 lineto fill -$wid 0 translate $dk add 4 1 roll $dy add 4 1 roll -$dm add 4 1 roll $dc add 4 1 roll}repeat $dk sub 4 1 roll -$dy sub 4 1 roll $dm sub 4 1 roll $dc sub 4 1 roll -ColorSeparationMode 0 ne{1 exch sub setgray pop pop pop} -{setcmykcolor}ifelse 0 0 moveto 0 $hei lineto $pdw $hei lineto $pdw 0 lineto 0 0 lineto fill -}bd/@ftr{1 index 4 index sub dup $rox mul/$row xd -2 div 1 index 4 index sub dup $roy mul/$roh xd -2 div 2 copy dup mul exch dup mul add sqrt -$row dup mul $roh dup mul add sqrt add dup/$hei xd $fst div/$wid xd -4 index add $roh add exch 5 index add $row add -exch translate pop pop pop pop currentflat dup 5 mul setflat -$c $m $y $k 4 copy ColorSeparationMode 0 ne -{1 exch sub setgray pop pop pop}{setcmykcolor}ifelse -$wid 0 moveto 0 0 $hei 0 360 arc fill 1.0 $pad 2 mul sub dup scale -$fst{4 copy ColorSeparationMode 0 ne{1 exch sub setgray pop pop pop} -{setcmykcolor}ifelse $wid 0 moveto 0 0 $hei 0 360 arc fill -/$hei $hei $wid sub def $dk add 4 1 roll $dy add 4 1 roll -$dm add 4 1 roll $dc add 4 1 roll}repeat pop pop pop pop -setflat}bd/@ff{@gs @dlt{$ctm setmatrix eoclip -newpath Bbllx Bblly moveto Bbllx Bbury lineto -Bburx Bbury lineto Bburx Bblly lineto $fan rotate -pathbbox newpath $fty 1 eq{@ftr}{@ftl}ifelse}if -@gr @np}bd/@Pf{@sv ColorSeparationMode 0 eq $ink 3 eq or{0 J 0 j [] 0 d -$t $c $m $y $k $n $o @scc pop $ctm setmatrix -72 1000 div dup matrix scale dup concat dup Bburx exch Bbury exch itransform -ceiling cvi/Bbury xd ceiling cvi/Bburx xd Bbllx exch Bblly exch itransform -floor cvi/Bblly xd floor cvi/Bbllx xd $Prm aload pop -$Psn load exec}{1 setgray eofill}ifelse @rs -@np}bd/g{1 exch sub/$k xd/$c 0 def/$m 0 def/$y 0 def/$t 1 def/$n _ def/$fil 0 def -}bd/G{1 exch sub/$K xd/$C 0 def/$M 0 def/$Y 0 def/$T 1 def/$N _ def}bd -/k{/$k xd/$y xd/$m xd/$c xd/$t 1 def/$n _ def/$fil 0 def}bd -/K{/$K xd/$Y xd/$M xd/$C xd/$T 1 def/$N _ def}bd -/x{/$t xd/$n xd/$k xd/$y xd/$m xd/$c xd/$fil 0 def}bd -/X{/$T xd/$N xd/$K xd/$Y xd/$M xd/$C xd}bd -/d/setdash ld/i{dup 0 ne{setflat}{pop}ifelse}bd -/j/setlinejoin ld/J/setlinecap ld/M/setmiterlimit ld -/w/setlinewidth ld/O{/$o xd}bd/R{/$O xd}bd -/c/curveto ld/C/c ld/v{4 -2 roll 2 copy 6 -2 roll curveto}bd -/V/v ld/y{2 copy curveto}bd/Y/y ld/l/lineto ld -/L/l ld/rl/rlineto ld/m/moveto ld/n/newpath ld -/N/newpath ld/F{matrix currentmatrix $sdf{$scf $sca $scp @ss}if -$fil 1 eq{@pf}{$fil 2 eq{@ff}{$fil 3 eq{@Pf}{$t $c $m $y $k $n $o @scc -{eofill}{@np}ifelse}ifelse}ifelse}ifelse $sdf{$dsf $dsa $dsp @ss}if -setmatrix}bd/f{@cp F}bd/S{matrix currentmatrix -$ctm setmatrix $SDF{$SCF $SCA $SCP @ss}if $T $C $M $Y $K $N $O @scc{ -matrix currentmatrix $ptm concat stroke setmatrix}{@np}ifelse -$SDF{$dsf $dsa $dsp @ss}if setmatrix}bd/s{@cp -S}bd/B{@gs F @gr S}bd/b{@cp B}bd/W{eoclip}bd -/p{/$pm xd 7{pop}repeat/$pyf xd/$pxf xd/$pn xd -/$fil 1 def}bd/P{11{pop}repeat}bd/u{}bd/U{}bd -/A{pop}bd/q/@gs ld/Q/@gr ld/E{5 array astore -exch cvlit exch def}bd/`{}bd/~{}bd/@{}bd/&{}bd -/CorelDrawReencodeVect [ -16#80/grave/circumflex/tilde/dotlessi/florin/quotedblleft/quotedblright/guilsinglleft -16#88/guilsinglright/fi/fl/dagger/daggerdbl/endash/periodcentered/breve -16#90/quotedblbase/ellipsis/perthousand/trademark/Pt/fractionbar -16#98/divide -16#a1/exclamdown/cent/sterling/currency/yen/bar/section -16#a8/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/emdash/registered/overbar -16#b0/ring/plusminus/twosuperior/threesuperior/acute/mu/paragraph/bullet -16#b8/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown -16#c0/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla -16#c8/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis -16#d0/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/OE -16#d8/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls -16#e0/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla -16#e8/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis -16#f0/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/oe -16#f8/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis ] def -/@cc{currentfile $dat readhexstring pop}bd -/@sm{/$ctm $ctm currentmatrix def}bd/@E{/Bbury xd/Bburx xd -/Bblly xd/Bbllx xd}bd/@c{@cp}bd/@p{/$fil 1 def -1 eq/$vectpat xd/$pm xd/$psy xd/$psx xd/$pyf xd/$pxf xd -/$pn xd}bd/@P{/$fil 3 def/$Psn xd array astore -/$Prm xd}bd/@k{/$fil 2 def/$roy xd/$rox xd/$pad xd -/$fty xd/$fan xd $fty 1 eq{/$fan 0 def}if/$tok xd/$toy xd/$tom xd/$toc xd -/$frk xd/$fry xd/$frm xd/$frc xd/$frn _ def/$frt 1 def/$ton _ def/$tot 1 def -}bd/@x{/$fil 2 def/$roy xd/$rox xd/$pad xd -/$fty xd/$fan xd/$tot xd/$ton xd/$tok xd/$toy xd/$tom xd/$toc xd -/$frt xd/$frn xd/$frk xd/$fry xd/$frm xd/$frc xd}bd -/@ii{concat 3 index 3 index m 3 index 1 index l -2 copy l 1 index 3 index l 3 index 3 index l -clip pop pop pop pop}bd/@i{@sm @gs @ii 6 index 1 ne{/$frg true def -pop pop}{1 eq{$T $C $M $Y $K $N $O @scc/$frg xd}{/$frg false def -}ifelse 1 eq{@gs $ctm setmatrix $t $c $m $y $k $n $o @scc{eofill}if -@gr}if}ifelse/$frg $frg $bkg or def @np/$ury xd/$urx xd/$lly xd/$llx xd -/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul 8 div ceiling cvi string def -$frg{$SDF{$SCF $SCA $SCP @ss}if $llx $lly translate -$urx $llx sub $ury $lly sub scale $wid $hei abs -$bts 1 eq{false}{$bts}ifelse [ $wid 0 0 $hei neg 0 -$hei 0 gt{$hei}{0}ifelse]/@cc load $bts 1 eq{imagemask}{image}ifelse -$SDF{$dsf $dsa $dsp @ss}if}{$hei abs{@cc pop}repeat}ifelse -@gr $ctm setmatrix}def/@M{@sv}bd/@N{/@cc{}def -1 eq{12 -1 roll neg 12 1 roll @I}{13 -1 roll neg 13 1 roll -@i}ifelse @rs}bd/@I{@sm @gs @ii @np/$ury xd/$urx xd/$lly xd/$llx xd -/$ncl xd/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul $ncl mul 8 div ceiling cvi string def -$llx $lly translate $urx $llx sub $ury $lly sub scale -$wid $hei abs $bts [ $wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse] -/@cc load false $ncl colorimage @gr $ctm setmatrix}bd -/z{exch findfont exch scalefont setfont}bd -/ZB{9 dict dup begin 4 1 roll/FontType 3 def -/FontMatrix xd/FontBBox xd/Encoding 256 array def -0 1 255{Encoding exch/.notdef put}for/CharStrings 256 dict def -CharStrings/.notdef{}put/Metrics 256 dict def -Metrics/.notdef 3 -1 roll put/BuildChar{exch -dup/$char exch/Encoding get 3 index get def -dup/Metrics get $char get aload pop setcachedevice -begin Encoding exch get CharStrings exch get -end exec}def end definefont pop}bd/ZBAddChar{findfont begin -dup 4 1 roll dup 6 1 roll Encoding 3 1 roll put -CharStrings 3 1 roll put Metrics 3 1 roll put -end}bd/Z{findfont dup maxlength 2 add dict exch -dup{1 index/FID ne{3 index 3 1 roll put}{pop pop}ifelse}forall -pop dup dup/Encoding get 256 array copy dup/$fe xd -/Encoding exch put dup/Fontname 3 index put -3 -1 roll dup length 0 ne{0 exch{dup type 0 type eq{exch pop}{ -$fe exch 2 index exch put 1 add}ifelse}forall -pop}if dup 256 dict dup/$met xd/Metrics exch put -dup/FontMatrix get 0 get 1000 mul 1 exch div -3 index length 256 eq{0 1 255{dup $fe exch get -dup/.notdef eq{pop pop}{5 index 3 -1 roll get -2 index mul $met 3 1 roll put}ifelse}for}if -pop definefont pop pop}bd/@ftx{{currentpoint 3 -1 roll -(0) dup 3 -1 roll 0 exch put dup @gs true charpath -$ctm setmatrix @@txt @gr @np stringwidth pop 3 -1 roll add exch moveto -}forall}bd/@ft{matrix currentmatrix exch $sdf{$scf $sca $scp @ss}if -$fil 1 eq{/@@txt/@pf ld @ftx}{$fil 2 eq{/@@txt/@ff ld @ftx}{$fil 3 eq -{/@@txt/@Pf ld @ftx}{$t $c $m $y $k $n $o @scc{show}{pop}ifelse}ifelse -}ifelse}ifelse $sdf{$dsf $dsa $dsp @ss}if setmatrix}bd -/@st{matrix currentmatrix exch $SDF{$SCF $SCA $SCP @ss}if -$T $C $M $Y $K $N $O @scc{{currentpoint 3 -1 roll -(0) dup 3 -1 roll 0 exch put dup @gs true charpath -$ctm setmatrix $ptm concat stroke @gr @np stringwidth pop 3 -1 roll add exch moveto -}forall}{pop}ifelse $SDF{$dsf $dsa $dsp @ss}if -setmatrix}bd/@te{@ft}bd/@tr{@st}bd/@ta{dup -@gs @ft @gr @st}bd/@t@a{dup @gs @st @gr @ft}bd -/@tm{/$textsave save def @sm concat}bd/e{/t{@te}def}bd -/r{/t{@tr}def}bd/o{/t{pop}def}bd/a{/t{@ta}def}bd -/@a{/t{@t@a}def}bd/t{@te}def/T{@np $ctm setmatrix -/$ttm matrix def $textsave restore}bd/@t{/$stm $stm currentmatrix def -3 1 roll moveto $ttm concat t $stm setmatrix}def -/@n{/$ttm exch matrix rotate def}bd/@s{}bd -/@l{}bd/@B{@gs S @gr F}bd/@b{@cp @B}bd/@w{matrix rotate/$ptm xd -matrix scale $ptm dup concatmatrix/$ptm xd -1 eq{$ptm exch dup concatmatrix/$ptm xd}if -1 w}bd/@g{1 eq dup/$sdf xd{/$scp xd/$sca xd -/$scf xd}if}bd/@G{1 eq dup/$SDF xd{/$SCP xd -/$SCA xd/$SCF xd}if}bd/@D{3 copy @ss/$dsp xd -/$dsa xd/$dsf xd}bd/@j{@sv @np}bind def/@J{@rs}bind def -/@sep{/ColorSeparationMode where{pop}{/ColorSeparationMode 0 def -/CurrentInkName (Composite) def}ifelse ColorSeparationMode 0 eq{ -/CurrentInkName (Composite) def}if/CurrentInkName where{pop}{ -/CurrentInkName (Composite) def}ifelse CurrentInkName (Composite) eq -{/$ink -1 def}{CurrentInkName (Cyan) eq{/$ink 0 def}{ -CurrentInkName (Magenta) eq{/$ink 1 def}{CurrentInkName (Yellow) eq -{/$ink 2 def}{CurrentInkName (Black) eq{/$ink 3 def}{/$ink 4 def -}ifelse}ifelse}ifelse}ifelse}ifelse}bd @sep -/@whi{@gs -72000 dup moveto -72000 72000 lineto -72000 dup lineto 72000 -72000 lineto closepath 1 setgray fill -@gr}bd/@neg{ [{1 exch sub}/exec cvx currenttransfer/exec cvx] cvx settransfer -@whi}bd/@reg{[] 0 d 0 setgray .3 setlinewidth -2 copy 5.4 0 360 arc closepath 2 copy moveto 9 0 rlineto -2 copy moveto -9 0 rlineto 2 copy moveto 0 9 rlineto -moveto 0 -9 rlineto stroke}bd/leftbracket{(\050)}def -/rightbracket{(\051)}def - -%%EndProlog -%%BeginSetup -11.4737 setmiterlimit -1.00 setflat -/$fst 128 def -[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 277 -295 309 555 555 775 758 352 369 369 426 605 277 332 277 438 555 -555 555 555 555 555 555 555 555 555 277 277 605 605 605 592 867 -740 574 813 744 535 484 871 684 227 482 592 463 920 740 869 592 -871 607 498 426 654 701 961 609 592 480 352 605 352 605 500 352 -684 682 646 686 650 314 674 609 199 203 502 199 938 609 654 682 -682 301 389 340 607 555 830 480 535 426 352 672 352 605 0 379 -502 439 199 555 502 484 252 252 486 484 553 553 500 605 453 502 -1000 1174 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 -295 555 555 555 555 387 615 369 746 369 426 605 1000 746 0 332 -605 332 332 375 607 564 277 324 332 369 426 830 830 830 592 740 -740 740 740 740 740 992 813 535 535 535 535 227 227 227 227 789 -740 869 869 869 869 869 1193 867 654 654 654 654 592 592 555 684 -684 684 684 684 684 1156 646 650 650 650 650 199 199 199 199 654 -609 654 654 654 654 654 1137 652 607 607 607 607 535 682 535 ] -CorelDrawReencodeVect /_AvantGarde-Book /AvantGarde-Book Z -[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 277 -295 309 555 555 775 758 352 369 369 426 605 277 332 277 438 555 -555 555 555 555 555 555 555 555 555 277 277 605 605 605 592 867 -740 574 813 744 535 484 871 684 227 482 592 463 920 740 869 592 -871 607 498 426 654 701 961 609 592 480 352 605 352 605 500 352 -684 682 646 686 650 314 674 609 199 203 502 199 938 609 654 682 -682 301 389 340 607 555 830 480 535 426 352 672 352 605 0 379 -502 439 199 555 502 484 252 252 486 484 553 553 500 605 453 502 -1000 1174 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 -295 555 555 555 555 0 615 369 746 369 426 605 1000 746 0 332 -605 332 332 375 607 564 277 324 332 369 426 830 830 830 592 740 -740 740 740 740 740 992 813 535 535 535 535 227 227 227 227 789 -740 869 869 869 869 869 1193 867 654 654 654 654 592 592 555 684 -684 684 684 684 684 1156 646 650 650 650 650 199 199 199 199 654 -609 654 654 654 654 654 1137 652 607 607 607 607 535 682 535 ] -CorelDrawReencodeVect /_AvantGarde-BookOblique /AvantGarde-BookOblique Z -[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 279 -279 359 561 561 859 680 279 381 381 439 600 279 420 279 461 561 -561 561 561 561 561 561 561 561 561 279 279 600 600 600 561 740 -740 580 779 699 520 480 840 680 279 480 619 439 900 740 840 561 -840 580 520 420 641 699 900 680 619 500 320 641 320 600 500 279 -660 660 641 660 641 279 660 600 240 260 580 240 939 600 641 660 -660 320 439 301 600 561 801 561 580 461 340 600 340 600 0 420 -539 480 240 561 480 480 240 240 520 520 561 561 500 600 480 480 -1000 1279 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 -279 561 561 561 561 537 561 500 740 359 461 600 1000 740 0 359 -600 336 336 420 576 600 279 340 336 359 461 840 840 840 561 740 -740 740 740 740 740 900 779 520 520 520 520 279 279 279 279 742 -740 840 840 840 840 840 1061 840 641 641 641 641 619 561 600 660 -660 660 660 660 660 1080 641 641 641 641 641 240 240 240 240 641 -600 641 641 641 641 641 1080 660 600 600 600 600 580 660 580 ] -CorelDrawReencodeVect /_AvantGarde-Demi /AvantGarde-Demi Z - -%%EndSetup -@sv -/$ctm matrix currentmatrix def -@sv -%%Note: Object -486.00 729.00 648.00 801.00 @E - 0 O 0 @g -0.00 0.00 0.00 0.50 k -%%RECT 162.000 -72.000 0.000 -486.00 801.00 m -648.00 801.00 L -648.00 729.00 L -486.00 729.00 L -486.00 801.00 L -@c -F -%%Note: Object -495.00 738.00 657.00 810.00 @E - 0 O 0 @g -0.00 0.00 0.00 0.50 k -%%RECT 162.000 -72.000 0.000 -495.00 810.00 m -657.00 810.00 L -657.00 738.00 L -495.00 738.00 L -495.00 810.00 L -@c -F -%%Note: Object -504.00 747.00 666.00 819.00 @E - 0 O 0 @g -0.00 0.00 0.00 0.50 k -%%RECT 162.000 -72.000 0.000 -504.00 819.00 m -666.00 819.00 L -666.00 747.00 L -504.00 747.00 L -504.00 819.00 L -@c -F -%%Note: Object -495.00 756.00 657.00 828.00 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w - 0 O 0 @g -0.00 0.00 0.00 0.00 k -%%RECT 162.000 -72.000 0.000 -495.00 828.00 m -657.00 828.00 L -657.00 756.00 L -495.00 756.00 L -495.00 828.00 L -@c -B -%%Note: Object -486.00 747.00 648.00 819.00 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w - 0 O 0 @g -0.00 0.00 0.00 0.00 k -%%RECT 162.000 -72.000 0.000 -486.00 819.00 m -648.00 819.00 L -648.00 747.00 L -486.00 747.00 L -486.00 819.00 L -@c -B -%%Note: Object -54.00 603.00 63.00 782.86 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w - 0 O 0 @g -0.00 0.00 0.00 0.70 k -%%RECT 9.000 -135.000 0.000 -54.00 782.86 m -63.00 782.86 L -63.00 603.00 L -54.00 603.00 L -54.00 782.86 L -@c -B -%%Note: Object -702.00 513.07 710.86 828.00 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w - 0 O 0 @g -0.00 0.00 0.00 0.70 k -%%RECT 9.000 -135.000 0.000 -702.00 828.00 m -710.86 828.00 L -710.86 513.07 L -702.00 513.07 L -702.00 828.00 L -@c -B -%%Note: Object -63.00 692.86 108.00 693.14 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 2.16 2.16 0.00 @w -%%CURV 2 -63.00 693.00 m -100.44 693.00 L -S -@j -0.00 0.00 0.00 1.00 K -0.00 0.00 0.00 1.00 k -0 @g -0 @G -[] 0 d 0 J 0 j -0 R 0 O 0 2.16 2.16 0 @w -108.00 693.00 m -92.95 699.41 L -95.11 695.09 95.11 690.91 92.95 686.59 C -108.00 693.00 L -f -@J -%%Note: Object -113.40 639.07 224.93 738.00 @E - 0 O 0 @g -0.00 0.00 0.00 0.50 k -%%RECT 81.000 -63.000 0.000 -113.40 738.00 m -224.93 738.00 L -224.93 639.07 L -113.40 639.07 L -113.40 738.00 L -@c -F -%%Note: Object -108.00 648.07 219.24 747.00 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w - 0 O 0 @g -0.00 0.00 0.00 0.00 k -%%RECT 81.000 -63.000 0.000 -108.00 747.00 m -219.24 747.00 L -219.24 648.07 L -108.00 648.07 L -108.00 747.00 L -@c -B -%%Note: Object -123.98 697.68 209.16 712.58 @E -%%TEXT -[0.07199 0.00000 0.00000 0.07199 125 702] @tm - 0 O 0 @g -0.00 0.00 0.00 1.00 k -e -/_AvantGarde-Book 194.00 z -0 0 (local logger) @t -T -%%Note: Object -284.40 639.07 395.93 738.00 @E - 0 O 0 @g -0.00 0.00 0.00 0.50 k -%%RECT 81.000 -63.000 0.000 -284.40 738.00 m -395.93 738.00 L -395.93 639.07 L -284.40 639.07 L -284.40 738.00 L -@c -F -%%Note: Object -275.40 648.00 386.64 746.93 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w - 0 O 0 @g -0.00 0.00 0.00 0.00 k -%%RECT 81.000 -63.000 0.000 -275.40 746.93 m -386.64 746.93 L -386.64 648.00 L -275.40 648.00 L -275.40 746.93 L -@c -B -%%Note: Object -291.46 697.61 373.10 712.51 @E -%%TEXT -[0.07199 0.00000 0.00000 0.07199 293 701] @tm - 0 O 0 @g -0.00 0.00 0.00 1.00 k -e -/_AvantGarde-Book 194.00 z -0 0 (inter-logger) @t -T -%%Note: Object -216.00 585.00 270.00 603.00 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w -%%ELLI 54.000 -18.000 270.000 270.000 0 -243.00 603.00 m -257.83 603.00 270.00 598.97 270.00 594.00 c -270.00 589.03 257.83 585.00 243.00 585.00 c -228.17 585.00 216.00 589.03 216.00 594.00 c -216.00 598.97 228.17 603.00 243.00 603.00 c -@c -S -%%Note: Object -216.00 531.00 270.00 549.00 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w -%%ELLI 54.000 -18.000 270.000 270.000 0 -243.00 549.00 m -257.83 549.00 270.00 544.97 270.00 540.00 c -270.00 535.03 257.83 531.00 243.00 531.00 c -228.17 531.00 216.00 535.03 216.00 540.00 c -216.00 544.97 228.17 549.00 243.00 549.00 c -@c -S -%%Note: Object -215.86 540.00 216.14 594.00 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w -%%CURV 2 -216.00 594.00 m -216.00 540.00 L -S -%%Note: Object -269.86 540.00 270.14 594.00 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w -%%CURV 2 -270.00 594.00 m -270.00 540.00 L -S -%%Note: Object -171.00 603.00 225.00 648.00 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 2.16 2.16 0.00 @w -%%CURV 2 -171.00 648.00 m -219.60 607.54 L -S -@j -0.00 0.00 0.00 1.00 K -0.00 0.00 0.00 1.00 k -0 @g -0 @G -[] 0 d 0 J 0 j -0 R 0 O 0 2.02 2.02 0 @w -225.00 603.00 m -218.02 616.68 L -216.94 612.29 214.49 609.26 210.38 607.46 C -225.00 603.00 L -f -@J -%%Note: Object -261.00 603.00 324.00 648.00 @E -0 J 0 j [10 5 ] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 2.16 2.16 0.00 @w -%%CURV 2 -318.10 643.75 m -261.00 603.00 L -S -@j -0.00 0.00 0.00 1.00 K -0.00 0.00 0.00 1.00 k -0 @g -0 @G -[] 0 d 0 J 0 j -0 R 0 O 0 2.09 2.09 0 @w -324.00 648.00 m -315.72 634.46 L -315.00 639.00 312.70 642.46 308.52 644.69 C -324.00 648.00 L -f -@J -%%Note: Object -387.00 693.00 468.00 774.00 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 2.16 2.16 0.00 @w -%%CURV 2 -387.00 693.00 m -463.03 769.03 L -S -@j -0.00 0.00 0.00 1.00 K -0.00 0.00 0.00 1.00 k -0 @g -0 @G -[] 0 d 0 J 0 j -0 R 0 O 0 2.02 2.02 0 @w -468.00 774.00 m -453.74 768.31 L -458.06 766.87 460.94 764.14 462.38 759.82 C -468.00 774.00 L -f -@J -%%Note: Object -531.14 684.00 585.14 702.00 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w -%%ELLI 54.000 -18.000 270.000 270.000 0 -558.14 702.00 m -572.98 702.00 585.14 697.97 585.14 693.00 c -585.14 688.03 572.98 684.00 558.14 684.00 c -543.31 684.00 531.14 688.03 531.14 693.00 c -531.14 697.97 543.31 702.00 558.14 702.00 c -@c -S -%%Note: Object -531.14 630.00 585.14 648.00 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w -%%ELLI 54.000 -18.000 270.000 270.000 0 -558.14 648.00 m -572.98 648.00 585.14 643.97 585.14 639.00 c -585.14 634.03 572.98 630.00 558.14 630.00 c -543.31 630.00 531.14 634.03 531.14 639.00 c -531.14 643.97 543.31 648.00 558.14 648.00 c -@c -S -%%Note: Object -531.00 639.00 531.29 693.00 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w -%%CURV 2 -531.14 693.00 m -531.14 639.00 L -S -%%Note: Object -585.00 639.00 585.29 693.00 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w -%%CURV 2 -585.14 693.00 m -585.14 639.00 L -S -%%Note: Object -477.00 738.00 639.00 810.00 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w - 0 O 0 @g -0.00 0.00 0.00 0.00 k -%%RECT 162.000 -72.000 0.000 -477.00 810.00 m -639.00 810.00 L -639.00 738.00 L -477.00 738.00 L -477.00 810.00 L -@c -B -%%Note: Object -510.77 759.24 604.30 784.87 @E -%%TEXT -[0.07199 0.00000 0.00000 0.07199 558 773] @tm - 0 O 0 @g -0.00 0.00 0.00 1.00 k -e -/_AvantGarde-Book 194.00 z --626 0 (bookkeeping) @t --275 -194 (server) @t -T -%%Note: Object -557.86 702.00 558.14 738.00 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 2.16 2.16 0.00 @w -%%CURV 2 -558.00 730.44 m -558.00 709.56 L -S -@j -0.00 0.00 0.00 1.00 K -0.00 0.00 0.00 1.00 k -0 @g -0 @G -[] 0 d 0 J 0 j -0 R 0 O 0 2.16 2.16 0 @w -558.00 738.00 m -564.41 722.95 L -560.09 725.11 555.91 725.11 551.59 722.95 C -558.00 738.00 L -f -@J -@j -0.00 0.00 0.00 1.00 K -0.00 0.00 0.00 1.00 k -0 @g -0 @G -[] 0 d 0 J 0 j -0 R 0 O 0 2.16 2.16 0 @w -558.00 702.00 m -564.41 717.12 L -560.09 714.96 555.91 714.96 551.59 717.12 C -558.00 702.00 L -f -@J -%%Note: Object -592.92 662.26 639.07 675.14 @E -%%TEXT -[0.07199 0.00000 0.00000 0.07199 594 666] @tm - 0 O 0 @g -0.00 0.00 0.00 1.00 k -e -/_AvantGarde-Book 167.00 z -0 0 (storage) @t -T -%%Note: Object -531.14 468.00 585.14 486.00 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w -%%ELLI 54.000 -18.000 270.000 270.000 0 -558.14 486.00 m -572.98 486.00 585.14 481.97 585.14 477.00 c -585.14 472.03 572.98 468.00 558.14 468.00 c -543.31 468.00 531.14 472.03 531.14 477.00 c -531.14 481.97 543.31 486.00 558.14 486.00 c -@c -S -%%Note: Object -531.14 414.00 585.14 432.00 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w -%%ELLI 54.000 -18.000 270.000 270.000 0 -558.14 432.00 m -572.98 432.00 585.14 427.97 585.14 423.00 c -585.14 418.03 572.98 414.00 558.14 414.00 c -543.31 414.00 531.14 418.03 531.14 423.00 c -531.14 427.97 543.31 432.00 558.14 432.00 c -@c -S -%%Note: Object -531.00 423.00 531.29 477.00 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w -%%CURV 2 -531.14 477.00 m -531.14 423.00 L -S -%%Note: Object -585.00 423.00 585.29 477.00 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w -%%CURV 2 -585.14 477.00 m -585.14 423.00 L -S -%%Note: Object -486.00 513.00 648.00 585.00 @E - 0 O 0 @g -0.00 0.00 0.00 0.50 k -%%RECT 162.000 -72.000 0.000 -486.00 585.00 m -648.00 585.00 L -648.00 513.00 L -486.00 513.00 L -486.00 585.00 L -@c -F -%%Note: Object -477.00 522.00 639.00 594.00 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w - 0 O 0 @g -0.00 0.00 0.00 0.00 k -%%RECT 162.000 -72.000 0.000 -477.00 594.00 m -639.00 594.00 L -639.00 522.00 L -477.00 522.00 L -477.00 594.00 L -@c -B -%%Note: Object -531.00 543.24 584.06 568.87 @E -%%TEXT -[0.07199 0.00000 0.00000 0.07199 558 558] @tm - 0 O 0 @g -0.00 0.00 0.00 1.00 k -e -/_AvantGarde-Book 194.00 z --358 0 (logging) @t --275 -194 (server) @t -T -%%Note: Object -557.86 486.00 558.14 522.00 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 2.16 2.16 0.00 @w -%%CURV 2 -558.00 514.44 m -558.00 493.56 L -S -@j -0.00 0.00 0.00 1.00 K -0.00 0.00 0.00 1.00 k -0 @g -0 @G -[] 0 d 0 J 0 j -0 R 0 O 0 2.16 2.16 0 @w -558.00 522.00 m -564.41 506.95 L -560.09 509.11 555.91 509.11 551.59 506.95 C -558.00 522.00 L -f -@J -@j -0.00 0.00 0.00 1.00 K -0.00 0.00 0.00 1.00 k -0 @g -0 @G -[] 0 d 0 J 0 j -0 R 0 O 0 2.16 2.16 0 @w -558.00 486.00 m -564.41 501.12 L -560.09 498.96 555.91 498.96 551.59 501.12 C -558.00 486.00 L -f -@J -%%Note: Object -592.92 446.26 639.07 459.14 @E -%%TEXT -[0.07199 0.00000 0.00000 0.07199 594 449] @tm - 0 O 0 @g -0.00 0.00 0.00 1.00 k -e -/_AvantGarde-Book 167.00 z -0 0 (storage) @t -T -%%Note: Object -278.35 568.94 351.50 594.43 @E -%%TEXT -[0.07199 0.00000 0.00000 0.07199 315 585] @tm - 0 O 0 @g -0.00 0.00 0.00 1.00 k -e -/_AvantGarde-Book 167.00 z --485 0 (local logger) @t --265 -167 (log file) @t -T -%%Note: Object -16.13 796.18 96.34 811.66 @E -%%TEXT -[0.07199 0.00000 0.00000 0.07199 18 800] @tm - 0 O 0 @g -0.00 0.00 0.00 1.00 k -e -/_AvantGarde-Demi 194.00 z -0 0 (L) @t -76 0 (ogging A) @t -932 0 (P) @t -1023 0 (I) @t -T -%%Note: Object -682.92 845.57 730.87 857.38 @E -%%TEXT -[0.07199 0.00000 0.00000 0.07199 684 845] @tm - 0 O 0 @g -0.00 0.00 0.00 1.00 k -e -/_AvantGarde-Demi 194.00 z -0 0 (L) @t -76 0 (&B A) @t -506 0 (P) @t -597 0 (I) @t -T -%%Note: Object -420.26 834.98 536.18 848.45 @E -%%TEXT -[0.07199 0.00000 0.00000 0.07199 422 836] @tm - 0 O 0 @g -0.00 0.00 0.00 1.00 k -e -/_AvantGarde-Demi 194.00 z -0 0 (L) @t -76 0 (&B A) @t -506 0 (P) @t -597 0 (I \050inter) @t -1182 0 (nal\051) @t -T -%%Note: Object -639.00 773.86 702.00 774.14 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 2.16 2.16 0.00 @w -%%CURV 2 -694.44 774.00 m -646.56 774.00 L -S -@j -0.00 0.00 0.00 1.00 K -0.00 0.00 0.00 1.00 k -0 @g -0 @G -[] 0 d 0 J 0 j -0 R 0 O 0 2.16 2.16 0 @w -702.00 774.00 m -686.95 767.52 L -689.11 771.84 689.11 776.16 686.95 780.48 C -702.00 774.00 L -f -@J -@j -0.00 0.00 0.00 1.00 K -0.00 0.00 0.00 1.00 k -0 @g -0 @G -[] 0 d 0 J 0 j -0 R 0 O 0 2.16 2.16 0 @w -639.00 774.00 m -654.12 767.52 L -651.96 771.84 651.96 776.16 654.12 780.48 C -639.00 774.00 L -f -@J -%%Note: Object -639.00 557.86 702.00 558.14 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 2.16 2.16 0.00 @w -%%CURV 2 -694.44 558.00 m -646.56 558.00 L -S -@j -0.00 0.00 0.00 1.00 K -0.00 0.00 0.00 1.00 k -0 @g -0 @G -[] 0 d 0 J 0 j -0 R 0 O 0 2.16 2.16 0 @w -702.00 558.00 m -686.95 551.52 L -689.11 555.84 689.11 560.16 686.95 564.48 C -702.00 558.00 L -f -@J -@j -0.00 0.00 0.00 1.00 K -0.00 0.00 0.00 1.00 k -0 @g -0 @G -[] 0 d 0 J 0 j -0 R 0 O 0 2.16 2.16 0 @w -639.00 558.00 m -654.12 551.52 L -651.96 555.84 651.96 560.16 654.12 564.48 C -639.00 558.00 L -f -@J -%%Note: Object -387.00 558.00 468.00 693.00 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 2.16 2.16 0.00 @w -%%CURV 2 -387.00 693.00 m -464.40 564.05 L -S -@j -0.00 0.00 0.00 1.00 K -0.00 0.00 0.00 1.00 k -0 @g -0 @G -[] 0 d 0 J 0 j -0 R 0 O 0 2.02 2.02 0 @w -468.00 558.00 m -465.91 573.19 L -463.46 569.38 460.15 567.36 455.69 567.00 C -468.00 558.00 L -f -@J -%%Note: Object --18.00 755.86 54.00 756.14 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.72 0.72 0.00 @w -%%CURV 2 --18.00 756.00 m -50.47 756.00 L -S -@j -0.00 0.00 0.00 1.00 K -0.00 0.00 0.00 1.00 k -0 @g -0 @G -[] 0 d 0 J 0 j -0 R 0 O 0 1.01 1.01 0 @w -54.00 756.00 m -47.02 758.95 L -48.02 756.94 48.02 755.06 47.02 753.05 C -54.00 756.00 L -f -@J -%%Note: Object --31.18 763.92 52.92 774.50 @E -%%TEXT -[0.07199 0.00000 0.00000 0.07199 -29 765] @tm - 0 O 0 @g -0.00 0.00 0.00 1.00 k -e -/_AvantGarde-Book 167.00 z -0 0 (User Interface) @t -T -%%Note: Object --18.00 711.00 54.00 711.29 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.72 0.72 0.00 @w -%%CURV 2 --18.00 711.14 m -50.47 711.14 L -S -@j -0.00 0.00 0.00 1.00 K -0.00 0.00 0.00 1.00 k -0 @g -0 @G -[] 0 d 0 J 0 j -0 R 0 O 0 1.01 1.01 0 @w -54.00 711.14 m -47.02 714.10 L -48.02 712.08 48.02 710.21 47.02 708.19 C -54.00 711.14 L -f -@J -%%Note: Object --44.28 718.78 53.57 729.07 @E -%%TEXT -[0.07199 0.00000 0.00000 0.07199 -41 719] @tm - 0 O 0 @g -0.00 0.00 0.00 1.00 k -e -/_AvantGarde-Book 167.00 z -0 0 (Resource Broker) @t -T -%%Note: Object --18.00 664.20 54.00 664.49 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.72 0.72 0.00 @w -%%CURV 2 --18.00 664.34 m -50.47 664.34 L -S -@j -0.00 0.00 0.00 1.00 K -0.00 0.00 0.00 1.00 k -0 @g -0 @G -[] 0 d 0 J 0 j -0 R 0 O 0 1.01 1.01 0 @w -54.00 664.34 m -47.02 667.30 L -48.02 665.28 48.02 663.41 47.02 661.39 C -54.00 664.34 L -f -@J -%%Note: Object --0.43 673.63 18.22 684.22 @E -%%TEXT -[0.07199 0.00000 0.00000 0.07199 0 675] @tm - 0 O 0 @g -0.00 0.00 0.00 1.00 k -e -/_AvantGarde-Book 167.00 z -0 0 (JSS) @t -T -%%Note: Object --18.00 621.00 54.00 621.29 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.72 0.72 0.00 @w -%%CURV 2 --18.00 621.14 m -50.47 621.14 L -S -@j -0.00 0.00 0.00 1.00 K -0.00 0.00 0.00 1.00 k -0 @g -0 @G -[] 0 d 0 J 0 j -0 R 0 O 0 1.01 1.01 0 @w -54.00 621.14 m -47.02 624.10 L -48.02 622.08 48.02 620.21 47.02 618.19 C -54.00 621.14 L -f -@J -%%Note: Object --28.87 626.40 51.05 639.29 @E -%%TEXT -[0.07199 0.00000 0.00000 0.07199 -26 630] @tm - 0 O 0 @g -0.00 0.00 0.00 1.00 k -e -/_AvantGarde-Book 167.00 z -0 0 (JobManager) @t -T -%%Note: Object -468.00 738.00 477.00 810.00 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w - 0 O 0 @g -0.00 0.00 0.00 0.70 k -%%RECT 9.000 -72.000 0.000 -468.00 810.00 m -477.00 810.00 L -477.00 738.00 L -468.00 738.00 L -468.00 810.00 L -@c -B -%%Note: Object -468.00 522.00 477.00 594.00 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w - 0 O 0 @g -0.00 0.00 0.00 0.70 k -%%RECT 9.000 -72.000 0.000 -468.00 594.00 m -477.00 594.00 L -477.00 522.00 L -468.00 522.00 L -468.00 594.00 L -@c -B -%%Note: Object -711.00 746.86 783.00 747.14 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.72 0.72 0.00 @w -%%CURV 2 -714.53 747.00 m -779.47 747.00 L -S -@j -0.00 0.00 0.00 1.00 K -0.00 0.00 0.00 1.00 k -0 @g -0 @G -[] 0 d 0 J 0 j -0 R 0 O 0 1.01 1.01 0 @w -711.00 747.00 m -718.06 749.95 L -717.05 747.94 717.05 746.06 718.06 744.05 C -711.00 747.00 L -f -@J -@j -0.00 0.00 0.00 1.00 K -0.00 0.00 0.00 1.00 k -0 @g -0 @G -[] 0 d 0 J 0 j -0 R 0 O 0 1.01 1.01 0 @w -783.00 747.00 m -776.02 749.95 L -777.02 747.94 777.02 746.06 776.02 744.05 C -783.00 747.00 L -f -@J -%%Note: Object -711.00 665.86 783.00 666.14 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.72 0.72 0.00 @w -%%CURV 2 -714.53 666.00 m -779.47 666.00 L -S -@j -0.00 0.00 0.00 1.00 K -0.00 0.00 0.00 1.00 k -0 @g -0 @G -[] 0 d 0 J 0 j -0 R 0 O 0 1.01 1.01 0 @w -711.00 666.00 m -718.06 668.95 L -717.05 666.94 717.05 665.06 718.06 663.05 C -711.00 666.00 L -f -@J -@j -0.00 0.00 0.00 1.00 K -0.00 0.00 0.00 1.00 k -0 @g -0 @G -[] 0 d 0 J 0 j -0 R 0 O 0 1.01 1.01 0 @w -783.00 666.00 m -776.02 668.95 L -777.02 666.94 777.02 665.06 776.02 663.05 C -783.00 666.00 L -f -@J -%%Note: Object -754.99 710.64 799.27 721.22 @E -%%TEXT -[0.07199 0.00000 0.00000 0.07047 755 710] @tm - 0 O 0 @g -0.00 0.00 0.00 1.00 k -e -/_AvantGarde-Book 194.00 z -0 0 (clients) @t -T -%%Note: Object -8.42 288.29 32.40 298.87 @E -%%TEXT -[0.07199 0.00000 0.00000 0.07199 8 289] @tm - 0 O 0 @g -0.00 0.00 0.00 1.00 k -e -/_AvantGarde-Book 167.00 z -0 0 (UL) @t -179 0 (M) @t -T -%%Note: Object --0.07 271.80 52.06 315.22 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w -%%RECT 54.000 -45.000 0.000 --0.07 315.22 m -52.06 315.22 L -52.06 271.80 L --0.07 271.80 L --0.07 315.22 L -@c -S -%%Note: Object -6.26 323.57 42.84 333.36 @E -%%TEXT -[0.07199 0.00000 0.00000 0.07199 7 324] @tm - 0 O 0 @g -0.00 0.00 0.00 1.00 k -e -/_AvantGarde-BookOblique 167.00 z -0 0 (event) @t -T -%%Note: Object -194.98 319.97 345.46 344.30 @E -%%TEXT -[0.07199 0.00000 0.00000 0.07199 269 334] @tm - 0 O 0 @g -0.00 0.00 0.00 1.00 k -e -/_AvantGarde-BookOblique 167.00 z --992 0 (queueing, transferring to ) @t --750 -167 (appropriate server) @t -T -%%Note: Object -88.42 304.92 153.65 316.80 @E -%%TEXT -[0.07199 0.00000 0.00000 0.07199 89 307] @tm - 0 O 0 @g -0.00 0.00 0.00 1.00 k -e -/_AvantGarde-BookOblique 167.00 z -0 0 (accepting) @t -T -%%Note: Object -80.93 298.58 170.93 298.87 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.72 0.72 0.00 @w -%%CURV 2 -80.93 298.73 m -167.40 298.73 L -S -@j -0.00 0.00 0.00 1.00 K -0.00 0.00 0.00 1.00 k -0 @g -0 @G -[] 0 d 0 J 0 j -0 R 0 O 0 1.01 1.01 0 @w -170.93 298.73 m -163.94 301.68 L -164.95 299.66 164.95 297.79 163.94 295.78 C -170.93 298.73 L -f -@J -%%Note: Object -376.34 304.99 444.67 317.09 @E -%%TEXT -[0.07199 0.00000 0.00000 0.07199 377 307] @tm - 0 O 0 @g -0.00 0.00 0.00 1.00 k -e -/_AvantGarde-BookOblique 167.00 z -0 0 (transferring) @t -T -%%Note: Object -133.34 249.55 205.34 261.07 @E -%%TEXT -[0.07199 0.00000 0.00000 0.07199 135 251] @tm - 0 O 0 @g -0.00 0.00 0.00 1.00 k -e -/_AvantGarde-BookOblique 167.00 z -0 0 (local scope) @t -T -%%Note: Object -194.98 384.12 323.06 397.01 @E -%%TEXT -[0.07199 0.00000 0.00000 0.07199 197 386] @tm - 0 O 0 @g -0.00 0.00 0.00 1.00 k -e -/_AvantGarde-BookOblique 167.00 z -0 0 (logger & inter-logger) @t -T -%%Note: Object -368.93 298.73 458.93 299.02 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.72 0.72 0.00 @w -%%CURV 2 -368.93 298.87 m -455.40 298.87 L -S -@j -0.00 0.00 0.00 1.00 K -0.00 0.00 0.00 1.00 k -0 @g -0 @G -[] 0 d 0 J 0 j -0 R 0 O 0 1.01 1.01 0 @w -458.93 298.87 m -451.94 301.82 L -452.95 299.81 452.95 297.94 451.94 295.92 C -458.93 298.87 L -f -@J -%%Note: Object -206.93 289.80 332.86 307.80 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w -%%RECT 135.000 -18.000 0.000 -206.93 307.80 m -332.86 307.80 L -332.86 289.80 L -206.93 289.80 L -206.93 307.80 L -@c -S -%%Note: Object -224.78 289.80 225.07 307.80 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w -%%CURV 2 -224.93 307.80 m -224.93 289.80 L -S -%%Note: Object -242.78 289.80 243.07 307.80 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w -%%CURV 2 -242.93 307.80 m -242.93 289.80 L -S -%%Note: Object -260.78 289.80 261.07 307.80 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w -%%CURV 2 -260.93 307.80 m -260.93 289.80 L -S -%%Note: Object -278.78 289.80 279.07 307.80 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w -%%CURV 2 -278.93 307.80 m -278.93 289.80 L -S -%%Note: Object -296.78 289.80 297.07 307.80 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w -%%CURV 2 -296.93 307.80 m -296.93 289.80 L -S -%%Note: Object -314.78 289.80 315.07 307.80 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w -%%CURV 2 -314.93 307.80 m -314.93 289.80 L -S -%%Note: Object --9.00 243.00 360.00 261.00 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 1.44 1.44 0.00 @w -%%CURV 4 --9.00 261.00 m --9.00 243.00 L -360.00 243.00 L -360.00 261.00 L -S -%%Note: Object -144.00 360.00 360.00 378.00 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 1.44 1.44 0.00 @w -%%CURV 4 -144.00 360.00 m -144.00 378.00 L -360.00 378.00 L -360.00 360.00 L -S -%%Note: Object -495.00 312.34 535.54 325.87 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w -%%ELLI 54.000 -18.000 270.000 270.000 0 -515.30 325.87 m -526.39 325.87 535.54 322.85 535.54 319.10 c -535.54 315.36 526.39 312.34 515.30 312.34 c -504.14 312.34 495.00 315.36 495.00 319.10 c -495.00 322.85 504.14 325.87 515.30 325.87 c -@c -S -%%Note: Object -495.00 271.80 535.54 285.26 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w -%%ELLI 54.000 -18.000 270.000 270.000 0 -515.30 285.26 m -526.39 285.26 535.54 282.24 535.54 278.57 c -535.54 274.82 526.39 271.80 515.30 271.80 c -504.14 271.80 495.00 274.82 495.00 278.57 c -495.00 282.24 504.14 285.26 515.30 285.26 c -@c -S -%%Note: Object -494.86 278.57 495.14 319.10 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w -%%CURV 2 -495.00 319.10 m -495.00 278.57 L -S -%%Note: Object -535.39 278.57 535.68 319.10 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w -%%CURV 2 -535.54 319.10 m -535.54 278.57 L -S -%%Note: Object -472.61 249.12 658.01 262.01 @E -%%TEXT -[0.07199 0.00000 0.00000 0.07199 476 251] @tm - 0 O 0 @g -0.00 0.00 0.00 1.00 k -e -/_AvantGarde-BookOblique 167.00 z -0 0 (bookkeeping & logging server) @t -T -%%Note: Object -637.70 322.92 691.78 334.80 @E -%%TEXT -[0.07199 0.00000 0.00000 0.07199 638 325] @tm - 0 O 0 @g -0.00 0.00 0.00 1.00 k -e -/_AvantGarde-BookOblique 167.00 z -0 0 (querying) @t -T -%%Note: Object -637.70 286.92 691.78 298.80 @E -%%TEXT -[0.07199 0.00000 0.00000 0.07199 638 289] @tm - 0 O 0 @g -0.00 0.00 0.00 1.00 k -e -/_AvantGarde-BookOblique 167.00 z -0 0 (querying) @t -T -%%Note: Object -478.37 328.54 548.50 353.16 @E -%%TEXT -[0.07199 0.00000 0.00000 0.07199 512 343] @tm - 0 O 0 @g -0.00 0.00 0.00 1.00 k -e -/_AvantGarde-BookOblique 167.00 z --457 0 (permanent) @t --308 -167 (storage) @t -T -%%Note: Object -582.55 357.34 623.81 378.50 @E -%%TEXT -[0.07199 0.00000 0.00000 0.07199 602 370] @tm - 0 O 0 @g -0.00 0.00 0.00 1.00 k -e -/_AvantGarde-BookOblique 167.00 z --231 0 (query) @t --270 -167 (cache) @t -T -%%Note: Object -539.93 307.51 575.86 307.80 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.72 0.72 0.00 @w -%%CURV 2 -539.93 307.66 m -572.33 307.66 L -S -@j -0.00 0.00 0.00 1.00 K -0.00 0.00 0.00 1.00 k -0 @g -0 @G -[] 0 d 0 J 0 j -0 R 0 O 0 1.01 1.01 0 @w -575.86 307.66 m -568.87 310.61 L -569.88 308.59 569.88 306.72 568.87 304.70 C -575.86 307.66 L -f -@J -%%Note: Object -629.93 316.58 693.00 316.87 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.72 0.72 0.00 @w -%%CURV 2 -633.46 316.73 m -689.47 316.73 L -S -@j -0.00 0.00 0.00 1.00 K -0.00 0.00 0.00 1.00 k -0 @g -0 @G -[] 0 d 0 J 0 j -0 R 0 O 0 1.01 1.01 0 @w -629.93 316.73 m -636.98 319.68 L -635.98 317.66 635.98 315.79 636.98 313.78 C -629.93 316.73 L -f -@J -@j -0.00 0.00 0.00 1.00 K -0.00 0.00 0.00 1.00 k -0 @g -0 @G -[] 0 d 0 J 0 j -0 R 0 O 0 1.01 1.01 0 @w -693.00 316.73 m -686.02 319.68 L -687.02 317.66 687.02 315.79 686.02 313.78 C -693.00 316.73 L -f -@J -%%Note: Object -539.93 280.58 692.93 280.87 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.72 0.72 0.00 @w -%%CURV 2 -543.46 280.73 m -689.40 280.73 L -S -@j -0.00 0.00 0.00 1.00 K -0.00 0.00 0.00 1.00 k -0 @g -0 @G -[] 0 d 0 J 0 j -0 R 0 O 0 1.01 1.01 0 @w -539.93 280.73 m -546.98 283.68 L -545.98 281.66 545.98 279.79 546.98 277.78 C -539.93 280.73 L -f -@J -@j -0.00 0.00 0.00 1.00 K -0.00 0.00 0.00 1.00 k -0 @g -0 @G -[] 0 d 0 J 0 j -0 R 0 O 0 1.01 1.01 0 @w -692.93 280.73 m -685.94 283.68 L -686.95 281.66 686.95 279.79 685.94 277.78 C -692.93 280.73 L -f -@J -%%Note: Object -584.93 298.73 620.86 352.73 @E -0 J 0 j [5 5 ] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 0.22 0.22 0.00 @w -%%RECT 45.000 -81.000 0.000 -584.93 352.73 m -620.86 352.73 L -620.86 298.73 L -584.93 298.73 L -584.93 352.73 L -@c -S -%%Note: Object -468.00 243.00 656.93 261.00 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 1.44 1.44 0.00 @w -%%CURV 4 -468.00 261.00 m -468.00 243.00 L -656.93 243.00 L -656.93 261.00 L -S -%%Note: Object -219.67 692.86 275.54 693.14 @E -0 J 0 j [] 0 d 0 R 0 @G -0.00 0.00 0.00 1.00 K -0 2.16 2.16 0.00 @w -%%CURV 2 -219.67 693.00 m -267.98 693.00 L -S -@j -0.00 0.00 0.00 1.00 K -0.00 0.00 0.00 1.00 k -0 @g -0 @G -[] 0 d 0 J 0 j -0 R 0 O 0 2.16 2.16 0 @w -275.54 693.00 m -260.50 699.41 L -262.66 695.09 262.66 690.91 260.50 686.59 C -275.54 693.00 L -f -@J -@rs -@rs -%%Trailer - end diff --git a/org.glite.lb.client-interface/doc/api/fig/logging-arch.pdf b/org.glite.lb.client-interface/doc/api/fig/logging-arch.pdf deleted file mode 100644 index 1d40d9d..0000000 --- a/org.glite.lb.client-interface/doc/api/fig/logging-arch.pdf +++ /dev/null @@ -1,92 +0,0 @@ -%PDF-1.2 %âãÏÓ -1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 2 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 3 0 obj << /ModDate (D:20011008121539) /Producer (Adobe PDF Library 2.0) /CreationDate (D:20010908121539) >> endobj 4 0 obj << /Type /Page /MediaBox [ -119.5 84.8779 730.8936 708.5 ] /Parent 2 0 R /PieceInfo << /Illustrator8.0 << /LastModified ()>> >> /Contents 11 0 R /Resources << /Font << /F12 9 0 R >> /ProcSet [ /PDF /Text ] >> >> endobj 9 0 obj << /Type /Font /Subtype /MMType1 /BaseFont /AdobeSansMM /FirstChar 0 /LastChar 255 /Encoding /WinAnsiEncoding /FontDescriptor 10 0 R /Widths [ 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 257 376 591 625 816 687 216 386 386 487 635 240 411 240 501 678 567 676 676 679 678 678 626 677 678 240 240 635 635 635 508 778 603 640 675 675 559 540 674 704 273 439 598 530 964 695 730 628 730 633 589 546 661 609 971 609 566 539 377 501 376 635 568 406 553 585 560 585 561 401 593 591 242 242 529 242 876 591 596 584 585 422 490 460 595 527 884 530 534 452 369 380 369 635 377 377 377 214 582 376 953 545 545 406 1191 589 296 968 377 377 377 377 216 216 376 376 417 474 948 406 923 490 296 968 377 377 566 377 257 644 652 662 634 380 567 406 764 381 476 635 411 764 406 383 635 444 446 406 595 570 240 406 404 393 476 939 949 1016 509 603 603 603 603 603 603 904 675 559 559 559 559 273 273 273 273 683 695 730 730 730 730 730 635 730 661 661 661 661 566 628 604 553 553 553 553 553 553 901 560 561 561 561 561 242 242 242 242 596 591 596 596 596 596 596 635 595 595 595 595 595 534 586 534 ] >> endobj 10 0 obj << /Type /FontDescriptor /FontName /AdobeSansMM /FontBBox [ 0 0 0 0 ] /Flags 32 /CapHeight 700 /Ascent 0 /Descent 0 /StemV 0 /ItalicAngle 0 /XHeight 500 >> endobj 11 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Length 12 0 R >> stream -8;X]T>E9H>(&eC8+8RDfUhSGo\tmkK42>_l>*KUT+V-+7`csTUm4g=:f^,ff3N"K8 -5irZ?EN\Nf,'tAp4<\/^6uZ^ -(m_f/JTKGZQX4gJ[B=rLj,`ThZ_u(>(JgORDtEu[GJNES]cWR-UK>'gqbQgL5G#Pl -IpB_ldXLqpChHh]jeqeBF$S(/XnVGbj8+5>Hl(/9ok"3_p&m$HQ%iBqsKaug]qrn"oS$dK20h4s,%Lb.$EGA+(>'1=4'ini&;2?.L] -S(UU7rGMT-@D;q4YOAolT7R<7];mN^*V9JGSm=4T;m('1^UmL@3!3JVoq[GQ,,$/& -D%.Y1`f;?%"JhUZQg&%; -ilMfFA)?30n-Nn#hofAq^0QAhKP3TZS9N+JgV.?r:0-PD=e/]-R*;rkOjs]`?$#fe -H8/Uc@hC[_dtSb&YoH9`^uuRPmJU>.1cdt*B+P(TW_CTKF-0h$(?*$1tNnR@(OS. -ESH%A!jLo/LEAkcTeVM/_El4QRg?=g'V7m_V!;%m%UJ-hLD!F,*NVG=]A=^ghE-ND -f-uQ(6T$-@l4*Tb8)E4Q!E-R2j!qfl8d?XkM,:SGX?t;XWtI]YS`EU6<&e24!!Qt( -:$?3b`u\F5M`J/D5G2@^'KE.cghUEMs4 -kG;e9;'Zjh,U(eU=oh?%0`()(X,sW^mL)d@g&qS#DF9,jJmL+s!TSPPmn+S2\2t&_ -51^65(WNECEPS@]f]s!u?-g>4kTlN8#*s/E<@9B\'j(^';a:@R.&**3n!SeKa**XC -3LFe-.MO5'+$U)8(i!F#n%m/_<:*h)d$hN??2Mde.))->!\=spgW2b1\rpSp?`OP) -[HHRo8?%J4U')>O+fI-dn2XD#Z)A-'AW_d')j7(iOA*K$.]rC>O]dV<6ZkK]YVt+O -_p$j(4dn,](b)>h2Q8G%n5WWFZ)A*>es9Xt1mK1W_((nCVD=P(4O-14[Ouo%(n&_^ -:jPA\5!eEn;4o.W'W=SL2't"=J&kXFE6c/QDVr39/jHH+=4N]8\m@jJQ:VR/LD(!N ---)s-5beW-<9iLapLuC+@r')'j"o'Ym8! -pL\g)ctX#(lrWM8!`)PQc\-Y'K(De^s#TeJfMRfF(_,DG?AJgGQ,s.6SA`E/Mh:7k -+VO\&BPC61:bIf#TgPl`J3b==\EcTcYn+Tj+V_lnFuNb[-X1H/,edfCbIWhs7AoW/lUKi[C^D>=6jYV(6;V1Q6$cRT/8E)&hCED"BfmQ, -,2cU,=t=DHBnXm![DEWA`l$$Sn3*3q1.W*`9q%ltaMSdW`kt5^=Ohc3(H5&7W9Cqb -9P#oL3VWZ-9'P?$%(E1/s?d!Q"`pn/- -Np-2H)i>]>0`A\]qP@9XJ_jU'o?Yh7l?an0F?%^63-Pu\5"A?L$/#cO5c70r_;@r8 -H@)4.p]+k7=i/al@(4B"Z364Rk>u.d*\"?CVgF>ZpFsG:4@ia1M213GE*(6cM%@+4 -*^lMda#f32lVO9bkCK9be,O\7GTgFc#@H"[0_A&?e"cL!J0H9UTB=2tPC8Tu?e5P6 --7&e2#5H*i1N]()$K]mrY(r3gF@!O7;>,Lh0W(,'90b(Y4&%lF\F5L/n-^-K9Mc&Q -W7mk=d08g`.=7@-"Uii?l4aE3kr9CL3=6HO:k;tL;8=le8`Pg`Vht>A_o^#.OGO_G -4:On0W5N$q:J1hc<9Jot;id*`aiRpI^2Nm)_bi0L3?`@[^ubQoQbbrsEXjHEKEUsr -/C2_:AF_ki+^oot=Iu9XalMN9OM)%,4A1N_#pi":q]h2Kg8Ip_[P5c!Z]qGVTJH95 -iV1BX+pKq/VmpK$#WoML%F2bi_\7!M1P4%+*&&A\??6.l5f7,_'A+%M.Y6S?.:HF! -.0=r8L54e@@66HR.(Ba%U,C*^qkIK%J-jLkZ.e2p`nVtcUdVKJXXH*j3`LpR-BIrP -4S+@VN#mf\P&8XXas2ecas2esas.7BA0-S*8sFU3e191;`$YAFfSj8iO!Ltjf:bMV -b`08`'A)baWlsp?rTk3YX[Z1AUnh?$Egnng4';I-J_ -_E(f)4U'`Q3SU5oU`4r!'Y['i*!MN$BnNhG-p$mE6U(lnpu:>oi)O!`ai5_9ON -Sf$D42IR/2i(9&KJ/8pq/a#)mkhGQV$]_8BAAM+Fk^+BQKbWkSs+"0Vq^Zicg\IRM -G.eQsL($rO@S;/D[*b/X1%Lb>FZWKk(SFabDH(`4WG("ec9?Ks".a^^=(!"C-Aa@!, -VT^Q%o"7ktb,\4YKQ'nedN*],bMdC`N_IMegUAiup[co\V-&M5aoCd08>J0,4.r9K -iMKJje"\'/h<2JW7.FfEm[Dpmu@8KN4K(+jH -3L8WNK%WE),[f[k0\JuhX)QK8lGH/sZ"4kC!sje$C#?9RMY(aI]>nFAc8cCMU3$Bp -1=6kA^>O]YM_=P,+?H8#dFl2Y3p/V)aDW0B79ikGic11dNPg=p6>iZliMuS[(U[m8 -X#q%@PplB#dOeW^MB;^-7;!<3HY*t_Eulh'm2@k5dC;096k9`*fZl&7@^EgeGCNr: -eb/m@r@dEcZ5g=_"M\@EJL@'6(>b+5n0)FG%NC/-<2R$le_4%!qt'm,K*7_[c%E#3 -Xhh4r(sMWFm.O]=Wl$GgG1]W@R%Et)]o6n(pH2G.@.6<_Cu]1Nt#$qG71JF -DICe8E"B+t;'7GT&r4U7"_%=[,hd;]*8QrI6?h3*iN[Dj<;u\WINO\L^NK;*qL;EA.oG&dpID!fE^LG?ZYe#od_sOYGCWBW5WknO3HuVufCcNC -i'Gcn&lKcsNQ"D`neH2Mqp`=+r:Uhk.oHH66OBOl>pCU5a_6MPjV^u#UYM#Mb7]5. -E>>cPE_f&U[%r"m9J=N#kpds7+)&Kr%o.D3hQ?fl'+7BtW]ZVqc9eXCV1(Q61fpY* -IhO_?R'[/MHag5bG71/q:M4!`]3rT*/C?NubD\#(SSg#8emuK7@oNb^I(.=O'(XXj+;YhP=*)#9XkfRqR@Q(4aq;.6&]jm/% -grbk?-t+stRY!!+HD^2A/F0-!->(%Y5'R(FWBd1J-W=;jK88h>%A!<)$,JM3-GnJo -;]R9(k%4?b">Z8/+L>q11i/[AG"^7JAtUKhLcqt8I/IsRpA'TF0S -qEs@rWq)dKbI;EMGU6A^WM?1]^\3QsND-*p&k?,,j^T'E[t"-1d-0MOY-39O.M%6m -LLCc$'l)$thq#XRZ+5l3TAF`@Cim-m$:i(U*E02E-R/54^YI+AGA.K1nJ:^D*4r0^?'+l/._t,oI8P:S/Al4+3(\B?fK/]agN#.F&K>u*" -QoC@t.)^4RY$K?k.fBJY2rkf)%b)4`[B(LN(Gm"1qa:t6,>d3"s3i;1,`d\5nV1;# -s"*SHf6b\W_#eJE%Tk9i6-FG1C8O^HJ4;DdZ2%<5,&%[gG4@Br[,.]T/?V=KaeKh%U0LS$&ea+*MQXcRfWR%37Ckc"UVjn -d&dl-86smP))K`Y]hb,"%bmEZ`?8pX6A=D5Q$&g!+Z;bAmOD1>n'`Ua/+#"bAr",c -=SEWO;3ZT=/JuYK#&t^t2e,e&WZa+ch88Hj)q]4oSmNZTksZm`j(d/8g@=B7]e2&S -0@>G-67MiLGb>cZN]8"-2_Ur]-KS)'mkfK_hK)-sPWL.s_,%0u^bZri,8*G7XMPaP -@XT)Z%]AtTKK^,'qYRrfrAO_e?L5B~> endstream endobj 12 0 obj 5047 endobj xref 0 13 0000000005 65535 f -0000000016 00000 n -0000000069 00000 n -0000000133 00000 n -0000000251 00000 n -0000000006 00001 f -0000000007 00001 f -0000000008 00001 f -0000000000 00001 f -0000000486 00000 n -0000001700 00000 n -0000001884 00000 n -0000007028 00000 n -trailer << /Size 13 /Info 3 0 R /Root 1 0 R /ID[] >> startxref 7050 %%EOF \ No newline at end of file diff --git a/org.glite.lb.client/Makefile b/org.glite.lb.client/Makefile index 9efc06d..abab702 100644 --- a/org.glite.lb.client/Makefile +++ b/org.glite.lb.client/Makefile @@ -23,7 +23,7 @@ PREFIX?=${glite_location} version=${module.version} -VPATH=${top_srcdir}/src:${top_srcdir}/test:${top_srcdir}/examples:${top_srcdir}/doc +VPATH=${top_srcdir}/src:${top_srcdir}/interface:${top_srcdir}/test:${top_srcdir}/examples:${top_srcdir}/doc AT3=${stagedir}/sbin/glite-lb-at3 GENSAM=${top_srcdir}/examples/gen_sample_job CHECK_VERSION:=VERSION=${version} VERSION_AHEAD=0 perl ${top_srcdir}/project/check_version.pl @@ -82,6 +82,7 @@ COMMON_LIB:=-lglite_lb_common_${nothrflavour} COMMON_LIB_THR:=-lglite_lb_common_${thrflavour} CFLAGS:=${DEBUG} \ + -I. \ -I${top_srcdir}/src -I${top_srcdir}/interface \ -I${stagedir}/include \ -I${glite_location}/include \ @@ -110,8 +111,11 @@ LIBOBJS:=connection.o consumer.o notification.o prod_proto.o \ FAKELIBOBJS:=consumer_fake.o producer_fake.o PLUSOBJS:=Event.o Job.o JobStatus.o Notification.o ServerConnection.o -PUB_HDRS:=CountRef.h Event.h JobJobStatus.h Notification.h ServerConnection.h \ - LoggingExceptions.h + +HDRS:=consumer.h dump.h Job.h load.h notification.h \ + Notification.h purge.h ServerConnection.h statistics.h +FAKE_HDRS:=consumer_fake.h producer_fake.h +GEN_HDRS:=JobStatus.h producer.h interface_version.h LIBTHROBJS:=${LIBOBJS:.o=.thr.o} LIBLOBJS:=${LIBOBJS:.o=.lo} @@ -133,7 +137,9 @@ FAKETHRLIB:=libglite_lb_client_fake_${thrflavour}.la PLUSLIB:=libglite_lb_clientpp_${nothrflavour}.la THRPLUSLIB:=libglite_lb_clientpp_${thrflavour}.la -TOOLS:=dump load purge lb_dump_exporter ${LB_PERF_TOOLS} +# FIXME: +#TOOLS:=dump load purge lb_dump_exporter ${LB_PERF_TOOLS} +TOOLS:=${LB_PERF_TOOLS} EXAMPLES:=log_usertag_proxy job_log job_reg feed_shark notify query_ext query_seq_code stats abort_job change_acl stresslog flood_proxy dagids stress_context parse_eventsfile EXAMPLES_CL=user_jobs job_status @@ -151,7 +157,16 @@ offset=0 version_info:=-version-info ${shell \ perl -e '$$,=":"; @F=split "\\.","${version}"; print $$F[0]+$$F[1]+${offset},$$F[2],$$F[1]' } -default: all +ifdef LB_STANDALONE +compile all: generate ${LIB} ${THRLIB} ${TOOLS} logevent examples ${MAN_GZ} +else +compile all: generate ${LIB} ${THRLIB} ${TOOLS} examples ${MAN_GZ} +endif + +generate: ${GEN_HDRS} + +interface_version.h: ${top_srcdir}/project/version.properties + echo "#define GLITE_LB_CLIENT_INTERFACE \"${version}\"" >$@ ${LIB}: ${LIBOBJS} ${LINK} ${version_info} -o $@ ${LIBLOBJS} -rpath ${PREFIX}/lib \ @@ -226,6 +241,11 @@ perftest_logjobs.o: perftest_logjobs.c %.o: %.c ${CC} ${CFLAGS} ${GLOBUSINC} -c $< +%.h: %.h.T + rm -f $@ + ${AT3} $< >$@ || rm -f $@ + chmod -w $@ >/dev/null + %.c: %.c.T rm -f $@ ${AT3} $< >$@ || rm -f $@ @@ -241,15 +261,6 @@ perftest_logjobs.o: perftest_logjobs.c $(GENSAM) $< >$@ || rm -f $@ chmod -w,+x $@ > /dev/null -default: all - - -ifdef LB_STANDALONE -compile all: ${LIB} ${THRLIB} ${TOOLS} logevent examples ${MAN_GZ} -else -compile all: check_version ${LIB} ${THRLIB} ${TOOLS} logevent ${PLUSLIB} ${THRPLUSLIB} examples ${MAN_GZ} -endif - examples: ${EXAMPLES} ${EXAMPLES_CL} ${EXAMPLES_CL_THR} ${sh_PROGS} fake: ${FAKE_EXAMPLES} @@ -285,11 +296,19 @@ distbin: save_dir=`pwd`; cd tmpbuilddir${stagedir} && tar -czf $$save_dir/${top_srcdir}/${distdir}/${package}-${version}_bin.tar.gz *; cd $$save_dir rm -rf tmpbuilddir +doc: generate + cp ${top_srcdir}/doc/*.dox . + echo "PROJECT_NUMBER = ${version}" >> C.dox + echo "PROJECT_NUMBER = ${version}" >> CPP.dox + doxygen C.dox + doxygen CPP.dox + install: mkdir -p ${PREFIX}/bin mkdir -p ${PREFIX}/sbin + mkdir -p ${PREFIX}/include/${globalprefix}/${lbprefix} mkdir -p ${PREFIX}/lib - mkdir -p ${PREFIX}/share/doc/${package}-${version} + mkdir -p ${PREFIX}/share/doc/${package}-${version}/api mkdir -p ${PREFIX}/share/man/man1 ifdef LB_STANDALONE ${INSTALL} -m 644 ${LIB} ${THRLIB} ${PREFIX}/lib @@ -298,6 +317,12 @@ else endif ${INSTALL} -m 644 ${top_srcdir}/LICENSE ${PREFIX}/share/doc/${package}-${version} ${INSTALL} -m 644 ${top_srcdir}/doc/README-fake ${top_srcdir}/doc/README-notify ${PREFIX}/share/doc/${package}-${version} + (cd ${top_srcdir}/interface && ${INSTALL} -m 644 ${HDRS} ${PREFIX}/include/${globalprefix}/${lbprefix}) + ${INSTALL} -m 644 ${GEN_HDRS} ${PREFIX}/include/${globalprefix}/${lbprefix} +ifndef LB_STANDALONE + cp -r C CPP ${PREFIX}/share/doc/${package}-${version} +# cp -r ${top_srcdir}/doc/api/{Makefile,api.tex,fig} ${PREFIX}/share/doc/${package}-${version}/api +endif mkdir -p ${PREFIX}/examples for p in logevent; do \ ${INSTALL} -m 755 "$$p" "${PREFIX}/bin/glite-lb-$$p"; \ @@ -312,10 +337,10 @@ endif ${INSTALL} -m 644 ${MAN_GZ} ${PREFIX}/share/man/man1 clean: - rm -rf *.o *.lo .libs lib* *.c *.cpp producer_test - rm -rf ${LIB} ${THRLIB} ${TOOLS} logevent ${PLUSLIB} ${THRPLUSLIB} ${MAN_GZ} - rm -rf ${EXAMPLES} ${EXAMPLES_CL} ${EXAMPLES_CL_THR} ${sh_PROGS} - + rm -rvf *.o *.lo .libs lib* *.c *.cpp *.h *.dox producer_test C/ CPP/ + rm -rvf ${LIB} ${THRLIB} ${TOOLS} logevent ${PLUSLIB} ${THRPLUSLIB} ${MAN_GZ} + rm -rvf ${EXAMPLES} ${EXAMPLES_CL} ${EXAMPLES_CL_THR} ${sh_PROGS} + rm -rvf log.xml project/ rpmbuild/ RPMS/ tgz/ check_version: ${CHECK_VERSION} ${stagedir}/include/glite/lb/interface_version.h diff --git a/org.glite.lb.client/examples/log_usertag_proxy.c b/org.glite.lb.client/examples/log_usertag_proxy.c index 1a7a81e..26a4bf8 100644 --- a/org.glite.lb.client/examples/log_usertag_proxy.c +++ b/org.glite.lb.client/examples/log_usertag_proxy.c @@ -9,9 +9,9 @@ #include "glite/wmsutils/jobid/cjobid.h" #include "glite/lb/notifid.h" -#include "glite/lb/producer.h" #include "glite/lb/events.h" +#include "producer.h" static struct option opts[] = { {"help", 0, NULL, 'h'}, diff --git a/org.glite.lb.client-interface/interface/Job.h b/org.glite.lb.client/interface/Job.h similarity index 98% rename from org.glite.lb.client-interface/interface/Job.h rename to org.glite.lb.client/interface/Job.h index 9419066..552da34 100644 --- a/org.glite.lb.client-interface/interface/Job.h +++ b/org.glite.lb.client/interface/Job.h @@ -6,8 +6,9 @@ #include "glite/wmsutils/jobid/JobId.h" #include "glite/lb/Event.h" -#include "glite/lb/JobStatus.h" -#include "glite/lb/ServerConnection.h" + +#include "JobStatus.h" +#include "ServerConnection.h" /** diff --git a/org.glite.lb.client-interface/interface/JobStatus.h.T b/org.glite.lb.client/interface/JobStatus.h.T similarity index 100% rename from org.glite.lb.client-interface/interface/JobStatus.h.T rename to org.glite.lb.client/interface/JobStatus.h.T diff --git a/org.glite.lb.client-interface/interface/Notification.h b/org.glite.lb.client/interface/Notification.h similarity index 95% rename from org.glite.lb.client-interface/interface/Notification.h rename to org.glite.lb.client/interface/Notification.h index 6fea744..36a4930 100644 --- a/org.glite.lb.client-interface/interface/Notification.h +++ b/org.glite.lb.client/interface/Notification.h @@ -4,9 +4,9 @@ #include "glite/wmsutils/jobid/JobId.h" -#include "glite/lb/consumer.h" -#include "glite/lb/notification.h" -#include "glite/lb/JobStatus.h" +#include "consumer.h" +#include "notification.h" +#include "JobStatus.h" EWL_BEGIN_NAMESPACE diff --git a/org.glite.lb.client-interface/interface/ServerConnection.h b/org.glite.lb.client/interface/ServerConnection.h similarity index 99% rename from org.glite.lb.client-interface/interface/ServerConnection.h rename to org.glite.lb.client/interface/ServerConnection.h index 43f6607..9780803 100644 --- a/org.glite.lb.client-interface/interface/ServerConnection.h +++ b/org.glite.lb.client/interface/ServerConnection.h @@ -14,8 +14,8 @@ #include "glite/wmsutils/jobid/JobId.h" #include "glite/lb/Event.h" -#include "glite/lb/JobStatus.h" -#include "glite/lb/consumer.h" +#include "JobStatus.h" +#include "consumer.h" EWL_BEGIN_NAMESPACE diff --git a/org.glite.lb.client-interface/interface/consumer.h b/org.glite.lb.client/interface/consumer.h similarity index 68% rename from org.glite.lb.client-interface/interface/consumer.h rename to org.glite.lb.client/interface/consumer.h index 225206f..6760775 100644 --- a/org.glite.lb.client-interface/interface/consumer.h +++ b/org.glite.lb.client/interface/consumer.h @@ -18,7 +18,7 @@ extern "C" { #endif /** - * \defgroup querying Server querying + * \defgroup Functions for Server querying * \brief The core part of the LB querying API. * * The functions in this part of the API are responsible for @@ -38,83 +38,6 @@ extern "C" { */ /** - * Predefined types for query attributes - */ -typedef enum _edg_wll_QueryAttr{ - EDG_WLL_QUERY_ATTR_UNDEF=0, /**< Not-defined value, used to terminate lists etc. */ - EDG_WLL_QUERY_ATTR_JOBID, /**< Job Id \see _edg_wll_QueryRec */ - EDG_WLL_QUERY_ATTR_OWNER, /**< Job owner \see _edg_wll_QueryRec */ - EDG_WLL_QUERY_ATTR_STATUS, /**< Current job status */ - EDG_WLL_QUERY_ATTR_LOCATION, /**< Where is the job processed */ - EDG_WLL_QUERY_ATTR_DESTINATION, /**< Destination CE */ - EDG_WLL_QUERY_ATTR_DONECODE, /**< Minor done status (OK,fail,cancel) */ - EDG_WLL_QUERY_ATTR_USERTAG, /**< User tag */ - EDG_WLL_QUERY_ATTR_TIME, /**< Timestamp \see _edg_wll_QueryRec */ - EDG_WLL_QUERY_ATTR_LEVEL, /**< Logging level (see "dglog.h") * \see _edg_wll_QueryRec */ - EDG_WLL_QUERY_ATTR_HOST, /**< Where the event was generated */ - EDG_WLL_QUERY_ATTR_SOURCE, /**< Source component */ - EDG_WLL_QUERY_ATTR_INSTANCE, /**< Instance of the source component */ - EDG_WLL_QUERY_ATTR_EVENT_TYPE, /**< Event type \see _edg_wll_QueryRec */ - EDG_WLL_QUERY_ATTR_CHKPT_TAG, /**< Checkpoint tag */ - EDG_WLL_QUERY_ATTR_RESUBMITTED, /**< Job was resubmitted */ - EDG_WLL_QUERY_ATTR_PARENT, /**< Job was resubmitted */ - EDG_WLL_QUERY_ATTR_EXITCODE, /**< Unix exit code */ - EDG_WLL_QUERY_ATTR__LAST -/* if adding new attribute, add conversion string to common/xml_conversions.c too !! */ -} edg_wll_QueryAttr; - - -/** - * Predefined types for query operands - */ -typedef enum _edg_wll_QueryOp{ - EDG_WLL_QUERY_OP_EQUAL, /**< attribute is equal to the operand value \see _edg_wll_QueryRec */ - EDG_WLL_QUERY_OP_LESS, /**< attribute is grater than the operand value \see _edg_wll_QueryRec */ - EDG_WLL_QUERY_OP_GREATER, /**< attribute is less than the operand value \see _edg_wll_QueryRec */ - EDG_WLL_QUERY_OP_WITHIN, /**< attribute is in given interval \see _edg_wll_QueryRec */ - EDG_WLL_QUERY_OP_UNEQUAL, /**< attribute is not equal to the operand value \see _edg_wll_QueryRec */ -} edg_wll_QueryOp; - - -/** - * Single query condition for edg_wll_Query(). - * Those records are composed to form an SQL \a where clause - * when processed at the L&B server - */ -typedef struct _edg_wll_QueryRec { - edg_wll_QueryAttr attr; /**< attribute to query */ - edg_wll_QueryOp op; /**< query operation */ - -/** - * Specification of attribute to query - */ - union { - char * tag; /**< user tag name */ - edg_wll_JobStatCode state; /**< job status code */ - } attr_id; -/** - * Query operand. - * The appropriate type is uniquely defined by the attr member - */ - union edg_wll_QueryVal { - int i; /**< integer query attribute value */ - char *c; /**< character query attribute value */ - struct timeval t; /**< time query attribute value */ - edg_wlc_JobId j; /**< JobId query attribute value */ - } value, value2; -} edg_wll_QueryRec; - -/** - * default query timeout (in seconds) - */ -#define EDG_WLL_QUERY_TIMEOUT_DEFAULT 120 - -/** - * maximal query timeout (in seconds) - */ -#define EDG_WLL_QUERY_TIMEOUT_MAX 1800 - -/** * General query on events. * Return events satisfying all conditions * query records represent conditions in the form @@ -232,19 +155,6 @@ int edg_wll_QueryJobsExtProxy( edg_wll_JobStat ** states ); - -/** - * Bitmasks for edg_wll_JobStatus() flags argument. - * Settings these flags causes the status calls to retrieve additional - * information. - */ -#define EDG_WLL_STAT_CLASSADS 1 /**< various job description fields */ -#define EDG_WLL_STAT_CHILDREN 2 /**< list of subjob JobId's */ -#define EDG_WLL_STAT_CHILDSTAT 4 /**< apply the flags recursively to subjobs */ -#define EDG_WLL_STAT_CHILDHIST_FAST 8 /**< partially complete histogram of child job states */ -#define EDG_WLL_STAT_CHILDHIST_THOROUGH 16 /**< full and up-to date histogram of child job states */ -/* starting from bit 10 private flags begins - do not add 1024 and more! */ - /** Return status of a single job. * \param[in] context context to operate on * \param[in] jobid query this job @@ -395,13 +305,6 @@ int edg_wll_QuerySequenceCodeProxy( ); /* - * edg_wll_QueryRec manipulation - */ - -/** Free edg_wll_QueryRec internals, not the structure itself */ -void edg_wll_QueryRecFree(edg_wll_QueryRec *); - -/* *@} end of group */ @@ -425,16 +328,6 @@ extern int set_server_name_and_port( #endif -/** - * default query timeout (in seconds) - */ -#define EDG_WLL_QUERY_TIMEOUT_DEFAULT 120 - -/** - * maximal query timeout (in seconds) - */ -#define EDG_WLL_QUERY_TIMEOUT_MAX 1800 - #ifdef __cplusplus } #endif diff --git a/org.glite.lb.client-interface/interface/consumer_fake.h b/org.glite.lb.client/interface/consumer_fake.h similarity index 100% rename from org.glite.lb.client-interface/interface/consumer_fake.h rename to org.glite.lb.client/interface/consumer_fake.h diff --git a/org.glite.lb.client-interface/interface/dump.h b/org.glite.lb.client/interface/dump.h similarity index 100% rename from org.glite.lb.client-interface/interface/dump.h rename to org.glite.lb.client/interface/dump.h diff --git a/org.glite.lb.client-interface/interface/load.h b/org.glite.lb.client/interface/load.h similarity index 100% rename from org.glite.lb.client-interface/interface/load.h rename to org.glite.lb.client/interface/load.h diff --git a/org.glite.lb.client-interface/interface/notification.h b/org.glite.lb.client/interface/notification.h similarity index 96% rename from org.glite.lb.client-interface/interface/notification.h rename to org.glite.lb.client/interface/notification.h index 0a92c60..af5e893 100644 --- a/org.glite.lb.client-interface/interface/notification.h +++ b/org.glite.lb.client/interface/notification.h @@ -6,7 +6,8 @@ #include "glite/wmsutils/jobid/cjobid.h" #include "glite/lb/notifid.h" #include "glite/lb/context.h" -#include "glite/lb/consumer.h" + +#include "consumer.h" #ifdef __cplusplus extern "C" { @@ -18,13 +19,6 @@ extern "C" { *@{ */ -/** - * default and maximal notif timeout (in seconds) - */ -#define EDG_WLL_NOTIF_TIMEOUT_DEFAULT 120 -#define EDG_WLL_NOTIF_TIMEOUT_MAX 1800 - - /** Register for receiving notifications. * Connects to the server specified by EDG_WLL_NOTIF_SERVER context parameter * (temporary workaround, should be resolved by registry in future). diff --git a/org.glite.lb.client-interface/interface/producer.h.T b/org.glite.lb.client/interface/producer.h.T similarity index 90% rename from org.glite.lb.client-interface/interface/producer.h.T rename to org.glite.lb.client/interface/producer.h.T index ee3b3d6..826aa4f 100644 --- a/org.glite.lb.client-interface/interface/producer.h.T +++ b/org.glite.lb.client/interface/producer.h.T @@ -36,55 +36,6 @@ extern "C" { #endif -/* Event formats: */ - -#define EDG_WLL_FORMAT_COMMON "DATE=%s HOST=\"%|Us\" PROG=edg-wms LVL=%s DG.PRIORITY=%d DG.SOURCE=\"%|Us\" DG.SRC_INSTANCE=\"%|Us\" DG.EVNT=\"%s\" DG.JOBID=\"%s\" DG.SEQCODE=\"%|Us\" " -#define EDG_WLL_FORMAT_USER "DG.USER=\"%|Us\" " -@@@{ -# FIXME: -# this is all functional, but doesn't fit to all common fields (eg. USER) -# -#gen "#define EDG_WLL_FORMAT_COMMON\t\""; -#selectType $event '_common_'; -#for ($event->getFieldsOrdered) { -# my $f = selectField $event $_; -# my $fn = getName $f 'ULM'; -# my $fnu = uc $fn; -# if (hasAlias $f 'ULM') { -# gen "$fnu=%s "; -# } else { -# gen "DG\.$fnu="; -# gen $f->toFormatString; -# gen " "; -# } -#} -#gen "\"\n"; -# -for my $t (sort { $event->{order}->{$a} <=> $event->{order}->{$b} } - $event->getTypes) { - my $tu = uc $t; - gen "#define EDG_WLL_FORMAT_$tu\t\""; - selectType $event $t; - for ($event->getFieldsOrdered) { - my $f = selectField $event $_; - my $fn = $f->{name}; - my $fnu = uc $fn; - gen "DG.$tu.$fnu=\\\""; - if ($f->{codes}) { - gen "%s"; - } else { - gen $f->toFormatString; - } - gen "\\\" "; - } - gen "\"\n"; -} -@@@} -#define EDG_WLL_FORMAT_NOTIFICATION_COMMON "DATE=%s HOST=\"%|Us\" PROG=edg-wms LVL=%s DG.SOURCE=\"%|Us\" DG.SRC_INSTANCE=\"%|Us\" DG.TYPE=\"notification\" " -#define EDG_WLL_FORMAT_SYSCMPSTAT "DG.SCHED.STATUS=\"%|Us\" " -#define EDG_WLL_FORMAT_SYSCLSTAT "DG.SCHED.NODE=\"%|Us\" DG.SCHED.STATUS=\"%|Us\" " - - /* edg_wll_LogEvent shortcuts */ @@@{ for my $t (sort { $event->{order}->{$a} <=> $event->{order}->{$b} } diff --git a/org.glite.lb.client-interface/interface/producer_fake.h b/org.glite.lb.client/interface/producer_fake.h similarity index 100% rename from org.glite.lb.client-interface/interface/producer_fake.h rename to org.glite.lb.client/interface/producer_fake.h diff --git a/org.glite.lb.client-interface/interface/purge.h b/org.glite.lb.client/interface/purge.h similarity index 100% rename from org.glite.lb.client-interface/interface/purge.h rename to org.glite.lb.client/interface/purge.h diff --git a/org.glite.lb.client-interface/interface/statistics.h b/org.glite.lb.client/interface/statistics.h similarity index 97% rename from org.glite.lb.client-interface/interface/statistics.h rename to org.glite.lb.client/interface/statistics.h index f2444de..4c2027d 100644 --- a/org.glite.lb.client-interface/interface/statistics.h +++ b/org.glite.lb.client/interface/statistics.h @@ -1,7 +1,7 @@ #ifndef __EDG_WORKLOAD_LOGGING_CLIENT_STATISTICS_H__ #define __EDG_WORKLOAD_LOGGING_CLIENT_STATISTICS_H__ -#include "glite/lb/consumer.h" +#include "consumer.h" #ifdef __cplusplus extern "C" { diff --git a/org.glite.lb.client/src/Event.cpp.T b/org.glite.lb.client/src/Event.cpp.T index 7b4ef43..43fc745 100644 --- a/org.glite.lb.client/src/Event.cpp.T +++ b/org.glite.lb.client/src/Event.cpp.T @@ -13,11 +13,11 @@ #include "glite/lb/Event.h" #include "glite/wmsutils/jobid/JobIdExceptions.h" -#include "glite/lb/LoggingExceptions.h" - -#include "glite/lb/consumer.h" #include "glite/lb/events.h" #include "glite/lb/notifid.h" +#include "glite/lb/LoggingExceptions.h" + +#include "consumer.h" EWL_BEGIN_NAMESPACE; diff --git a/org.glite.lb.client/src/Notification.cpp b/org.glite.lb.client/src/Notification.cpp index 0441626..b02c05b 100644 --- a/org.glite.lb.client/src/Notification.cpp +++ b/org.glite.lb.client/src/Notification.cpp @@ -18,7 +18,7 @@ #include "glite/lb/ServerConnection.h" #include "glite/lb/notifid.h" -#include "glite/lb/notification.h" +#include "notification.h" EWL_BEGIN_NAMESPACE; diff --git a/org.glite.lb.client/src/connection.c b/org.glite.lb.client/src/connection.c index 35fb63c..b5535ae 100644 --- a/org.glite.lb.client/src/connection.c +++ b/org.glite.lb.client/src/connection.c @@ -13,11 +13,11 @@ #include #include "glite/security/glite_gss.h" -#include "glite/lb/consumer.h" #include "glite/lb/context-int.h" #include "glite/lb/mini_http.h" #include "glite/lb/connpool.h" +#include "consumer.h" #include "connection.h" diff --git a/org.glite.lb.client/src/consumer.c b/org.glite.lb.client/src/consumer.c index 8011242..df3099b 100644 --- a/org.glite.lb.client/src/consumer.c +++ b/org.glite.lb.client/src/consumer.c @@ -11,12 +11,12 @@ #include "globus_config.h" -#include "glite/lb/consumer.h" #include "glite/lb/context-int.h" #include "glite/lb/mini_http.h" #include "glite/lb/xml_parse.h" #include "glite/lb/xml_conversions.h" +#include "consumer.h" #include "connection.h" static const char* const request_headers[] = { diff --git a/org.glite.lb.client/src/dump.c b/org.glite.lb.client/src/dump.c index 8459199..8ceec92 100644 --- a/org.glite.lb.client/src/dump.c +++ b/org.glite.lb.client/src/dump.c @@ -12,13 +12,13 @@ #define CLIENT_SBIN_PROG -#include "glite/lb/consumer.h" #include "glite/lb/context-int.h" -#include "glite/lb/dump.h" #include "glite/lb/ulm_parse.h" #include "glite/lb/xml_parse.h" #include "glite/lb/mini_http.h" +#include "dump.h" +#include "consumer.h" #define dprintf(x) { if (debug) printf x; } diff --git a/org.glite.lb.client/src/load.c b/org.glite.lb.client/src/load.c index ce18d03..538e68d 100644 --- a/org.glite.lb.client/src/load.c +++ b/org.glite.lb.client/src/load.c @@ -12,13 +12,14 @@ #define CLIENT_SBIN_PROG -#include "glite/lb/consumer.h" #include "glite/lb/context-int.h" -#include "glite/lb/load.h" #include "glite/lb/ulm_parse.h" #include "glite/lb/xml_parse.h" #include "glite/lb/mini_http.h" +#include "load.h" +#include "consumer.h" + #define dprintf(x) { if (debug) printf x; } static const char rcsid[] = "@(#)$Id$"; diff --git a/org.glite.lb.client/src/logevent.c.T b/org.glite.lb.client/src/logevent.c.T index f9d0da1..377c90c 100644 --- a/org.glite.lb.client/src/logevent.c.T +++ b/org.glite.lb.client/src/logevent.c.T @@ -18,9 +18,9 @@ #include "glite/security/glite_gss.h" #include "glite/wmsutils/jobid/cjobid.h" #include "glite/lb/notifid.h" -#include "glite/lb/producer.h" #include "glite/lb/events.h" +#include "producer.h" #include "args.h" //" %s -p -l 100000 -j https://localhost/First_JobIV?localhost:7771 -s UserInterface -e jobAbort DG.JOB.ABORT.REASON=\"oops\"\n\n", diff --git a/org.glite.lb.client/src/notification.c b/org.glite.lb.client/src/notification.c index 2d91207..3d7709f 100644 --- a/org.glite.lb.client/src/notification.c +++ b/org.glite.lb.client/src/notification.c @@ -11,7 +11,6 @@ #include #include "glite/security/glite_gss.h" -#include "glite/lb/notification.h" #include "glite/lb/events.h" #include "glite/lb/log_proto.h" #include "glite/lb/mini_http.h" @@ -21,6 +20,7 @@ #include "glite/lb/il_msg.h" #include "glite/lb/escape.h" +#include "notification.h" #include "connection.h" #define CON_QUEUE 10 /* listen() queue limit */ diff --git a/org.glite.lb.client/src/prod_proto.c b/org.glite.lb.client/src/prod_proto.c index 51a3152..76f8540 100644 --- a/org.glite.lb.client/src/prod_proto.c +++ b/org.glite.lb.client/src/prod_proto.c @@ -8,13 +8,13 @@ #include #include -#include "glite/lb/producer.h" #include "glite/lb/lb_plain_io.h" #include "glite/lb/il_msg.h" #include "glite/lb/il_string.h" #include "glite/lb/connpool.h" #include "prod_proto.h" +#include "producer.h" #include "connection.h" static const char* socket_path="/tmp/lb_proxy_store.sock"; diff --git a/org.glite.lb.client/src/producer.c b/org.glite.lb.client/src/producer.c index 5be5dc5..2a3cede 100644 --- a/org.glite.lb.client/src/producer.c +++ b/org.glite.lb.client/src/producer.c @@ -13,10 +13,11 @@ #include "glite/wmsutils/jobid/strmd5.h" #include "glite/lb/ulm_parse.h" #include "glite/lb/trio.h" +#include "glite/lb/context-int.h" -#include "glite/lb/producer.h" - +#include "producer.h" #include "prod_proto.h" +#include "consumer.h" // for QuerySequenceCode /* XXX: paralel registration is disabled until the race condition (via proxy first) * job owner assignment is solved */ diff --git a/org.glite.lb.client/src/purge.c b/org.glite.lb.client/src/purge.c index 3c0f934..f996c50 100644 --- a/org.glite.lb.client/src/purge.c +++ b/org.glite.lb.client/src/purge.c @@ -12,12 +12,12 @@ #define CLIENT_SBIN_PROG -#include "glite/lb/consumer.h" #include "glite/lb/context-int.h" -#include "glite/lb/purge.h" #include "glite/lb/xml_parse.h" #include "glite/lb/mini_http.h" +#include "purge.h" +#include "consumer.h" #define dprintf(x) { if (debug) printf x; } diff --git a/org.glite.lb.client/src/statistics.c b/org.glite.lb.client/src/statistics.c index 9e59484..b8b7f62 100644 --- a/org.glite.lb.client/src/statistics.c +++ b/org.glite.lb.client/src/statistics.c @@ -6,12 +6,12 @@ #include #include -#include "glite/lb/statistics.h" #include "glite/lb/context.h" #include "glite/lb/context-int.h" #include "glite/lb/xml_parse.h" #include "glite/lb/mini_http.h" +#include "statistics.h" #include "connection.h" diff --git a/org.glite.lb.client/src/uiwrap.c.T b/org.glite.lb.client/src/uiwrap.c.T index 8ad66e0..a64316d 100644 --- a/org.glite.lb.client/src/uiwrap.c.T +++ b/org.glite.lb.client/src/uiwrap.c.T @@ -5,7 +5,7 @@ @@@LANG: C #include "glite/wmsutils/jobid/cjobid.h" -#include "glite/lb/producer.h" +#include "producer.h" @@@{ for my $t (sort { $event->{order}->{$a} <=> $event->{order}->{$b} } diff --git a/org.glite.lb.common/Makefile b/org.glite.lb.common/Makefile index ada383b..3070597 100644 --- a/org.glite.lb.common/Makefile +++ b/org.glite.lb.common/Makefile @@ -20,7 +20,7 @@ jobiddir=${top_srcdir}/../org.glite.wms-utils.jobid version=${module.version} -VPATH=${top_srcdir}/src:${top_srcdir}/test::${top_srcdir}/doc +VPATH=${top_srcdir}/src:${top_srcdir}/interface:${top_srcdir}/test:${top_srcdir}/doc AT3=${stagedir}/sbin/glite-lb-at3 SUFFIXES = .T @@ -38,8 +38,9 @@ else JOBID_LIB:=-lglite_wmsutils_cjobid endif -PERF_HDRS:=lb_perftest.h -PERF_OBJS:=lb_perftest.o +# FIXME: +# PERF_HDRS:=lb_perftest.h +# PERF_OBJS:=lb_perftest.o CFLAGS:=${DEBUG} -I${top_srcdir}/src -I${top_srcdir}/interface \ -I. \ @@ -106,9 +107,11 @@ MAILDIR_LIB:=libglite_lb_maildir.la THROBJS:=${OBJS:.o=.thr.o} THRLOBJS:=${OBJS:.o=.thr.lo} -HDRS:=context-int.h lb_plain_io.h mini_http.h authz.h xml_parse.h \ +HDRS:=context.h context-int.h lb_plain_io.h mini_http.h authz.h xml_parse.h \ xml_conversions.h log_proto.h events_parse.h il_string.h il_msg.h \ - escape.h ulm_parse.h trio.h lb_maildir.h connpool.h ${PERF_HDRS} + escape.h ulm_parse.h trio.h lb_maildir.h connpool.h notifid.h \ + query_rec.h LoggingExceptions.h CountRef.h ${PERF_HDRS} +GEN_HDRS:=Event.h events.h jobstat.h STATICLIB:=libglite_lb_common_${nothrflavour}.a THRSTATICLIB:=libglite_lb_common_${thrflavour}.a @@ -119,15 +122,17 @@ REPORTS:=${top_srcdir}/reports ifdef LB_PERF STAGE_PERFTEST=mkdir -p ${PREFIX}/examples/perftest; \ - install -m 644 ${top_srcdir}/examples/*.log ${PREFIX}/examples/perftest; \ - mkdir -p ${PREFIX}/sbin; install -m 755 ${top_srcdir}/src/perftest_common.sh ${PREFIX}/sbin + ${INSTALL} -m 644 ${top_srcdir}/examples/*.log ${PREFIX}/examples/perftest; \ + mkdir -p ${PREFIX}/sbin; ${INSTALL} -m 755 ${top_srcdir}/src/perftest_common.sh ${PREFIX}/sbin else STAGE_PERFTEST=true endif default: all -all compile: check_version ${STATICLIB} ${LTLIB} ${THRSTATICLIB} ${THRLTLIB} ${TRIO_LIB} ${MAILDIR_LIB} +generate: ${GEN_HDRS} + +all compile: generate ${STATICLIB} ${LTLIB} ${THRSTATICLIB} ${THRLTLIB} ${TRIO_LIB} ${MAILDIR_LIB} # In order to use libtool versioning correcty, we must have: # @@ -226,18 +231,19 @@ install: ${INSTALL} -m 644 ${top_srcdir}/LICENSE ${PREFIX}/share/doc/${package}-${version} if [ x${DOSTAGE} = xyes ]; then \ mkdir -p ${PREFIX}/include/${globalprefix}/${lbprefix} ; \ - (cd ${top_srcdir}/interface && install -m 644 ${HDRS} ${PREFIX}/include/${globalprefix}/${lbprefix}) ; \ - install -m 644 ${STATICLIB} ${THRSTATICLIB} ${TRIO_LIB} ${PREFIX}/lib; \ + (cd ${top_srcdir}/interface && ${INSTALL} -m 644 ${HDRS} ${PREFIX}/include/${globalprefix}/${lbprefix}) ; \ + ${INSTALL} -m 644 ${GEN_HDRS} ${PREFIX}/include/${globalprefix}/${lbprefix} ; \ + ${INSTALL} -m 644 ${STATICLIB} ${THRSTATICLIB} ${TRIO_LIB} ${PREFIX}/lib; \ if [ x${LB_STANDALONE} = xyes ]; then \ mkdir -p ${PREFIX}/include/glite/wmsutils/jobid ; \ - install -m 644 glite/wmsutils/jobid/*.h ${PREFIX}/include/glite/wmsutils/jobid/ ; \ + ${INSTALL} -m 644 glite/wmsutils/jobid/*.h ${PREFIX}/include/glite/wmsutils/jobid/ ; \ fi ; \ ${STAGE_PERFTEST} ; \ fi clean: - rm -rf *.o *.lo .libs lib* *.c test_parse il_test - + rm -rvf *.o *.lo .libs lib* *.c *.h test_parse il_test parse.cpp events.tex status.tex + rm -rvf log.xml project/ rpmbuild/ RPMS/ tgz/ %.o: %.c ${COMPILE} ${GLOBUSINC} ${CFLAGS} -c $< diff --git a/org.glite.lb.client-interface/interface/CountRef.h b/org.glite.lb.common/interface/CountRef.h similarity index 100% rename from org.glite.lb.client-interface/interface/CountRef.h rename to org.glite.lb.common/interface/CountRef.h diff --git a/org.glite.lb.client-interface/interface/Event.h.T b/org.glite.lb.common/interface/Event.h.T similarity index 99% rename from org.glite.lb.client-interface/interface/Event.h.T rename to org.glite.lb.common/interface/Event.h.T index 4e293ca..074d181 100644 --- a/org.glite.lb.client-interface/interface/Event.h.T +++ b/org.glite.lb.common/interface/Event.h.T @@ -2,13 +2,6 @@ #define __EDG_WORKLOAD_LOGGING_CLIENT_EVENT_HPP__ -#include -#include -#include - -#include "glite/wmsutils/jobid/JobId.h" -#include "glite/lb/CountRef.h" - #ident "$Header$" /** @file Event.h @@ -20,8 +13,15 @@ */ @@@LANG: C++ -#include "glite/lb/events.h" -#include "glite/lb/notifid.h" +#include +#include +#include + +#include "glite/wmsutils/jobid/JobId.h" +#include "glite/lb/CountRef.h" + +#include "events.h" +#include "notifid.h" EWL_BEGIN_NAMESPACE diff --git a/org.glite.lb.client-interface/interface/LoggingExceptions.h b/org.glite.lb.common/interface/LoggingExceptions.h similarity index 100% rename from org.glite.lb.client-interface/interface/LoggingExceptions.h rename to org.glite.lb.common/interface/LoggingExceptions.h diff --git a/org.glite.lb.common/interface/connpool.h b/org.glite.lb.common/interface/connpool.h index 92bcfe2..4197bd2 100644 --- a/org.glite.lb.common/interface/connpool.h +++ b/org.glite.lb.common/interface/connpool.h @@ -1,5 +1,5 @@ #include "glite/security/glite_gss.h" -#include "glite/lb/consumer.h" +#include "context.h" #include "lb_plain_io.h" #include "authz.h" #ifdef GLITE_LB_THREADED diff --git a/org.glite.lb.common/interface/context-int.h b/org.glite.lb.common/interface/context-int.h index a777725..bd80721 100644 --- a/org.glite.lb.common/interface/context-int.h +++ b/org.glite.lb.common/interface/context-int.h @@ -4,7 +4,8 @@ #ident "$Header$" #include "glite/security/glite_gss.h" -#include "glite/lb/consumer.h" +#include "jobstat.h" +#include "query_rec.h" #include "lb_plain_io.h" #include "authz.h" #include "connpool.h" diff --git a/org.glite.lb.client-interface/interface/context.h b/org.glite.lb.common/interface/context.h similarity index 100% rename from org.glite.lb.client-interface/interface/context.h rename to org.glite.lb.common/interface/context.h diff --git a/org.glite.lb.client-interface/interface/events.h.T b/org.glite.lb.common/interface/events.h.T similarity index 84% rename from org.glite.lb.client-interface/interface/events.h.T rename to org.glite.lb.common/interface/events.h.T index f9f5693..e04c20d 100644 --- a/org.glite.lb.client-interface/interface/events.h.T +++ b/org.glite.lb.common/interface/events.h.T @@ -2,7 +2,8 @@ #define __EDG_WORKLOAD_LOGGING_CLIENT_EVENTS_H__ /** - * \brief contains definition of event type codes for use both by lbapi.h and dglog.h + * \file events.h + * \brief contains definition of event types */ #ident "$Header$" @@ -15,8 +16,8 @@ #include #include "glite/wmsutils/jobid/cjobid.h" -#include "glite/lb/context.h" -#include "glite/lb/notifid.h" +#include "context.h" +#include "notifid.h" #ifdef __cplusplus extern "C" { @@ -335,6 +336,55 @@ void edg_wll_FreeEvent( edg_wll_Event * event ); + +/* Event formats: */ + +#define EDG_WLL_FORMAT_COMMON "DATE=%s HOST=\"%|Us\" PROG=edg-wms LVL=%s DG.PRIORITY=%d DG.SOURCE=\"%|Us\" DG.SRC_INSTANCE=\"%|Us\" DG.EVNT=\"%s\" DG.JOBID=\"%s\" DG.SEQCODE=\"%|Us\" " +#define EDG_WLL_FORMAT_USER "DG.USER=\"%|Us\" " +@@@{ +# FIXME: +# this is all functional, but doesn't fit to all common fields (eg. USER) +# +#gen "#define EDG_WLL_FORMAT_COMMON\t\""; +#selectType $event '_common_'; +#for ($event->getFieldsOrdered) { +# my $f = selectField $event $_; +# my $fn = getName $f 'ULM'; +# my $fnu = uc $fn; +# if (hasAlias $f 'ULM') { +# gen "$fnu=%s "; +# } else { +# gen "DG\.$fnu="; +# gen $f->toFormatString; +# gen " "; +# } +#} +#gen "\"\n"; +# +for my $t (sort { $event->{order}->{$a} <=> $event->{order}->{$b} } + $event->getTypes) { + my $tu = uc $t; + gen "#define EDG_WLL_FORMAT_$tu\t\""; + selectType $event $t; + for ($event->getFieldsOrdered) { + my $f = selectField $event $_; + my $fn = $f->{name}; + my $fnu = uc $fn; + gen "DG.$tu.$fnu=\\\""; + if ($f->{codes}) { + gen "%s"; + } else { + gen $f->toFormatString; + } + gen "\\\" "; + } + gen "\"\n"; +} +@@@} +#define EDG_WLL_FORMAT_NOTIFICATION_COMMON "DATE=%s HOST=\"%|Us\" PROG=edg-wms LVL=%s DG.SOURCE=\"%|Us\" DG.SRC_INSTANCE=\"%|Us\" DG.TYPE=\"notification\" " +#define EDG_WLL_FORMAT_SYSCMPSTAT "DG.SCHED.STATUS=\"%|Us\" " +#define EDG_WLL_FORMAT_SYSCLSTAT "DG.SCHED.NODE=\"%|Us\" DG.SCHED.STATUS=\"%|Us\" " + /* *@} end of group */ diff --git a/org.glite.lb.common/interface/events_parse.h b/org.glite.lb.common/interface/events_parse.h index 155d7ac..0f1250d 100644 --- a/org.glite.lb.common/interface/events_parse.h +++ b/org.glite.lb.common/interface/events_parse.h @@ -3,7 +3,7 @@ #ident "$Header$" -#include "glite/lb/events.h" +#include "events.h" #ifdef __cplusplus extern "C" { diff --git a/org.glite.lb.client-interface/interface/jobstat.h.T b/org.glite.lb.common/interface/jobstat.h.T similarity index 81% rename from org.glite.lb.client-interface/interface/jobstat.h.T rename to org.glite.lb.common/interface/jobstat.h.T index 64389ec..fc6375f 100644 --- a/org.glite.lb.client-interface/interface/jobstat.h.T +++ b/org.glite.lb.common/interface/jobstat.h.T @@ -1,16 +1,18 @@ #ifndef __EDG_WORKLOAD_LOGGING_CLIENT_JOBSTAT_H__ #define __EDG_WORKLOAD_LOGGING_CLIENT_JOBSTAT_H__ -/* -@@@AUTO -*/ - /*! * \file jobstat.h * \brief edg_wll_JobStat definition and related stuff */ #ident "$Header$" +/* +@@@AUTO +*/ +@@@LANG: C + +#include "glite/wmsutils/jobid/cjobid.h" #ifdef __cplusplus extern "C" { @@ -111,6 +113,20 @@ typedef struct _edg_wll_JobStat { * \name edg_wll_JobStat manipulation */ + +/** + * Bitmasks for edg_wll_JobStatus() flags argument. + * Settings these flags causes the status calls to retrieve additional + * information. + */ +#define EDG_WLL_STAT_CLASSADS 1 /**< various job description fields */ +#define EDG_WLL_STAT_CHILDREN 2 /**< list of subjob JobId's */ +#define EDG_WLL_STAT_CHILDSTAT 4 /**< apply the flags recursively to subjobs */ +#define EDG_WLL_STAT_CHILDHIST_FAST 8 /**< partially complete histogram of child job states */ +#define EDG_WLL_STAT_CHILDHIST_THOROUGH 16 /**< full and up-to date histogram of child job states */ +/* starting from bit 10 private flags begins - do not add 1024 and more! */ + + /** * Initialize empty status structure. * Fills in the stucture with NULL's or values with no meaning diff --git a/org.glite.lb.common/interface/lb_perftest.h b/org.glite.lb.common/interface/lb_perftest.h index 65e9d76..9a14090 100644 --- a/org.glite.lb.common/interface/lb_perftest.h +++ b/org.glite.lb.common/interface/lb_perftest.h @@ -5,7 +5,7 @@ #include "glite/wmsutils/jobid/cjobid.h" #include "glite/wmsutils/jobid/strmd5.h" -#include "glite/lb/events.h" +#include "events.h" #define PERFTEST_END_TAG_NAME "lb_perftest" #define PERFTEST_END_TAG_VALUE "+++ konec testu +++" diff --git a/org.glite.lb.common/interface/log_proto.h b/org.glite.lb.common/interface/log_proto.h index 505df74..4f0329e 100644 --- a/org.glite.lb.common/interface/log_proto.h +++ b/org.glite.lb.common/interface/log_proto.h @@ -14,7 +14,7 @@ extern "C" { #endif -#include "glite/lb/context.h" +#include "context.h" /** * default (noauth) user name @@ -49,15 +49,6 @@ extern "C" { /** - * default and maximal logging timeout (in seconds) - */ -#define EDG_WLL_LOG_TIMEOUT_DEFAULT 120 -#define EDG_WLL_LOG_TIMEOUT_MAX 300 -#define EDG_WLL_LOG_SYNC_TIMEOUT_DEFAULT 120 -#define EDG_WLL_LOG_SYNC_TIMEOUT_MAX 600 - - -/** * maximal message size for sync logging */ /** max message size in bytes */ diff --git a/org.glite.lb.common/interface/mini_http.h b/org.glite.lb.common/interface/mini_http.h index 1bae8b9..5607f3f 100644 --- a/org.glite.lb.common/interface/mini_http.h +++ b/org.glite.lb.common/interface/mini_http.h @@ -3,7 +3,8 @@ #ident "$Header$" -#include "glite/lb/consumer.h" +// #include "glite/lb/consumer.h" +#include "context.h" #include "connpool.h" /* XXX: not a good place for the folowing #def's but we ain't got better currently */ diff --git a/org.glite.lb.client-interface/interface/notifid.h b/org.glite.lb.common/interface/notifid.h similarity index 100% rename from org.glite.lb.client-interface/interface/notifid.h rename to org.glite.lb.common/interface/notifid.h diff --git a/org.glite.lb.common/interface/query_rec.h b/org.glite.lb.common/interface/query_rec.h new file mode 100644 index 0000000..287f320 --- /dev/null +++ b/org.glite.lb.common/interface/query_rec.h @@ -0,0 +1,109 @@ +#ifndef __EDG_WORKLOAD_LOGGING_CLIENT_CONSUMER_H__ +#define __EDG_WORKLOAD_LOGGING_CLIENT_CONSUMER_H__ + +/*! + * \file consumer.h + * \brief L&B consumer API + */ + +#ident "$Header$" + +#include "glite/wmsutils/jobid/cjobid.h" +#include "context.h" +#include "events.h" +#include "jobstat.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \defgroup Structures for Server querying + * \brief Structures for Server querying + * + *@{ + */ + +/** + * Predefined types for query attributes + */ +typedef enum _edg_wll_QueryAttr{ + EDG_WLL_QUERY_ATTR_UNDEF=0, /**< Not-defined value, used to terminate lists etc. */ + EDG_WLL_QUERY_ATTR_JOBID, /**< Job Id \see _edg_wll_QueryRec */ + EDG_WLL_QUERY_ATTR_OWNER, /**< Job owner \see _edg_wll_QueryRec */ + EDG_WLL_QUERY_ATTR_STATUS, /**< Current job status */ + EDG_WLL_QUERY_ATTR_LOCATION, /**< Where is the job processed */ + EDG_WLL_QUERY_ATTR_DESTINATION, /**< Destination CE */ + EDG_WLL_QUERY_ATTR_DONECODE, /**< Minor done status (OK,fail,cancel) */ + EDG_WLL_QUERY_ATTR_USERTAG, /**< User tag */ + EDG_WLL_QUERY_ATTR_TIME, /**< Timestamp \see _edg_wll_QueryRec */ + EDG_WLL_QUERY_ATTR_LEVEL, /**< Logging level (see "dglog.h") * \see _edg_wll_QueryRec */ + EDG_WLL_QUERY_ATTR_HOST, /**< Where the event was generated */ + EDG_WLL_QUERY_ATTR_SOURCE, /**< Source component */ + EDG_WLL_QUERY_ATTR_INSTANCE, /**< Instance of the source component */ + EDG_WLL_QUERY_ATTR_EVENT_TYPE, /**< Event type \see _edg_wll_QueryRec */ + EDG_WLL_QUERY_ATTR_CHKPT_TAG, /**< Checkpoint tag */ + EDG_WLL_QUERY_ATTR_RESUBMITTED, /**< Job was resubmitted */ + EDG_WLL_QUERY_ATTR_PARENT, /**< Job was resubmitted */ + EDG_WLL_QUERY_ATTR_EXITCODE, /**< Unix exit code */ + EDG_WLL_QUERY_ATTR__LAST +/* if adding new attribute, add conversion string to common/xml_conversions.c too !! */ +} edg_wll_QueryAttr; + + +/** + * Predefined types for query operands + */ +typedef enum _edg_wll_QueryOp{ + EDG_WLL_QUERY_OP_EQUAL, /**< attribute is equal to the operand value \see _edg_wll_QueryRec */ + EDG_WLL_QUERY_OP_LESS, /**< attribute is grater than the operand value \see _edg_wll_QueryRec */ + EDG_WLL_QUERY_OP_GREATER, /**< attribute is less than the operand value \see _edg_wll_QueryRec */ + EDG_WLL_QUERY_OP_WITHIN, /**< attribute is in given interval \see _edg_wll_QueryRec */ + EDG_WLL_QUERY_OP_UNEQUAL, /**< attribute is not equal to the operand value \see _edg_wll_QueryRec */ +} edg_wll_QueryOp; + + +/** + * Single query condition for edg_wll_Query(). + * Those records are composed to form an SQL \a where clause + * when processed at the L&B server + */ +typedef struct _edg_wll_QueryRec { + edg_wll_QueryAttr attr; /**< attribute to query */ + edg_wll_QueryOp op; /**< query operation */ + +/** + * Specification of attribute to query + */ + union { + char * tag; /**< user tag name */ + edg_wll_JobStatCode state; /**< job status code */ + } attr_id; +/** + * Query operand. + * The appropriate type is uniquely defined by the attr member + */ + union edg_wll_QueryVal { + int i; /**< integer query attribute value */ + char *c; /**< character query attribute value */ + struct timeval t; /**< time query attribute value */ + edg_wlc_JobId j; /**< JobId query attribute value */ + } value, value2; +} edg_wll_QueryRec; + +/* + * edg_wll_QueryRec manipulation + */ + +/** Free edg_wll_QueryRec internals, not the structure itself */ +void edg_wll_QueryRecFree(edg_wll_QueryRec *); + +/* + *@} end of group + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __EDG_WORKLOAD_LOGGING_CLIENT_CONSUMER_H__ */ diff --git a/org.glite.lb.common/interface/timeouts.h b/org.glite.lb.common/interface/timeouts.h new file mode 100644 index 0000000..eb075f2 --- /dev/null +++ b/org.glite.lb.common/interface/timeouts.h @@ -0,0 +1,20 @@ +/** + * default and maximal notif timeout (in seconds) + */ +#define EDG_WLL_NOTIF_TIMEOUT_DEFAULT 120 +#define EDG_WLL_NOTIF_TIMEOUT_MAX 1800 + +/** + * default and maximal query timeout (in seconds) + */ +#define EDG_WLL_QUERY_TIMEOUT_DEFAULT 120 +#define EDG_WLL_QUERY_TIMEOUT_MAX 1800 + +/** + * default and maximal logging timeout (in seconds) + */ +#define EDG_WLL_LOG_TIMEOUT_DEFAULT 120 +#define EDG_WLL_LOG_TIMEOUT_MAX 300 +#define EDG_WLL_LOG_SYNC_TIMEOUT_DEFAULT 120 +#define EDG_WLL_LOG_SYNC_TIMEOUT_MAX 600 + diff --git a/org.glite.lb.common/interface/xml_conversions.h b/org.glite.lb.common/interface/xml_conversions.h index 91036fe..2c261c1 100644 --- a/org.glite.lb.common/interface/xml_conversions.h +++ b/org.glite.lb.common/interface/xml_conversions.h @@ -3,12 +3,16 @@ #ident "$Header$" -#include "glite/lb/events.h" -#include "glite/lb/consumer.h" +#include "glite/wmsutils/jobid/cjobid.h" +#include "events.h" +#include "query_rec.h" +#include "notifid.h" +/* FIXME #include "glite/lb/purge.h" #include "glite/lb/dump.h" #include "glite/lb/load.h" #include "glite/lb/notification.h" +*/ #ifdef __cplusplus extern "C" { @@ -55,17 +59,21 @@ typedef struct _edg_wll_XML_ctx { char *(*indexToTag)(); edg_wll_TagValue *tagListGlobal; edg_wll_JobStat *stsListGlobal; +/* FIXME: edg_wll_PurgeRequest purgeRequestGlobal; edg_wll_PurgeResult purgeResultGlobal; edg_wll_DumpRequest dumpRequestGlobal; edg_wll_DumpResult dumpResultGlobal; edg_wll_LoadRequest loadRequestGlobal; edg_wll_LoadResult loadResultGlobal; +*/ edg_wll_QueryRec **attrsGlobal; char *notifFunction; char *notifClientAddress; edg_wll_NotifId notifId; +/* FIXME edg_wll_NotifChangeOp notifChangeOp; +*/ time_t notifValidity; char *statsFunction; edg_wll_QueryRec **statsConditions; @@ -137,8 +145,10 @@ int edg_wll_StringTodone_code(const char *name); char *edg_wll_done_codeToString(int done_codeConst); edg_wll_QueryAttr edg_wll_StringToquery_attr(const char *name); char *edg_wll_query_attrToString(edg_wll_QueryAttr query_attrConst); +/* FIXME: edg_wll_NotifChangeOp edg_wll_StringToNotifChangeOp(const char *name); char *edg_wll_NotifChangeOpToString(edg_wll_NotifChangeOp notifChangeOpConst); +*/ #ifdef __cplusplus } // extern "C" diff --git a/org.glite.lb.common/interface/xml_parse.h b/org.glite.lb.common/interface/xml_parse.h index a08d788..837600d 100644 --- a/org.glite.lb.common/interface/xml_parse.h +++ b/org.glite.lb.common/interface/xml_parse.h @@ -3,11 +3,17 @@ #ident "$Header$" +#include "glite/wmsutils/jobid/cjobid.h" +#include "events.h" +#include "context.h" +#include "query_rec.h" +#include "notifid.h" +/* FIXME #include "glite/lb/purge.h" #include "glite/lb/dump.h" #include "glite/lb/load.h" -#include "glite/lb/producer.h" #include "glite/lb/notification.h" +*/ #ifdef __cplusplus extern "C" { @@ -32,11 +38,13 @@ extern edg_wll_ErrorCode edg_wll_ParseTagList(edg_wll_Context ctx, char *message extern edg_wll_ErrorCode edg_wll_ParseStsList(edg_wll_Context ctx, char *messageBody, long len, char *tag, char *tag2, edg_wll_JobStat **stsListOut); +/* FIXME extern edg_wll_ErrorCode edg_wll_ParsePurgeResult(edg_wll_Context ctx, char *messageBody, edg_wll_PurgeResult *result); extern edg_wll_ErrorCode edg_wll_ParseDumpResult(edg_wll_Context ctx, char *messageBody, edg_wll_DumpResult *result); extern edg_wll_ErrorCode edg_wll_ParseLoadResult(edg_wll_Context ctx, char *messageBody, edg_wll_LoadResult *result); +*/ extern edg_wll_ErrorCode edg_wll_ParseIndexedAttrs(edg_wll_Context ctx, char *messageBody, edg_wll_QueryRec ***attrs); @@ -50,15 +58,19 @@ extern int edg_wll_JobQueryRecToXML(edg_wll_Context ctx, edg_wll_QueryRec const extern int edg_wll_QueryJobsRequestToXML(edg_wll_Context ctx, const edg_wll_QueryRec **conditions, int flags, char **send_mess); +/* FIXME extern int edg_wll_PurgeRequestToXML(edg_wll_Context ctx, const edg_wll_PurgeRequest *request, char **message); extern int edg_wll_DumpRequestToXML(edg_wll_Context ctx, const edg_wll_DumpRequest *request, char **message); extern int edg_wll_LoadRequestToXML(edg_wll_Context ctx, const edg_wll_LoadRequest *request, char **message); +*/ extern int edg_wll_IndexedAttrsRequestToXML(edg_wll_Context ctx, char **message); +/* FIXME: extern int edg_wll_NotifRequestToXML( edg_wll_Context ctx, const char *function, const edg_wll_NotifId notifId, const char *address, edg_wll_NotifChangeOp op, edg_wll_QueryRec const * const *conditions, char **message); +*/ extern int edg_wll_QuerySequenceCodeToXML(edg_wll_Context ctx, edg_wlc_JobId jobId, char **message); diff --git a/org.glite.lb.common/src/context.c b/org.glite.lb.common/src/context.c index 8be7d2c..097eb6c 100644 --- a/org.glite.lb.common/src/context.c +++ b/org.glite.lb.common/src/context.c @@ -11,7 +11,7 @@ #include "glite/wmsutils/jobid/strmd5.h" #include "glite/wmsutils/jobid/cjobid.h" #include "context-int.h" -#include "glite/lb/producer.h" +// #include "glite/lb/producer.h" static void free_voms_groups(edg_wll_VomsGroups *); diff --git a/org.glite.lb.common/src/events.c.T b/org.glite.lb.common/src/events.c.T index 7d62fd9..ee082be 100644 --- a/org.glite.lb.common/src/events.c.T +++ b/org.glite.lb.common/src/events.c.T @@ -10,7 +10,7 @@ #include #include "glite/wmsutils/jobid/cjobid.h" -#include "glite/lb/producer.h" +#include "events.h" #include "ulm_parse.h" static const struct timeval null_timeval = {0,0}; diff --git a/org.glite.lb.common/src/events_parse.c.T b/org.glite.lb.common/src/events_parse.c.T index f656175..e292175 100644 --- a/org.glite.lb.common/src/events_parse.c.T +++ b/org.glite.lb.common/src/events_parse.c.T @@ -9,8 +9,7 @@ #include #include -#include "glite/lb/events.h" -#include "glite/lb/producer.h" +#include "events.h" #include "events_parse.h" #include "ulm_parse.h" #include "context-int.h" diff --git a/org.glite.lb.common/src/lb_perftest.c b/org.glite.lb.common/src/lb_perftest.c index 969655b..657b4b7 100644 --- a/org.glite.lb.common/src/lb_perftest.c +++ b/org.glite.lb.common/src/lb_perftest.c @@ -12,7 +12,7 @@ #include #include "lb_perftest.h" -#include "glite/lb/producer.h" +// #include "glite/lb/producer.h" #include "trio.h" #include "il_msg.h" diff --git a/org.glite.lb.common/src/notifid.c b/org.glite.lb.common/src/notifid.c index ee3c162..1ee60d4 100644 --- a/org.glite.lb.common/src/notifid.c +++ b/org.glite.lb.common/src/notifid.c @@ -3,7 +3,7 @@ #include #include "glite/wmsutils/jobid/cjobid.h" -#include "glite/lb/notifid.h" +#include "notifid.h" int edg_wll_NotifIdParse(const char *s,edg_wll_NotifId *n) { diff --git a/org.glite.lb.common/src/param.c b/org.glite.lb.common/src/param.c index 02d218f..f2f1bb6 100644 --- a/org.glite.lb.common/src/param.c +++ b/org.glite.lb.common/src/param.c @@ -7,11 +7,10 @@ #include #include "glite/wmsutils/jobid/cjobid.h" -#include "glite/lb/producer.h" -#include "glite/lb/notification.h" #include "context-int.h" -#include "log_proto.h" - +// XXX: +#include "log_proto.h" // for default log host and port +#include "timeouts.h" // for timeouts /* XXX: must match edg_wll_ContextParam */ static const char *myenv[] = { @@ -276,21 +275,25 @@ int edg_wll_SetParamTime(edg_wll_Context ctx,edg_wll_ContextParam param,const st case EDG_WLL_PARAM_LOG_TIMEOUT: /* XXX: check also if val is not grater than EDG_WLL_LOG_TIMEOUT_MAX */ if (val) memcpy(&ctx->p_log_timeout,val,sizeof *val); +/* FIXME - default timeouts - now in timeouts.h: */ else extract_time(param,EDG_WLL_LOG_TIMEOUT_DEFAULT,&ctx->p_log_timeout); break; case EDG_WLL_PARAM_LOG_SYNC_TIMEOUT: /* XXX: check also if val is not grater than EDG_WLL_LOG_SYNC_TIMEOUT_MAX */ if (val) memcpy(&ctx->p_sync_timeout,val,sizeof *val); +/* FIXME - default timeouts - now in timeouts.h: */ else extract_time(param,EDG_WLL_LOG_SYNC_TIMEOUT_DEFAULT,&ctx->p_sync_timeout); break; case EDG_WLL_PARAM_QUERY_TIMEOUT: /* XXX: check also if val is not grater than EDG_WLL_QUERY_TIMEOUT_MAX */ if (val) memcpy(&ctx->p_query_timeout,val,sizeof *val); +/* FIXME - default timeouts - now in timeouts.h: */ else extract_time(param,EDG_WLL_QUERY_TIMEOUT_DEFAULT,&ctx->p_query_timeout); break; case EDG_WLL_PARAM_NOTIF_TIMEOUT: /* XXX: check also if val is not grater than EDG_WLL_NOTIF_TIMEOUT_MAX */ if (val) memcpy(&ctx->p_notif_timeout,val,sizeof *val); +/* FIXME - default timeouts - now in timeouts.h: */ else extract_time(param,EDG_WLL_NOTIF_TIMEOUT_DEFAULT,&ctx->p_notif_timeout); break; default: diff --git a/org.glite.lb.common/src/query_rec.c b/org.glite.lb.common/src/query_rec.c index 6abeb4f..8a80529 100644 --- a/org.glite.lb.common/src/query_rec.c +++ b/org.glite.lb.common/src/query_rec.c @@ -7,7 +7,7 @@ #include #include "glite/wmsutils/jobid/cjobid.h" -#include "glite/lb/consumer.h" +#include "query_rec.h" /* * edg_wll_QueryRec manipulation routines diff --git a/org.glite.lb.common/src/status.c.T b/org.glite.lb.common/src/status.c.T index 301c96b..6cd9065 100644 --- a/org.glite.lb.common/src/status.c.T +++ b/org.glite.lb.common/src/status.c.T @@ -3,7 +3,7 @@ #include #include -#include "glite/lb/consumer.h" +#include "jobstat.h" static const struct timeval null_timeval = {0,0}; diff --git a/org.glite.lb.common/src/trio.c b/org.glite.lb.common/src/trio.c index 700a7e2..439a709 100644 --- a/org.glite.lb.common/src/trio.c +++ b/org.glite.lb.common/src/trio.c @@ -52,9 +52,8 @@ static const char rcsid[] = "@(#)$Id$"; #include "strio.h" #ifdef DATAGRID_EXTENSION -#include "glite/lb/events.h" +#include "events.h" #include "escape.h" -//#include "edg/workload/thirdparty/trio/events.h" #endif /* diff --git a/org.glite.lb.common/src/xml_conversions.c b/org.glite.lb.common/src/xml_conversions.c index 6bf7e6b..e328fdf 100644 --- a/org.glite.lb.common/src/xml_conversions.c +++ b/org.glite.lb.common/src/xml_conversions.c @@ -8,6 +8,7 @@ #include "xml_conversions.h" #include "escape.h" +#include "jobstat.h" @@ -49,16 +50,20 @@ void edg_wll_initXMLCtx(edg_wll_XML_ctx *c) { c->tagToIndex = NULL; c->tagListGlobal = NULL; c->stsListGlobal = NULL; +/* FIXME: memset(&(c->purgeRequestGlobal),0,sizeof(c->purgeRequestGlobal)); memset(&(c->purgeResultGlobal),0,sizeof(c->purgeResultGlobal)); memset(&(c->dumpRequestGlobal),0,sizeof(c->dumpRequestGlobal)); memset(&(c->dumpResultGlobal),0,sizeof(c->dumpResultGlobal)); memset(&(c->loadRequestGlobal),0,sizeof(c->loadRequestGlobal)); memset(&(c->loadResultGlobal),0,sizeof(c->loadResultGlobal)); +*/ c->notifFunction = NULL; c->notifClientAddress = NULL; c->notifId = NULL; +/* FIXME: c->notifChangeOp = EDG_WLL_NOTIF_NOOP; +*/ c->notifValidity = -1; c->jobId = NULL; c->source = NULL; @@ -792,6 +797,8 @@ int edg_wll_string_to_stat_flags(char *cflags) } +#if 0 +/* FIXME */ char *edg_wll_purge_flags_to_string(int flags) { char *cflags = NULL, *temp_cflags = NULL; @@ -847,6 +854,7 @@ int edg_wll_string_to_purge_flags(char *cflags) return(flags); } +#endif /* Functions for conversion of DUMP constants */ @@ -954,6 +962,7 @@ static const char * const notifChangeOpConsts[] = { +/* FIXME edg_wll_NotifChangeOp edg_wll_StringToNotifChangeOp(const char *name) { int i; @@ -970,4 +979,5 @@ char *edg_wll_NotifChangeOpToString(edg_wll_NotifChangeOp notifChangeOpConst) if (notifChangeOpConst < 0 || (notifChangeOpConst) > sizeof(notifChangeOpConsts)/sizeof(notifChangeOpConsts[0])) return (char *) NULL; return strdup(notifChangeOpConsts[(int) notifChangeOpConst]); } +*/ diff --git a/org.glite.lb.common/src/xml_parse.c.T b/org.glite.lb.common/src/xml_parse.c.T index 418af9e..4cf8268 100644 --- a/org.glite.lb.common/src/xml_parse.c.T +++ b/org.glite.lb.common/src/xml_parse.c.T @@ -10,7 +10,7 @@ #include "globus_config.h" #include "trio.h" -#include "glite/lb/producer.h" +// #include "glite/lb/producer.h" #include "glite/wmsutils/jobid/cjobid.h" #include "escape.h" @@ -481,6 +481,8 @@ static void startStsList(void *data, const char *el, const char **attr) +/* FIXME */ +#if 0 static void startPurgeResult(void *data, const char *el, const char **attr) { edg_wll_XML_ctx *XMLCtx = data; @@ -577,6 +579,7 @@ static void startLoadResult(void *data, const char *el, const char **attr) } XMLCtx->level++; } +#endif @@ -1145,6 +1148,8 @@ static void endStsList(void *data, const char *el) +/* FIXME: */ +#if 0 static void endPurgeResult(void *data, const char *el UNUSED_VAR) { edg_wll_XML_ctx *XMLCtx = data; @@ -1225,6 +1230,7 @@ static void endLoadResult(void *data, const char *el UNUSED_VAR) XMLCtx->char_buf_len = 0; XMLCtx->level--; } +#endif @@ -1964,6 +1970,8 @@ edg_wll_ErrorCode edg_wll_ParseStsList(edg_wll_Context ctx, char *messageBody, l } +/* FIXME */ +#if 0 /* parse purge result from client */ edg_wll_ErrorCode edg_wll_ParsePurgeResult(edg_wll_Context ctx, char *messageBody, edg_wll_PurgeResult *result) @@ -2153,7 +2161,7 @@ edg_wll_ErrorCode edg_wll_ParseLoadResult(edg_wll_Context ctx, char *messageBody edg_wll_freeXMLCtx(&XMLCtx); return errorCode; } - +#endif edg_wll_ErrorCode edg_wll_ParseIndexedAttrs(edg_wll_Context ctx, char *messageBody, edg_wll_QueryRec ***attrs) @@ -2717,6 +2725,8 @@ int edg_wll_QueryJobsRequestToXML( } +/* FIXME */ +#if 0 /* construct Message-Body of Request-Line for edg_wll_Purge */ int edg_wll_PurgeRequestToXML( edg_wll_Context ctx, @@ -2812,6 +2822,7 @@ int edg_wll_LoadRequestToXML( return 0; } +#endif @@ -2832,6 +2843,8 @@ int edg_wll_IndexedAttrsRequestToXML( } +/* FIXME */ +#if 0 /* construct Message-Body of Request-Line for edg_wll_Notif* functions */ int edg_wll_NotifRequestToXML( edg_wll_Context ctx, @@ -2867,6 +2880,7 @@ int edg_wll_NotifRequestToXML( return 0; } +#endif /* construct Message-Body of Request-Line for edg_wll_QuerySequeceCode function */ -- 1.8.2.3