Apache Jackrabbit : Composite Blob Store Cold Storage Delegates

Composite Blob Store Cold Storage Delegates

NOTE: The current status of this feature is a rejected feature for Oak 1.8 and a possible future feature for later Oak versions. It would depend on the implementation of some type of cold storage blob store, which currently does not exist.


A cold storage delegate is a Composite Blob Store delegate that stores data in a cold storage blob store. This is a blob store that stores data in some form of cold storage, like AWS Glacier. The primary feature of cold storage is that read access is not necessarily immediate and may take some amount of time. Cold storage services offer copious amounts of storage for low cost in exchange for very slow access time. The intended use is long-term archival.

This is a possible future feature that can add value to the composite blob store concept in the area of auto archival use cases.

Technical Details

Impacts on Composite Blob Store

The existence of a cold storage delegate may have an impact on the delegate traversal strategy implementation. For example, an implementation may consider that a cold storage delegate should always be last resort for read or write requests. Or an implementation may wish to treat cold storage delegates as read-only delegates, or take some other approach.

Impact on Intelligent Delegate Traversal Strategy

If we were to add support for cold storage delegates, it is expected that the following changes would be added to the Intelligent Delegate Traversal Strategy, which is the default strategy.

Delegate Search Order
  • Delegates for cold storage reads are always evaluated after every other option is exhausted.
  • Cold-storage delegates are treated as read-only; this strategy would not support writing to cold storage through the composite blob store. This may be done via an entirely different process.

Cold-storage delegates are treated as read-only delegates by this traversal strategy. Writes must be done via a different custom process.


After having tried to read the blob from every other delegate, the algorithm would attempt to fulfill read request from cold-storage delegates. Note that since it may take a long time (e.g. many minutes or hours) to fulfill these requests, a different mechanism for handling these responses would need to be implemented.