[SAGA-RG] Service Discovery
Fisher, SM (Steve)
S.M.Fisher at rl.ac.uk
Tue Aug 21 15:20:34 CDT 2007
Hi,
I have a new copy attached - we can discuss it this week
Steve
> > Andre's email
> > =============
> >
> > - it would be good to tie the API package closer to the
> > other SAGA packages. In particular, it would be very
> > good if the url returned by service.get_url() would
> > explicitely be formed so that it can be used for the
> > construction of saga::job_service, saga::directory,
> > saga::rpc instance etc.
> >
> > This depends upon what is published - if the URL is published
> > correctly we will return it.
>
> Ah, I see: there is no prescription on what the URL is
> usable for, as you have, naturally, no control over what
> URLs are added to the information repository in the first
> place. Understand.
>
> However, that leaves some questions on how to use the
> returned URLs in the application. Assume an application
> queries for
>
> list <string> urls = d.list_services ("*data*", "*", "*");
>
> (query probably ill formatted...) Can the application use
> the returned URL to create a saga::directory, or a
> saga::file?
>
> I assume that this question cannot be answered within the SD
> API, and I am not sure what mechanism could be used to
> answer it at all. Any thoughts?
>
> However, if that use of the returned URLs (to create
> saga::xyz class instances) is the intended use of the SD
> API, adding a statement in that respect would clarify the
> intendet use of the extension.
The point of service discovery is to locate a service. Any SAGA call
which needs to connect to a remote service and that makes this explict
can make use of SD. For example the RPC of 3.13 requires the URL of the
service provider. Also the job_service requires as input the contact
string for the resouce manager. Servide discover provides these URLs. I
haved added a sentence or two explaining this.
> I have to apologize, my mistake: I meant it should be a
> class, not an interface. The following still holds: "in the
> langauge independend specs we agreed to model the functional
> API packages as classes."
Fixed
> > The discoverer should be a class returning services.
> >
> > Incidentally it may makes sense to rename "service" to
> > "service_description".
>
> Yes, it does.
Fixed
> > - we do have an attribute interface (doh! ;-) in the SAGA
> > core API spec. I think it would be best to use that
> > interface for the service interface/class.
> >
> > Yes - there seems to be no problem with that in principle for the
> > service attributes.
> >
> > - why is get_attributes on discoverer, but get_values on
> > service? That seems inconsistent?
> >
> > Discoverer has get_attribute_names() method which will
> return an array
> > of all possible standard names deliverable by the existing
> information
> > system adapters. All services have the same set so associating this
> > data with the discoverer rather then the service seems to
> make sense.
>
> If the attribute set is fixed, then using the
> saga::attribute interface in the service (or
> service_description) instances would be easy. The document
> should specify what attributes are available IMHO. Again,
> technically this looks more and more like the
> saga::job_description class, and IMHO it would be good to
> design the service(_description) class the same way.
If we want to use the attribute interface, and I agree that we should,
perhaps the best way is to have two extra classes both of which
implement the Attribute interface. Then you can say, where s is a
service_description:
s.get_data().get_attribute("some key value in the key value pair")
or
s.get_glue().get_attribute("some predefined 'glue' attribute")
This avoids the name clash problem - though we need a better name than
get_glue()
I would like people's agreement that this is the right way to go before
doing this. It makes things simepler but adds 2 trivial classes. I think
I like it!
> > - is it possible to tighten the definition of possible
> > query strings? For example, the current spec would
> > allow to query with the service filter for
> >
> > - type = "ftp"
> > - type = "gsiftp"
> > - type = "gridftp"
> > - type = "remote data"
> >
> > How does the end user know what to use? Does Glue help
> > here (please excuse my ignorance about Glue...)
> >
> > In the case of the type it is the responsibility of the service
> > provider, publishing the service to publish a well known service
> > type. I prefer the service name to take the form of a DNS registered
> > name - registered by the service provider. e.g. org.globus.gridftp.
>
> Ok, so thats out of scope. SHould be mentioned in the text
> I think.
Done
> > - I am still worried that SAGA uses regular expressions in
> > one place, wildcards in other places, and now SQL, too.
> > Not that I know a better approach, or even solution, but
> > we should keep that problem in mind. I think your
> > statement "uses SQL 92 syntax as if it were part of a
> > WHERE clause" is good: that is something which has a
> > good chance to be reusable by other SQL related
> > packages, should they emerge.
> >
> > We really need the power of SQL!
>
> ok
I have tried to justify the choice in the text
> > - I am somewhat confused about the difference between keys
> > and attributes in the service interface/class... What
> > is the difference, really? Do you have an example?
> >
> > The attributes are based on the GLUE attributes. The key/value pairs
> > are defined by the service publisher. The service publisher
> is free to
> > define his own key names.
> >
> > The key names may clash with the glue attribute names so we
> cannot use
> > the attribute interface for both. We favout using the attribute
> > interface for the glue attributes and retain our current
> solution for
> > the key value pairs.
>
> Ah, that clarifies a lot. The first paragraph above would
> help to understand the document, and should be added to the
> text I think.
Done
> Interesting problem, clashing attribute name spaces...
> I have no good idea at the moment, will think about it...
>
>
> > - Is it actually possible to tighten the format of the VO
> > string, e.g. is there some commonly agreed upon format?
> >
> > In EGEE/gLite/WLCG we are moving towards DNS names again to avoid
> > clashes. However again the actual names are out of scope. GLUE makes
> > recommendations but insists upon nothing.
>
> ok
>
>
> > - I think service.get_vo_names should be changed into an
> > attribute, too: service.get_attribute ("vo_names").
> > Does that make sense?
> >
> > We can do that. We will keep the get_url call however as it
> is a very
> > common one.
>
> Its not a problem to have the URL as an attrubute, _and_ to
> have a specific getter method. We have the same for job
> state for example, which is an attribute (which makes sense
> semantically), and has a getter method (get_state), because
> it's used so often.
>
>
> > Pascal's email
> > ==============
> >
> > 1) The attributes should be handled by the attribute
> > interface. This will allow better SAGA L&F integration.
> Also this
> > might remove the need for specific get_vo, get_key & get_values
> > methods. These can be treated as attributes of the
> class. In SAGA,
> > the getters and setters are in general covered by the attributes
> > interface and the implementation allows specific
> support for them
> > if needed. The SAGA API should, for the time being, go for the
> > minimum common set of functions.
> >
> > Yes - see above
> >
> > 2) I totally agree with Andre that the service should be an
> > interface and not a class. Well in a Java binding it might be an
> > all interface anyway.
> >
> > Yes - see above
> >
> > 3) The use of SQL is what made me read the section
> twice. I think
> > we had already a long discussion on the other parts of
> the API on
> > the usage of REGX, wildcards, SQL, etc. We might try to
> sort this
> > out either by F2F or telecon.
> >
> > I don't think it is feasible to get the desired behaviour
> without SQL
> > or something similar. We do want the code to be useful in gLite.
>
> It would be good to check what other service discovery
> backends are using, and if the used SQL is translatable to
> that. Do you have any experiences with other backends?
>
>
> > 4) The name space of this API should be better then
> "sd". Why not
> > "discovery" or something more expressive?
> >
> > As we are not allowed to make the namespace visible in the
> > implementation I don't really care too much what goes in
> the SIDL as a
> > name space. What is the justification for not having sub-namespaces
> > within SAGA as it says in section 2.2.1 of the spec?
>
> 1. it would lead to clashes between namespace and class
> names (file.file, stream.stream, rpc.rpc, job.job).
>
> 2. languages w/o name space support would need to flatten
> the namespace, resulting in method names like:
>
> saga_logical_file_logical_directory_list ("*");
>
> 3. given the two (possibly minor) disadvantages above, and
> no percieved need for additional name spaces, we decided
> against their use.
I think it was a bad choice - but I can live with these rules
> > The API specification document and the language bindings L&F are
> > different things. In the document we have a more C style
> > coding. When the implementation is done we should use language
> > specifics:
> >
> > - list_services() -> in C: list_services()
> > - list_services() -> in C++: ListServices()
> > - list_services() -> in Java: list ()
> >
> > Sometime rather soon we should define these styles.
So are we free to add namespaces - like all other large packages ;-)
Steve
-------------- next part --------------
A non-text attachment was scrubbed...
Name: saga_sd.dvi
Type: application/octet-stream
Size: 44428 bytes
Desc: saga_sd.dvi
Url : http://www.ogf.org/pipermail/saga-rg/attachments/20070821/5c9d73fb/attachment.obj
More information about the saga-rg
mailing list