Changes to VOSpace specification

Dave Morris dave at ast.cam.ac.uk
Mon Nov 27 21:30:13 PST 2006


Paul Harrison wrote:

> I guess that I am arguing for what we could do if there was no  
> ListStatusNodes() method and this was done with the existing API - we  
> could use this part of the URL for multiple things - I was not really  
> very careful with the syntax but if we had something like
>
> vos://org.test!vospace/container/node?operation=transfer_status
>
> we could then do things like
>
> vos://org.test!vospace/container/node? 
> operation=get_view&view=jpeg_cutout

We are designing a SOAP webservice - so why add yet another syntax for 
calling methods.
If we didn't already have a SOAP service, then you might have a case.

Just add status nodes and ListStatusNodes() to version-1.1 of the 
schema, and we can have it up and running by the next IVOA meeting.

All of the operations can be handled in the existing VOSpace 
specification using Java Servlets or their equivalent
integrated within the VOSpace service. We don't _need_ callbacks in 
version-1.0.

> which leads me to the thought that perhaps we are being too purist  
> not having a direct getContent(URI) SOAP call that does return the  
> "content" of the URI as a synchronous result, in-line. With the  
> formal XML being a choice of an "any" xml or a small xml structure  
> with a <data> element with base64 encoded data in it ....

How about this :

   <method uri="[dime-get-inline]"/>

Where the URI points to a resource that says something like this :

   ivo://net.ivoa.vospace/transfer-methods/dime-get-inline-1.0
       This is a VOSpace transfer method that uses the Direct Internet 
Message Encapsulation (DIME) message format to return the node contents 
as a SOAP attachment.
       Details of the DIME specification can be found at here 
[http://msdn.microsoft.com/library/en-us/dnglobspec/html/draft-nielsen-dime-02.txt] 


       Usage:
       The client calls PullFromVOSpace specifying this transfer-method 
in the request.
       If the request is valid, then the server will respond with the 
standard PullFromVOSpace,
       response, and attach the data node contents to the end of the 
message as a DIME attachment.

       The transfer completes when the SOAP response is received by the 
client.
       No additional steps are required.

       If the server is unable to attach the data node contents to the 
message, then it either
       will response with the appropriate error message, or a list of 
other transfer-methods
       if they are available.

Or this :

   <method uri="[mtom-get-inline]"/>

Where the URI points to a resource that says something like this :

   ivo://net.ivoa.vospace/transfer-methods/mtom-get-inline-1.0
       This is a VOSpace transfer method that uses the Message 
Transmission Optimization Mechanism (MTOM) message format to return the 
node contents as a SOAP attachment.
       Details of the MTOM specification can be found here 
[http://www.w3.org/TR/soap12-mtom/]

       Usage:
       The client calls PullFromVOSpace specifying this transfer-method 
in the request.
       If the request is valid, then the server will respond with the 
standard PullFromVOSpace,
       response, and attach the data node contents to the end of the 
message as a MTOM attachment.

       The transfer completes when the SOAP response is received by the 
client.
       No additional steps are required.

       If the server is unable to attach the data node contents to the 
message, then it either
       will response with the appropriate error message, or a list of 
other transfer-methods
       if they are available.

Both of which are possible within the current VOSpace version 1.0 
specification.

> ....  (actually pretty much the same as Amazon S3 - getObject method). 
> OK-  this is not as efficient as the multiprotocol data transfer 
> methods ....

See : http://solutions.amazonwebservices.com/connect/ann.jspa?annID=144
Posted : Oct 23, 2006 11:21 PM
/In a few weeks time, you will no longer be able to use the Amazon S3 
SOAP interface's PutObjectInline or GetObjectInline for objects that are 
larger than 1 megabyte in size. After November 21, affected requests 
will fail with the new error response InlineDataTooLargeError. To put or 
get objects that are larger than 1 megabyte in size, you will need to 
either use DIME attachments with SOAP requests or use our REST 
interface. We apologize for any inconvenience this change may cause you.

Please be assured that deprecating existing functionality is not a 
change we take lightly. We are making this change because transferring 
large objects inline in the SOAP message (as happens with 
PutObjectInline and GetObjectInline) has significant negative 
performance implications; it is a mechanism only suited to transferring 
small amounts of data. The SOAP-based alternative, using DIME 
attachments, now has wide support in SOAP toolkits, is more efficient 
and does not suffer from the same performance bottlenecks. It also 
allows us to optimize our service to give you better performance./

> .... but it does give the client something very simple that it can  
> implement ....

What is so difficult in a client implementing this :

   <method uri="[http-get]"/>

Where the URI points to a resource that says something like this :

   ivo://net.ivoa.vospace/transfer-methods/http-get
       This is a VOSpace transfer method that uses the standard http-get 
transport protocol.
       Details of the transport protocol are available here 
[http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.3].

       Usage:
       The client calls PullFromVOSpace specifying this transfer-method 
in the request.
       If the request is valid, then the server will respond with the 
standard PullFromVOSpace,
       response, and add a <transfer-method> element containing the 
endpoint URL to fetch the data from.

       The client uses the URL to download the data using a standard 
http-get request.
       The transfer method completes automatically when the client has 
received the data,
       and no notification callbacks are required.

> .... and perhaps we can also say that servers are allowed to  throw a 
> "fetch with multiprotocol transfer method instead" exception  if they 
> feel that a data object is being requested is too large to  return 
> in-line ....

This would mean adding a new exception to the VOSpace service WSDL, one 
that isn't connected with the core VOSpace API but is specific to one 
transfer-method only.

Given that the current version-1.0 specification can support 
[dime-get-inline], [mtom-get-inline] and [http-get], I don't see the 
case for modifying the VOSpace specification to support a custom version 
of http-get, using ? to encode method params outside the SOAP message 
and a non standard way of encoding the data.

As yet, no show stopper bugs found - the current version-1.0 
specification is good enough.
Lets get that through the process and then we can add status nodes, 
ListStatusNodes() and a generic set of notification callbacks to the 
next version.

Dave



More information about the vospace mailing list