€cdocutils.nodes document q)q}q(U nametypesq}q(X(use case 36 - resolve an object locationqNXhistoryqˆXuc36qˆuUsubstitution_defsq }q Uparse_messagesq ]q Ucurrent_sourceq NU decorationqNUautofootnote_startqKUnameidsq}q(hU&use-case-36-resolve-an-object-locationqhUhistoryqhUuc36quUchildrenq]q(cdocutils.nodes target q)q}q(U rawsourceqX .. _UC36:UparentqhUsourceqXj/var/lib/jenkins/jobs/API_Documentation_trunk/workspace/api-documentation/source/design/UseCases/36_uc.txtqUtagnameqUtargetqU attributesq }q!(Uidsq"]Ubackrefsq#]Udupnamesq$]Uclassesq%]Unamesq&]Urefidq'huUlineq(KUdocumentq)hh]ubcdocutils.nodes section q*)q+}q,(hUhhhhUexpect_referenced_by_nameq-}q.hhshUsectionq/h }q0(h$]h%]h#]h"]q1(hheh&]q2(hheuh(Kh)hUexpect_referenced_by_idq3}q4hhsh]q5(cdocutils.nodes title q6)q7}q8(hX(Use Case 36 - Resolve an Object Locationq9hh+hhhUtitleq:h }q;(h$]h%]h#]h"]h&]uh(Kh)hh]q…q?}q@(hh9hh7ubaubcsphinx.addnodes index qA)qB}qC(hUhh+hhhUindexqDh }qE(h"]h#]h$]h%]h&]UentriesqF]qG((UsingleqHX Use Case 36Uindex-0qIUNtqJ(hHXUC36hIUNtqK(hHXresolvehIUNtqLeUinlineqM‰uh(Kh)hh]ubh)qN}qO(hUhh+hhhhh }qP(h"]h#]h$]h%]h&]h'hIuh(Kh)hh]ubcdocutils.nodes definition_list qQ)qR}qS(hUhh+hhh-}hUdefinition_listqTh }qU(h$]h%]h#]h"]qVhIah&]uh(Nh)hh3}qWhIhNsh]qX(cdocutils.nodes definition_list_item qY)qZ}q[(hX+Revisions View document revision history_. hhRhhhUdefinition_list_itemq\h }q](h$]h%]h#]h"]h&]uh(K h]q^(cdocutils.nodes term q_)q`}qa(hX RevisionsqbhhZhhhUtermqch }qd(h$]h%]h#]h"]h&]uh(K h]qeh=X Revisionsqf…qg}qh(hhbhh`ubaubcdocutils.nodes definition qi)qj}qk(hUh }ql(h$]h%]h#]h"]h&]uhhZh]qmcdocutils.nodes paragraph qn)qo}qp(hX View document revision history_.hhjhhhU paragraphqqh }qr(h$]h%]h#]h"]h&]uh(K h]qs(h=XView document revision qt…qu}qv(hXView document revision hhoubcdocutils.nodes reference qw)qx}qy(hXhistory_UresolvedqzKhhohU referenceq{h }q|(UnameXhistoryq}Urefuriq~X”https://redmine.dataone.org/projects/d1/repository/changes/documents/Projects/cicore/architecture/api-documentation/source/design/UseCases/36_uc.txtqh"]h#]h$]h%]h&]uh]q€h=Xhistoryq…q‚}qƒ(hUhhxubaubh=X.…q„}q…(hX.hhoubeubahU definitionq†ubeubhY)q‡}qˆ(hXCGoal Communicate the locations where a DataONE object can be found hhRhhhh\h }q‰(h$]h%]h#]h"]h&]uh(K h)hh]qŠ(h_)q‹}qŒ(hXGoalqhh‡hhhhch }qŽ(h$]h%]h#]h"]h&]uh(K h]qh=XGoalq…q‘}q’(hhhh‹ubaubhi)q“}q”(hUh }q•(h$]h%]h#]h"]h&]uhh‡h]q–hn)q—}q˜(hX=Communicate the locations where a DataONE object can be foundq™hh“hhhhqh }qš(h$]h%]h#]h"]h&]uh(K h]q›h=X=Communicate the locations where a DataONE object can be foundqœ…q}qž(hh™hh—ubaubahh†ubeubhY)qŸ}q (hX:Summary Within DataONE, a registered object may be held on one or more Member Nodes (depending on replication policy) and in the case of science metadata, on Coordinating Nodes. Clients must be able to ask a Coordinating Node for those locations. The response to this query is a list of member node identifiers and the URL endpoint of their DataONE API implementation. The client will need to retrieve information about the node from the node registry (Use case 35) in order to accurately determine the URL that can be used to retrieve the object bytes (Use case 01). hhRhhhh\h }q¡(h$]h%]h#]h"]h&]uh(Kh)hh]q¢(h_)q£}q¤(hXSummaryq¥hhŸhhhhch }q¦(h$]h%]h#]h"]h&]uh(Kh]q§h=XSummaryq¨…q©}qª(hh¥hh£ubaubhi)q«}q¬(hUh }q­(h$]h%]h#]h"]h&]uhhŸh]q®(hn)q¯}q°(hXîWithin DataONE, a registered object may be held on one or more Member Nodes (depending on replication policy) and in the case of science metadata, on Coordinating Nodes. Clients must be able to ask a Coordinating Node for those locations.q±hh«hhhhqh }q²(h$]h%]h#]h"]h&]uh(Kh]q³h=XîWithin DataONE, a registered object may be held on one or more Member Nodes (depending on replication policy) and in the case of science metadata, on Coordinating Nodes. Clients must be able to ask a Coordinating Node for those locations.q´…qµ}q¶(hh±hh¯ubaubhn)q·}q¸(hXyThe response to this query is a list of member node identifiers and the URL endpoint of their DataONE API implementation.q¹hh«hhhhqh }qº(h$]h%]h#]h"]h&]uh(Kh]q»h=XyThe response to this query is a list of member node identifiers and the URL endpoint of their DataONE API implementation.q¼…q½}q¾(hh¹hh·ubaubhn)q¿}qÀ(hXÆThe client will need to retrieve information about the node from the node registry (Use case 35) in order to accurately determine the URL that can be used to retrieve the object bytes (Use case 01).qÁhh«hhhhqh }qÂ(h$]h%]h#]h"]h&]uh(Kh]qÃh=XÆThe client will need to retrieve information about the node from the node registry (Use case 35) in order to accurately determine the URL that can be used to retrieve the object bytes (Use case 01).qÄ…qÅ}qÆ(hhÁhh¿ubaubehh†ubeubhY)qÇ}qÈ(hX4Actors - Coordinating Node - Client requesting info hhRhhhh\h }qÉ(h$]h%]h#]h"]h&]uh(Kh)hh]qÊ(h_)qË}qÌ(hXActorsqÍhhÇhhhhch }qÎ(h$]h%]h#]h"]h&]uh(Kh]qÏh=XActorsqÐ…qÑ}qÒ(hhÍhhËubaubhi)qÓ}qÔ(hUh }qÕ(h$]h%]h#]h"]h&]uhhÇh]qÖcdocutils.nodes bullet_list q×)qØ}qÙ(hUh }qÚ(UbulletqÛX-h"]h#]h$]h%]h&]uhhÓh]qÜ(cdocutils.nodes list_item qÝ)qÞ}qß(hXCoordinating Nodeqàh }qá(h$]h%]h#]h"]h&]uhhØh]qâhn)qã}qä(hhàhhÞhhhhqh }qå(h$]h%]h#]h"]h&]uh(Kh]qæh=XCoordinating Nodeqç…qè}qé(hhàhhãubaubahU list_itemqêubhÝ)që}qì(hXClient requesting info h }qí(h$]h%]h#]h"]h&]uhhØh]qîhn)qï}qð(hXClient requesting infoqñhhëhhhhqh }qò(h$]h%]h#]h"]h&]uh(Kh]qóh=XClient requesting infoqô…qõ}qö(hhñhhïubaubahhêubehU bullet_listq÷ubahh†ubeubhY)qø}qù(hX´Preconditions - Coordinating Nodes are operational - Client has an identifier for an object - Object exists in the DataONE system and has been recorded by the Coordinating Nodes hhRhhhh\h }qú(h$]h%]h#]h"]h&]uh(K#h)hh]qû(h_)qü}qý(hX Preconditionsqþhhøhhhhch }qÿ(h$]h%]h#]h"]h&]uh(K#h]rh=X Preconditionsr…r}r(hhþhhüubaubhi)r}r(hUh }r(h$]h%]h#]h"]h&]uhhøh]rh×)r}r (hUh }r (hÛX-h"]h#]h$]h%]h&]uhjh]r (hÝ)r }r (hX"Coordinating Nodes are operationalrh }r(h$]h%]h#]h"]h&]uhjh]rhn)r}r(hjhj hhhhqh }r(h$]h%]h#]h"]h&]uh(K h]rh=X"Coordinating Nodes are operationalr…r}r(hjhjubaubahhêubhÝ)r}r(hX&Client has an identifier for an objectrh }r(h$]h%]h#]h"]h&]uhjh]rhn)r}r(hjhjhhhhqh }r(h$]h%]h#]h"]h&]uh(K!h]r h=X&Client has an identifier for an objectr!…r"}r#(hjhjubaubahhêubhÝ)r$}r%(hXTObject exists in the DataONE system and has been recorded by the Coordinating Nodes h }r&(h$]h%]h#]h"]h&]uhjh]r'hn)r(}r)(hXSObject exists in the DataONE system and has been recorded by the Coordinating Nodesr*hj$hhhhqh }r+(h$]h%]h#]h"]h&]uh(K"h]r,h=XSObject exists in the DataONE system and has been recorded by the Coordinating Nodesr-…r.}r/(hj*hj(ubaubahhêubehh÷ubahh†ubeubhY)r0}r1(hXTriggers - Request by client hhRhhhh\h }r2(h$]h%]h#]h"]h&]uh(K&h)hh]r3(h_)r4}r5(hXTriggersr6hj0hhhhch }r7(h$]h%]h#]h"]h&]uh(K&h]r8h=XTriggersr9…r:}r;(hj6hj4ubaubhi)r<}r=(hUh }r>(h$]h%]h#]h"]h&]uhj0h]r?h×)r@}rA(hUh }rB(hÛX-h"]h#]h$]h%]h&]uhj<h]rChÝ)rD}rE(hXRequest by client h }rF(h$]h%]h#]h"]h&]uhj@h]rGhn)rH}rI(hXRequest by clientrJhjDhhhhqh }rK(h$]h%]h#]h"]h&]uh(K&h]rLh=XRequest by clientrM…rN}rO(hjJhjHubaubahhêubahh÷ubahh†ubeubhY)rP}rQ(hXQPost Conditions - Client has more information about the location of the object. hhRhhhh\h }rR(h$]h%]h#]h"]h&]uh(K*h)hh]rS(h_)rT}rU(hXPost ConditionsrVhjPhhhhch }rW(h$]h%]h#]h"]h&]uh(K*h]rXh=XPost ConditionsrY…rZ}r[(hjVhjTubaubhi)r\}r](hUh }r^(h$]h%]h#]h"]h&]uhjPh]r_h×)r`}ra(hUh }rb(hÛX-h"]h#]h$]h%]h&]uhj\h]rchÝ)rd}re(hX?Client has more information about the location of the object. h }rf(h$]h%]h#]h"]h&]uhj`h]rghn)rh}ri(hX=Client has more information about the location of the object.rjhjdhhhhqh }rk(h$]h%]h#]h"]h&]uh(K)h]rlh=X=Client has more information about the location of the object.rm…rn}ro(hjjhjhubaubahhêubahh÷ubahh†ubeubeubcdocutils.nodes comment rp)rq}rr(hXR@startuml images/36_uc.png actor "User" as client usecase "12. Authentication" as authen package "DataONE" actor "Coordinating Node" as CN usecase "13. Authorization" as author usecase "36. Resolve Object" as resolve client -- resolve CN -- resolve resolve ..> author: <> resolve ..> authen: <> @endumlhh+hhhUcommentrsh }rt(U xml:spaceruUpreservervh"]h#]h$]h%]h&]uh(K;h)hh]rwh=XR@startuml images/36_uc.png actor "User" as client usecase "12. Authentication" as authen package "DataONE" actor "Coordinating Node" as CN usecase "13. Authorization" as author usecase "36. Resolve Object" as resolve client -- resolve CN -- resolve resolve ..> author: <> resolve ..> authen: <> @endumlrx…ry}rz(hUhjqubaubcdocutils.nodes image r{)r|}r}(hX.. image:: images/36_uc.png hh+hhhUimager~h }r(UuriX design/UseCases/images/36_uc.pngr€h"]h#]h$]h%]U candidatesr}r‚U*j€sh&]uh(K=h)hh]ubhn)rƒ}r„(hX-*Figure 1.* Use case diagram for Use Case 36.r…hh+hhhhqh }r†(h$]h%]h#]h"]h&]uh(K>h)hh]r‡(cdocutils.nodes emphasis rˆ)r‰}rŠ(hX *Figure 1.*h }r‹(h$]h%]h#]h"]h&]uhjƒh]rŒh=X Figure 1.r…rŽ}r(hUhj‰ubahUemphasisrubh=X" Use case diagram for Use Case 36.r‘…r’}r“(hX" Use case diagram for Use Case 36.hjƒubeubjp)r”}r•(hXÉ@startuml images/36_seq.png participant "Client" as itk <> participant "CRUD API" as c_crud << Coordinating Node >> participant "Authorization API" as c_authorize << Coordinating Node >> participant "Object Store" as c_store << Coordinating Node >> itk -> c_crud: resolve(token, pid) activate c_crud c_crud -> c_authorize: isAuthorized(token, pid, READ) c_crud <- c_authorize: True, False, Err.NotFound alt False c_crud -> itk: Err.NotAuthorized else Err.NotFound c_crud -> itk: Err.NotFound else OK c_crud -> c_store: getSystemMetadata(pid) c_store -> c_crud: SystemMetadata c_crud -> c_crud: extract object locations c_crud -> itk: objectLocations end deactivate c_crud @endumlhh+hhhjsh }r–(jujvh"]h#]h$]h%]h&]uh(KWh)hh]r—h=XÉ@startuml images/36_seq.png participant "Client" as itk <> participant "CRUD API" as c_crud << Coordinating Node >> participant "Authorization API" as c_authorize << Coordinating Node >> participant "Object Store" as c_store << Coordinating Node >> itk -> c_crud: resolve(token, pid) activate c_crud c_crud -> c_authorize: isAuthorized(token, pid, READ) c_crud <- c_authorize: True, False, Err.NotFound alt False c_crud -> itk: Err.NotAuthorized else Err.NotFound c_crud -> itk: Err.NotFound else OK c_crud -> c_store: getSystemMetadata(pid) c_store -> c_crud: SystemMetadata c_crud -> c_crud: extract object locations c_crud -> itk: objectLocations end deactivate c_crud @endumlr˜…r™}rš(hUhj”ubaubj{)r›}rœ(hX.. image:: images/36_seq.png hh+hhhj~h }r(UuriX!design/UseCases/images/36_seq.pngržh"]h#]h$]h%]j}rŸU*jžsh&]uh(KYh)hh]ubhn)r }r¡(hX?*Figure 2.* Sequence diagram for implementation of use case 36.r¢hh+hhhhqh }r£(h$]h%]h#]h"]h&]uh(KZh)hh]r¤(jˆ)r¥}r¦(hX *Figure 2.*h }r§(h$]h%]h#]h"]h&]uhj h]r¨h=X Figure 2.r©…rª}r«(hUhj¥ubahjubh=X4 Sequence diagram for implementation of use case 36.r¬…r­}r®(hX4 Sequence diagram for implementation of use case 36.hj ubeubh)r¯}r°(hX¡.. _history: https://redmine.dataone.org/projects/d1/repository/changes/documents/Projects/cicore/architecture/api-documentation/source/design/UseCases/36_uc.txtU referencedr±Khh+hhhhh }r²(h~hh"]r³hah#]h$]h%]h&]r´hauh(K\h)hh]ubeubehUU transformerrµNU footnote_refsr¶}r·Urefnamesr¸}r¹h}]rºhxasUsymbol_footnotesr»]r¼Uautofootnote_refsr½]r¾Usymbol_footnote_refsr¿]rÀU citationsrÁ]rÂh)hU current_linerÃNUtransform_messagesrÄ]rÅ(cdocutils.nodes system_message rÆ)rÇ}rÈ(hUh }rÉ(h$]UlevelKh"]h#]Usourcehh%]h&]UlineKUtypeUINFOrÊuh]rËhn)rÌ}rÍ(hUh }rÎ(h$]h%]h#]h"]h&]uhjÇh]rÏh=X*Hyperlink target "uc36" is not referenced.rÐ…rÑ}rÒ(hUhjÌubahhqubahUsystem_messagerÓubjÆ)rÔ}rÕ(hUh }rÖ(h$]UlevelKh"]h#]Usourcehh%]h&]UlineKUtypejÊuh]r×hn)rØ}rÙ(hUh }rÚ(h$]h%]h#]h"]h&]uhjÔh]rÛh=X-Hyperlink target "index-0" is not referenced.rÜ…rÝ}rÞ(hUhjØubahhqubahjÓubeUreporterrßNUid_startràKU autofootnotesrá]râU citation_refsrã}räUindirect_targetsrå]ræUsettingsrç(cdocutils.frontend Values rèoré}rê(Ufootnote_backlinksrëKUrecord_dependenciesrìNU rfc_base_urlríUhttps://tools.ietf.org/html/rîU tracebackrïˆUpep_referencesrðNUstrip_commentsrñNU toc_backlinksròUentryróU language_coderôUenrõU datestampröNU report_levelr÷KU _destinationrøNU halt_levelrùKU strip_classesrúNh:NUerror_encoding_error_handlerrûUbackslashreplacerüUdebugrýNUembed_stylesheetrþ‰Uoutput_encoding_error_handlerrÿUstrictrU sectnum_xformrKUdump_transformsrNU docinfo_xformrKUwarning_streamrNUpep_file_url_templaterUpep-%04drUexit_status_levelrKUconfigrNUstrict_visitorr NUcloak_email_addressesr ˆUtrim_footnote_reference_spacer ‰Uenvr NUdump_pseudo_xmlr NUexpose_internalsrNUsectsubtitle_xformr‰U source_linkrNUrfc_referencesrNUoutput_encodingrUutf-8rU source_urlrNUinput_encodingrU utf-8-sigrU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUUTF-8rU_sourcerhUgettext_compactrˆU generatorrNUdump_internalsrNU smart_quotesr ‰U pep_base_urlr!U https://www.python.org/dev/peps/r"Usyntax_highlightr#Ulongr$Uinput_encoding_error_handlerr%jUauto_id_prefixr&Uidr'Udoctitle_xformr(‰Ustrip_elements_with_classesr)NU _config_filesr*]Ufile_insertion_enabledr+ˆU raw_enabledr,KU dump_settingsr-NubUsymbol_footnote_startr.KUidsr/}r0(hj¯hh+hIhRhh+uUsubstitution_namesr1}r2hh)h }r3(h$]h"]h#]Usourcehh%]h&]uU footnotesr4]r5Urefidsr6}r7(hI]r8hNah]r9hauub.