Fixed a bug that the publish method should throw an io exception.
Move the editScienceMetadata method to the MNodeService class - only update packageId in EML on publish()
Fixed a bug in the condition check for the archive field in the updateSystemMetadata method.
The archived field can't be reset to false if it is true in the systemMetadataChanged method.
Doesn't allow to reset the archived field to be false if the field is true in the updateSystemMetadata method.
In the systemMetadataChanged method, we will update system metadata when the local serial version is less than or equals the comming one.
refs #7453: modified the metacatLog message from mn.synchronizationFailed to include the syncFailed.message field. Also increased the log level to WARN.
Remove the method editScienceMetadata from the update method. This method will add a packageId attribute into the eml document. Lauren will add the method to the publish method.
In the systemMetadataChanged method, the object will be archived if the new archive value is true and old value is false.The log event is recorded in the systemMetadataChanged method as well.
Make the isAuthoritativeNode throw exception if some value is null.
In the updateSystemMetadata method, we avoid to log the event twice for archive=true.
In the setReplicationStatus method, it only notified the replicas when the status is completed. Now we added the status - failed and invalid.
refs #7419: refactored CNodeService implementations to not throw IdentifierNotUnique for hasReservation.
In the create method, the modification date is reset only on the objects whose authoritative member node is v1.
In the deleteReplicationMetadata method, the modification date of the system metadata will not be reset.
Modify the text of an exception.
Add contrains for the v1/v2.registerSystemMetadata method. See https://redmine.dataone.org/issues/7380
For the v1/v2 setObsoletedBy and setRightsHolder method, they only apply the objects whose authoriative member node is v1.
Add the constrains that v1/v2.archive only applies the object whose authoritative node is a v1 node.
Add the case the mn.updateSystemMetadata and cn.updateSystemMetadata will call the archive method internally.
Refactory the mn.archive and cn.archive method so the mn.update and cn.update can reuse them.
Update the packageId attribute in EML documents on update. Never display the local docid in the rendered EML.
In the archive method, add the lock.
Only applies the setAccessPolicy method to objects whose authoritative mn is v1.
Add a comment to specify that the setReplicationPolicy only applys to v1.
The setReplicationPolicy method only apply to the pids whose authoritative member node has v2 MNStorage.
Add a flag on the systemMetadataChanged method. If it is true, the authoritative member node will only accepts the serial version and replica list; the replica node accepts everything. If it is false, it will accept everything.
Add a note for the updateSystemMetadata method.
CN.updateSystemMetadata will ignore the serial version and replica list in the comming system metadata from the mn.
Add the code to check the date of system metadata modification match in MN.updateSystemMetadata only. CN.updateSystemMetadata doesn't check.
Commented out the code to check serial version on the updateSystemMetadata method.
Add more debug messages for the isCNAdmin method.
Change updateReplicationMetadata() and setReplicationStatus() to no longer set the dateSysmetaModified date per our discussion on 9/16/15.
Add more debug statement for the updateSystemMetadata method.
Add the code to check if we can't get the current system metadata from the node in the mn.systemMetadataChanged method.If we can't find it, an InvalidRequest will be thrown.
Fixed a bug that a client can set the original member node to be null.
Change some exceptions from the InvalidSystem to the InvalidRequest in the updateSystemMetadata method.
use the TypeFactory to convert the Log and ObjectFormatList objects from the v2 to v1.
In the setReplicaStatus method, if the coming status is the same one of the existing one, the system metadata will not be updated.
Fixed some incorrect exceptions in the getReplica method.
In the isAdminAuthorized method, the faiure of the isNodeAdmin method will not interrupt the next check - if it is a cn.
Use the application/bagit-097 to replace application/bagit.
Use the TypeFactory to replace the TypeMarshaller according to the change in the d1_common_java.
Use the D1NodeVersionChecker to determine the mn's version rather than using ping.
When the cn.notifyReplicaNodes method, if the target MN source code is a v2 mn, we will use v2 api; if it is a v1 node, we will use v1 api.
A new class is used to get the version of service for a given node.
Only support the application/bagit format in the getPackage method.
Use the status of mn.ping to guess the version of the source node in the replicate method.
In the replicate method, it will use the v1.getReplica method if the source node only supports v1 replication service.
The code was added to compare the serial version in the updateSystemMetadata method. If the serial version in the new system metadata is less than or equals previous version, an exception will be thrown.
Increase the version number after updating the existing object's system metadata in the update method.
Fixed a possible null exception in the updateSystemmetadata method.
In the MN.updateSystemMetadata method, when we set the obsoletedBy and obsoletes method, we will check if those values already exist in other chains.
Add the identifier in the message of the exception when a client tries to reset the obsoletes or obsoletedBy fields.
Check the obosoletedBy and Obsoletes only can be set once.
The method of setReplicationstatus can be called by CNs and MNs.
Only CNs can call those methods:CNCore.registerSystemMetadata()CNCore,updateSystemMetadata()CNReplication.setReplicationStatus()CNReplication.updateReplicationMetadata()CNReplication.deleteReplicationMetadata()
On mn.update and mn.updateSystemMetadata, those clients are allowed:1. CNs.2. Clients with appropriate permission calling the method on the authoritative nodes.
When compare the dateUploaded, now we use sysmetadata.getDateUploaded().getTime(). It used systemmetadata.getDateUploaded() (Date objects) to compare.
Add code to catch the BaseException in the updateSystemMetadata method.
Add the code to handle if the cn is null.
Handle multiple versions (v1 and v2) of a service in getCapacity method.
Use the NodeReference object to replace the replicaStatus to restrict the listObjects method.
[re]register DOI when system metadata is updated (typically access policy). https://projects.ecoinformatics.org/ecoinfo/issues/6796
Change the signature of listObject method - remove replicaStatus and add nodeId.
Add the code to call cn.synchroinize at the method of updateSystemMetadata.
Add the code to roll back the saved system metadata if the object can't be saved.
Add the code to check if the client is trying to update an archived object. If it is, reject it.
Add a new method -updateSystemMetadata. It only can be called by CNs.
Refactory the authorize methods on D1NodeService.Add the check for whom can call mn.updatesystemMetadata.
Committed the change which Andreit did. 1. Add the code for synchronize(not implemented)2. Add the code for addForm.
Created the updateSystemMetadata method.
Add the code to check if the current node is the authoritative node for the the given pid.
Add the check of permission to update the system metadata.
Remove the code to check sid on create and registerSystemMetadata.
Fixed a bug that put the detail code in a wrong position.
Add the code to check if a user tries to modify an immutable field on system metadata.
If an Event object is null in the v1 log entry, we won't add it to the log.
Make the REST api work for views.
Add the code to support CNView interface in CNodeService. Both CNodeService and MNodeService share the same code base.
Transform the ObjectFormat from v2 to v1 in getFormat method.
Convert the v2 system metadata object to v1 in the getSystemMetadata method.
The setObsoletedBy only handles PID.
The method setObsoletedBy only hanldes SID.
Add the timestamp for the printing out the start and end of hazelcast synchronization.
Call the method lock.lock() immediately after getting the lock. Otherwise, if an exception happened between the two calls (in another word, lock.lock() was called), lock.unlock() can cause an issue:Current thread is not owner of lock!See https://redmine.dataone.org/issues/6836.
The setReplicationStatus method only supports sid and the setRightsHolder method supports both PID and SID.
Add the code transform a sid to a pid in publish, getPackage and view method. Fefer dataONE #6734.
Fixed a bug that it should use getReplica rather than get method.
The CN.setReplicationPolicy method now only support PIDs. Refer to https://redmine.dataone.org/issues/6734.
Went through the v2 ObjectFormatList and convert every v2 ObjectFormat to v1 ObjectFormat and put them into a v1 objectFormatList.
Add the log messages to indicate the hazelcast synchronization starting and ending.
Add the code to handle sid in the publish method.
Add the code to exclude the sid in the view and getPackage.
Add a converter to convert the V2 Log object to the V1 Log object.
Add the rules to check the if a sid is valid in the updateSystemMetadata method.
Implemented the feature to support the identifier(both sid and pid) feature in the objectLists method.
The MN.listobjects and CN.listobjects methods will call the one in the D1NodeService class.
Add the code to check if the pid is an SID in the registerSystemMetadata method.
Add code to check if the sid equals pid for the method checkSidInRegisterSystemMetadata.