Hi,
After some thought and discussions about this, it seems to me that the
tree copy approach is probably too complex to implement. Instead I'd
like to propose a "checkpoint" mechanism that allows a client to
request a state of the repository to be excluded from garbage
collection for a specified amount of time.
The proposed new MicroKernel method would be:
/**
* Creates a new checkpoint of the latest head revision. The checkpoint
* guarantees that revision to remain valid and accessible for at least
* as long as requested.
*
* @param lifetime time (in milliseconds) that the checkpoint should
* remain available
* @return revision id of the created checkpoint
*/
String checkpoint(long lifetime);
And the mechanism could be reflected in the NodeStore interface like this:
/**
* Creates a new checkpoint of the latest root of the tree. The checkpoint
* remains valid for at least as long as requested and allows that state
* of the repository to be retrieved using the returned opaque string
* reference.
*
* @param lifetime time (in milliseconds) that the checkpoint should
* remain available
* @return string reference of this checkpoint
*/
String checkpoint(long lifetime);
/**
* Retrieves the root node from a previously created repository checkpoint.
*
* @param checkpoint string reference of a checkpoint
* @return the root node of the checkpoint,
* or {@code null} if the checkpoint is no longer available
*/
NodeState retrieve(String checkpoint);
BR,
Jukka Zitting