Thanks for the clarification Galen. If you call the other Go functions,
then you could also pass the other values as separate arguments to these
functions, can't you?

Cheers,
Till

On Fri, Feb 18, 2022 at 3:31 PM Galen Warren <ga...@cvillewarrens.com>
wrote:

> The former.
>
> I think there's potential for confusion here because we're using the
> word *function
> *in a couple of senses. One sense is a *stateful function*; another sense
> is a *Go function*.
>
> What I'm looking to do is to put values in the Context so that downstream
> Go functions that receive the context can access those values. Those
> downstream Go functions would be called during one invocation of the
> stateful function.
>
> On Fri, Feb 18, 2022 at 6:48 AM Till Rohrmann <trohrm...@apache.org>
> wrote:
>
> > Hi Galen,
> >
> > Am I understanding it correctly, that you would like to set some values
> in
> > the Context of function A that is then accessible in a downstream call of
> > function B? Or would you like to set a value that is accessible once
> > function A is called again (w/ or w/o the same id)?
> >
> > Cheers,
> > Till
> >
> > On Thu, Feb 17, 2022 at 10:59 PM Galen Warren <ga...@cvillewarrens.com>
> > wrote:
> >
> > > Also, a potentially simpler way to support this would be to add a
> > > SetContext method to the statefun.Context interface, and have it assign
> > the
> > > wrapped context. This would not require changes to the function spec,
> or
> > > anything else, and would be more flexible.
> > >
> > > On Thu, Feb 17, 2022 at 1:05 PM Galen Warren <ga...@cvillewarrens.com>
> > > wrote:
> > >
> > > > Thanks for the quick reply!
> > > >
> > > > What I'm trying to do is put some things into the context so that
> > they're
> > > > available in downstream calls, perhaps in methods with pointer
> > receivers
> > > to
> > > > the function struct (MyFunc) but also perhaps in methods that are
> > further
> > > > downstream that don't have access to MyFunc. If I'm understanding
> > > > correctly, your proposal would work for the former but not the
> latter.
> > > >
> > > > An example would be to put a configured Logger into the context via a
> > > > WithLogger method (logging package - knative.dev/pkg/logging -
> > > pkg.go.dev
> > > > <https://pkg.go.dev/knative.dev/pkg/logging#WithLogger>) and then
> pull
> > > it
> > > > out downstream via FromContext (logging package -
> > > knative.dev/pkg/logging
> > > > - pkg.go.dev <https://pkg.go.dev/knative.dev/pkg/logging#FromContext
> > >).
> > > >
> > > >
> > > >
> > > >
> > > > On Wed, Feb 16, 2022 at 5:50 PM Seth Wiesman <sjwies...@gmail.com>
> > > wrote:
> > > >
> > > >> Hi Galen,
> > > >>
> > > >> No, that is not currently supported, the current idiomatic way would
> > be
> > > to
> > > >> pass those values to the struct implementing the Statefun interface.
> > > >>
> > > >>
> > > >> type MyFunc struct { someRuntimeInfo string } func (m *MyFunc)
> > > Invoke(ctx
> > > >> statefun.Context, message statefun.Message) error { } func main() {
> > > >> builder
> > > >> := statefun.StatefulFunctionsBuilder()
> > > >> f := MyFunc { someRuntimeInfo: "runtime-provided" } builder.WithSpec
> > > >> (statefun.StatefulFunctionSpec{ FunctionType: statefun.TypeNameFrom(
> > > >> "example/my-func"), Function: f })
> > > >> http.Handle("/statefun", builder.AsHandler())
> > > >> _ = http.ListenAndServe(":8000", nil) }
> > > >>
> > > >> Would this work for you? Or what is the context (pun intended) you
> are
> > > >> looking for?
> > > >>
> > > >> Seth
> > > >>
> > > >> On Wed, Feb 16, 2022 at 4:35 PM Galen Warren <
> ga...@cvillewarrens.com
> > >
> > > >> wrote:
> > > >>
> > > >> > When stateful functions are invoked, they are passed an instance
> of
> > > >> > statefun.Context, which wraps the context.Context received by the
> > HTTP
> > > >> > request. Is there any way to customize that context.Context to,
> say,
> > > >> hold
> > > >> > custom values, using ctx.WithValue()? I don't see a way but I
> wanted
> > > to
> > > >> > ask.
> > > >> >
> > > >> > If not, would you be interested in a PR to add this
> functionality? A
> > > >> simple
> > > >> > way might be to add a property to StatefulFunctionSpec, say:
> > > >> >
> > > >> > TransformContext func(ctx context.Context) context.Context
> > > >> >
> > > >> > ... that, if supplied, would be called to create a customized
> > context
> > > >> that
> > > >> > would be used downstream?
> > > >> >
> > > >> > Thanks.
> > > >> >
> > > >>
> > > >
> > >
> >
>

Reply via email to