Once a CN calls replicate() on an MN, the MN needs to call getReplica() on the source MN (not get()). Once the bytes are retrieved, the MN must then call back to the CN with setReplicationStatus() to indicate that the replication status is complete. Modify MNodeService to do so.
Bug fix for access control rules coming in from the dataone system metadata. Previously, the code used getLocalId() to get the docid to insert into the XML access table, but that docid included the revision number (e.g., foo.1.1), which it shouldn't. Now use the AccessionNumber class to strip off the rev to get a real docid for insertion into the table.
allow the XML namespace to be given in both double and single quotes. The regex pattern was only looking for xmlns values that were in double quotes. This was brought to light by LTER:http://bugzilla.ecoinformatics.org/show_bug.cgi?id=5497
set date uploaded and date system metadata updated date to current time when calling MN.create() and MN.update()
updated d1_common jar (unknown changes)
use rfc2253 format when extracting certificate subject
do not allow system metadata to have obsoletes or obsoletedBy fields when calling the create() method -- these are only allowed for updates so that we do not subvert object versioning by [un]knowingly submitting system metadata that directs one id to another.
set the originating member node on update()
set the originating member node on create()
-use whatever object format id is stored in the DB-only set originating node and authoritative node if we have non-null values for them
set sysmeta submitter based on the subject given in the certificate
for default Metacat installation we turn off multicast and only enable localhost communication.
skip Objects that have null format ids are invalid checksums
MN.setAccess() is a PUT
correctly handle incoming "accessPolicy" parameters for the setAccess() method
swap the parameters for update: existing pid should be first, and then newPid
Modified cron schedule to fix the incorrect crontab entry.
do not require ID reservation before create() or update()
use "action" parameter instead of "permission"
catch datapackage parsing errors as before
include checksum algorithm when setting describehttps://redmine.dataone.org/issues/1799
check for null session before logging sync failedhttps://redmine.dataone.org/issues/1798
Fixed the D1 URL to the Coordinating Node that had been missing /cn in the path.
use an actual data object (bytes of "test") when generating system metadata so that the checksum is a valid checksum
use Settings augmentation to customize the D1Client.CN_URL when used in a Metacat deployment.
correctly implement MN.describehttps://redmine.dataone.org/issues/1799
return Node not NodeList for getCapabilitieshttps://redmine.dataone.org/issues/1800
Use setProperty() instead of addProperty() to properly override the Settings property.
Modify to set the CN URL before getting a CN instance.
Updating CN property to use cn-dev.
Pull the certificate path for dataone certificates from the metacat properties file.
return null instead of throwing an exception when pid is not found in store
log errors on create() and registerSM
more stringent NP checking when saving replication policy
Register as a MN on the DataONE network as part of the properties setup. This is currently done always, but it needs to be conditional rather than automatically triggered.
Added subject field to getCapabilities() call.
Newest D1 0.6.4 jars
comment out resynch() method until errors are resolved
use default hazelcast config when not configured to use an external one
Use multicast in the hazelcast config for local deployments.
comment out the external hazelcast config location for default building
include default hazelcast.xml in the war build
Add in the hzObjectPath map to the hazelcast config file for a local deployment. Enable the MapStore impl for both maps.
Don't use the hzNodes map yet (as a hazelcast client). Use D1Client instead to get the node list in isNodeAuthorized().
For now, remove the hzClient code connecting to the DataONE process cluster to get the hzNodes map. This will be moved into the storage cluster, but use D1Client to get the node list for now.
A default hazelcast config file for metacat.
going back to using IDentifier as the key for the ObjectPAthMap.
Removed extraneous comments.
Add boolean field for synchronization status.
New default properties for dataone MN properties.
A configuration section for DataONE Member Node properties.
Fix getCapabilities to properly throw ServiceFailure when properties can not be read, rather than failing with a log message. Fix properties in the Node object to reflect their correct values. Set the sync schedule properly to default to 5 minute intervals. Improve documentation.
Reformatted to correct indentation to make class readable.
newer d1 jars -- contains CN.isNodeAuthorized() method
explicitly require java 1.6
collect "message" param from multipart request for MN.synchronizationFailed method
Reverting previous @Overrides chanrge from r6470, as that is the desiredbehavior under Java 1.6 -- previous versions of Java (e.g., 1.5) will notcomile with this usage of the @Overrides annotation, but the currentlysupported version will. So reverting to the 1.6 convention.
Removing incorrect @Override annotations that were preventing compilation. The methods marked did not actually override a method in the superclass, so they were not compiling. I think @Overrides was being mistaken for methods that implement an interface but aren't actually in the superclass.
use d1_common_java's date serialization utility for parsing parameters
catch runtime exceptions that arise from hazelcast storage errors in the system metadata map
Lock the system metadata entry in hzSystemMetadata when calling setReplicationPolicy().
Lock the system metadata entry in hzSystemMetadata when calling registerSystemMetadata().
Remove references to CNReplicationTask.
Remove the CNReplicationTask (for now). We will be using Metacat's ForceReplicationHandler to replicate science metadata across CNs, and may explore the use of a 100% evicted hzScienceMetadata map. Either way, the distributed task design won't be needed. When a dropped CN comes back online, we'll catch it up based on last modified dates for PIDs in the hzSystemMetadata map.
Change isNodeAuthorized() to query the hzSystemMetadata map rather than the hzPendingreplicationTasks map. The latter isn't needed for authorization since the ReplicationStatus for each Replica in SystemMetadata lists the status of the replica and can be queried.
Add getNodesMap() to return the hzNodes map from the process cluster. Remove getPendingReplicationTasks since that structure is being removed. Add minor documentation.
Set the correct cluster name and password for the D1 Hazelcast process cluster. This will likely change for production deployments.
only include 0.6.4 schemas for D1. Will also need to update this when we release whatever v1 ends up being.
lookup latest system metadata update date for use in synchronizing CN-CN when an offline nodes comes back online
changed the key type from Identifier to String for ObjectPathMap. (need a Comparable key).
rework this to be MN->MN replication. Should be fleshed out more.
throw RuntimeExceptions when store() methods throw declared exceptions -- we want callers to put() to be alerted if there are errors.
move CNReplicationTask to the hazelcast package
do not throw exception when checking for system metadata - boolean return is good.use ReplicationStatus.valueOf() instead of convert()
implicit success for setting accessPolicy - trust that the MapStore persists the updated system metadata
test relationship assertion using obsoletes
check if system metadata exists rather than just the id mapping (before creating the entry)
treat access rules atomically - do not group them together otherwise the intent is subverted
only "save" to the shared system metadata map - not directly to the table store.
do not send <systemMetadata> with the <docInfo> replication information - this is handled by the Hazelcast shared map
rely on Hazelcast to store the SystemMetadata locally for the node. Entry event listeners store the shared system metadata on their local node when alerted. TODO: remove old replication code that included system metadata xml when replicating scimeta and data
move bulk of the Hazelcast code into HazelcastService from CNodeService so that it is centrall located - easier to manage and configure
verify that the sysmeta checksum value matches the computed checksum value when calling create()https://redmine.dataone.org/issues/1795
include sysmeta for uploaded BIN data that comes through the legacy Metacat servlet API
check for null pointers when adding system metadata/creating records during cn.create()
removing unneeded class (never used)
allow urls with "v1" in them
cleaned up mock tests on hzObjectPathMap. split out code for mocking a datastore into MockObjectPathMap.
remove unused/old D1 SCHEMA downloads and build tasks
initialize Hazelcast from the custom configuration when initializing the Metacat service.
use shared hazelcast properties location on the CN
handle entryAdded and entryUpdated the same - update the entry if it exists, otherwise create it
handle entryAdded (to hzSystemMetadata) to store sysmeta to local store when it is not already present
make isScienceMetadata() method public/static to be called throughout Metacat
only create ObjectFormatId when we actually have the parameter (downstream we rely on it being null or not when constructing the query)
exercise the shared hazelecast system metadata map and custom loader/store by inserting normally and also directly into the map. both mechanisms allow up to read the same system metadata (only tested on single local instance)
add code to handle new entry when it is not on the local member of the sysmeta cluster
clean up imports - randome quicktime package had been included