Client VoStore VoSpace
|
| ImportInit
\------------------------------\
[Auth : x509 cn=user.. ] |
|
File
*[File : ivo://vostore/.. ]*
*[Owner : x509 cn=user.. ]*
|
/------------------------------/
| [File : ivo://vostore/.. ]
| [URL : http://vostore/..]
|
The client transfers the data into VoStore? service, using the URL supplied by the VoStore? service.
Note, if this is a DIME transfer, then the put call will also be authenticated by the user's
x509 certificate.
Client VoStore VoSpace
|
| PUT
\------------------------------\
[Auth : x509 cn=user.. ] |
[URL : http://vostore/..] |
|
File
[File : ivo://vostore/.. ]
[Owner : x509 cn=user.. ]
*[Size : xxxx Mbytes ]*
The file is now in VoStore?, with the owner set to the user's x509 identity.
Client VoStore VoSpace
|
| AdoptInit
\------------------------------\
[Auth : x509 cn=user.. ] |
[Adopt : x509.cn=vospace.. ] |
[File : ivo://vostore/.. ] |
|
File
[File : ivo://vostore/.. ]
[Owner : x509 cn=user.... ]
*[Adopt : x509 cn=vospace.. ]*
At this point, the file is still owned by the user, but the VoSpace?
service is now allowed to adopt the file and claim ownership.
This aviods the problem of having an orphaned file with no ownership during the adoption process.
If the client just released the file, by setting the owner to null without specifying the recipient,
then another identity could claim ownership of the file before the VoSpace? service was able to adopted it.
Alternatively, a user would be able to release a file by setting the ownership to null, and then not
tell the VoSpace? service to adopt the file. This would leave an orphaned file on the system with
no registered owner.
ivo://... identifier of the file to adopt.
Client VoStore VoSpace
|
| AdoptFile
\----------------------------------------------------------------\
[Auth : x509.cn=user.... ] |
[File : ivo://vostore/... ] |
Node
*[Node : ivo://vospace/.. ]*
*[File : ivo://vostore/.. ]*
Client VoStore VoSpace
|
| AdoptFile
\----------------------------------------------------------------\
[Auth : x509.cn=user.... ] |
[File : ivo://vostore/... ] |
Node
[Node : ivo://vospace/.. ]
[File : ivo://vostore/.. ]
|
AdoptFile |
/---------------------------------/
| *[Auth : x509.cn=vospace.. ]*
| [File : ivo://vostore/.. ]
|
File
[Ident : ivo://vostore/.. ]
*[Owner : x509 cn=vospace.. ]*
The file in VoStore? is now owned by the VoSpace? service, and apperas in the VoSpace?
node tree for the user's account.
adoptInit() and
the adoptFile method calls.
Client VoStore VoSpace
|
| ImportInit
\------------------------------\
[Auth : x509 cn=user.. ] |
|
File
*[File : ivo://vostore/.. ]*
*[Owner : x509 cn=user.. ]*
|
/------------------------------/
| [File : ivo://vostore/.. ]
| [URL : http://vostore/..]
|
|
| PUT
\------------------------------\
[Auth : x509 cn=user.. ] |
[URL : http://vostore/..] |
|
File
[File : ivo://vostore/.. ]
[Owner : x509 cn=user.. ]
*[Size : xxxx Mbytes ]*
The file is now in VoStore?, with owner set to the user's x509 identity.
adoptInit() on the VoStore? service to initiate the adoption,
as the VoSpace? service can do this itself, using a proxy certificate to act on behalf of the user.
This means that the client can skip this step, and just call the VoSpace? service and tell
it to adopt the file in VoStore? service, giving it the ivo://... identifier of the file to adopt.
Client VoStore VoSpace
|
| AdoptFile
\----------------------------------------------------------------\
[Auth : x509.cn=user.... ] |
[File : ivo://vostore/... ] |
Node
*[Node : ivo://vospace/.. ]*
*[File : ivo://vostore/.. ]*
Client VoStore VoSpace
|
| AdoptFile
\----------------------------------------------------------------\
[Auth : x509.cn=user.... ] |
[File : ivo://vostore/... ] |
Node
[Node : ivo://vospace/.. ]
[File : ivo://vostore/.. ]
|
AdoptInit |
/----------------------------------/
| *[Auth : x509 cn=user.. ]*
| *[Adopt : x509.cn=vospace.. ]*
| [File : ivo://vostore/.. ]
|
File
[File : ivo://vostore/.. ]
[Owner : x509 cn=user.... ]
*[Adopt : x509 cn=vospace.. ]*
Client VoStore VoSpace
|
| AdoptFile
\----------------------------------------------------------------\
[Auth : x509.cn=user.... ] |
[File : ivo://vostore/... ] |
Node
[Node : ivo://vospace/.. ]
[File : ivo://vostore/.. ]
|
AdoptInit |
/----------------------------------/
| [Auth : x509 cn=user.. ] |
| [File : ivo://vostore/.. ] |
| *[Adopt : x509.cn=vospace.. ]* |
| |
File |
[File : ivo://vostore/.. ] |
[Owner : x509 cn=user.... ] |
*[Adopt : x509 cn=vospace.. ]* |
|
AdoptFile |
/----------------------------------/
| *[Auth : x509.cn=vospace.. ]*
| [File : ivo://vostore/.. ]
|
File
[Ident : ivo://vostore/.. ]
*[Owner : x509 cn=vospace.. ]*
[Size : xxxx Mbytes ]
The file in VoStore? is now owned by the VoSpace? service, and appears in the VoSpace?
node tree for the user's account.
The same number of SOAP calls are involved, but both the adoptInit()
and the adoptFile() calls to the VoStore? are made by the VoSpace?
service and not by the client. This reduces the complexity from the client's view point,
placing the burden of setting up the adoption on the VoSpace? service.
Client VoStore VoSpace
|
| AdoptInit
\----------------------------------------------------------------\
[Auth : x509.cn=user.... ] |
[Node : ivo://vospace/... ] |
Node
[Node : ivo://vospace/.. ]
[File : ivo://vostore/.. ]
In response, the VoSpace? service calls the VoStore? service, setting up the adoption transfer to the user's identity.
Client VoStore VoSpace
|
| AdoptInit
\----------------------------------------------------------------\
[Auth : x509.cn=user.... ] |
[Node : ivo://vospace/... ] |
Node
[Node : ivo://vospace/.. ]
[File : ivo://vostore/.. ]
|
AdoptInit |
/----------------------------------/
| [Auth : x509 cn=vospace.. ]
| [File : ivo://vostore/.. ]
| *[Adopt : x509.cn=user.. ]*
|
File
[File : ivo://vostore/.. ]
[Owner : x509 cn=vospace.. ]
*[Adopt : x509 cn=user.. ]*
At this point, we have three possible options for when to delete the corresponding node from the VoSpace? tree.
The simplest form is that the VoSpace? service deletes the node when the adoption is initiated,
Client VoStore VoSpace
|
| AdoptInit
\----------------------------------------------------------------\
[Auth : x509.cn=user.... ] |
[Node : ivo://vospace/... ] |
Node
[Node : ivo://vospace/.. ]
[File : ivo://vostore/.. ]
|
AdoptInit |
/----------------------------------/
| [Auth : x509 cn=vospace.. ] |
| [File : ivo://vostore/.. ] |
| *[Adopt : x509.cn=user.. ]* |
| |
File |
[File : ivo://vostore/.. ] |
[Owner : x509 cn=vospace.. ] |
*[Adopt : x509 cn=user.. ]* |
Node
*[deleted]*
The file is now released from the VoSPace? services control at this point, and the client is free to
call the VoStore? service and adopt the file.
Client VoStore VoSpace
|
| AdoptFile
\------------------------------\
[Auth : x509 cn=user.. ] |
[File : iov://vostore/.. ] |
|
File
[File : ivo://vostore/.. ]
*[Owner : x509 cn=user.. ]*
However, this sequence does leave a gap, between the call from the VoSpace? service to initiate the adoption
and the call from the client to accept it, during which the file is nominally owned by the VoSpace? service, but
the corresponding node has been deleted from the VoSpace? services metadata tree.
Client VoStore VoSpace
|
| AdoptInit
\----------------------------------------------------------------\
| [Auth : x509.cn=user.... ] |
| [Node : ivo://vospace/... ] |
| Node
| [Node : ivo://vospace/.. ]
| [File : ivo://vostore/.. ]
| [Adopt : x509.cn=user.. ]
| |
| AdoptInit |
| /----------------------------------/
| | [Auth : x509 cn=vospace.. ]
| | [File : ivo://vostore/.. ]
| | *[Adopt : x509.cn=user.. ]*
| | *[Notify : ivo://vospace/.. ]*
| |
| File
| [File : ivo://vostore/.. ]
| [Owner : x509 cn=vospace.. ]
| *[Adopt : x509 cn=user.. ]*
| *[Notify : ivo://vospace/.. ]*
|
| AdoptFile
\------------------------------\
[Auth : x509 cn=user.. ] |
[File : iov://vostore/.. ] |
|
File
[File : ivo://vostore/.. ]
*[Owner : x509 cn=user.. ]*
|
| AdoptDone
\---------------------------------\
[Auth : x509.cn=user.... ] |
[Node : ivo://vospace/... ] |
*[Adopt : x509.cn=user.. ]* |
|
Node
*[deleted]*
This avoids having a file in the VoStore? owned by the VoSpace? service, but with no corresponding
node in the VoSpace? metadata tree.
However, this does mean that the VoSpace? service relies on the VoStore? service to complete the sequence
by calling the callback to notify it when the adoption has been completed.
If the VoSpace? service is able to issue a delegated proxy certificate to act on the user's
behalf, then it is possible to use a much simpler sequence to achieve the same effect.
Client VoStore VoSpace
|
| AdoptInit
\----------------------------------------------------------------\
[Auth : x509.cn=user.... ] |
[Node : ivo://vospace/... ] |
Node
[Node : ivo://vospace/.. ]
[File : ivo://vostore/.. ]
|
AdoptInit |
/----------------------------------/
| [Auth : x509 cn=vospace.. ]
| [File : ivo://vostore/.. ]
| *[Adopt : x509.cn=user.. ]*
|
File
[File : ivo://vostore/.. ]
[Owner : x509 cn=vospace.. ]
*[Adopt : x509 cn=user.. ]*
Client VoStore VoSpace
|
| AdoptInit
\----------------------------------------------------------------\
[Auth : x509.cn=user.... ] |
[Node : ivo://vospace/... ] |
Node
[Node : ivo://vospace/.. ]
[File : ivo://vostore/.. ]
|
AdoptInit |
/----------------------------------/
| [Auth : x509 cn=vospace.. ] |
| [File : ivo://vostore/.. ] |
| *[Adopt : x509.cn=user.. ]* |
| |
File |
[File : ivo://vostore/.. ] |
[Owner : x509 cn=vospace.. ] |
*[Adopt : x509 cn=user.. ]* |
|
AdoptFile |
/----------------------------------/
| *[Auth : x509 cn=user.. ]* |
| [File : ivo://vostore/.. ] |
| |
File |
[File : ivo://vostore/.. ] |
*[Owner : x509 cn=user.. ]* |
|
Node
*[deleted]*
Because the VoSpace? service does both of the adoption calls, adoptInit() using its own identity,
and adoptFile() using a proxy certificate for the user's identity, the VoSpace? service knows
that the adoption has been completed.
The VoSpace? service can then delete the corresponding node without having to worry about leaving an orphaned
file in VoStore? owned by the VoSpace? service without a corresponding node in the metadata tree.![]() |
Click here for the AstroGrid Service Web |
This is the AstroGrid Development Wiki |
|