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

Reply via email to