Change Log ========== 2014-02-12: Version 1.2. Clarification edits -------------------------------------------- - Many edits to clarify definitions such as "archive". - Revised introductory text to APIs and the overall system 2013-10-17: Version 1.2. Minor edits ------------------------------------ - Added language indicating restricted access to log information by public user - New version of plantuml.jar 2012-10-09: Version 1.1. Clarifying *count* parameter for slicing ----------------------------------------------------------------- - No functional changes were introduced. - listObjects, listSubjects, getLogRecords descriptions were updated 2012-09-28: Version 1.1. Adding MNQuery API ------------------------------------------- - Added MNQuery API as an optional Tier 1 API with the same method signatures as the CNRead.Query* method definitions. 2012-09-25: Version 1.1. Revising proposed Query API ---------------------------------------------------- - Updated proposed search API following review and discussion. Including draft changes to 1.1 dataoneTypes.xsd - Changed search2 to query - Changed listSearchFields to getQueryEngineDescription - Changed listSearchEngines to listQueryEngines - 2012-09-06: Version 1.0. Removed ambiguous exception serialization info 2012-08-20: Version 1.1. Augmenting Search API ---------------------------------------------- DRAFT edits for review: - Added method search2 which enables return of arbitrary structure as determined by the selected search engine. - Added method listSearchFields which returns a list of fields that can be searched using a specified search engine. - Added method listSearchEngines which returns a list of search engines available. 2012-05-31: Version 1.0, Correction to URIs in Resource Maps ------------------------------------------------------------ - Corrected URI constructs in the resource map data package documents to use resolve rather than getObject URIs so that clients can take advantage of the ObjectLocationList or HTTP status 302 redirect. 2012-05-02: Version 1.0, MethodCrossReference.xls ------------------------------------------------- - Moved MN systemMetadataChanged from MNStorage API to MNAuthorization API so that the method appears in Tier 2 operations. 2012-05-01: Version 1.0, MethodCrossReference.xls ------------------------------------------------- - The MN method *getReplica* was incorrectly located in Tier 4, effectively preventing any MN implementation except Tier 4 nodes from acting as replication sources. This has been corrected, with the method moved to the MNRead Tier1 API. The method description was updated accordingly. - Existing MNStorage.delete renamed to MNStorage.archive, better reflecting its action. - New MNStorage.delete operation added for Tier3. This operation does actually delete the content from the node, removing it from DataONE services (the node may choose to also delete the bytes) - New CNCore.archive operation performs the same action as MN.archive, except the operation triggers a change notification to all nodes containing the object. - New CNCore.delete operation intended to be used only by administrators when there is a requirement to remove an object from the entire DataONE system. Memory of the identifier persists, preventing its reuse. 2012-03-26: Version 1.0, MethodCrossReference.xls ------------------------------------------------- - Corrected typo in REST description for listObjects which had lowercase *formatid*, corrected to *formatId*. - Corrected order of parameters for getLogRecords, moving *start* and *count* to the end to be consistent with other method signatures. 2012-03-26: Version 1.0, MethodCrossReference.xls ------------------------------------------------- - :func:`MNCore.getLogRecords` updated 'pid' parameter to string and renamed to 'pidFilter' - :func:`CNCore.getLogRecords` updated 'pid' parameter to string and renamed to 'pidFilter' 2012-03-25: Version 1.0, MethodCrossReference.xls ------------------------------------------------- - :func:`MNCore.getLogRecords` added an optional parameter *pid* that specifies the prefix of the pid for matching on log records. Support for this parameter is optional, and a MN implementation may silently ignore if present in the request and the node is unable to support the pid prefix filter. - :func:`CNCore.getLogRecords` added an optional parameter *pid* that specifies the prefix of the pid for matching on log records. Support for this parameter is currently optional for CNs, and may be ignored if present in the request. - :func:`MNStorage.GenerateIdentifier` new method added to the MNStorage API. This signature mirrors the CNCore.GenerateIdentifier method and is made available on Member Nodes as they may choose to have an organizational association with an identifier service. 2012-02-27: Version 1.0, MethodCrossReference.xls -------------------------------------------------- - :func:`CNRead.search` clarified how to specify path and query separators in the value of parameter 'query.' Change xmit type of parameter 'query' to 'path', since it contains both path and query (to simplify client conformity testing) 2012-02-24 : dataoneTypes.xsd ----------------------------- - Correction to the contrabEntry definition - Several documentation only changes 2012-02-17 : Version 1.0, MethodCrossReference.xls -------------------------------------------------- - :func:`CNRead.search` clarified that queryType is specified as a URL path parameter and the remainder of the URL (path and query) is passed to the respective search engine as indicated by the value of queryType. 2012-02-15 : Version 1.0, MethodCrossReference.xls -------------------------------------------------- - :func:`CNCore.hasReservation` REST URL changed a POST message to ``GET /reserve/{pid}?subject={subject}`` 2012-02-02 : Version 1.0, MethodCrossReference.xls -------------------------------------------------- - :func:`CNIdentity.updateAccount` REST URL changed to ``PUT /accounts/{subject}`` - :func:`CNIdentity.verifyAccount` REST URL changed to ``PUT /accounts/verification/{subject}`` - IMPORTANT: Encoding practice for simple types transmitted as part of a MIME multipart/mixed message has been changed to simple string encoding, not XML encoding. See :doc:`apis/rest_comms`. 2012-02-01 : Version 1.0, MethodCrossReference.xls -------------------------------------------------- - Updated description of ping() to emphasize that the timestamp in the response is transmitted in the HTTP header. - Response type for :func:`CNIdentity.getSubjectInfo` and :func:`CNIdentity.listSubjects` changed from :class:`Types.SubjectList` to :class:`Types.SubjectInfo` - Response for :func:`MNReplication.getReplica` corrected in the documentation to indicate response is an octetStream of bytes that represent the requested object. - Signature of :func:`MNStorage.create` - pid removed from URL, it should be a param in the message body. - Signature of :func:`CNCore.create` - pid removed from URL, it should be a param in the message body. - Signature of :func:`CNIdentity.verifyAccount` - subject removed from the URL, it should be a param in the message body. - Signature of :func:`CNIdentity.requestMapIdentity` - subject removed from URL, it should be a param in the message body. - Signature of :func:`CNCore.registerSystemMetadata` - pid removed from URL, should be a param in the message body 2012-01-20 : Version 1.0, MethodCrossReference.xls -------------------------------------------------- - Switched from SubjectInfo to just Subject for :func:`CNCore.hasReservation` to remove requirement for a Member Node call to the CN to support create operations. - Added InvalidToken exception to :func:`MNReplication.replicate`, :func:`CNCore.registerSystemMetadata`, :func:`CNIdentity.registerAccount`, :func:`CNIdentity.updateAccount`, :func:`CNIdentity.getPendingMapIdentity`, :func:`CNRegister.register`. 2012-01-19 : Version 1.0, MethodCrossReference.xls -------------------------------------------------- - The signature for :func:`CNCore.hasReservation` has been changed to include a :class:`Types.SubjectInfo` field to identify the principal who originally made the reservation request. - Request method and endpoint for :func:`CNCore.hasReservation` was changed to POST and ``/hasReservation`` respectively. 2012-01-12 : Version 1.0, MethodCrossReference.xls -------------------------------------------------- - Updated :func:`CNRead.resolve` to return a HTTP 303 See Other response on success - Added :func:`CNCore.setObsoletedBy` to update the obsoletedBy information for an object. Note that the proposed endpoint may change pending discussion. - Added :func:`CNReplication.deleteReplicationMetadata` to remove the replica metadata for a particular node for an object. Only callable by CNs 2012-01-10 : Version 1.0, MethodCrossReference.xls -------------------------------------------------- - updated method descriptions for updateReplicaMetadata - updated method descriptions for updateNodeCapabilities - removed VersionMismatch from setReplicationStatus method 2012-01-03 : Version 1.0, MethodCrossReference.xls -------------------------------------------------- - removed the deprecated assertRelation method 2011-12-19 : Version 1.0, dataoneTypes.xsd ------------------------------------------ - replaced tabs with " " - Event names in description changed to same case as enumerated values - various: minor formatting changes for rendering in architecture docs. - Added root elements for AccessRule, LogEntry, NodeReplicationPolicy, ObjectInfo, Service, Services, Schedule, Synchronization, NodeReplicationPolicy, ServiceMethodRestriction. AccessRule, LogEntry, NodeReplicationPolicy, ObjectInfo, Service, Services, Schedule, Synchronization, NodeReplicationPolicy, ServiceMethodRestriction. 2011-12-19 : Version 1.0 - Altered MNCore and CNCore ping() to use the HTTP Date header field for transmitting the timestamp. Removed requirement for timestamp appearing in response body. 2011-12-14 : Version 1.0 - Changed MNCore.ping() to return a DateTime string - Added CNCore.ping() 2011-12-13 : Version 1.0 ------------------------ - Updated MethodCrossReference.xls to reflect API changes for CN.setReplicationStatus() - Updated MethodCrossReference.xls to reflect API changes for CN.isNodeAuthorized() 2011-12-12 : Version 1.0 ------------------------ Changes to dataoneTypes.xsd: - Added ChecksumAlgorithmList - Limited valid checksums to SHA-1 and MD5 - Added ReplicationStatus.FAILED to the enumeration - Added a new SimpleType: NonEmptyNoWhitespaceString800, used to restrict identifiers - Removed Permission.REPLICATE - Changed SystemMetadata to make the following fields optional: submitter, dateUploaded, dateSystemMetadataModified, serialVersion. However, an MN or CN must set them. - Created Types.CrontabEntrySeconds to restrict the seconds field in a Schedule - Changed documentation for SystemMetadata.authoritativeMemberNode - Added a new NodeReplicationPolicy type, to be used as an optional structure in Node - Removed MonitorInfo and MonitorList types - deprecated. - Updated documentation for the Node type. MN API ~~~~~~ - MNCore.getLogRecords and MNRead.listObjects - the time comparison range has been changed. The upper bound is now exclusive, i.e. ``fromDate <= date < toDate`` - MNRead.listObjects - the name of the date range comparison properties has been changed from "startTime" and "endTime" to "fromDate" and "toDate" respectively. - MNRead.get - added InsufficientResources exception as possible response. This may be raised for example, if memory, CPU, or bandwidth use is too limited to respond to the request. - MNCore.ping - added description for why InsufficientResources may be raised. CN API ~~~~~~ - CNCore.getLogRecords and CNRead.listObjects - the time comparison range has been changed. The upper bound is now exclusive, i.e. ``fromDate <= date < toDate`` - CNRead.listObjects - the name of the date range comparison properties has been changed from "startTime" and "endTime" to "fromDate" and "toDate" respectively. - CNIdentity.getSubjectInfo, added InvalidToken exception - CNRegister.updateNodeCapabilities, added InvalidToken exception - CNReplication.updateReplicationMetadata, added InvalidToken exception - CNCore.listFormats: removed InsufficientResources exception. If the CN can not provide a response, then a ServiceFailure should be raised. - CNCore.getChecksumAlgorithms renamed to listChecksumAlgorithms for consistency with other methods that return a list. 2011-12-08 : Version 1.0 ------------------------- MethodCrossReference.xls (trunk) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - CN.removeGroupMembers - changed REST specification from "DELETE /groups/{group}" to "POST /groups/remove/{group} - CN.getFormat: removed InvalidRequest from documentation, (was supposedly removed earlier, but reappeared) - CN.listSubjects - added status parameter to the method - CN.search - added queryType and query parameters as optional (documentation fix) - changed setOwner() to setRightsHolder() - MN.getReplica - documentation fix, added pid as parameter - it was in REST specification but not listed as a parameter 2011-12-07-api-corrections branch ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Java libclient / implementation changes (in branch) - CN.verifyAccount - removed NotFound from java api and impl - CN.updateAccount - removed IdentifierNotUnique from java api and impl - CN.mapIdentity - refactored method signature from (session, subject1, subject2) to (session,subject) - CN.mapIdentity - changed message body to pass subject as paramPart instead of filePart. - CN.requestMapIdentity - added IdentifierNotUnique to java api and impl - CN.denyMapIdentity - removed InvalidRequest from java api and impl - CN.removeMapIdentity - removed InvalidRequest from java api and impl - CN.search - changed resource in java libclient from 'object' to 'search' - CN.setAccessPolicy - put parameter 'pid' on path (removed from filePart) - CN.setOwner - changed resource from 'accounts/map' to 'owner' - MN.getReplica - added InsufficientResources to java api and impl - MN.setAccessPolicy - removed method from java api and impl - CN.setOwner - changed name to setRightsHolder in java api and impl Client bug fixes (in trunk) - MN.getLogRecords - added missing 'start' and 'count' parameters to impl call. - MN.listObjects - fixed failed exception recast 2011-12-06 Version 1.0.0 Branch ------------------------------- dataoneTypes.xsd ~~~~~~~~~~~~~~~~ - https://redmine.dataone.org/projects/d1/repository/entry/software/cicore/branches/D1_SCHEMA_1_0_0/dataoneTypes.xsd - Modified LogEntry.entryId to be of type d1:NonEmptyString instead of d1:Identifier - Removed LogEntry.memberNode of type d1:NodeReference - Added LogEntry.nodeIdentifier of type d1:NodeReference 2011-12-05 Version 1.0.0 Branch ------------------------------- dataoneTypes.xsd ~~~~~~~~~~~~~~~~ - https://redmine.dataone.org/projects/d1/repository/entry/software/cicore/branches/D1_SCHEMA_1_0_0/dataoneTypes.xsd - Added SystemMetadata.archived flag to indicated when a document is archived - Added ObjectLocation.version field for convenient access - Added Group.rightsHolder for access rights to groups - Refactored ServiceMethodRestriction to removed unneeded levels - Removed Permissions.execute as it is no longer needed 2011-11-08 Version 1.0.0 Branch ------------------------------- CN APIs ~~~~~~~ - CNCore.hasReservation: Updated description: caller owns reservation = HTTP 200; PID reserved but not owned by caller = NotAuthorized; PID in use as an identifier = IdentifierNotUnique; PID not reserved and not in use = NotFound. - CNRead.updateSystemMetadata: DEPRECATED. There is no longer a need for this method to be exposed through an external interface. 2011-11-03 Version 1.0.0 Branch ------------------------------- MN APIs ~~~~~~~ - MNCore.getLogRecords: change date restriction to >= from Date, and <= toDate - MNCore.getCapabilities: removed NotAuthorized exception. Anyone should be able to call this method. - MNRead.listObjects: Indicated that if formatId is not present as a filter parameter, then that filter should be ignored. The previous was to default to *true*. 2011-11-02 Version 1.0.0 Branch ------------------------------- dataoneTypes.xsd ~~~~~~~~~~~~~~~~ - https://redmine.dataone.org/projects/d1/repository/revisions/5754 - Deprecated MNAuthorization.setAccessPolicy. This is replaced by MNStorage.systemMetadataChanged - Added MNStorage.systemMetadataChanged, which is called by Coordinating Nodes when system metadata for an object known to be located on the Member Node changes. The Member Node is expected to retrieve the full system metadata document from the Coordinating Node and update the local system properties of the object using information contained in the authoritative system metadata. This is a Tier 2 method. It is accessed on the */dirtySystemMetadata* REST endpoint. 2011-11-01 Version 1.0.0 Branch ------------------------------- Exceptions ~~~~~~~~~~ - Added a new exception, VersionMistmatch which is raised when there is a version mistmatch between the target of the request and the supplied parameters. e.g. when serialVersion is provided in a call and does not match that of the target. CN APIs ~~~~~~~ - CNAuthorization.setOwner: added serialVersion parameter to method signature. serialVersion is used to indicate which revision the change to system metadata applies to. If the revision in the request does not match the revision in the response, then a VersionMistmatch exception is raised. - CNAuthorization.getAccessPolicy: added serialVersion parameter to method signature. - CNReplication.setReplicationStatus: added serialVersion parameter to method signature. - CNReplication.updateReplicationMetadata: added serialVersion parameter to method signature. - CNReplication.setReplicationPolicy: added serialVersion parameter to method signature. MN APIs ~~~~~~~ - MNCore.getLogRecords: changed fromDate from required to optional. - MNCore.getCapabilities: removed InvalidRequest exception - MNCore.get: removed InvalidRequest exception - MNRead.getSystemMetadata: removed InvalidRequest exception - MNRead.describe: removed InvalidRequest exception - MNRead.synchronizationFailed: removed InvalidRequest exception - MNAuthorization.setAccessPolicy: Added note indicating that this method should only be called by Coordinating Nodes. - MNStorage.delete: removed InvalidRequest exception 2011-10-26 Version 1.0.0 Branch ------------------------------- dataoneTypes.xsd ~~~~~~~~~~~~~~~~ The following changes were enacted on the dataoneTypes.xsd schema as a result of discussions during the DataONE all-hands meeting held during the week of October 18, 2011. No further significant changes to dataonetypes.xsd are expected for version 1.0.0 of the DataONE infrastructure. - unsigned long "serialversion" element added to the :class:`Types.SystemMetadata` complex type. The *serialVersion* value is incremented upon any updates to a system metadata instance, and is used to indicate which is the current version (highest *serialVersion* is always the latest) of system metadata for an object. - "fmtid" change to "formatId" in :class:`Types.SystemMetadata` complex type - "fmtid" change to "formatId" in :class:`Types.ObjectFormat` complex type - "fmtid" change to "formatId" in :class:`Types.ObjectInfo` complex type - email minOccurs change from 1 to 0 in :class:`Types.Person` complex type - boolean "verified" property added to :class:`Types.Person` complex type. This value is *true* if the name and email address of the Person have been verified to ensure that the *givenName* and *familyName* represent the real person's legal name, and that the email address is correct for that person and is in the control of the indicated individual. Verification occurs through a established procedure within DataONE as part of the Identity Management system. - Numerous annotation edits and updates CN APIs ~~~~~~~ - CNCore.listFormats: removed InvalidRequest and NotFound exceptions - CNCore.getFormat: removed InvalidRequest exception - CNCore.getLogRecords: - Made fromDate optional. When not provided in request, there is no limit to the earliest record being returned. - Added exception InsufficientResources (443, 1481) - CNCore.listNodes: removed InvalidRequest exception - CNCore.hasReservation: removed exception IdentifierNotUnique - CNRead.get: removed InvalidRequest exception - CNRead.getSystemMetadata: removed InvalidRequest exception - CNRead.resolve: removed InvalidRequest exception - CNRead.assertRelation : deprecated - CNRead.getChecksum: removed InvalidRequest exception - CNIdentity.registerAccount: added NotAuthorized exception, thrown when subject of session does not match that of the person. - CNIdentity.updateAccount: - added exception NotAuthorized, raised if subject of session does not match that of the person. - added exception NotFound, raised if the account does not exist. - CNIdentity.verifyAccount: - changed HTTP method to PUT (this is an update operation) - Added exception NotFound, raised if the specified account does not already exist. - CNIdentity.getSubjectInfo: - added exception NotFound, raised if the requested subject is not registered. - removed exception InvalidRequest - CNIdentity.listSubjects - Specified default start value of 0 - Specified default page size (count) of 100 - Added InvalidRequest exception - CNIdentity.mapIdentity: added exception IdentfierNotUnique, raised when the subject of the session and the provided subject arethe same. - CNIdentity.confirmMapIdentity - changed REST URL to be a PUT to /accounts/map/{subject} - Removed the InvalidRequest exception - Updated the description of the NotFound exception - CNIdentity.createGroup - Removed NotFound exception - Removed InvalidRequest exception - CNReplication.setReplicationStatus: corrected description of the REST method signature. Parameters for the PUT request should be transmitted in the request body, the session information should be transmitted via SSL handshake process. - CNReplication.updateReplicationStatus: - corrected REST sURL description as for setReplicationStatus - Added NotFound exception - CNReplication.setReplicationPolicy: updated REST URL description as per setReplicationStatus. - CNReplication.isNodeAuthorized: updated REST URL description as per setReplicationStatus