diff --git a/examples/misc/deploy.sh b/examples/misc/deploy.sh index ac928dc8..586eec9e 100644 --- a/examples/misc/deploy.sh +++ b/examples/misc/deploy.sh @@ -6,9 +6,11 @@ set -x fission env create --name binary --image fission/binary-env fission fn create --name dump --env binary --deploy ./dump.sh +fission fn create --name multinsdump --fns fission-function --env binary --deploy ./dump.sh # Deploy workflows fission fn create --name inputs --env workflow --src ./inputs.wf.yaml fission fn create --name fibonacci --env workflow --src ./fibonacci.wf.yaml fission fn create --name sleepalot --env workflow --src ./sleepalot.wf.yaml -fission fn create --name fission-inputs --env workflow --src ./fission-inputs.wf.yaml \ No newline at end of file +fission fn create --name fission-inputs --env workflow --src ./fission-inputs.wf.yaml +fission fn create --name multinamespace --fns fission-function --env workflow --src ./multinamespace.wf.yaml diff --git a/examples/misc/multinamespace.wf.yaml b/examples/misc/multinamespace.wf.yaml new file mode 100644 index 00000000..0a50a201 --- /dev/null +++ b/examples/misc/multinamespace.wf.yaml @@ -0,0 +1,10 @@ +# multinamespace shows you how to access and refere a fission function in task under specific namespace. +# +# Usage example: fission fn test --name multinamespace --fns fission-function -b 'Hello World' +apiVersion: 1 +output: multinamespace + +tasks: + multinamespace: + run: fission://fission-function/multinsdump + inputs: "{ $.Invocation.Inputs }" diff --git a/pkg/fnenv/fission/resolver.go b/pkg/fnenv/fission/resolver.go index bb214617..0d382f89 100644 --- a/pkg/fnenv/fission/resolver.go +++ b/pkg/fnenv/fission/resolver.go @@ -1,6 +1,7 @@ package fission import ( + "github.com/fission/fission-workflows/pkg/types" "github.com/fission/fission/controller/client" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -15,18 +16,18 @@ func NewResolver(controller *client.Client) *Resolver { return &Resolver{controller} } -func (re *Resolver) Resolve(fnName string) (string, error) { +func (re *Resolver) Resolve(ref types.FnRef) (string, error) { // Currently we just use the controller API to check if the function exists. - log.Infof("Resolving function: %s", fnName) + log.Infof("Resolving function: %s", ref.ID) _, err := re.controller.FunctionGet(&metav1.ObjectMeta{ - Name: fnName, - Namespace: metav1.NamespaceDefault, + Name: ref.ID, + Namespace: ref.Namespace, }) if err != nil { return "", err } - id := fnName + id := ref.ID - log.Infof("Resolved fission function %s to %s", fnName, id) + log.Infof("Resolved fission function %s to %s", ref.ID, id) return id, nil } diff --git a/pkg/fnenv/fission/runtime.go b/pkg/fnenv/fission/runtime.go index de5cb5b1..e8e532ac 100644 --- a/pkg/fnenv/fission/runtime.go +++ b/pkg/fnenv/fission/runtime.go @@ -156,5 +156,9 @@ func createFunctionMeta(fn types.FnRef) *metav1.ObjectMeta { } func (fe *FunctionEnv) createRouterURL(fn types.FnRef) string { - return fe.routerURL + "/fission-function/" + fn.ID + if fn.Namespace == metav1.NamespaceDefault { + return fe.routerURL + "/fission-function/" + fn.ID + } + + return fe.routerURL + "/fission-function/" + fn.Namespace + "/" + fn.ID } diff --git a/pkg/fnenv/fnenv.go b/pkg/fnenv/fnenv.go index 3cde806b..05141d26 100644 --- a/pkg/fnenv/fnenv.go +++ b/pkg/fnenv/fnenv.go @@ -105,5 +105,5 @@ type RuntimeResolver interface { // ResolveTask resolved an ambiguous target function name to a unique identifier of a function within the scope // of a runtime. - Resolve(targetFn string) (string, error) + Resolve(ref types.FnRef) (string, error) } diff --git a/pkg/fnenv/mock/mock.go b/pkg/fnenv/mock/mock.go index 18707e4f..2a2cc786 100644 --- a/pkg/fnenv/mock/mock.go +++ b/pkg/fnenv/mock/mock.go @@ -145,10 +145,10 @@ type Resolver struct { FnNameIDs map[string]string } -func (mf *Resolver) Resolve(fnName string) (string, error) { - fnID, ok := mf.FnNameIDs[fnName] +func (mf *Resolver) Resolve(ref types.FnRef) (string, error) { + fnID, ok := mf.FnNameIDs[ref.ID] if !ok { - return "", fmt.Errorf("could not resolve function '%s' using resolve-map '%v'", fnName, mf.FnNameIDs) + return "", fmt.Errorf("could not resolve function '%s' using resolve-map '%v'", ref.ID, mf.FnNameIDs) } return fnID, nil diff --git a/pkg/fnenv/native/native.go b/pkg/fnenv/native/native.go index aed4d962..cf73f497 100644 --- a/pkg/fnenv/native/native.go +++ b/pkg/fnenv/native/native.go @@ -83,13 +83,13 @@ func (fe *FunctionEnv) Invoke(spec *types.TaskInvocationSpec) (*types.TaskInvoca }, nil } -func (fe *FunctionEnv) Resolve(fnName string) (string, error) { - _, ok := fe.fns[fnName] +func (fe *FunctionEnv) Resolve(ref types.FnRef) (string, error) { + _, ok := fe.fns[ref.ID] if !ok { - return "", fmt.Errorf("could not resolve internal function '%s'", fnName) + return "", fmt.Errorf("could not resolve internal function '%s'", ref.ID) } - log.WithField("name", fnName).WithField("uid", fnName).Debug("Resolved internal function") - return fnName, nil + log.WithField("name", ref.ID).WithField("uid", ref.ID).Debug("Resolved internal function") + return ref.ID, nil } func (fe *FunctionEnv) RegisterFn(name string, fn InternalFunction) { diff --git a/pkg/fnenv/resolver.go b/pkg/fnenv/resolver.go index 82d73856..801ae11c 100644 --- a/pkg/fnenv/resolver.go +++ b/pkg/fnenv/resolver.go @@ -52,17 +52,11 @@ func NewMetaResolver(client map[string]RuntimeResolver) *MetaResolver { func (ps *MetaResolver) Resolve(targetFn string) (types.FnRef, error) { ref, err := types.ParseFnRef(targetFn) if err != nil { - if err == types.ErrNoRuntime { - ref = types.FnRef{ - ID: targetFn, - } - } else { - return types.FnRef{}, err - } + return types.FnRef{}, err } if ref.Runtime != "" { - return ps.resolveForRuntime(ref.ID, ref.Runtime) + return ps.resolveForRuntime(ref) } waitFor := len(ps.clients) @@ -73,7 +67,7 @@ func (ps *MetaResolver) Resolve(targetFn string) (types.FnRef, error) { var lastErr error for cName := range ps.clients { go func(cName string) { - def, err := ps.resolveForRuntime(ref.ID, cName) + def, err := ps.resolveForRuntime(types.FnRef{Runtime: cName, Namespace: ref.Namespace, ID: ref.ID}) if err != nil { logrus.WithFields(logrus.Fields{ "err": err, @@ -99,20 +93,21 @@ func (ps *MetaResolver) Resolve(targetFn string) (types.FnRef, error) { } } -func (ps *MetaResolver) resolveForRuntime(targetFn string, runtime string) (types.FnRef, error) { - dst, ok := ps.clients[runtime] +func (ps *MetaResolver) resolveForRuntime(ref types.FnRef) (types.FnRef, error) { + dst, ok := ps.clients[ref.Runtime] if !ok { return types.FnRef{}, ErrInvalidRuntime } - rsv, err := dst.Resolve(targetFn) + rsv, err := dst.Resolve(ref) if err != nil { return types.FnRef{}, err } - fnResolved.WithLabelValues(runtime).Inc() + fnResolved.WithLabelValues(ref.Runtime).Inc() return types.FnRef{ - Runtime: runtime, - ID: rsv, + Runtime: ref.Runtime, + Namespace: ref.Namespace, + ID: rsv, }, nil } @@ -182,10 +177,12 @@ func resolveTask(ps Resolver, id string, task *types.TaskSpec, resolvedC chan so if task == nil || resolvedC == nil { return nil } + t, err := ps.Resolve(task.FunctionRef) if err != nil { return err } + resolvedC <- sourceFnRef{ src: id, FnRef: &t, diff --git a/pkg/fnenv/resolver_test.go b/pkg/fnenv/resolver_test.go index a4dfff93..271f5dc2 100644 --- a/pkg/fnenv/resolver_test.go +++ b/pkg/fnenv/resolver_test.go @@ -47,7 +47,7 @@ func TestResolveForced(t *testing.T) { resolver := NewMetaResolver(clients) task1 := "task1" - task1Ref := types.NewFnRef(fooClient, "lowercase") + task1Ref := types.NewFnRef(fooClient, "", "lowercase") task1Name := task1Ref.Format() tasks := map[string]*types.TaskSpec{ task1: { @@ -133,6 +133,6 @@ type MockedFunctionResolver struct { Fn func(string) (string, error) } -func (mk *MockedFunctionResolver) Resolve(fnName string) (string, error) { - return mk.Fn(fnName) +func (mk *MockedFunctionResolver) Resolve(ref types.FnRef) (string, error) { + return mk.Fn(ref.ID) } diff --git a/pkg/fnenv/workflows/workflows_test.go b/pkg/fnenv/workflows/workflows_test.go index c1e731a5..09c77fc4 100644 --- a/pkg/fnenv/workflows/workflows_test.go +++ b/pkg/fnenv/workflows/workflows_test.go @@ -131,7 +131,7 @@ func TestRuntime_InvokeWorkflow_Cancel(t *testing.T) { func TestRuntime_Invoke(t *testing.T) { runtime, invocationAPI, _, cache := setup() - spec := types.NewTaskInvocationSpec("wi-123", "ti-123", types.NewFnRef("internal", "fooFn")) + spec := types.NewTaskInvocationSpec("wi-123", "ti-123", types.NewFnRef("internal", "", "fooFn")) spec.Inputs = types.Inputs{} spec.Inputs[types.InputParent] = typedvalues.MustParse("parentID") output := typedvalues.MustParse("foo") diff --git a/pkg/types/fnref.go b/pkg/types/fnref.go index 5dd955ac..324b5f4c 100644 --- a/pkg/types/fnref.go +++ b/pkg/types/fnref.go @@ -4,16 +4,24 @@ import ( "errors" "fmt" "regexp" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) const ( RuntimeDelimiter = "://" - groupRuntime = 1 - groupRuntimeID = 2 +) + +const ( + // These are the index of capture groups for the FnRef regex + groupFnRef = iota + groupRuntime + groupNamespace + groupRuntimeID ) var ( - fnRefReg = regexp.MustCompile(fmt.Sprintf("^(?:(\\w+)%s)?(\\w+)$", RuntimeDelimiter)) + fnRefReg = regexp.MustCompile(fmt.Sprintf("^(?:(\\w+)%s)?(?:([a-zA-Z0-9][a-zA-Z0-9_-]{1,128})/)?(\\w+)$", RuntimeDelimiter)) ErrInvalidFnRef = errors.New("invalid function reference") ErrNoRuntime = errors.New("function reference does not contain a runtime") ErrNoRuntimeID = errors.New("function reference does not contain a runtimeId") @@ -25,6 +33,11 @@ func (m FnRef) Format() string { runtime = m.Runtime + RuntimeDelimiter } + if len(m.Namespace) > 0 { + return runtime + m.Namespace + `/` + m.ID + + } + return runtime + m.ID } @@ -41,13 +54,14 @@ func IsFnRef(s string) bool { return err == nil } -func NewFnRef(runtime string, id string) FnRef { +func NewFnRef(runtime, ns, id string) FnRef { if len(id) == 0 { panic("function reference needs a runtime id") } return FnRef{ - Runtime: runtime, - ID: id, + Runtime: runtime, + Namespace: ns, + ID: id, } } @@ -57,20 +71,14 @@ func ParseFnRef(s string) (FnRef, error) { return FnRef{}, ErrInvalidFnRef } - if len(matches[groupRuntimeID]) == 0 { - return FnRef{ - Runtime: matches[groupRuntime], - }, ErrNoRuntimeID - } - - if len(matches[groupRuntime]) == 0 { - return FnRef{ - ID: matches[groupRuntimeID], - }, ErrNoRuntime + ns := matches[groupNamespace] + if len(ns) == 0 { + ns = metav1.NamespaceDefault } return FnRef{ - Runtime: matches[groupRuntime], - ID: matches[groupRuntimeID], + Runtime: matches[groupRuntime], + Namespace: ns, + ID: matches[groupRuntimeID], }, nil } diff --git a/pkg/types/fnref_test.go b/pkg/types/fnref_test.go index c2e15182..74852d60 100644 --- a/pkg/types/fnref_test.go +++ b/pkg/types/fnref_test.go @@ -8,15 +8,18 @@ import ( var parseCases = map[string]struct { FnRef - err error + err error + full string }{ - "": {FnRef{}, ErrInvalidFnRef}, - "noRuntime": {NewFnRef("", "noRuntime"), ErrNoRuntime}, - "://": {FnRef{}, ErrInvalidFnRef}, - "://runtimeId": {FnRef{}, ErrInvalidFnRef}, - "runtime://": {FnRef{}, ErrInvalidFnRef}, - "a://b": {NewFnRef("a", "b"), nil}, - "http://foobar": {NewFnRef("http", "foobar"), nil}, + "noRuntime": {NewFnRef("", "default", "noRuntime"), nil, "default/noRuntime"}, + "a://b": {NewFnRef("a", "default", "b"), nil, "a://default/b"}, + "http://foobar": {NewFnRef("http", "default", "foobar"), nil, "http://default/foobar"}, + "fission://fission-function/foobar": {NewFnRef("fission", "fission-function", "foobar"), nil, "fission://fission-function/foobar"}, + + "": {FnRef{}, ErrInvalidFnRef, ""}, + "://": {FnRef{}, ErrInvalidFnRef, ""}, + "://runtimeId": {FnRef{}, ErrInvalidFnRef, ""}, + "runtime://": {FnRef{}, ErrInvalidFnRef, ""}, } func TestParse(t *testing.T) { @@ -36,7 +39,7 @@ func TestFnRef_Format(t *testing.T) { t.Run(expected, func(t *testing.T) { fnRef := input.FnRef if !fnRef.IsEmpty() { - assert.Equal(t, expected, fnRef.Format()) + assert.Equal(t, input.full, fnRef.Format()) } }) } diff --git a/pkg/types/types.pb.go b/pkg/types/types.pb.go index ccfeed24..d1c6ab5e 100644 --- a/pkg/types/types.pb.go +++ b/pkg/types/types.pb.go @@ -867,8 +867,10 @@ func (m *Error) GetMessage() string { type FnRef struct { // Runtime is the Function Runtime environment (fnenv) that was used to resolve the function. Runtime string `protobuf:"bytes,2,opt,name=runtime" json:"runtime,omitempty"` + // Namespace is the namespace of the fission function. + Namespace string `protobuf:"bytes,3,opt,name=namespace" json:"namespace,omitempty"` // ID is the runtime-specific identifier of the function. - ID string `protobuf:"bytes,3,opt,name=ID" json:"ID,omitempty"` + ID string `protobuf:"bytes,4,opt,name=ID" json:"ID,omitempty"` } func (m *FnRef) Reset() { *m = FnRef{} } @@ -883,6 +885,13 @@ func (m *FnRef) GetRuntime() string { return "" } +func (m *FnRef) GetNamespace() string { + if m != nil { + return m.Namespace + } + return "" +} + func (m *FnRef) GetID() string { if m != nil { return m.ID @@ -955,91 +964,92 @@ func init() { func init() { proto.RegisterFile("pkg/types/types.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 1368 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0x41, 0x73, 0xdb, 0x44, - 0x14, 0xae, 0x64, 0xcb, 0xb1, 0x9f, 0x53, 0x63, 0x76, 0x4a, 0xf1, 0x78, 0x86, 0x92, 0x8a, 0x61, - 0xda, 0x01, 0xaa, 0x90, 0xb4, 0x4c, 0x1b, 0x02, 0x53, 0x5c, 0x4b, 0x49, 0x35, 0x49, 0x6c, 0x8f, - 0xec, 0xb4, 0xd3, 0x32, 0x6d, 0x47, 0xb1, 0xd6, 0x19, 0x35, 0xb6, 0x2c, 0x24, 0xb9, 0x9d, 0xfc, - 0x04, 0xfe, 0x07, 0x47, 0xee, 0x9d, 0xe1, 0xc2, 0x81, 0x23, 0xbf, 0x81, 0xe1, 0xc0, 0x89, 0x03, - 0x77, 0x2e, 0xcc, 0x30, 0xbb, 0x5a, 0x59, 0x2b, 0xc7, 0x8e, 0xe5, 0xe2, 0x70, 0x49, 0xb4, 0xbb, - 0xef, 0xbd, 0x7d, 0xfb, 0xbd, 0xef, 0x7d, 0xbb, 0x86, 0xf7, 0xdc, 0x93, 0xe3, 0xf5, 0xe0, 0xd4, - 0xc5, 0x7e, 0xf8, 0x57, 0x71, 0xbd, 0x61, 0x30, 0x44, 0xef, 0xf7, 0x6c, 0xdf, 0xb7, 0x87, 0x8e, - 0xf2, 0x7a, 0xe8, 0x9d, 0xf4, 0xfa, 0xc3, 0xd7, 0xbe, 0x42, 0x97, 0xab, 0x1f, 0x1e, 0x0f, 0x87, - 0xc7, 0x7d, 0xbc, 0x4e, 0xcd, 0x8e, 0x46, 0xbd, 0xf5, 0xc0, 0x1e, 0x60, 0x3f, 0x30, 0x07, 0x6e, - 0xe8, 0x29, 0xff, 0x2a, 0x40, 0xfe, 0x31, 0x73, 0x42, 0x75, 0xc8, 0x0f, 0x70, 0x60, 0x5a, 0x66, - 0x60, 0x56, 0x84, 0x35, 0xe1, 0x66, 0x71, 0xf3, 0x86, 0x32, 0x23, 0xb2, 0xd2, 0x3c, 0x7a, 0x89, - 0xbb, 0xc1, 0x01, 0x33, 0x37, 0xc6, 0x8e, 0x68, 0x0b, 0xb2, 0xbe, 0x8b, 0xbb, 0x15, 0x91, 0x06, - 0xf8, 0x78, 0x66, 0x80, 0x68, 0xd7, 0xb6, 0x8b, 0xbb, 0x06, 0x75, 0x41, 0xf7, 0x21, 0xe7, 0x07, - 0x66, 0x30, 0xf2, 0x2b, 0x99, 0x39, 0xbb, 0x8f, 0x9d, 0xa9, 0xb9, 0xc1, 0xdc, 0xe4, 0xdf, 0x45, - 0x58, 0xe5, 0xe3, 0xa2, 0x6b, 0x00, 0xa6, 0x6b, 0x3f, 0xc2, 0x1e, 0x89, 0x42, 0xcf, 0x54, 0x30, - 0xb8, 0x19, 0xb4, 0x03, 0x52, 0x60, 0xfa, 0x27, 0x7e, 0x45, 0x5c, 0xcb, 0xdc, 0x2c, 0x6e, 0x7e, - 0x9e, 0x2a, 0x5b, 0xa5, 0x43, 0x5c, 0x34, 0x27, 0xf0, 0x4e, 0x8d, 0xd0, 0x9d, 0xec, 0x33, 0x1c, - 0x05, 0xee, 0x28, 0x20, 0x4b, 0x34, 0xfb, 0x82, 0xc1, 0xcd, 0xa0, 0x35, 0x28, 0x5a, 0xd8, 0xef, - 0x7a, 0xb6, 0x1b, 0x90, 0x44, 0xb2, 0xd4, 0x80, 0x9f, 0x42, 0x15, 0x58, 0xe9, 0x0d, 0xbd, 0x2e, - 0xd6, 0xad, 0x8a, 0x44, 0x57, 0xa3, 0x21, 0x42, 0x90, 0x75, 0xcc, 0x01, 0xae, 0xe4, 0xe8, 0x34, - 0xfd, 0x46, 0x55, 0xc8, 0xdb, 0x4e, 0x80, 0x3d, 0xc7, 0xec, 0x57, 0x56, 0xd6, 0x84, 0x9b, 0x79, - 0x63, 0x3c, 0xae, 0x7e, 0x0b, 0x10, 0x27, 0x88, 0xca, 0x90, 0x39, 0xc1, 0xa7, 0xec, 0xe8, 0xe4, - 0x13, 0xdd, 0x05, 0xe9, 0x95, 0xd9, 0x1f, 0x61, 0x56, 0xa1, 0xeb, 0x33, 0xcf, 0x4c, 0xa2, 0xd0, - 0xea, 0x84, 0xf6, 0x5f, 0x8a, 0xf7, 0x04, 0xf9, 0xc7, 0x0c, 0x94, 0x92, 0xe0, 0xa3, 0x9d, 0x71, - 0xd5, 0xc8, 0x26, 0xa5, 0x4d, 0x25, 0x65, 0xd5, 0x94, 0x64, 0xf1, 0xd0, 0x3d, 0x28, 0x8c, 0x5c, - 0xcb, 0x0c, 0xb0, 0x55, 0x0b, 0x58, 0x6e, 0x55, 0x25, 0xe4, 0xaf, 0x12, 0xf1, 0x57, 0xe9, 0x44, - 0xfc, 0x35, 0x62, 0x63, 0xf4, 0x30, 0xaa, 0x62, 0x86, 0x56, 0x71, 0x33, 0x6d, 0x02, 0x67, 0xeb, - 0x78, 0x07, 0x24, 0xec, 0x79, 0x43, 0x8f, 0x56, 0xa8, 0xb8, 0x79, 0x6d, 0x66, 0x24, 0x8d, 0x58, - 0x19, 0xa1, 0x71, 0xf5, 0xd9, 0x1c, 0xc4, 0xb7, 0x92, 0x88, 0x7f, 0x74, 0x3e, 0xe2, 0x21, 0x2a, - 0x1c, 0xe6, 0x5b, 0x90, 0x63, 0x50, 0x17, 0x61, 0xa5, 0xa5, 0x35, 0x54, 0xbd, 0xb1, 0x5b, 0xbe, - 0x84, 0x0a, 0x20, 0x19, 0x5a, 0x4d, 0x7d, 0x52, 0x16, 0x11, 0x40, 0x6e, 0xa7, 0xa6, 0xef, 0x6b, - 0x6a, 0x39, 0x43, 0x6c, 0x54, 0x6d, 0x5f, 0xeb, 0x68, 0x6a, 0x39, 0x2b, 0xff, 0x29, 0x00, 0x8a, - 0x0e, 0xad, 0x3b, 0xaf, 0x86, 0x5d, 0x93, 0x92, 0x6d, 0x29, 0x8d, 0x5e, 0x4f, 0x34, 0xfa, 0xfa, - 0x5c, 0xd0, 0xe3, 0xfd, 0xb9, 0x96, 0xd7, 0x27, 0x5a, 0x7e, 0x63, 0x91, 0x30, 0xc9, 0xe6, 0xff, - 0x5e, 0x84, 0xab, 0xd3, 0xf7, 0x22, 0xed, 0x19, 0x85, 0xd3, 0xad, 0x48, 0x06, 0xe2, 0x19, 0xd4, - 0x86, 0x9c, 0xed, 0xb8, 0xa3, 0x20, 0xd2, 0x81, 0xed, 0x05, 0x0f, 0xa3, 0xe8, 0xd4, 0x3b, 0xa4, - 0x12, 0x0b, 0x45, 0x7a, 0xd4, 0x35, 0x3d, 0xec, 0x04, 0xba, 0xc5, 0x14, 0x61, 0x3c, 0xae, 0x3e, - 0x87, 0x22, 0xe7, 0xf2, 0x9f, 0x28, 0x73, 0xea, 0x62, 0xeb, 0x11, 0x31, 0xe5, 0x29, 0xf3, 0xb7, - 0x04, 0x95, 0x59, 0x80, 0xa1, 0xd6, 0x44, 0xc3, 0xde, 0x5b, 0x18, 0xf3, 0xe5, 0xb5, 0xae, 0x91, - 0x6c, 0xdd, 0xaf, 0x16, 0x4f, 0xe5, 0x6c, 0x13, 0x6f, 0x43, 0x2e, 0x94, 0x5e, 0xd6, 0xc5, 0xa9, - 0xc0, 0x63, 0x2e, 0xe8, 0x18, 0x56, 0xad, 0x53, 0xc7, 0x1c, 0xd8, 0x5d, 0x1a, 0xb8, 0x22, 0xd1, - 0xbc, 0xea, 0x8b, 0xe7, 0xa5, 0x72, 0x51, 0xc2, 0xf4, 0x12, 0x81, 0x63, 0xa9, 0xc9, 0x2d, 0x22, - 0x35, 0xe6, 0x1c, 0xa9, 0xf9, 0x3a, 0xc9, 0x9b, 0x1b, 0xe7, 0x4a, 0x4d, 0x9c, 0x33, 0xc7, 0x9d, - 0xea, 0x73, 0x78, 0xf7, 0x4c, 0xee, 0x53, 0x76, 0xba, 0x9d, 0xdc, 0xe9, 0x83, 0x73, 0x77, 0xe2, - 0xb9, 0xf9, 0x8c, 0x97, 0xb3, 0xc3, 0xc6, 0x5e, 0xa3, 0xf9, 0xb8, 0x51, 0xbe, 0x84, 0x2e, 0x43, - 0xa1, 0x5d, 0x7f, 0xa8, 0xa9, 0x87, 0x44, 0xc6, 0x04, 0xf4, 0x0e, 0x14, 0xf5, 0xc6, 0x8b, 0x96, - 0xd1, 0xdc, 0x35, 0xb4, 0x76, 0xbb, 0x2c, 0xd2, 0xf5, 0xc3, 0x7a, 0x5d, 0xd3, 0x54, 0x2a, 0x73, - 0xb1, 0xe4, 0x65, 0x49, 0x9c, 0xda, 0x83, 0xa6, 0x41, 0x24, 0x4f, 0x92, 0xff, 0x12, 0xa0, 0xac, - 0x62, 0x17, 0x3b, 0x16, 0x76, 0xba, 0xa7, 0xf5, 0xa1, 0xd3, 0xb3, 0x8f, 0x51, 0x1b, 0xf2, 0x1e, - 0xfe, 0x6e, 0x64, 0x7b, 0x98, 0x90, 0x9e, 0x54, 0xf4, 0xee, 0xcc, 0x7c, 0x27, 0x9d, 0x15, 0x83, - 0x79, 0x86, 0x55, 0x1c, 0x07, 0x42, 0x57, 0x40, 0x32, 0x5f, 0x9b, 0x76, 0xc8, 0x78, 0xc9, 0x08, - 0x07, 0x55, 0x07, 0x2e, 0x27, 0x1c, 0xa6, 0x40, 0xb7, 0x9b, 0x84, 0x6e, 0xe3, 0x5c, 0xe8, 0xe2, - 0x74, 0x5a, 0xa6, 0x67, 0x0e, 0x70, 0x80, 0xbd, 0xc4, 0xed, 0xf0, 0xb3, 0x00, 0x59, 0xfa, 0xc6, - 0x58, 0x8a, 0xa8, 0x7f, 0x91, 0x10, 0xf5, 0x14, 0x6f, 0x83, 0x50, 0xc6, 0xb7, 0x27, 0x64, 0x3c, - 0xd5, 0x15, 0x17, 0x09, 0xf7, 0x1f, 0x19, 0xc8, 0x47, 0xf1, 0xc8, 0x4b, 0xa9, 0x37, 0x72, 0xba, - 0x94, 0x94, 0xb8, 0xc7, 0x50, 0xe3, 0xa7, 0x90, 0x36, 0x21, 0xd6, 0xb7, 0xe6, 0x26, 0x39, 0x55, - 0x9e, 0xf7, 0x38, 0x4a, 0x84, 0xe2, 0xb3, 0x3e, 0x3f, 0xd0, 0x5c, 0x2a, 0x64, 0x39, 0x2a, 0x70, - 0x42, 0x24, 0x2d, 0x2c, 0x44, 0x17, 0x7d, 0x45, 0xfc, 0xef, 0x3c, 0xfd, 0x41, 0x0c, 0xa5, 0x8b, - 0xf5, 0xfe, 0x83, 0x89, 0x4b, 0xe8, 0x93, 0x14, 0x8c, 0x59, 0xde, 0xb5, 0x73, 0x07, 0xa4, 0x1e, - 0xe5, 0x57, 0x66, 0x8e, 0xf8, 0xee, 0x10, 0x2b, 0x23, 0x34, 0x7e, 0xbb, 0xd7, 0xa1, 0xfc, 0x19, - 0xaf, 0x77, 0xed, 0x4e, 0x8d, 0xea, 0x14, 0xf7, 0x7c, 0x13, 0x38, 0x2d, 0x13, 0xe5, 0x5f, 0x04, - 0xa8, 0xcc, 0x82, 0x13, 0x75, 0x20, 0x4b, 0x36, 0x60, 0x90, 0x7d, 0xb3, 0x70, 0x3d, 0x38, 0x6d, - 0x23, 0xa4, 0x30, 0x68, 0x34, 0x4a, 0xde, 0xbe, 0x6d, 0xfa, 0x14, 0xc2, 0x82, 0x11, 0x0e, 0xe4, - 0x6d, 0x28, 0x25, 0xad, 0x51, 0x1e, 0xb2, 0x6a, 0xad, 0x53, 0x2b, 0x5f, 0x22, 0x07, 0xa9, 0x37, - 0x1b, 0x1d, 0xa3, 0xb9, 0x5f, 0x16, 0x10, 0x82, 0x92, 0xfa, 0xa4, 0x51, 0x3b, 0xd0, 0xeb, 0x2f, - 0x9a, 0x87, 0x9d, 0xd6, 0x61, 0xa7, 0x2c, 0xca, 0xbf, 0x09, 0x50, 0x4a, 0xde, 0x30, 0xcb, 0x91, - 0xa7, 0xfb, 0x09, 0x79, 0xfa, 0x34, 0xe5, 0xed, 0xc6, 0x09, 0x95, 0x36, 0x21, 0x54, 0xb7, 0xd2, - 0x86, 0x48, 0x4a, 0xd6, 0x1b, 0x11, 0xd0, 0xd9, 0x3d, 0x62, 0x5a, 0x09, 0x8b, 0xd0, 0xea, 0x2a, - 0xe4, 0xc8, 0xc3, 0x45, 0xb7, 0x58, 0x01, 0xd8, 0x08, 0x35, 0xc7, 0x42, 0x97, 0x99, 0x73, 0x65, - 0x9d, 0x4d, 0x65, 0xaa, 0xe4, 0xc9, 0xb0, 0x6a, 0x8f, 0xad, 0x74, 0x8b, 0xfd, 0x0c, 0x4d, 0xcc, - 0x5d, 0xf8, 0xcb, 0xf4, 0x1f, 0x11, 0xae, 0x4c, 0x83, 0x16, 0xed, 0x4f, 0x08, 0xc2, 0x9d, 0x85, - 0x2a, 0xb3, 0x3c, 0x69, 0x88, 0x45, 0x3b, 0xb3, 0xf8, 0xeb, 0xf1, 0xed, 0x14, 0xe2, 0xe5, 0x85, - 0xbe, 0x88, 0xa8, 0xec, 0xec, 0xe9, 0xad, 0x96, 0xa6, 0x96, 0x73, 0xf2, 0x53, 0x28, 0x25, 0xbb, - 0x0b, 0x95, 0x40, 0xb4, 0xa3, 0x1f, 0x45, 0xa2, 0x6d, 0x11, 0xe8, 0xba, 0x1e, 0x66, 0xd0, 0x65, - 0xe6, 0x43, 0x37, 0x36, 0x96, 0x7f, 0x12, 0x00, 0x62, 0x50, 0x10, 0xe2, 0xd4, 0xaa, 0x10, 0x6b, - 0x4d, 0xcc, 0x9e, 0x55, 0x46, 0x0c, 0xb4, 0x0b, 0xb9, 0xbe, 0x79, 0x84, 0xfb, 0x29, 0x6e, 0xe2, - 0x71, 0x78, 0x65, 0x9f, 0x7a, 0x30, 0x86, 0x87, 0xee, 0xd5, 0x2d, 0x28, 0x72, 0xd3, 0x53, 0xd8, - 0x9b, 0xd8, 0xbf, 0xc0, 0x13, 0xf3, 0x3a, 0x48, 0xb4, 0x28, 0xa8, 0x02, 0x2b, 0x03, 0xec, 0xfb, - 0xe6, 0x71, 0x64, 0x14, 0x0d, 0xe5, 0x0d, 0x90, 0x68, 0xe3, 0x12, 0x13, 0x6f, 0xe4, 0x04, 0xf6, - 0x60, 0x6c, 0xc2, 0x86, 0x04, 0x4c, 0x5d, 0x65, 0x3f, 0xf7, 0x44, 0x5d, 0x95, 0xdf, 0x08, 0x70, - 0x39, 0xce, 0xf9, 0xc0, 0x74, 0xc9, 0xa5, 0x4a, 0xbf, 0xd9, 0x3b, 0x74, 0x23, 0xc5, 0x51, 0x0f, - 0x4c, 0x57, 0xa1, 0x1f, 0xec, 0x67, 0x0e, 0xfd, 0xae, 0x3e, 0x03, 0x88, 0x27, 0x97, 0xdf, 0xa8, - 0x7b, 0x50, 0x8a, 0x17, 0xf6, 0x6d, 0x3f, 0x20, 0x01, 0xf9, 0xcc, 0xd3, 0x05, 0xa4, 0xff, 0x1e, - 0xac, 0x3c, 0x95, 0xe8, 0xd2, 0x51, 0x8e, 0x32, 0xe8, 0xf6, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, - 0x7c, 0x80, 0x3d, 0xc2, 0xc9, 0x14, 0x00, 0x00, + // 1383 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0xc1, 0x6e, 0xdb, 0x46, + 0x13, 0x0e, 0x29, 0x51, 0xb6, 0x46, 0x8e, 0x7e, 0xfd, 0x8b, 0x34, 0x15, 0x84, 0x36, 0x75, 0x58, + 0x14, 0x09, 0xda, 0x86, 0x6e, 0x9c, 0x14, 0x89, 0xeb, 0x16, 0xa9, 0x22, 0xd2, 0x0e, 0x61, 0x5b, + 0x12, 0x28, 0x39, 0x41, 0x52, 0x24, 0xc1, 0x5a, 0x5c, 0x19, 0x8c, 0x25, 0x8a, 0x25, 0xa9, 0x04, + 0x7e, 0x84, 0xbe, 0x47, 0x8f, 0xbd, 0x07, 0xe8, 0xa5, 0x87, 0x1e, 0xfb, 0x0c, 0x45, 0x0f, 0x3d, + 0xf5, 0xd0, 0x7b, 0x2f, 0x05, 0x8a, 0x5d, 0x2e, 0xc5, 0xa5, 0x2c, 0x59, 0x52, 0xaa, 0xf4, 0x62, + 0x73, 0x77, 0x67, 0x66, 0x67, 0xbf, 0xf9, 0xe6, 0xdb, 0x15, 0xbc, 0xe3, 0x9d, 0x1c, 0x6f, 0x84, + 0xa7, 0x1e, 0x09, 0xa2, 0xbf, 0x9a, 0xe7, 0x0f, 0xc2, 0x01, 0x7a, 0xb7, 0xeb, 0x04, 0x81, 0x33, + 0x70, 0xb5, 0x57, 0x03, 0xff, 0xa4, 0xdb, 0x1b, 0xbc, 0x0a, 0x34, 0xb6, 0x5c, 0xf9, 0xe0, 0x78, + 0x30, 0x38, 0xee, 0x91, 0x0d, 0x66, 0x76, 0x34, 0xec, 0x6e, 0x84, 0x4e, 0x9f, 0x04, 0x21, 0xee, + 0x7b, 0x91, 0xa7, 0xfa, 0x8b, 0x04, 0xab, 0x8f, 0xb8, 0x13, 0xaa, 0xc1, 0x6a, 0x9f, 0x84, 0xd8, + 0xc6, 0x21, 0x2e, 0x4b, 0xeb, 0xd2, 0xf5, 0xc2, 0xe6, 0x35, 0x6d, 0x4a, 0x64, 0xad, 0x71, 0xf4, + 0x82, 0x74, 0xc2, 0x03, 0x6e, 0x6e, 0x8d, 0x1c, 0xd1, 0x16, 0x64, 0x03, 0x8f, 0x74, 0xca, 0x32, + 0x0b, 0xf0, 0xd1, 0xd4, 0x00, 0xf1, 0xae, 0x2d, 0x8f, 0x74, 0x2c, 0xe6, 0x82, 0xee, 0x41, 0x2e, + 0x08, 0x71, 0x38, 0x0c, 0xca, 0x99, 0x19, 0xbb, 0x8f, 0x9c, 0x99, 0xb9, 0xc5, 0xdd, 0xd4, 0xdf, + 0x64, 0x58, 0x13, 0xe3, 0xa2, 0x2b, 0x00, 0xd8, 0x73, 0x1e, 0x12, 0x9f, 0x46, 0x61, 0x67, 0xca, + 0x5b, 0xc2, 0x0c, 0xda, 0x01, 0x25, 0xc4, 0xc1, 0x49, 0x50, 0x96, 0xd7, 0x33, 0xd7, 0x0b, 0x9b, + 0x9f, 0xcd, 0x95, 0xad, 0xd6, 0xa6, 0x2e, 0x86, 0x1b, 0xfa, 0xa7, 0x56, 0xe4, 0x4e, 0xf7, 0x19, + 0x0c, 0x43, 0x6f, 0x18, 0xd2, 0x25, 0x96, 0x7d, 0xde, 0x12, 0x66, 0xd0, 0x3a, 0x14, 0x6c, 0x12, + 0x74, 0x7c, 0xc7, 0x0b, 0x69, 0x22, 0x59, 0x66, 0x20, 0x4e, 0xa1, 0x32, 0xac, 0x74, 0x07, 0x7e, + 0x87, 0x98, 0x76, 0x59, 0x61, 0xab, 0xf1, 0x10, 0x21, 0xc8, 0xba, 0xb8, 0x4f, 0xca, 0x39, 0x36, + 0xcd, 0xbe, 0x51, 0x05, 0x56, 0x1d, 0x37, 0x24, 0xbe, 0x8b, 0x7b, 0xe5, 0x95, 0x75, 0xe9, 0xfa, + 0xaa, 0x35, 0x1a, 0x57, 0xbe, 0x01, 0x48, 0x12, 0x44, 0x25, 0xc8, 0x9c, 0x90, 0x53, 0x7e, 0x74, + 0xfa, 0x89, 0xee, 0x80, 0xf2, 0x12, 0xf7, 0x86, 0x84, 0x57, 0xe8, 0xea, 0xd4, 0x33, 0xd3, 0x28, + 0xac, 0x3a, 0x91, 0xfd, 0x17, 0xf2, 0x5d, 0x49, 0xfd, 0x21, 0x03, 0xc5, 0x34, 0xf8, 0x68, 0x67, + 0x54, 0x35, 0xba, 0x49, 0x71, 0x53, 0x9b, 0xb3, 0x6a, 0x5a, 0xba, 0x78, 0xe8, 0x2e, 0xe4, 0x87, + 0x9e, 0x8d, 0x43, 0x62, 0x57, 0x43, 0x9e, 0x5b, 0x45, 0x8b, 0xf8, 0xab, 0xc5, 0xfc, 0xd5, 0xda, + 0x31, 0x7f, 0xad, 0xc4, 0x18, 0x3d, 0x88, 0xab, 0x98, 0x61, 0x55, 0xdc, 0x9c, 0x37, 0x81, 0xb3, + 0x75, 0xbc, 0x0d, 0x0a, 0xf1, 0xfd, 0x81, 0xcf, 0x2a, 0x54, 0xd8, 0xbc, 0x32, 0x35, 0x92, 0x41, + 0xad, 0xac, 0xc8, 0xb8, 0xf2, 0x74, 0x06, 0xe2, 0x5b, 0x69, 0xc4, 0x3f, 0x3c, 0x1f, 0xf1, 0x08, + 0x15, 0x01, 0xf3, 0x2d, 0xc8, 0x71, 0xa8, 0x0b, 0xb0, 0xd2, 0x34, 0xea, 0xba, 0x59, 0xdf, 0x2d, + 0x5d, 0x40, 0x79, 0x50, 0x2c, 0xa3, 0xaa, 0x3f, 0x2e, 0xc9, 0x08, 0x20, 0xb7, 0x53, 0x35, 0xf7, + 0x0d, 0xbd, 0x94, 0xa1, 0x36, 0xba, 0xb1, 0x6f, 0xb4, 0x0d, 0xbd, 0x94, 0x55, 0xff, 0x90, 0x00, + 0xc5, 0x87, 0x36, 0xdd, 0x97, 0x83, 0x0e, 0x66, 0x64, 0x5b, 0x4a, 0xa3, 0xd7, 0x52, 0x8d, 0xbe, + 0x31, 0x13, 0xf4, 0x64, 0x7f, 0xa1, 0xe5, 0xcd, 0xb1, 0x96, 0xbf, 0xb9, 0x48, 0x98, 0x74, 0xf3, + 0x7f, 0x27, 0xc3, 0xe5, 0xc9, 0x7b, 0xd1, 0xf6, 0x8c, 0xc3, 0x99, 0x76, 0x2c, 0x03, 0xc9, 0x0c, + 0x6a, 0x41, 0xce, 0x71, 0xbd, 0x61, 0x18, 0xeb, 0xc0, 0xf6, 0x82, 0x87, 0xd1, 0x4c, 0xe6, 0x1d, + 0x51, 0x89, 0x87, 0xa2, 0x3d, 0xea, 0x61, 0x9f, 0xb8, 0xa1, 0x69, 0x73, 0x45, 0x18, 0x8d, 0x2b, + 0xcf, 0xa0, 0x20, 0xb8, 0xfc, 0x2b, 0xca, 0x9c, 0x7a, 0xc4, 0x7e, 0x48, 0x4d, 0x45, 0xca, 0xfc, + 0xa5, 0x40, 0x79, 0x1a, 0x60, 0xa8, 0x39, 0xd6, 0xb0, 0x77, 0x17, 0xc6, 0x7c, 0x79, 0xad, 0x6b, + 0xa5, 0x5b, 0xf7, 0xcb, 0xc5, 0x53, 0x39, 0xdb, 0xc4, 0xdb, 0x90, 0x8b, 0xa4, 0x97, 0x77, 0xf1, + 0x5c, 0xe0, 0x71, 0x17, 0x74, 0x0c, 0x6b, 0xf6, 0xa9, 0x8b, 0xfb, 0x4e, 0x87, 0x05, 0x2e, 0x2b, + 0x2c, 0xaf, 0xda, 0xe2, 0x79, 0xe9, 0x42, 0x94, 0x28, 0xbd, 0x54, 0xe0, 0x44, 0x6a, 0x72, 0x8b, + 0x48, 0x0d, 0x9e, 0x21, 0x35, 0x5f, 0xa5, 0x79, 0x73, 0xed, 0x5c, 0xa9, 0x49, 0x72, 0x16, 0xb8, + 0x53, 0x79, 0x06, 0xff, 0x3f, 0x93, 0xfb, 0x84, 0x9d, 0x6e, 0xa5, 0x77, 0x7a, 0xff, 0xdc, 0x9d, + 0x44, 0x6e, 0x3e, 0x15, 0xe5, 0xec, 0xb0, 0xbe, 0x57, 0x6f, 0x3c, 0xaa, 0x97, 0x2e, 0xa0, 0x8b, + 0x90, 0x6f, 0xd5, 0x1e, 0x18, 0xfa, 0x21, 0x95, 0x31, 0x09, 0xfd, 0x0f, 0x0a, 0x66, 0xfd, 0x79, + 0xd3, 0x6a, 0xec, 0x5a, 0x46, 0xab, 0x55, 0x92, 0xd9, 0xfa, 0x61, 0xad, 0x66, 0x18, 0x3a, 0x93, + 0xb9, 0x44, 0xf2, 0xb2, 0x34, 0x4e, 0xf5, 0x7e, 0xc3, 0xa2, 0x92, 0xa7, 0xa8, 0x7f, 0x4a, 0x50, + 0xd2, 0x89, 0x47, 0x5c, 0x9b, 0xb8, 0x9d, 0xd3, 0xda, 0xc0, 0xed, 0x3a, 0xc7, 0xa8, 0x05, 0xab, + 0x3e, 0xf9, 0x76, 0xe8, 0xf8, 0x84, 0x92, 0x9e, 0x56, 0xf4, 0xce, 0xd4, 0x7c, 0xc7, 0x9d, 0x35, + 0x8b, 0x7b, 0x46, 0x55, 0x1c, 0x05, 0x42, 0x97, 0x40, 0xc1, 0xaf, 0xb0, 0x13, 0x31, 0x5e, 0xb1, + 0xa2, 0x41, 0xc5, 0x85, 0x8b, 0x29, 0x87, 0x09, 0xd0, 0xed, 0xa6, 0xa1, 0xbb, 0x79, 0x2e, 0x74, + 0x49, 0x3a, 0x4d, 0xec, 0xe3, 0x3e, 0x09, 0x89, 0x9f, 0xba, 0x1d, 0x7e, 0x92, 0x20, 0xcb, 0xde, + 0x18, 0x4b, 0x11, 0xf5, 0xcf, 0x53, 0xa2, 0x3e, 0xc7, 0xdb, 0x20, 0x92, 0xf1, 0xed, 0x31, 0x19, + 0x9f, 0xeb, 0x8a, 0x8b, 0x85, 0xfb, 0xf7, 0x0c, 0xac, 0xc6, 0xf1, 0xe8, 0x4b, 0xa9, 0x3b, 0x74, + 0x3b, 0x8c, 0x94, 0xa4, 0xcb, 0x51, 0x13, 0xa7, 0x90, 0x31, 0x26, 0xd6, 0x37, 0x66, 0x26, 0x39, + 0x51, 0x9e, 0xf7, 0x04, 0x4a, 0x44, 0xe2, 0xb3, 0x31, 0x3b, 0xd0, 0x4c, 0x2a, 0x64, 0x05, 0x2a, + 0x08, 0x42, 0xa4, 0x2c, 0x2c, 0x44, 0x6f, 0xfb, 0x8a, 0xf8, 0xcf, 0x79, 0xfa, 0xbd, 0x1c, 0x49, + 0x17, 0xef, 0xfd, 0xfb, 0x63, 0x97, 0xd0, 0xc7, 0x73, 0x30, 0x66, 0x79, 0xd7, 0xce, 0x6d, 0x50, + 0xba, 0x8c, 0x5f, 0x99, 0x19, 0xe2, 0xbb, 0x43, 0xad, 0xac, 0xc8, 0xf8, 0xcd, 0x5e, 0x87, 0xea, + 0xa7, 0xa2, 0xde, 0xb5, 0xda, 0x55, 0xa6, 0x53, 0xc2, 0xf3, 0x4d, 0x12, 0xb4, 0x4c, 0x56, 0x7f, + 0x96, 0xa0, 0x3c, 0x0d, 0x4e, 0xd4, 0x86, 0x2c, 0xdd, 0x80, 0x43, 0xf6, 0xf5, 0xc2, 0xf5, 0x10, + 0xb4, 0x8d, 0x92, 0xc2, 0x62, 0xd1, 0x18, 0x79, 0x7b, 0x0e, 0x0e, 0x18, 0x84, 0x79, 0x2b, 0x1a, + 0xa8, 0xdb, 0x50, 0x4c, 0x5b, 0xa3, 0x55, 0xc8, 0xea, 0xd5, 0x76, 0xb5, 0x74, 0x81, 0x1e, 0xa4, + 0xd6, 0xa8, 0xb7, 0xad, 0xc6, 0x7e, 0x49, 0x42, 0x08, 0x8a, 0xfa, 0xe3, 0x7a, 0xf5, 0xc0, 0xac, + 0x3d, 0x6f, 0x1c, 0xb6, 0x9b, 0x87, 0xed, 0x92, 0xac, 0xfe, 0x2a, 0x41, 0x31, 0x7d, 0xc3, 0x2c, + 0x47, 0x9e, 0xee, 0xa5, 0xe4, 0xe9, 0x93, 0x39, 0x6f, 0x37, 0x41, 0xa8, 0x8c, 0x31, 0xa1, 0xba, + 0x31, 0x6f, 0x88, 0xb4, 0x64, 0xbd, 0x96, 0x01, 0x9d, 0xdd, 0x23, 0xa1, 0x95, 0xb4, 0x08, 0xad, + 0x2e, 0x43, 0x8e, 0x3e, 0x5c, 0x4c, 0x9b, 0x17, 0x80, 0x8f, 0x50, 0x63, 0x24, 0x74, 0x99, 0x19, + 0x57, 0xd6, 0xd9, 0x54, 0x26, 0x4a, 0x9e, 0x0a, 0x6b, 0xce, 0xc8, 0xca, 0xb4, 0xf9, 0xcf, 0xd0, + 0xd4, 0xdc, 0x5b, 0x7f, 0x99, 0xfe, 0x2d, 0xc3, 0xa5, 0x49, 0xd0, 0xa2, 0xfd, 0x31, 0x41, 0xb8, + 0xbd, 0x50, 0x65, 0x96, 0x27, 0x0d, 0x89, 0x68, 0x67, 0x16, 0x7f, 0x3d, 0xbe, 0x99, 0x42, 0xbc, + 0x78, 0xab, 0x2f, 0x22, 0x26, 0x3b, 0x7b, 0x66, 0xb3, 0x69, 0xe8, 0xa5, 0x9c, 0xfa, 0x04, 0x8a, + 0xe9, 0xee, 0x42, 0x45, 0x90, 0x9d, 0xf8, 0x47, 0x91, 0xec, 0xd8, 0x14, 0xba, 0x8e, 0x4f, 0x38, + 0x74, 0x99, 0xd9, 0xd0, 0x8d, 0x8c, 0xd5, 0x1f, 0x25, 0x80, 0x04, 0x14, 0x84, 0x04, 0xb5, 0xca, + 0x27, 0x5a, 0x93, 0xb0, 0x67, 0x8d, 0x13, 0x03, 0xed, 0x42, 0xae, 0x87, 0x8f, 0x48, 0x6f, 0x8e, + 0x9b, 0x78, 0x14, 0x5e, 0xdb, 0x67, 0x1e, 0x9c, 0xe1, 0x91, 0x7b, 0x65, 0x0b, 0x0a, 0xc2, 0xf4, + 0x04, 0xf6, 0xa6, 0xf6, 0xcf, 0x8b, 0xc4, 0xbc, 0x0a, 0x0a, 0x2b, 0x0a, 0x2a, 0xc3, 0x4a, 0x9f, + 0x04, 0x01, 0x3e, 0x8e, 0x8d, 0xe2, 0xa1, 0xda, 0x00, 0x85, 0x35, 0x2e, 0x35, 0xf1, 0x87, 0x6e, + 0xe8, 0xf4, 0x47, 0x26, 0x7c, 0x88, 0xde, 0x83, 0xbc, 0x8b, 0xfb, 0x24, 0xf0, 0x70, 0x87, 0xf0, + 0x5f, 0x7d, 0xc9, 0x04, 0x85, 0xda, 0xd4, 0x79, 0xdb, 0xc9, 0xa6, 0xae, 0xbe, 0x96, 0xe0, 0x62, + 0x72, 0xa2, 0x03, 0xec, 0xd1, 0x2b, 0x97, 0x7d, 0xf3, 0x57, 0xea, 0xcd, 0x39, 0x80, 0x38, 0xc0, + 0x9e, 0xc6, 0x3e, 0xf8, 0x8f, 0x20, 0xf6, 0x5d, 0x79, 0x0a, 0x90, 0x4c, 0x2e, 0xbf, 0x8d, 0xf7, + 0xa0, 0x98, 0x2c, 0xec, 0x3b, 0x41, 0x48, 0x03, 0x8a, 0x99, 0xcf, 0x17, 0x90, 0xfd, 0xbb, 0xbf, + 0xf2, 0x44, 0x61, 0x4b, 0x47, 0x39, 0xc6, 0xaf, 0x5b, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0xf8, + 0x97, 0xf9, 0x94, 0xe7, 0x14, 0x00, 0x00, } diff --git a/pkg/types/types.proto b/pkg/types/types.proto index 5ff1b24c..ccdcc1b5 100644 --- a/pkg/types/types.proto +++ b/pkg/types/types.proto @@ -233,8 +233,12 @@ message FnRef { // Runtime is the Function Runtime environment (fnenv) that was used to resolve the function. string runtime = 2; + + // Namespace is the namespace of the fission function. + string namespace = 3; + // ID is the runtime-specific identifier of the function. - string ID = 3; + string ID = 4; } // Utility wrapper for a TypedValue map diff --git a/test/integration/fission/runtime_test.go b/test/integration/fission/runtime_test.go index 180edd38..49493853 100644 --- a/test/integration/fission/runtime_test.go +++ b/test/integration/fission/runtime_test.go @@ -29,6 +29,7 @@ const ( var executor = executorclient.MakeClient(localhost(executorLocalPort)) var controller = controllerclient.MakeClient(localhost(controllerLocalPort)) var testFnName = "fission-runtime-test" +var testFnNs = "fission-function" // Currently we assume that fission is present (along with the CLI) and kubectl. func TestMain(m *testing.M) { @@ -80,20 +81,22 @@ func TestMain(m *testing.M) { func TestFnenvResolve(t *testing.T) { resolver := fission.NewResolver(controller) - resolved, err := resolver.Resolve(testFnName) + ref, err := types.ParseFnRef(testFnName) + assert.NoError(t, err) + resolved, err := resolver.Resolve(ref) assert.NoError(t, err) assert.Equal(t, testFnName, resolved) } func TestFnenvNotify(t *testing.T) { - fnref := types.NewFnRef(fission.Name, testFnName) + fnref := types.NewFnRef(fission.Name, testFnNs, testFnName) fnenv := fission.NewFunctionEnv(executor, localhost(routerLocalPort)) err := fnenv.Notify(fnref, time.Now().Add(100*time.Millisecond)) assert.NoError(t, err) } func TestFnenvInvoke(t *testing.T) { - fnref := types.NewFnRef(fission.Name, testFnName) + fnref := types.NewFnRef(fission.Name, testFnNs, testFnName) fnenv := fission.NewFunctionEnv(executor, localhost(routerLocalPort)) body := "stubBodyVal" headerVal := "stub-header-val"