PR created: [FLINK-26375][statefun-golang-sdk] Fix Statefun Golang SDK to
return nil from Context.Caller when there is no caller by galenwarren ·
Pull Request #304 · apache/flink-statefun (github.com)
<https://github.com/apache/flink-statefun/pull/304>


On Fri, Feb 25, 2022 at 9:53 AM Galen Warren <ga...@cvillewarrens.com>
wrote:

> Thanks! I created a JIRA: [FLINK-26375] Fix Statefun Golang SDK to return
> nil from Context.Caller when there is no caller - ASF JIRA (apache.org)
> <https://issues.apache.org/jira/browse/FLINK-26375>
>
> ... and will update soon with the PR.
>
> On Fri, Feb 25, 2022 at 3:01 AM Igal Shilman <i...@apache.org> wrote:
>
>> Hi Galen,
>>
>> I think that you are right this does seem like a bug, looking at the Java
>> SDK, we replace an empty address with a null value.[1]
>> We should do the same here.
>> I've also checked the Python SDK[2], and the JS SDK[3] and they have the
>> same problem.
>>
>> Looking forward to your contribution!
>>
>> Thanks,
>> Igal.
>>
>>
>> [1]
>>
>> https://github.com/apache/flink-statefun/blob/725202cd69b78442d1287deec000ae2d52da4bda/statefun-sdk-java/src/main/java/org/apache/flink/statefun/sdk/java/handler/ProtoUtils.java#L49,L51
>> [2]
>>
>> https://github.com/apache/flink-statefun/blob/725202cd69b78442d1287deec000ae2d52da4bda/statefun-sdk-python/statefun/request_reply_v3.py#L115,L122
>> [3]
>>
>> https://github.com/apache/flink-statefun/blob/725202cd69b78442d1287deec000ae2d52da4bda/statefun-sdk-js/src/handler.ts#L240,L244
>>
>> On Thu, Feb 24, 2022 at 10:58 PM Galen Warren <ga...@cvillewarrens.com>
>> wrote:
>>
>> > On the Context interface, Caller is defined like this:
>> >
>> > // Caller is the caller function instance's Address, if applicable.
>> This is
>> > nil
>> > // if the message was sent to this function via an ingress.
>> > Caller() *Address
>> >
>> > ... so, in the event a function is invoked from an ingress, as opposed
>> to
>> > from another function, the returned value should be nil.
>> >
>> > However, it seems that the statefunContext.caller property -- the value
>> of
>> > which is returned by Caller() -- is always set to a non-nil value when
>> the
>> > context is constructed. From handler.go:
>> >
>> > sContext := statefunContext{
>> > Mutex:    new(sync.Mutex),
>> > self:     self,
>> > storage:  storage,
>> > response: response,
>> > }
>> >
>> > var cancel context.CancelFunc
>> > sContext.Context, cancel = context.WithCancel(ctx)
>> >
>> > * var caller Address*
>> > * if invocation.Caller != nil {*
>> > * caller = addressFromInternal(invocation.Caller)*
>> > * }*
>> > * sContext.caller = &caller*
>> >
>> > So, even when there is no caller associated with the invocation, the
>> caller
>> > field is set to a non-nil pointer, and the referenced Address has
>> > FunctionType=nil and Id="", which is then returned by Context.Caller().
>> >
>> > Should the bolded code instead be the following, to only assign
>> > sContext.caller when the invocation has an associated caller?
>> >
>> > if invocation.Caller != nil {
>> > caller := addressFromInternal(invocation.Caller)
>> > sContext.caller = &caller
>> > }
>> >
>> > I'd be happy to submit a fix if needed ... thanks.
>> >
>>
>

Reply via email to