[MOBY-dev] RFC #1941: Data returned by xxx_async and xxx_poll
Johan Karlsson
johan at ac.uma.es
Thu Feb 9 20:20:46 UTC 2006
This is really one of the hot-points. Should we wrap this data in
mobyStatus or in mobyData? It really comes down to a question of
viewpoints (both ways would be possible to implement).
(btw, sorry if we mix the terms "event" and "status" but we are talking
about, in this context, the same information (mobyStatus vs Event-base
class)
Just to summarize what (we think) Martin is suggesting:
=====
He suggests that we do not need mobyStatus and instead the status
information should be put in normal Moby objects, all registered in the
shared Moby object ontology. The methods _async and _poll would return
mobyObjects instead of mobyStatus. These mobyObjects would have the same
information as is in mobyStatus (asyncID, LSAE status XML etc). The
mobyObjects for this would also be ordered in the moby object ontology
(placed in a hierarchy, separate subtree).
Some comments from Martin:
(1) We should change the API/protocol as little as possible (more of a
general comment).
(2) There could be services that would like to register with such
mobyObjects.
(3) Service providers could easily register new such mobyObjects and
inherit (extend) existing status mobyObjects (all new status objects
must inherit the base-object Event).
=====
Martin, please correct us if we misunderstood something.
Now, let us try to explain our position (which is to keep mobyStatus):
We do not want to put such information in mobyObjects because it would
mean that we put what is really status (event) information about jobs in
the Moby object ontology. It is difficult enough to maintain a good
ontology but, at least, let us keep the biomoby ontology for objects
related to biological information (results belonging in the domain).
This is a very important principle.
(1) Martin is correct that our mobyStatus alters the protocol more (the
new async clients would need to handle the tag) than putting the
information as mobyObjects.
However, the only clients and services that would be affected by the
alteration (mobyStatus) would be asynchronous clients and services
("new" services/clients, or at least new "interfaces"). Old clients
would never receive or send mobyStatus content, so they would not be
affected by it. In our opinion, it is better to create new placeholders
(mobyStatus) for such new and different information than to put it where
it does not belong (the ontology). The protocol would only be altered
for this new type of communication, not for the "standard" communication
(which would still be available).
(2) We have a hard time imagining such services. Martin, could you give
some examples?
(3) By using "standard" LSAE in our approach (mobyStatus), new events
can be extended from existing events (but as we will explain, this
should, if possible, be avoided), so the possibility to extend events is
not an argument in itself to put this information in the moby object
ontology.
If the events are placed as mobyObjects in the ontology, new events
would be instantly shared by all clients (but of course, the clients
would not understand the new, added, attributes unless there are changes
in their implementation). Same thing is possible with mobyStatus and
LSAE, but the changes would not be "shared", at least not directly.
The five basic event types (Heartbeat_event, Percent_progress_event,
State_changed_event, Step_progress_event and Time_progress_event) in
LSAE covers most (if not all) situations.
We are proposing that the only status messages all async clients _must_
understand are the ones specified already in LSAE. If a service provider
needs to define new status messages by extending already existing, they
run the risk of clients not understanding their new status messages (at
all).
In the LSAE specification, it even says that clients should simply
ignore new status/events that they do not understand. Only specialized
clients would in this scenario be able to understand the new
status/events (that would come from a very specialized service).
If, in the future, there is a need for new "standard" event types, this
could be carefully considered (in this mailing list for example) and
added to the official documentation/API. While this is a simpler and
slower mechanism than what Martin suggests, it is also a more _stable_
mechanism than ordering the events in a dynamic, uncontrolled and shared
hierarchy. MobyStatus and LSAE events still do what we need, but in a
more stable and controlled way.
While mobyStatus would need to be handled by new async clients, it does
not complicate future client tooling to have a stable interface, does it?
Kind regards,
Johan
More information about the MOBY-dev
mailing list