Many edits to clarify definitions such as “archive”.
Revised introductory text to APIs and the overall system
Added language indicating restricted access to log information by public user
New version of plantuml.jar
No functional changes were introduced.
listObjects, listSubjects, getLogRecords descriptions were updated
Added MNQuery API as an optional Tier 1 API with the same method signatures as the CNRead.Query* method definitions.
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
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.
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.
Moved MN systemMetadataChanged from MNStorage API to MNAuthorization API so that the method appears in Tier 2 operations.
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.
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.
MNCore.getLogRecords()
updated ‘pid’ parameter to string and renamed to
‘pidFilter’
CNCore.getLogRecords()
updated ‘pid’ parameter to string and renamed to
‘pidFilter’
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.
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.
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.
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)
Correction to the contrabEntry definition
Several documentation only changes
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.
CNCore.hasReservation()
REST URL changed a POST message to GET
/reserve/{pid}?subject={subject}
CNIdentity.updateAccount()
REST URL changed to PUT /accounts/{subject}
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 REST Interface Overview.
Updated description of ping() to emphasize that the timestamp in the response is transmitted in the HTTP header.
Response type for CNIdentity.getSubjectInfo()
and
CNIdentity.listSubjects()
changed from Types.SubjectList
to
Types.SubjectInfo
Response for MNReplication.getReplica()
corrected in the documentation
to indicate response is an octetStream of bytes that represent the requested
object.
Signature of MNStorage.create()
pid removed from URL, it should be a param in the message body.
Signature of CNCore.create()
pid removed from URL, it should be a param in the message body.
Signature of CNIdentity.verifyAccount()
subject removed from the URL, it should be a param in the message body.
Signature of CNIdentity.requestMapIdentity()
subject removed from URL, it should be a param in the message body.
Signature of CNCore.registerSystemMetadata()
pid removed from URL, should be a param in the message body
Switched from SubjectInfo to just Subject for CNCore.hasReservation()
to
remove requirement for a Member Node call to the CN to support create
operations.
Added InvalidToken exception to MNReplication.replicate()
,
CNCore.registerSystemMetadata()
, CNIdentity.registerAccount()
,
CNIdentity.updateAccount()
, CNIdentity.getPendingMapIdentity()
,
CNRegister.register()
.
The signature for CNCore.hasReservation()
has been changed to include a
Types.SubjectInfo
field to identify the principal who originally made
the reservation request.
Request method and endpoint for CNCore.hasReservation()
was changed to
POST and /hasReservation
respectively.
Updated CNRead.resolve()
to return a HTTP 303 See Other response on
success
Added CNCore.setObsoletedBy()
to update the obsoletedBy information for
an object. Note that the proposed endpoint may change pending discussion.
Added CNReplication.deleteReplicationMetadata()
to remove the replica
metadata for a particular node for an object. Only callable by CNs
updated method descriptions for updateReplicaMetadata
updated method descriptions for updateNodeCapabilities
removed VersionMismatch from setReplicationStatus method
removed the deprecated assertRelation method
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()
Updated MethodCrossReference.xls to reflect API changes for CN.setReplicationStatus()
Updated MethodCrossReference.xls to reflect API changes for CN.isNodeAuthorized()
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.
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.
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.
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
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
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
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
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.
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.
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.
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.
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.
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
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
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 Types.SystemMetadata
complex type
“fmtid” change to “formatId” in Types.ObjectFormat
complex type
“fmtid” change to “formatId” in Types.ObjectInfo
complex type
email minOccurs change from 1 to 0 in Types.Person
complex type
boolean “verified” property added to 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
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