Task #3079
Task #3074: Phase one implementaion for morpho to connect dataone services
Task #3075: Morpho needs new data file managment system and the local identifier authority.
Morpho needs a local unique id generator
100%
Description
Morpho can work online or offline. If a user work offline, morpho needs a local unique id generator to create identifiers for him/her.
Moreover, the MN.generateIdentifier() and CN.reserveIdentifier methods in Dataone API have a session parameter. So it only can be called if user login. If user only works locally (even though the computer is online), morpho still needs a mechanism to generate ids.
It will be perfect if the ids are globally unique. So morpho doesn't need to change it when morpho uploads them to the dataone server.
Since the file name is locally unique, we can combine a unique id of the computer with the file name to generate the id. The unique id of the computer can be the mac address, the motherboard id or a UUID.
The problem to use the mac address is that users can exchange network cards between computers. The problem to use motherboard id is that java doesn't have an elegant way to get it.
History
#1 Updated by Andrew Pippin over 12 years ago
Java's Universally Unique IDentifier (@see java.util.UUID) provides a good mechanism for this.
#2 Updated by Jing Tao over 12 years ago
The local file id looks like:
urn:id:scope.X
Scope is the input from user's profile. X is a number. Morpho increases X when it assigns a new id. The maximum X will be kept in the profile.
The new id is not guaranteed to be unique. So we still need to the mechanism to handle the id collision.
Currently here is the way morpho to handle the collision:
When id collision was detected, morpho will send a request to metacat to ask the biggest X for the scope. Then increase the X to assign a new id.
However, dataone network doesn't have the API. We may use this way:
Issue a new search to return all IDs that match scope. Morpho then filters and sorts list to find the biggest number in scope.
Note: the scope may be replaced by a random number.
Here are the choices for user in the profile creating process:
- use a scope that they provide (e.g., "knb-lter-sbc") [radio] + [text field]
- use a random scope (e.g., "ABGWJY") [radio]
- convert urn:ids to DOIs during the network save [checkbox]
#3 Updated by Dave Vieglais about 12 years ago
- Target version changed from Sprint-2012.37-Block.5.3 to Sprint-2012.41-Block.6.1
#4 Updated by Ben Leinfelder about 12 years ago
- Category set to Morpho
#5 Updated by Ben Leinfelder about 12 years ago
- Target version changed from Sprint-2012.41-Block.6.1 to Sprint-2012.44-Block.6.2
#6 Updated by Ben Leinfelder about 12 years ago
- Assignee set to Ben Leinfelder
- Status changed from New to In Progress
Using identifiers in the form of scope.X. Still need to evaluate an appropriate prefix (ARK?)
#7 Updated by Chris Jones almost 12 years ago
- Target version changed from Sprint-2012.44-Block.6.2 to Sprint-2012.50-Block.6.4
#8 Updated by Ben Leinfelder over 11 years ago
- Target version changed from Sprint-2012.50-Block.6.4 to 2013.10-Block.2.1
#9 Updated by Ben Leinfelder over 11 years ago
- translation missing: en.field_remaining_hours set to 0.0
- Status changed from In Progress to Closed
Using UUID locally