[ 
https://issues.apache.org/jira/browse/FLINK-20334?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Tzu-Li (Gordon) Tai updated FLINK-20334:
----------------------------------------
    Description: 
In the current module specifications, function endpoints are defined like so:

{code}
functions:
    - function:
          meta:
              kind: http
              type: com.foo/world
          spec:
              endpoint: http://localhost:5959/statefun
{code}

A list of functions and their corresponding service endpoints are listed 
statically in the module specification file, which is loaded once on system 
startup. The system may only route messages to functions that have been 
defined. This prevents users from adding new functions to the application, 
without having to restart the system and reload new module specifications.

We propose that instead of specifying functions, users should specify a 
"family" of function endpoints, like so:

{code}
functionEndpoints:
    - functionEndpoint:
        meta:
            kind: http
        spec:
            target:
                typename:
                    namespace: com.foo.bar
                    function: *  # (can be wildcard * or a specific name)
                urlPathTemplate: "https://bar.foo.com:8000/{typename.function}";
            connectTimeout: 1min
            # ... (other connection related configs that is shared for this 
endpoint family)
{code}

Note how users no longer define eager state per individual function. This is 
made possible by FLINK-20265, where state is now defined in the functions 
instead of in the module specifications.

Function endpoint templating should only be supported in a new module 
specification format version (next version being {{3.0}}), where the previous 
way of defining individual functions is no longer supported.

  was:
In the current module specifications, function endpoints are defined like so:

{code}
functions:
    - function:
          meta:
              kind: http
              type: com.foo/world
          spec:
              endpoint: http://localhost:5959/statefun
{code}

A list of functions and their corresponding service endpoints are listed 
statically in the module specification file, which is loaded once on system 
startup. The system may only route messages to functions that have been 
defined. This prevents users from adding new functions to the application, 
without having to restart the system and reload new module specifications.

We propose that instead of specifying functions, users should specify a 
"family" of function endpoints, like so:

{code}
functionEndpoints:
    - functionEndpoint:
        meta:
            kind: http
        spec:
            target:
                typename:
                    namespace: com.foo.bar
                    function: *  # (can be wildcard * or a specific name)
                urlPathTemplate: "https://bar.foo.com:8000/{typename.function}";
            connectTimeout: 1min
            # ... (other connection related configs that is shared for this 
endpoint family)
{code}

Note how users no longer define eager state per individual function. This is 
made possible by FLINK-20265, where state is now defined in the functions 
instead of in the module specifications.


> Introduce function endpoint path templating in module YAML specifications
> -------------------------------------------------------------------------
>
>                 Key: FLINK-20334
>                 URL: https://issues.apache.org/jira/browse/FLINK-20334
>             Project: Flink
>          Issue Type: Sub-task
>            Reporter: Tzu-Li (Gordon) Tai
>            Priority: Major
>             Fix For: statefun-2.3.0
>
>
> In the current module specifications, function endpoints are defined like so:
> {code}
> functions:
>     - function:
>           meta:
>               kind: http
>               type: com.foo/world
>           spec:
>               endpoint: http://localhost:5959/statefun
> {code}
> A list of functions and their corresponding service endpoints are listed 
> statically in the module specification file, which is loaded once on system 
> startup. The system may only route messages to functions that have been 
> defined. This prevents users from adding new functions to the application, 
> without having to restart the system and reload new module specifications.
> We propose that instead of specifying functions, users should specify a 
> "family" of function endpoints, like so:
> {code}
> functionEndpoints:
>     - functionEndpoint:
>         meta:
>             kind: http
>         spec:
>             target:
>                 typename:
>                     namespace: com.foo.bar
>                     function: *  # (can be wildcard * or a specific name)
>                 urlPathTemplate: 
> "https://bar.foo.com:8000/{typename.function}";
>             connectTimeout: 1min
>             # ... (other connection related configs that is shared for this 
> endpoint family)
> {code}
> Note how users no longer define eager state per individual function. This is 
> made possible by FLINK-20265, where state is now defined in the functions 
> instead of in the module specifications.
> Function endpoint templating should only be supported in a new module 
> specification format version (next version being {{3.0}}), where the previous 
> way of defining individual functions is no longer supported.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to