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