This document describes the registry storage driver model, implementation, and explains how to contribute new storage drivers.
This storage driver package comes bundled with several drivers:
The storage driver API is designed to model a filesystem-like key/value storage in a manner abstract enough to support a range of drivers from the local filesystem to Amazon S3 or other distributed object storage systems.
Storage drivers are required to implement the
storagedriver.StorageDriver interface provided in
storagedriver.go, which includes methods for reading, writing, and deleting content, as well as listing child objects of a specified prefix key.
Storage drivers are intended to be written in Go, providing compile-time
validation of the
The preferred method of selecting a storage driver is using the
StorageDriverFactory interface in the
storagedriver/factory package. These factories provide a common interface for constructing storage drivers with a parameters map. The factory model is based off of the Register and Open methods in the builtin database/sql package.
Storage driver factories may be registered by name using the
factory.Register method, and then later invoked by calling
with a driver name and parameters map. If no such storage driver can be found,
factory.Create will return an
To create a valid storage driver, one must implement the
storagedriver.StorageDriver interface and make sure to expose this driver
via the factory system.
Storage drivers should call
factory.Register with their driver name in an
init method, allowing callers of
factory.New to construct instances of this driver without requiring modification of imports throughout the codebase.
Storage driver test suites are provided in
storagedriver/testsuites/testsuites.go and may be used for any storage
driver written in Go. Tests can be registered using the
function, which run the same set of tests for any registered drivers.