<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Mutability of Metadata — v2.1.0-beta</title> <link rel="stylesheet" href="../_static/dataone.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', VERSION: '2.1.0-beta', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true, SOURCELINK_SUFFIX: '.txt' }; </script> <script type="text/javascript" src="../_static/mathjax_pre.js"></script> <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> <script type="text/javascript" src="//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-MML-AM_CHTML"></script> <script type="text/javascript" src="../_static/sidebar.js"></script> <link rel="author" title="About these documents" href="../about.html" /> <link rel="index" title="Index" href="../genindex.html" /> <link rel="search" title="Search" href="../search.html" /> <link rel="next" title="Selectors for Data Package Components" href="selectors.html" /> <link rel="prev" title="Apache Configuration for DataONE Services" href="ApacheConfiguration.html" /> <link media="only screen and (max-device-width: 480px)" href="../_static/small_dataone.css" type= "text/css" rel="stylesheet" /> </head> <body role="document"> <div class="version_notice"> <p> <span class='bold'>Warning:</span> These documents are under active development and subject to change (version 2.1.0-beta).<br /> The latest release documents are at: <a href="https://purl.dataone.org/architecture">https://purl.dataone.org/architecture</a> </p> </div> <div class="related" role="navigation" aria-label="related navigation"> <h3>Navigation</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="../genindex.html" title="General Index" accesskey="I">index</a></li> <li class="right" > <a href="../py-modindex.html" title="Python Module Index" >modules</a> |</li> <li class="right" > <a href="selectors.html" title="Selectors for Data Package Components" accesskey="N">next</a> |</li> <li class="right" > <a href="ApacheConfiguration.html" title="Apache Configuration for DataONE Services" accesskey="P">previous</a> |</li> <li class="nav-item nav-item-0"><a href="../index.html"></a> »</li> <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">General Design and Implementation Notes</a> »</li> </ul> </div> <div class="document"> <div class="documentwrapper"> <div class="bodywrapper"> <div class="body"> <div class="section" id="mutability-of-metadata"> <h1>Mutability of Metadata<a class="headerlink" href="#mutability-of-metadata" title="Permalink to this headline">¶</a></h1> <p>These notes were initiated by DV with responses by RW and MJ around 17 December, 2010.</p> <p>Notes clarified and consolidated on 08/31/2011 by RW.</p> <p>SystemMetadata will be modified by CNs, MNs and clients. The CN modifies the SystemMetadata during certain operations, such as MN-CN Synchronization and MN-MN replication. A MN will modify SystemMetadata provenance as an object is updated. Clients and MNs will modify SystemMetadata to reflect new policies regarding replication, access and ownership, and will notify the CN when a MN-MN Replication event has completed.</p> <div class="section" id="systemmetadata-mutability"> <h2>SystemMetadata Mutability<a class="headerlink" href="#systemmetadata-mutability" title="Permalink to this headline">¶</a></h2> <p>SystemMetadata has certain elements that, once created, will never change. The immutable set of elements are determined during the MN-CN Synchronization process and are static through the existence of the object. The mutable set of elements are modified due to certain interactions and restrictions placed on which actor in the system may perform the updates.</p> <p>The Immutable set:</p> <blockquote> <div><table border="1" class="docutils"> <colgroup> <col width="38%" /> <col width="63%" /> </colgroup> <thead valign="bottom"> <tr class="row-odd"><th class="head">Element</th> <th class="head">Type</th> </tr> </thead> <tbody valign="top"> <tr class="row-even"><td>identifier</td> <td><a class="reference internal" href="../apis/Types.html#Types.Identifier" title="Types.Identifier"><code class="xref py py-class docutils literal"><span class="pre">Types.Identifier</span></code></a></td> </tr> <tr class="row-odd"><td>formatId</td> <td><a class="reference internal" href="../apis/Types.html#Types.ObjectFormatIdentifier" title="Types.ObjectFormatIdentifier"><code class="xref py py-class docutils literal"><span class="pre">Types.ObjectFormatIdentifier</span></code></a></td> </tr> <tr class="row-even"><td>size</td> <td>long</td> </tr> <tr class="row-odd"><td>checksum</td> <td><a class="reference internal" href="../apis/Types.html#Types.Checksum" title="Types.Checksum"><code class="xref py py-class docutils literal"><span class="pre">Types.Checksum</span></code></a></td> </tr> <tr class="row-even"><td>submitter</td> <td><a class="reference internal" href="../apis/Types.html#Types.Subject" title="Types.Subject"><code class="xref py py-class docutils literal"><span class="pre">Types.Subject</span></code></a></td> </tr> <tr class="row-odd"><td>dateUploaded</td> <td><a class="reference internal" href="../apis/Types.html#Types.DateTime" title="Types.DateTime"><code class="xref py py-class docutils literal"><span class="pre">Types.DateTime</span></code></a></td> </tr> <tr class="row-even"><td>originMemberNode</td> <td><a class="reference internal" href="../apis/Types.html#Types.NodeReference" title="Types.NodeReference"><code class="xref py py-class docutils literal"><span class="pre">Types.NodeReference</span></code></a></td> </tr> </tbody> </table> </div></blockquote> <p>The Mutable set:</p> <blockquote> <div><table border="1" class="docutils"> <colgroup> <col width="39%" /> <col width="61%" /> </colgroup> <thead valign="bottom"> <tr class="row-odd"><th class="head">Element</th> <th class="head">Type</th> </tr> </thead> <tbody valign="top"> <tr class="row-even"><td>rightsHolder</td> <td><a class="reference internal" href="../apis/Types.html#Types.Subject" title="Types.Subject"><code class="xref py py-class docutils literal"><span class="pre">Types.Subject</span></code></a></td> </tr> <tr class="row-odd"><td>accessPolicy</td> <td><a class="reference internal" href="../apis/Types.html#Types.AccessPolicy" title="Types.AccessPolicy"><code class="xref py py-class docutils literal"><span class="pre">Types.AccessPolicy</span></code></a></td> </tr> <tr class="row-even"><td>replicationPolicy</td> <td><a class="reference internal" href="../apis/Types.html#Types.ReplicationPolicy" title="Types.ReplicationPolicy"><code class="xref py py-class docutils literal"><span class="pre">Types.ReplicationPolicy</span></code></a></td> </tr> <tr class="row-odd"><td>obsoletes</td> <td><a class="reference internal" href="../apis/Types.html#Types.Identifier" title="Types.Identifier"><code class="xref py py-class docutils literal"><span class="pre">Types.Identifier</span></code></a></td> </tr> <tr class="row-even"><td>obsoletedBy</td> <td><a class="reference internal" href="../apis/Types.html#Types.Identifier" title="Types.Identifier"><code class="xref py py-class docutils literal"><span class="pre">Types.Identifier</span></code></a></td> </tr> <tr class="row-odd"><td>dateSysMetadataModified:</td> <td><a class="reference internal" href="../apis/Types.html#Types.DateTime" title="Types.DateTime"><code class="xref py py-class docutils literal"><span class="pre">Types.DateTime</span></code></a></td> </tr> <tr class="row-even"><td>authoritativeMemberNode:</td> <td><a class="reference internal" href="../apis/Types.html#Types.NodeReference" title="Types.NodeReference"><code class="xref py py-class docutils literal"><span class="pre">Types.NodeReference</span></code></a></td> </tr> <tr class="row-odd"><td>replica</td> <td><a class="reference internal" href="../apis/Types.html#Types.Replica" title="Types.Replica"><code class="xref py py-class docutils literal"><span class="pre">Types.Replica</span></code></a></td> </tr> </tbody> </table> </div></blockquote> </div> <div class="section" id="rest-api"> <h2>REST API<a class="headerlink" href="#rest-api" title="Permalink to this headline">¶</a></h2> <table border="1" class="docutils" id="id1"> <caption><span class="caption-text">Methods affecting SystemMetadata</span><a class="headerlink" href="#id1" title="Permalink to this table">¶</a></caption> <colgroup> <col width="6%" /> <col width="19%" /> <col width="19%" /> <col width="57%" /> </colgroup> <thead valign="bottom"> <tr class="row-odd"><th class="head">Tier</th> <th class="head">REST</th> <th class="head">Function</th> <th class="head">Parameters</th> </tr> </thead> <tbody valign="top"> <tr class="row-even"><td>Tier 1</td> <td><code class="docutils literal"><span class="pre">PUT</span> <span class="pre">/meta/{pid}</span></code></td> <td><a class="reference internal" href="../apis/CN_APIs.html#CNCore.updateSystemMetadata" title="CNCore.updateSystemMetadata"><code class="xref py py-func docutils literal"><span class="pre">CNCore.updateSystemMetadata()</span></code></a></td> <td>(<a class="reference internal" href="../apis/Types.html#Types.Session" title="Types.Session"><code class="xref py py-class docutils literal"><span class="pre">session</span></code></a>, <a class="reference internal" href="../apis/Types.html#Types.Identifier" title="Types.Identifier"><code class="xref py py-class docutils literal"><span class="pre">pid</span></code></a>, <a class="reference internal" href="../apis/Types.html#Types.SystemMetadata" title="Types.SystemMetadata"><code class="xref py py-class docutils literal"><span class="pre">sysmeta</span></code></a>) <code class="docutils literal"><span class="pre">-></span></code> boolean</td> </tr> <tr class="row-odd"><td>Tier 2</td> <td><code class="docutils literal"><span class="pre">PUT</span> <span class="pre">/owner/{pid}</span></code></td> <td><code class="xref py py-func docutils literal"><span class="pre">CNAuthorization.setOwner()</span></code></td> <td>(<a class="reference internal" href="../apis/Types.html#Types.Session" title="Types.Session"><code class="xref py py-class docutils literal"><span class="pre">session</span></code></a>, <a class="reference internal" href="../apis/Types.html#Types.Identifier" title="Types.Identifier"><code class="xref py py-class docutils literal"><span class="pre">pid</span></code></a>, <a class="reference internal" href="../apis/Types.html#Types.Subject" title="Types.Subject"><code class="xref py py-class docutils literal"><span class="pre">userId</span></code></a>) <code class="docutils literal"><span class="pre">-></span></code> <a class="reference internal" href="../apis/Types.html#Types.Identifier" title="Types.Identifier"><code class="xref py py-class docutils literal"><span class="pre">Types.Identifier</span></code></a></td> </tr> <tr class="row-even"><td>Tier 2</td> <td><code class="docutils literal"><span class="pre">PUT</span> <span class="pre">/accessRules/{pid}</span></code></td> <td><a class="reference internal" href="../apis/CN_APIs.html#CNAuthorization.setAccessPolicy" title="CNAuthorization.setAccessPolicy"><code class="xref py py-func docutils literal"><span class="pre">CNAuthorization.setAccessPolicy()</span></code></a></td> <td>(<a class="reference internal" href="../apis/Types.html#Types.Session" title="Types.Session"><code class="xref py py-class docutils literal"><span class="pre">session</span></code></a>, <a class="reference internal" href="../apis/Types.html#Types.Identifier" title="Types.Identifier"><code class="xref py py-class docutils literal"><span class="pre">pid</span></code></a>, <a class="reference internal" href="../apis/Types.html#Types.AccessPolicy" title="Types.AccessPolicy"><code class="xref py py-class docutils literal"><span class="pre">accessPolicy</span></code></a>) <code class="docutils literal"><span class="pre">-></span></code> boolean</td> </tr> <tr class="row-odd"><td>Tier 2</td> <td><code class="docutils literal"><span class="pre">PUT</span> <span class="pre">/accessRules/{pid}</span></code></td> <td><code class="xref py py-func docutils literal"><span class="pre">MNAuthorization.setAccessPolicy()</span></code></td> <td>(<a class="reference internal" href="../apis/Types.html#Types.Session" title="Types.Session"><code class="xref py py-class docutils literal"><span class="pre">session</span></code></a>, <a class="reference internal" href="../apis/Types.html#Types.Identifier" title="Types.Identifier"><code class="xref py py-class docutils literal"><span class="pre">pid</span></code></a>, <a class="reference internal" href="../apis/Types.html#Types.AccessPolicy" title="Types.AccessPolicy"><code class="xref py py-class docutils literal"><span class="pre">accessPolicy</span></code></a>) <code class="docutils literal"><span class="pre">-></span></code> boolean</td> </tr> <tr class="row-even"><td>Tier 3</td> <td><code class="docutils literal"><span class="pre">PUT</span> <span class="pre">/object/{pid}</span></code></td> <td><a class="reference internal" href="../apis/MN_APIs.html#MNStorage.update" title="MNStorage.update"><code class="xref py py-func docutils literal"><span class="pre">MNStorage.update()</span></code></a></td> <td>(<a class="reference internal" href="../apis/Types.html#Types.Session" title="Types.Session"><code class="xref py py-class docutils literal"><span class="pre">session</span></code></a>, <a class="reference internal" href="../apis/Types.html#Types.Identifier" title="Types.Identifier"><code class="xref py py-class docutils literal"><span class="pre">pid</span></code></a>, <code class="docutils literal"><span class="pre">object</span></code>, <a class="reference internal" href="../apis/Types.html#Types.Identifier" title="Types.Identifier"><code class="xref py py-class docutils literal"><span class="pre">newPid</span></code></a>, <a class="reference internal" href="../apis/Types.html#Types.SystemMetadata" title="Types.SystemMetadata"><code class="xref py py-class docutils literal"><span class="pre">sysmeta</span></code></a>) <code class="docutils literal"><span class="pre">-></span></code> <a class="reference internal" href="../apis/Types.html#Types.Identifier" title="Types.Identifier"><code class="xref py py-class docutils literal"><span class="pre">Types.Identifier</span></code></a></td> </tr> <tr class="row-odd"><td>Tier 4</td> <td><code class="docutils literal"><span class="pre">POST</span> <span class="pre">/notify</span></code></td> <td><a class="reference internal" href="../apis/CN_APIs.html#CNReplication.setReplicationStatus" title="CNReplication.setReplicationStatus"><code class="xref py py-func docutils literal"><span class="pre">CNReplication.setReplicationStatus()</span></code></a></td> <td>(<a class="reference internal" href="../apis/Types.html#Types.Session" title="Types.Session"><code class="xref py py-class docutils literal"><span class="pre">session</span></code></a>, <a class="reference internal" href="../apis/Types.html#Types.Identifier" title="Types.Identifier"><code class="xref py py-class docutils literal"><span class="pre">pid</span></code></a>, <a class="reference internal" href="../apis/Types.html#Types.ReplicationStatus" title="Types.ReplicationStatus"><code class="xref py py-class docutils literal"><span class="pre">status</span></code></a>) <code class="docutils literal"><span class="pre">-></span></code> boolean</td> </tr> <tr class="row-even"><td>Tier 4</td> <td><code class="docutils literal"><span class="pre">PUT</span> <span class="pre">/meta/replication/{pid}</span></code></td> <td><a class="reference internal" href="../apis/CN_APIs.html#CNReplication.updateReplicationMetadata" title="CNReplication.updateReplicationMetadata"><code class="xref py py-func docutils literal"><span class="pre">CNReplication.updateReplicationMetadata()</span></code></a></td> <td>(<a class="reference internal" href="../apis/Types.html#Types.Session" title="Types.Session"><code class="xref py py-class docutils literal"><span class="pre">session</span></code></a>, <a class="reference internal" href="../apis/Types.html#Types.Identifier" title="Types.Identifier"><code class="xref py py-class docutils literal"><span class="pre">pid</span></code></a>, <a class="reference internal" href="../apis/Types.html#Types.Replica" title="Types.Replica"><code class="xref py py-class docutils literal"><span class="pre">replicaMetadata</span></code></a>) <code class="docutils literal"><span class="pre">-></span></code> boolean</td> </tr> <tr class="row-odd"><td>Tier 4</td> <td><code class="docutils literal"><span class="pre">PUT</span> <span class="pre">/meta/policy/{pid}</span></code></td> <td><a class="reference internal" href="../apis/CN_APIs.html#CNReplication.setReplicationPolicy" title="CNReplication.setReplicationPolicy"><code class="xref py py-func docutils literal"><span class="pre">CNReplication.setReplicationPolicy()</span></code></a></td> <td>(<a class="reference internal" href="../apis/Types.html#Types.Session" title="Types.Session"><code class="xref py py-class docutils literal"><span class="pre">session</span></code></a>, <a class="reference internal" href="../apis/Types.html#Types.Identifier" title="Types.Identifier"><code class="xref py py-class docutils literal"><span class="pre">pid</span></code></a>, <a class="reference internal" href="../apis/Types.html#Types.ReplicationPolicy" title="Types.ReplicationPolicy"><code class="xref py py-class docutils literal"><span class="pre">policy</span></code></a>) <code class="docutils literal"><span class="pre">-></span></code> boolean</td> </tr> </tbody> </table> <p>internal only:</p> <ul class="simple"> <li><a class="reference internal" href="../apis/CN_APIs.html#CNCore.updateSystemMetadata" title="CNCore.updateSystemMetadata"><code class="xref py py-func docutils literal"><span class="pre">CNCore.updateSystemMetadata()</span></code></a></li> <li><a class="reference internal" href="../apis/CN_APIs.html#CNReplication.updateReplicationMetadata" title="CNReplication.updateReplicationMetadata"><code class="xref py py-func docutils literal"><span class="pre">CNReplication.updateReplicationMetadata()</span></code></a></li> </ul> <p>externally available through REST API:</p> <ul class="simple"> <li><code class="xref py py-func docutils literal"><span class="pre">CNAuthorization.setOwner()</span></code></li> <li><a class="reference internal" href="../apis/CN_APIs.html#CNAuthorization.setAccessPolicy" title="CNAuthorization.setAccessPolicy"><code class="xref py py-func docutils literal"><span class="pre">CNAuthorization.setAccessPolicy()</span></code></a></li> <li><code class="xref py py-func docutils literal"><span class="pre">MNAuthorization.setAccessPolicy()</span></code></li> <li><a class="reference internal" href="../apis/MN_APIs.html#MNStorage.update" title="MNStorage.update"><code class="xref py py-func docutils literal"><span class="pre">MNStorage.update()</span></code></a></li> <li><a class="reference internal" href="../apis/CN_APIs.html#CNReplication.setReplicationStatus" title="CNReplication.setReplicationStatus"><code class="xref py py-func docutils literal"><span class="pre">CNReplication.setReplicationStatus()</span></code></a></li> <li><a class="reference internal" href="../apis/CN_APIs.html#CNReplication.setReplicationPolicy" title="CNReplication.setReplicationPolicy"><code class="xref py py-func docutils literal"><span class="pre">CNReplication.setReplicationPolicy()</span></code></a></li> </ul> </div> <div class="section" id="interactions-affecting-systemmetadata"> <h2>Interactions affecting SystemMetadata<a class="headerlink" href="#interactions-affecting-systemmetadata" title="Permalink to this headline">¶</a></h2> <p>The CN is the ultimate arbiter of SystemMetadata changes. There needs to be a clear delineation of responsibility with regard to which processes will interact with the CN store such that the SystemMetadata remains consistent.</p> <p>MN-CN Synchronization:</p> <p>The MN-CN Synchronization process will set all the immutable elements the first time an item is created. It will also add items to mutable elements that were provided by the MN:</p> <blockquote> <div><ul class="simple"> <li><strong>originMemberNode</strong> (<a class="reference internal" href="../apis/Types.html#Types.NodeReference" title="Types.NodeReference"><code class="xref py py-class docutils literal"><span class="pre">Types.NodeReference</span></code></a>)</li> <li><strong>authoritativeMemberNode</strong> (<a class="reference internal" href="../apis/Types.html#Types.NodeReference" title="Types.NodeReference"><code class="xref py py-class docutils literal"><span class="pre">Types.NodeReference</span></code></a>)</li> <li><strong>replica</strong> (<a class="reference internal" href="../apis/Types.html#Types.Replica" title="Types.Replica"><code class="xref py py-class docutils literal"><span class="pre">Types.Replica</span></code></a>)</li> </ul> </div></blockquote> <p>It will also reset <strong>dateSysMetadataModified</strong> (<a class="reference internal" href="../apis/Types.html#Types.DateTime" title="Types.DateTime"><code class="xref py py-class docutils literal"><span class="pre">Types.DateTime</span></code></a>) to the time the object was added.</p> <p>The MN-CN Synchronization process may also update SystemMetadata by calling the CNCore.updateSystemMetadata internally. It will update the <strong>authoritativeMemberNode</strong> (<a class="reference internal" href="../apis/Types.html#Types.NodeReference" title="Types.NodeReference"><code class="xref py py-class docutils literal"><span class="pre">Types.NodeReference</span></code></a>) or <strong>obsoletedBy</strong> (<a class="reference internal" href="../apis/Types.html#Types.Identifier" title="Types.Identifier"><code class="xref py py-class docutils literal"><span class="pre">Types.Identifier</span></code></a>) on the CN when during synchronization of the node listed as the authoritativeMemberNode, it finds those fields have changed been modified, and changes <strong>dateSysMetadataModified</strong> (<a class="reference internal" href="../apis/Types.html#Types.DateTime" title="Types.DateTime"><code class="xref py py-class docutils literal"><span class="pre">Types.DateTime</span></code></a>) to reflect the date on the SystemMetadata sent from the MN.</p> <p>MN-MN Replication:</p> <p>The MN-MN Replication process running on the CN will call CNReplication.updateReplicationMetadata to modify <strong>replica</strong> (<a class="reference internal" href="../apis/Types.html#Types.Replica" title="Types.Replica"><code class="xref py py-class docutils literal"><span class="pre">Types.Replica</span></code></a>) on the SystemMetadata to reflect the replica copies available. A MN will call the CNReplication.setReplicationStatus that modifies the replica list <strong>replica</strong> (<a class="reference internal" href="../apis/Types.html#Types.Replica" title="Types.Replica"><code class="xref py py-class docutils literal"><span class="pre">Types.Replica</span></code></a>) to indicate when a replication from one MN to another has been completed. After each operation, <strong>dateSysMetadataModified</strong> (<a class="reference internal" href="../apis/Types.html#Types.DateTime" title="Types.DateTime"><code class="xref py py-class docutils literal"><span class="pre">Types.DateTime</span></code></a>) will be modified to be the date the operation was performed.</p> <p>Client-CN Interactions:</p> <p>Clients, either ITK or MNs, may call the following methods on the CN:</p> <ul class="simple"> <li><code class="xref py py-func docutils literal"><span class="pre">CNAuthorization.setOwner()</span></code></li> <li><a class="reference internal" href="../apis/CN_APIs.html#CNAuthorization.setAccessPolicy" title="CNAuthorization.setAccessPolicy"><code class="xref py py-func docutils literal"><span class="pre">CNAuthorization.setAccessPolicy()</span></code></a></li> <li><a class="reference internal" href="../apis/CN_APIs.html#CNReplication.setReplicationPolicy" title="CNReplication.setReplicationPolicy"><code class="xref py py-func docutils literal"><span class="pre">CNReplication.setReplicationPolicy()</span></code></a></li> </ul> <p>The execution of these methods will alter various elements:</p> <ul class="simple"> <li><strong>rightsHolder</strong> (<a class="reference internal" href="../apis/Types.html#Types.Subject" title="Types.Subject"><code class="xref py py-class docutils literal"><span class="pre">Types.Subject</span></code></a>)</li> <li><strong>accessPolicy</strong> (<a class="reference internal" href="../apis/Types.html#Types.AccessPolicy" title="Types.AccessPolicy"><code class="xref py py-class docutils literal"><span class="pre">Types.AccessPolicy</span></code></a>)</li> <li><strong>replicationPolicy</strong> (<a class="reference internal" href="../apis/Types.html#Types.ReplicationPolicy" title="Types.ReplicationPolicy"><code class="xref py py-class docutils literal"><span class="pre">Types.ReplicationPolicy</span></code></a>)</li> </ul> <dl class="docutils"> <dt>A side effect of each of these operations will be an update to</dt> <dd><strong>dateSysMetadataModified</strong> (<a class="reference internal" href="../apis/Types.html#Types.DateTime" title="Types.DateTime"><code class="xref py py-class docutils literal"><span class="pre">Types.DateTime</span></code></a>).</dd> </dl> <p>Client-MN Interactions:</p> <p>A Client may call the following:</p> <ul class="simple"> <li><code class="xref py py-func docutils literal"><span class="pre">MNAuthorization.setAccessPolicy()</span></code></li> <li><a class="reference internal" href="../apis/MN_APIs.html#MNStorage.update" title="MNStorage.update"><code class="xref py py-func docutils literal"><span class="pre">MNStorage.update()</span></code></a></li> </ul> <p>This operation alone does not have an effect on the CN’s definitive store. A subsequent call to the CN will via func:<cite>CNAuthorization.setAccessPolicy</cite> will need to be made by the MN.</p> <p>An object may be updated on an MN. The update mechanism will create a new object that is the descendent of the object updated. The descendant object will have the <strong>obsoletes</strong> (<a class="reference internal" href="../apis/Types.html#Types.Identifier" title="Types.Identifier"><code class="xref py py-class docutils literal"><span class="pre">Types.Identifier</span></code></a>) field set while the ancestor object will need an <strong>obsoletedBy</strong> (<a class="reference internal" href="../apis/Types.html#Types.Identifier" title="Types.Identifier"><code class="xref py py-class docutils literal"><span class="pre">Types.Identifier</span></code></a>) element added. The synchronization process will update the ancestor’s SystemMetadata with the new value.</p> <p>Robert’s Notes:</p> <p>From these interactions, there is no mechanism defined that updates authoritativeMemberNode on the Authoritative MN.</p> <p>I am uncertain why <code class="xref py py-func docutils literal"><span class="pre">MNAuthorization.setAccessPolicy()</span></code> is needed. It would appear to be a proxy of the <cite>CNAuthorization.setAccessPolicy</cite>. So why not eliminate the MN call and direct all client calls to the CN?</p> <p>To answer my question about Synchronization updating responsibility: Synchronization should only update the obsoletedBy and authoritativeMemberNode fields of the SystemMetadata from the Authoritative MN (and only the Authoritative MN).</p> </div> </div> </div> </div> </div> <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> <div class="sphinxsidebarwrapper"> <p class="logo"><a href="http://dataone.org"> <img class="logo" src="../_static/dataone_logo.png" alt="Logo"/> </a></p> <h3><a href="../index.html">Table Of Contents</a></h3> <ul> <li><a class="reference internal" href="#">Mutability of Metadata</a><ul> <li><a class="reference internal" href="#systemmetadata-mutability">SystemMetadata Mutability</a></li> <li><a class="reference internal" href="#rest-api">REST API</a></li> <li><a class="reference internal" href="#interactions-affecting-systemmetadata">Interactions affecting SystemMetadata</a></li> </ul> </li> </ul> <h3>Related Topics</h3> <ul> <li><a href="../index.html">Documentation Overview</a><ul> <li><a href="index.html">General Design and Implementation Notes</a><ul> <li>Previous: <a href="ApacheConfiguration.html" title="previous chapter">Apache Configuration for DataONE Services</a></li> <li>Next: <a href="selectors.html" title="next chapter">Selectors for Data Package Components</a></li> </ul></li> </ul></li> </ul> <div id="searchbox" style="display: none" role="search"> <h3>Quick search</h3> <form class="search" action="../search.html" method="get"> <div><input type="text" name="q" /></div> <div><input type="submit" value="Go" /></div> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> </div> <script type="text/javascript">$('#searchbox').show(0);</script> </div> </div> <div class="clearer"></div> </div> <div class="footer"> <div id="copyright"> © Copyright <a href="http://www.dataone.org">2009-2017, DataONE</a>. [ <a href="../_sources/notes/sysmeta_mutation_20110831.txt" rel="nofollow">Page Source</a> | <a href='https://redmine.dataone.org/projects/d1/repository/changes/documents/Projects/cicore/architecture/api-documentation/source/notes/sysmeta_mutation_20110831.txt' rel="nofollow">Revision History</a> ] </div> <div id="acknowledgement"> <p>This material is based upon work supported by the National Science Foundation under Grant Numbers <a href="http://www.nsf.gov/awardsearch/showAward?AWD_ID=0830944">083094</a> and <a href="http://www.nsf.gov/awardsearch/showAward?AWD_ID=1430508">1430508</a>.</p> <p>Any opinions, findings, and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the National Science Foundation.</p> </div> </div> <!-- <hr /> <div id="HCB_comment_box"><a href="http://www.htmlcommentbox.com">HTML Comment Box</a> is loading comments...</div> <link rel="stylesheet" type="text/css" href="_static/skin.css" /> <script type="text/javascript" language="javascript" id="hcb"> /*<! -*/ (function() {s=document.createElement("script"); s.setAttribute("type","text/javascript"); s.setAttribute("src", "http://www.htmlcommentbox.com/jread?page="+escape((typeof hcb_user !== "undefined" && hcb_user.PAGE)||(""+window.location)).replace("+","%2B")+"&mod=%241%24wq1rdBcg%24Gg8J5iYSHJWwAJtlYu/yU."+"&opts=21407&num=10"); if (typeof s!="undefined") document.getElementsByTagName("head")[0].appendChild(s);})(); /* ->*/ </script> --> </body> </html>