Class CompositeNodeStore
- java.lang.Object
-
- org.apache.jackrabbit.oak.composite.CompositeNodeStore
-
- All Implemented Interfaces:
Observable
,NodeStore
,PrefetchNodeStore
public class CompositeNodeStore extends java.lang.Object implements NodeStore, PrefetchNodeStore, Observable
ANodeStore
implementation that combines otherNodeStore
instances mounted under paths defined byMount
.The main objective of this implementation is to proxy operations working on at most single read-write store with any number of read-only stores. While the composition would technically work at the NodeStore level there are several less-than-obvious issues which prevent it:
- Thread safety of the write operation can be quite costly, and will come on top of the thread safety measures already put in place by the composite node stores.
- Many JCR subsystems require global state, e.g. the versioning store. This global state can become corrupt if multiple mounts operate on it or if mounts are added and removed.
As such, the only supported configuration is at most a single write-enabled store.
Because of the limitation described above, right now the only correct way to use CompositeNodeStore is to create a normal repository, split it into parts using oak-upgrade
--{include,exclude}-paths
and then configure this node store implementation to composite split parts together.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
CompositeNodeStore.Builder
-
Field Summary
-
Fields inherited from interface org.apache.jackrabbit.oak.spi.state.PrefetchNodeStore
NOOP
-
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description java.io.Closeable
addObserver(Observer observer)
Register a newObserver
.java.lang.String
checkpoint(long lifetime)
Creates a new checkpoint of the latest root of the tree.java.lang.String
checkpoint(long lifetime, java.util.Map<java.lang.String,java.lang.String> properties)
Creates a new checkpoint of the latest root of the tree.java.util.Map<java.lang.String,java.lang.String>
checkpointInfo(java.lang.String checkpoint)
Retrieve the properties associated with a checkpoint.java.lang.Iterable<java.lang.String>
checkpoints()
Returns all valid checkpoints.Blob
createBlob(java.io.InputStream inputStream)
Create aBlob
from the given input stream.Blob
getBlob(java.lang.String reference)
Get a blob by its reference.NodeState
getRoot()
Returns the latest state of the tree.NodeState
merge(NodeBuilder builder, CommitHook commitHook, CommitInfo info)
void
prefetch(java.util.Collection<java.lang.String> paths, NodeState rootState)
Make an attempt to prefetch node states for the given paths and hold them in a cache.NodeState
rebase(NodeBuilder builder)
boolean
release(java.lang.String checkpoint)
Releases the provided checkpoint.NodeState
reset(NodeBuilder builder)
Reset the passedbuilder
by throwing away all its changes and setting its base state to the current root state.NodeState
retrieve(java.lang.String checkpoint)
Retrieves the root node from a previously created repository checkpoint.
-
-
-
Method Detail
-
getRoot
public NodeState getRoot()
Description copied from interface:NodeStore
Returns the latest state of the tree.
-
merge
public NodeState merge(NodeBuilder builder, CommitHook commitHook, CommitInfo info) throws CommitFailedException
Description copied from interface:NodeStore
- Specified by:
merge
in interfaceNodeStore
- Parameters:
builder
- the builder whose changes to applycommitHook
- the commit hook to apply while merging changesinfo
- commit info associated with this merge operation- Returns:
- the node state resulting from the merge.
- Throws:
CommitFailedException
- if the merge failed
-
rebase
public NodeState rebase(NodeBuilder builder)
Description copied from interface:NodeStore
-
reset
public NodeState reset(NodeBuilder builder)
Description copied from interface:NodeStore
Reset the passedbuilder
by throwing away all its changes and setting its base state to the current root state.
-
createBlob
public Blob createBlob(java.io.InputStream inputStream) throws java.io.IOException
Description copied from interface:NodeStore
Create aBlob
from the given input stream. The input stream is closed after this method returns.- Specified by:
createBlob
in interfaceNodeStore
- Parameters:
inputStream
- The input stream for theBlob
- Returns:
- The
Blob
representinginputStream
- Throws:
java.io.IOException
- If an error occurs while reading from the stream
-
getBlob
public Blob getBlob(java.lang.String reference)
Description copied from interface:NodeStore
Get a blob by its reference.- Specified by:
getBlob
in interfaceNodeStore
- Parameters:
reference
- reference to the blob- Returns:
- blob or
null
if the reference does not resolve to a blob. - See Also:
Blob.getReference()
-
checkpoints
public java.lang.Iterable<java.lang.String> checkpoints()
Description copied from interface:NodeStore
Returns all valid checkpoints. The returnedIterable
provides a snapshot of valid checkpoints at the time this method is called. That is, theIterable
will not reflect checkpoints created after this method was called.See
NodeStore.checkpoint(long, Map)
for a definition of a valid checkpoint.- Specified by:
checkpoints
in interfaceNodeStore
- Returns:
- valid checkpoints.
-
checkpoint
public java.lang.String checkpoint(long lifetime, java.util.Map<java.lang.String,java.lang.String> properties)
Description copied from interface:NodeStore
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.The
properties
passed to this methods are associated with the checkpoint and can be retrieved through theNodeStore.checkpointInfo(String)
method. Its semantics is entirely application specific.- Specified by:
checkpoint
in interfaceNodeStore
- Parameters:
lifetime
- time (in milliseconds, > 0) that the checkpoint should remain availableproperties
- properties to associate with the checkpoint- Returns:
- string reference of this checkpoint
-
checkpoint
public java.lang.String checkpoint(long lifetime)
Description copied from interface:NodeStore
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.This method is a shortcut for
NodeStore.checkpoint(long, Map)
passing an empty map for its 2nd argument.- Specified by:
checkpoint
in interfaceNodeStore
- Parameters:
lifetime
- time (in milliseconds, > 0) that the checkpoint should remain available- Returns:
- string reference of this checkpoint
-
checkpointInfo
public java.util.Map<java.lang.String,java.lang.String> checkpointInfo(java.lang.String checkpoint)
Description copied from interface:NodeStore
Retrieve the properties associated with a checkpoint.- Specified by:
checkpointInfo
in interfaceNodeStore
- Parameters:
checkpoint
- string reference of a checkpoint- Returns:
- the properties associated with the checkpoint referenced by
checkpoint
or an empty map when there is no such checkpoint.
-
retrieve
public NodeState retrieve(java.lang.String checkpoint)
Description copied from interface:NodeStore
Retrieves the root node from a previously created repository checkpoint.
-
release
public boolean release(java.lang.String checkpoint)
Description copied from interface:NodeStore
Releases the provided checkpoint. If the provided checkpoint doesn't exist this method should returntrue
.
-
addObserver
public java.io.Closeable addObserver(Observer observer)
Description copied from interface:Observable
Register a newObserver
. Clients need to callCloseable.close()
to stop getting notifications on the registered observer and to free up any resources associated with the registration.- Specified by:
addObserver
in interfaceObservable
- Returns:
- a
Closeable
instance.
-
prefetch
public void prefetch(java.util.Collection<java.lang.String> paths, NodeState rootState)
Description copied from interface:PrefetchNodeStore
Make an attempt to prefetch node states for the given paths and hold them in a cache.- Specified by:
prefetch
in interfacePrefetchNodeStore
- Parameters:
paths
- the paths of the node states to prefetch.rootState
- the current root node state.
-
-