| Index: filter/featureBreaker/mod.go
|
| diff --git a/filter/featureBreaker/mod.go b/filter/featureBreaker/mod.go
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..57350bf0fc12b0a967efaee157b4a638db16f552
|
| --- /dev/null
|
| +++ b/filter/featureBreaker/mod.go
|
| @@ -0,0 +1,75 @@
|
| +// Copyright 2016 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +package featureBreaker
|
| +
|
| +import (
|
| + "golang.org/x/net/context"
|
| +
|
| + "github.com/luci/gae/service/module"
|
| +)
|
| +
|
| +type modState struct {
|
| + *state
|
| +
|
| + module.Interface
|
| +}
|
| +
|
| +func (m *modState) List() (ret []string, err error) {
|
| + err = m.run(func() (err error) {
|
| + ret, err = m.Interface.List()
|
| + return
|
| + })
|
| + return
|
| +}
|
| +
|
| +func (m *modState) NumInstances(mod, ver string) (ret int, err error) {
|
| + err = m.run(func() (err error) {
|
| + ret, err = m.Interface.NumInstances(mod, ver)
|
| + return
|
| + })
|
| + return
|
| +}
|
| +
|
| +func (m *modState) SetNumInstances(mod, ver string, instances int) error {
|
| + return m.run(func() (err error) {
|
| + return m.Interface.SetNumInstances(mod, ver, instances)
|
| + })
|
| +}
|
| +
|
| +func (m *modState) Versions(mod string) (ret []string, err error) {
|
| + err = m.run(func() (err error) {
|
| + ret, err = m.Interface.Versions(mod)
|
| + return
|
| + })
|
| + return
|
| +}
|
| +
|
| +func (m *modState) DefaultVersion(mod string) (ret string, err error) {
|
| + err = m.run(func() (err error) {
|
| + ret, err = m.Interface.DefaultVersion(mod)
|
| + return
|
| + })
|
| + return
|
| +}
|
| +
|
| +func (m *modState) Start(mod, ver string) error {
|
| + return m.run(func() (err error) {
|
| + return m.Interface.Start(mod, ver)
|
| + })
|
| +}
|
| +
|
| +func (m *modState) Stop(mod, ver string) error {
|
| + return m.run(func() (err error) {
|
| + return m.Interface.Stop(mod, ver)
|
| + })
|
| +}
|
| +
|
| +// FilterModule installs a featureBreaker module filter in the context.
|
| +func FilterModule(c context.Context, defaultError error) (context.Context, FeatureBreaker) {
|
| + state := newState(defaultError)
|
| + return module.AddFilters(c, func(ic context.Context, i module.Interface) module.Interface {
|
| + return &modState{state, i}
|
| + }), state
|
| +}
|
|
|