[Nsi-wg] Overly complex discovery WSDL
Henrik Thostrup Jensen
htj at nordu.net
Thu Nov 29 07:07:52 EST 2012
Hi
(sorry for the long email)
On Tue, 27 Nov 2012, John MacAuley wrote:
> I understand the comments on the query. i was conflicted as well. I am
> also wondering if I meant AND :-)
I think this is ultimately a question on how people relate to risk. The
argument for the current is that we will not have to change it later. OTOH
there is the risk that we will have to maintain something complex over a
long time, and that we will have to changes down the line no matter what
(this is more how I see things).
Right now, I see the biggest risk for NSI that we are not delivering and
keep changing & adding things. If we have more demos we might start boring
people to death. We will never figure out how this thing should look like
until we had in production for some years. But this is how I see things
and relate to risks, which is certainly different from the way other
people see it.
> The original Discovery response was the ServicesType structure, but
> based on the Chicago OGF/GLIF feedback I wrapped it with the
> NsaDiscoveryType to remove the need for the header. Other than this
> minor change it is the exact same as discussed in the last three or four
> OGF.
Aye, I just never had a look at it.
> Now with this said, let us focus on the "9 levels deep" comment. This
> is probably the result of my specific XSD style. I like to wrap any
> multi-valued elements in a list type for containment. For example, the
> ServicesType wrapping the ServiceType, and the VersionsType wrapping the
> VersionType. Removing this containment can reduce the nesting by a few
> levels without any loss of data structure. However, this is the pattern
> I followed in the NSI-CS so I also followed it here.
I'm okay with that pattern. One thing I stumbled over was the heavy usage
of attributes, but I could never figure out when to use elements and
attributes in XML anyway.
Now, things that stand out to me:
The requestType and filtering seems completely overkill. Most services
will only host 2 (CS and topology), perhaps 3 or 4 services. Maintaining
multiple protocols stacks is tricky and will probably only be done for
transitioning. This way of designing interfaces to be pretty popular 10
years ago, but these days things are typically modelled with complete, or
most recent lists. I.e. less generic and more tailored to actual usage (I
can dig up some articles on this if someone are interested).
Given the low number of services modelling versions explicit seems
overkill. Sure, there might be multiple ConnectionServices, but I can live
with having NSI1SOAP and NSI2SOAP services types (or whatever we'll call
them).
The way capabilities are modelled also seems like overkill to me. They are
binary, i.e., either they are there are not. Having looked at your slides
I realize that you actually model it like that, but in slightly more
complex way than I would. I'd probably do something like:
<capabilities>
<capability>release</capability>
<capability>modify</capability>
<capability>
We might have QNames here. Or require it for 3rd party extensions. Not
overly important.
I honestly don't know if we need the capability stuff, but I am okay with
it being there. It does seem broken to me though, as it typically won't be
either or for these things. How do I represent that I can only do time
extensions in modify, but not change the bandwidth. Or how do I specify
that I can only increase link capacity, and not decrease it. Or that I
cannot modify it beyond a limit? Or that I can only do modify on some
ports, and not others. The capabilities stuff just strikes me as a bit
naive, as the only way you can figure out of something can be done, is to
fire off the action and see what happens.
Similarly the ##other attributes strikes me as wrong, but I can for all
purposes just ignore them for now. But if we keep the ##other attributes,
we might as well make the base thing simple.
I know that currently we support multiple providers at a single endpoint.
This causes us to have nsaId in discovery and providerNSA in the CS
header. While these things are relatively minor, I wondering if supporting
this was a deliberate decision or it just ended up like that. It isn't
like URLs are expensive, and it does cause a wee bit of extra complexity
to support this.
Btw. URL and endpoint - what is the difference? Is this just soap /
non-soap services?
> If you are partial to flatness, I could change everything to OWL and
> model though assertions and relationships. I certainly LOVE that model
> ;-)
I'd be okay if someone took OWL out back and shot it :-). (and I would not
cry if they took N3 with them).
So, in all I could see something like this for the discovery service:
queryNsaRequest :: QueryNsaRequestType
queryNsaResponse :: QueryNsaResponseType
discovery :: NsaDiscoveryType *
# softwareVersion
# startTime
# currentTime
services :: ServicesType *
service :: ServiceType
# type :: xsd:string
# url
# wsdl
# other :: any
other :: any *
capabilities :: CapabilitiesType *
capability :: xsd:string
It is a suggestion, but we don't really lose any functionality AFACIT.
Best regards, Henrik
Henrik Thostrup Jensen <htj at nordu.net>
Software Developer, NORDUnet
More information about the nsi-wg
mailing list