Add a CNReplicationTask class that will be submitted to the CN storage cluster when there are changes to the object store involving system metadata, science metadata, and resource maps. When a new entry is added to the hzSystemMetadata map, a new data, science metadata, or resource map was added to the VO, and all CN cluster members need to be updated with the object and it's system metadata. This task is executed on each CN to replicate the information. If the event is an update to an existing system metadata entry, it may only involve a change to system metadata, or may involve a change to science metadata as well. The task will return with the PID of the object replicated, be it a sysmeta, scimeta, or resource object. Locking of the PID will be handled by the task.
Update test for getReplicationStatus to reflect API change.
Newest version of the D1 0.6.4 common jar.
Catch D1nodeService up to the DataONE 0.6.4 schema where there is no ObjectFormat.isScienceMetadata() method, but rather ObjectFormat.getFormatType() where type is currently one of 'DATA, 'METADATA', or 'RESOURCE'.
Modify HazelcastService to read configuration information from an on-disk file (not from a jar file). Added init() to start up the service (was calling doRefresh() before. We still need to decide if this is a refreshable service.
Add the dataone.hazelcast.configFilePath property to be used when MetacatServlet becomes a Hazelcast cluster member using HazelcastService. TODO: what are the consequences of restarting the service via doRefresh()? It's set to false for now.
move HazelcastService to D1 package
Adding a HazelcastService for Metacat to enable Metacat as a Hazelcast cluster member in DataONE. This will require the hazelcast.xml configuration file used for the DataONE cluster to be on the Metacat classpath.
changes for schema update (d1_common)
do not parse from last slash ("/") to the end when processing the request uri - otherwise things like format ids (text/csv) will be handled incorrectly.https://redmine.dataone.org/issues/1773
added HazelCast MapStore and MapLoader implementation for SystemMetadata
use InvalidRequest when the PID is not found. https://redmine.dataone.org/issues/1768
remove unused dataone properties
use 0.6.4 for node capabilities
use Permission.REPLICATE not EXECUTE
check with the CN if replication is allowed for the object in question for getReplica()
add getReplica() implementation. same as get() but with different logging. seems silly, but maybe I missed something important that distinguishes this method.
Rolling back inadvertent commit on test.properties. Doh.
Incomplete - task : Getting started with your first Spring web application development project
Update MetacatPopulator to use the DataONE 0.6.4 schema and types.
Update tests to use the DataONE 0.6.4 schema and types.
Update classes to use the DataONE 0.6.4 schema and types. Major changes involve using BigInteger vs long in SystemMetadata.size, and using ObjectFormatIdentifier rather than Object format.
Update DataONE jar files to 0.6.4. Updated classes to follow.
Insert system metadata after the data object is inserted.
Fix bug in updateSystemMetadataFields() where guid is set from the wrong parameter in the prepared SQL statement.
latest D1 jars - changes include:updateSystemMetadata() impl for CNnew identifier methods (generate is its own method)removal of the resourceMap pointer from system metadata
remove ORE mapping from system metadata
Update the d1 common java jar to include the changes to BaseException, and update MNodeService.synchronizationFailed() to use the BaseException.getNodeId() method to report which node the exception came from.
include obsoletes and obsoletedBy for system metadatarepurpose the "provenance" table as the ORE mapping table for system metadata
updated jars after recent schema changes (no real change for us here)
use correct enum method
refactor Constants
refactor Constants and ServiceTypeUtil
use NodelistUtil
remove ServiceTypeUtil - replace with TypeMarshaller
use new "v1" types from DataONE
exclude non-test cases (d1)
remove CrudService -- replaced by MNodeService and CNodeService
handle more than "contains" searchmode when using the path index for querieshttp://bugzilla.ecoinformatics.org/show_bug.cgi?id=5443
remove CrudServiceTest reference in main Metacat test (about to remove from svn)
-handle NotFound object format when generating system metadata-improve EML DML for null entity/attribute elements
use the ObjectFormat Id (not toString()) to check against the configured science metadata formats
reset object input stream (testGet)check for reserveIdentifier NotImplemented (expected)
merge changes from 1.9.5 branch that read site docs from SVN not a defunct LTER server
Return the new pid (not the obsoleted pid) on update(), and set the correct system metadata.
In D1NodeService.getLogRecords(), don't pass in null start and count params - set them to the defaults (0 and 1000).
MNResourceHandler.getObject() was making a call to ObjectFormat.getFmtid() when an object format was null. Check that it is not null before trying getFmtid().
In MNodeService.getCapabilities(), update the properties to match those in metacat.properties. Flesh out the NodeHealth object, adding NodeState, Ping, and Status information. Flesh out the Synchronization object information, but for now, use mock values. TODO: This should be determined from configuration and on-the-fly information.
Use CamelCaps for properties for better readability.
include Mock version of looking up the base url for our own node - for testReplicate().still expecting a failure during MN.replicate() since we are trying to add the replica to the same MN from which it came.
allow alternative CNode implementations (subclasses) to be returned when D1Client.getCN() is called. The alternative is given in the Settings configuration via the D1Client.cnClassName property.MockCNode in Metacat is an example of such an alternative and is used when Metacat requires methods of a CN be present for unit testing.
In MNodeService.getCapabilities(), set the synchronization and replication properties of the node.
Added node synchronization and replication properties.
In MNodeService.getCapabilities(), set the serviceAvailable for each service supported.
Added service availability properties for each of the MN services.
In MNodeService.getCapabilities(), set the serviceVersion for each service supported.
Added service version properties for each of the MN services.
check reservation before create/update
Use D1 properties to set node values, and add the 'WAR VERSION' back into the node name for deployments.
add hasReservation() method (NotImplemented, however)
Test that the obsoletes and derivedFrom system metadata fields were set correctly.
use objectFormatIdentifier for listObjects()remove provisional system metadata indicator - Metacat will not implement reserveIdentifier()
newer jars with better certificate exception handling as well as additional libclient implementations
use correct log name for the class
consistently construct username/groups for MetacatHandler calls - also consistently call isAuthorized
add test for synchronization failed -- TODO: verify that the log record made it in the logs
provisional replicate() implementation -- does not check if the session's subject is "allowed" to do this.the test also requires 2 servers -- right now it attempts to replicate with itself which will fail because of duplicate IDs
provisional version of getOperationStatistics() -- not clear if we are meant to aggregate by hour or by day
provisional getCapabilities() implementation. Much of the synchronization information and node health is omitted.
include test for replicate() method -- still fails as not implemented
allow null objects (use default checksum)
wire-up the getCapabilities() and getOperationStatistics() methods for when they are actually implemented (tests fail now)
test listObjects()
include MNAuthorization tests
refactor to use common superclass D1NodeServiceTest for shared methods
simplify the get() method -- no need to use temp files for this operation
test for getLogRecords -- with some semi-reasonable expectations on the return that is expected
implement d1 paging for the log record results
tests for isAuthorized and setAccessPolicy
include getLogRecords() test, though it is commented out at the moment
Reverting the resultset order in querySystemMetadata(). Thanks Ben.
test for CN.getSystemMetadata()
Because of the new 'provisional' column, the resultset field order in querySystemMetadata() was out of order. Changed the order to reflect the new table column order.
test CN.get()
Uncommented MNStorage tests.
save systemmetadata when create() is called
Send the correct Date format in testGetLogRecords(). I've commented out certain tests in the suite until isAuthorized() functionality is working. It is returning a NotFound exception even though the object is clearly in Metacat.
allow very minimal system metadata for provisional entries (CN.reserveIdentifier)
Fix a NullPointerException issue when the SubjectList in a Session is null.
Add MNodeServiceTest tests for MNCore, MNRead, MNStorage, MNAuthorization implementations. MNReplication remains to be tested, as does MNCore.getCapabilities() and getOperationStatistics().
Add the missing URL delimiter when building the D1 base service URL.
add the d1_common formats if they do not exist on the server
allow the test to read the OFL docid
check for null docid from access table -- using guid for many system meta rows
use docImpl getBytes() to preserve encodingno need to catch an exception only to throw it (those I was playing around with looking up the fmt from the d1_common lib if it was not found on the server...but this is redundant with other client code)
remove resolve() test -- not implemented in Metacat
handle data objects (not sci meta) and also set the resulting pid so that create() can succeed
newer d1_common jar with updated MNCore interface