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