<!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 &#8212; 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> &#187;</li>
          <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">General Design and Implementation Notes</a> &#187;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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&#8217;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&#8217;s SystemMetadata with the new
value.</p>
<p>Robert&#8217;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">
      &copy; 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> ]&nbsp;&nbsp;
      </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>