about summary refs log tree commit diff
path: root/tools/nixery/server/storage/storage.go
diff options
context:
space:
mode:
authorVincent Ambo <tazjin@google.com>2019-10-27T15·49+0100
committerVincent Ambo <github@tazj.in>2019-10-28T21·31+0100
commitf7d16c5d454ea2aee65e7180e19a9bb891178bbb (patch)
tree88b2e8aa87f2b7499cd71edc7f0ac5a355b39706 /tools/nixery/server/storage/storage.go
parentffe58d6cb510d0274ea1afed3e0e2b44c69e32c2 (diff)
refactor(server): Introduce pluggable interface for storage backends
This abstracts over the functionality of Google Cloud Storage and
other potential underlying storage backends to make it possible to
replace these in Nixery.

The GCS backend is not yet reimplemented.
Diffstat (limited to 'tools/nixery/server/storage/storage.go')
-rw-r--r--tools/nixery/server/storage/storage.go34
1 files changed, 34 insertions, 0 deletions
diff --git a/tools/nixery/server/storage/storage.go b/tools/nixery/server/storage/storage.go
new file mode 100644
index 000000000000..15b8355e6ef5
--- /dev/null
+++ b/tools/nixery/server/storage/storage.go
@@ -0,0 +1,34 @@
+// Package storage implements an interface that can be implemented by
+// storage backends, such as Google Cloud Storage or the local
+// filesystem.
+package storage
+
+import (
+	"io"
+	"net/http"
+)
+
+type Backend interface {
+	// Name returns the name of the storage backend, for use in
+	// log messages and such.
+	Name() string
+
+	// Persist provides a user-supplied function with a writer
+	// that stores data in the storage backend.
+	//
+	// It needs to return the SHA256 hash of the data written as
+	// well as the total number of bytes, as those are required
+	// for the image manifest.
+	Persist(string, func(io.Writer) (string, int64, error)) (string, int64, error)
+
+	// Fetch retrieves data from the storage backend.
+	Fetch(path string) (io.ReadCloser, error)
+
+	// Move renames a path inside the storage backend. This is
+	// used for staging uploads while calculating their hashes.
+	Move(old, new string) error
+
+	// Serve provides a handler function to serve HTTP requests
+	// for layers in the storage backend.
+	ServeLayer(digest string, w http.ResponseWriter) error
+}