Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(633)

Unified Diff: luci_config/server/cfgclient/backend/backend.go

Issue 2580713002: Implement a server-side config service interface. (Closed)
Patch Set: Renamed, moved to luci_config package, fixes, split out backends. Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: luci_config/server/cfgclient/backend/backend.go
diff --git a/luci_config/server/cfgclient/backend/backend.go b/luci_config/server/cfgclient/backend/backend.go
new file mode 100644
index 0000000000000000000000000000000000000000..c0e2557faf19c997b04a469026d26813b2241864
--- /dev/null
+++ b/luci_config/server/cfgclient/backend/backend.go
@@ -0,0 +1,93 @@
+// Copyright 2016 The LUCI Authors. All rights reserved.
+// Use of this source code is governed under the Apache License, Version 2.0
+// that can be found in the LICENSE file.
+
+package backend
+
+import (
+ "net/url"
+
+ "golang.org/x/net/context"
+)
+
+// FormatSpec is a specification for formatted data.
+type FormatSpec struct {
+ // Formatter is the supported destination Resolver format for this item.
+ // Backends (notably the FormatterBackend) may project the Item into this
+ // format.
+ //
+ // An empty string means the original config service format.
+ Formatter string
+
+ // Data is additional format data describing the type. It may be empty.
+ Data string
+}
+
+// Unformatted retrns true if fs does not specify a format.
+func (fs *FormatSpec) Unformatted() bool { return fs.Formatter == "" }
+
+// Item is a single config item. It is used to pass configuration data
+// between Backend instances.
+type Item struct {
+ Meta
+
+ Content string
+
+ // FormatSpec, if non-empty, qualifies the format of the Content.
+ FormatSpec FormatSpec
+}
+
+// Params are parameters supplied to Backend methods. They are generated
+// by the main interface user-facing methods (config.go)
+type Params struct {
+ // Authority is the authority to use in the request.
+ Authority Authority
+ // Content, if true, indicates that config content should also be fetched.
+ // Otherwise, only the content hash needs to be returned.
+ Content bool
+
+ // FormatSpec, if non-empty, qualifies the format of the Content.
+ FormatSpec FormatSpec
+}
+
+// B is a configuration backend interface.
+type B interface {
+ // ServiceURL returns the service URL.
+ ServiceURL(context.Context) url.URL
+
+ // Get retrieves a single configuration.
+ Get(c context.Context, configSet, path string, p Params) (*Item, error)
+
+ // GetAll retrieves all configurations of a given type.
+ GetAll(c context.Context, t GetAllTarget, path string, p Params) ([]*Item, error)
+
+ // ConfigSetURL returns the URL for the specified config set.
+ ConfigSetURL(c context.Context, configSet string, p Params) (url.URL, error)
+}
+
+// Factory is a function that generates a B given a Context.
+type Factory func(context.Context) B
+
+// configBackendKey is the Context key for the configuration backend.
+var configBackendKey = "github.com/luci/luci-go/server/config:backend"
+
+// WithBackend returns a derivative Context with the supplied Backend installed.
+func WithBackend(c context.Context, b B) context.Context {
+ return WithFactory(c, func(context.Context) B { return b })
+}
+
+// WithFactory returns a derivative Context with the supplied BackendFactory
+// installed.
+func WithFactory(c context.Context, f Factory) context.Context {
+ return context.WithValue(c, &configBackendKey, f)
+}
+
+// Get returns the Backend that is installed into the Context.
+//
+// If no Backend is installed in the Context, Get will panic.
+func Get(c context.Context) B {
+ if f, ok := c.Value(&configBackendKey).(Factory); ok {
+ return f(c)
+ }
+ panic("no Backend factory is installed in the Context")
+}
« no previous file with comments | « luci_config/server/cfgclient/backend/authority_string.go ('k') | luci_config/server/cfgclient/backend/client/client.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698