Expressing service deprecation?
Markus Demleitner
msdemlei at ari.uni-heidelberg.de
Tue Jun 13 09:48:08 CEST 2017
Hi,
On Mon, Jun 12, 2017 at 05:10:16PM -0700, Brian Major wrote:
> I am wondering if a mechanism within registry exists that allows providers
> to indicate that a particular service is deprecated. And, if so, allows
> for the recommendation of an alternate service.
>
[...]
> I think this is a different problem than the one that the note on XML
> Schema versioning is trying to solve in that:
> - A new version of a service is deployed alongside the previous version.
> - There could be capabilities of the service that don't result in the
> client receiving an XML document from the service and thus have the ability
> to determine the version of the schema.
It is this scenario that makes us keep minor versions in registry
standardIDs although it somewhat complicates discovery, including the
necessity of using search patterns in the normal case
(cf.
http://www.ivoa.net/documents/IVOAIdentifiers/20160523/REC-Identifiers-2.0.html#tth_sEc4.2).
Although we don't have many cases that would require this kind of
thing (yet), service operators could write something like this
within *one* record:
<capability standardID="ivo://ivoa.net/std/example#endpoint-1.0">
...
<capability standardID="ivo://ivoa.net/std/example#endpoint-2.0">
...
<capability standardID="ivo://ivoa.net/std/example#endpoint-2.1">
...
Personally, I'm not convinced there's a point in keeping several
endpoints of the same major version, since by definition clients for
2.0 must be able to drive 2.1 services, but anyway: While it's never
said explictily anywhere, I'd stipulate such a record should be
interpreted as "if at all possible, use capability[3]" or
"capability[1|2] are deprecated".
I don't think there's any client support for anything resembling this
yet (though I'm not sure what they do if they find multiple
capabilities for a standardID pattern during discovery).
I suspect the entire question arises in the context of VOSpace, and my
shallow reading of it suggests that for that, there may be a
requirement for this kind of thing (synctrans-2.0 vs synctrans-2.1
perhaps?). If so, I'd be happy to help in working out the details.
There is another aspect to this question, though:
> I thought I had once seen 'replacedBy' attribute somewhere but cannot find
> it. (Maybe I was thinking of the mirroring support). If people think this
> is a good idea, perhaps such an attribute belongs at the capability level?
As I said, on the capability level I'd say the informal convention
"everything but the newest version is deprecated" is enough until
proven insufficient.
However, if you want to shut down a service at some point, you could
make a *different* resource record and declare it the old service's
replacement; that's not really dependent on different protocol
versions, there could be many reasons for moving services. You need
VOResource 1.1 (RFC now! Hurry!) to do that, though. The sketch is:
Old Service:
<Resource>
<identifier>ivo://old.provider/oldservice</identifer>
...
<relationship>
<relationshipType>isContinuedBy</relationshipType>
<relatedResource ivo-id="ivo://new.provider/newservice"
>New Service</relatedResource>
</relationship>
</Resource>
New Service:
<Resource>
<identifier>ivo://new.provider/newservice</identifer>
...
<relationship>
<relationshipType>Continues</relationshipType>
<relatedResource ivo-id="ivo://old.provider/oldservice"
>Old Service</relatedResource>
</relationship>
</Resource>
Clients could take the presence of an isContinuedBy as an indication
that a service is deprecated. I'm not sure, though, I'd like to make
a recommendation to check for isContinuedBy relationships as a part
of normal discovery operations.
IMHO more important than the isContinuedBy here is the Continues
relationship of the new service. The reason is that the old service
will presumably get deleted from the Registry at some point. With
this record, the isContinuedBy relationship will be gone.
But clients that, for one reason or another, still have the old
ivoid, can still do a RegTAP query like:
SELECT ivoid
FROM rr.relationship
WHERE
related_name='Continues'
AND related_id='ivo://new.provider/newservice'
I'm sure no existing client does anything of this kind yet, and given
the usual modes of discovery so far I don't think they should.[1]
In VOSpace identifier resolution, where there's a built-in ivoid
reference, that might be different; being able to move a VOSpace's
registry record while still enabling resolution might be a use case.
Again, I'd be happy to help working out language for recommendations
for clients on how to deal with "broken" vos: URIs.
-- Markus
[1] Note to the Registry folks: We have a little issue here in that
this (IMHO altogether valid) use case requires an ivoid that doesn't
really have a matching resource record (you could argue there's a
deleted record, but there's no requirement to keep it, and it won't
be in a searchable registry even if it's kept). Hm. Have you
noticed the three-headed monkey just outside your window?
More information about the registry
mailing list