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

Bharath Reddy Gunapati updated FLINK-40149:
-------------------------------------------
           Flags: Patch
    Release Note: 
The HTTP lookup option asyncPolling has been renamed to async-polling to align
with Flink connector naming conventions. The old key asyncPolling remains
supported as a deprecated alias, so existing DDL does not need to change.
New configurations should use async-polling.
     Description: 
h2. Problem

The HTTP lookup connector exposes a boolean option to choose sync vs async 
lookup
behavior. It is declared as:
{code:java}
public static final ConfigOption<Boolean> ASYNC_POLLING =
        ConfigOptions.key("asyncPolling")
                .booleanType()
                .defaultValue(false)
                .withDescription("Whether to use Sync and Async polling 
mechanism");
{code}
The option works correctly and is fully wired at runtime. The issue is naming
inconsistency, not behavior:
 * It is the only camelCase table option in the HTTP connector. All other 
options
  use kebab-case or dotted keys (e.g. lookup-method, url-args,
  http.source.lookup.request.timeout).
 * This diverges from Flink connector conventions (Kafka, JDBC, etc.), where 
table
  options are consistently kebab-case.

h2. Current behavior (live, not dead config)

The option is actively used end to end:
 * HttpLookupTableSourceFactory registers ASYNC_POLLING in optionalOptions() and
  reads readableConfig.get(ASYNC_POLLING) into HttpLookupConfig.useAsync.
 * HttpLookupTableSource branches on useAsync:
 ** true  -> AsyncHttpTableLookupFunction (Flink Async I/O)
 ** false -> blocking HttpTableLookupFunction
 * GenericJsonQueryCreatorFactory and GenericJsonAndUrlQueryCreatorFactory also
  branch on ASYNC_POLLING.

Example DDL today:
{code:sql}
CREATE TABLE lookup_table (...) WITH (
  'connector' = 'http',
  'format' = 'json',
  'url' = 'http://localhost:8080/api',
  'asyncPolling' = 'true'
);
{code}
h2. Proposed change

Rename the canonical key to async-polling and keep asyncPolling as a deprecated
alias using Flink's standard mechanism:
{code:java}
public static final ConfigOption<Boolean> ASYNC_POLLING =
        ConfigOptions.key("async-polling")
                .booleanType()
                .defaultValue(false)
                .withDeprecatedKeys("asyncPolling")
                .withDescription("Whether to use sync or async polling 
mechanism");
{code}
No runtime logic change. Only the canonical key string and documentation change.
h2. Scope of code / doc updates
 * HttpLookupConnectorOptions.java - rename key + withDeprecatedKeys
 * docs/content/docs/connectors/table/http.md - option table and examples
 * docs/content.zh/docs/connectors/table/http.md - same
 * Tests and examples - prefer async-polling; add or keep one test proving
  asyncPolling still works via deprecated alias

h2. Compatibility
 * Backward compatible: existing DDL using asyncPolling continues to work via
  withDeprecatedKeys.
 * No change to default (false) or runtime behavior.
 * Release note should mention the new canonical name and that asyncPolling is
  deprecated.

h2. Acceptance criteria

* Canonical key is async-polling
* asyncPolling accepted via withDeprecatedKeys
* Docs and examples updated to async-polling
* At least one test verifies deprecated alias still works
* Default remains false; sync/async runtime behavior unchanged

  was:
h2. Problem

The HTTP lookup connector exposes a boolean option to choose sync vs async 
lookup
behavior. It is declared as:

{code:java}
public static final ConfigOption<Boolean> ASYNC_POLLING =
        ConfigOptions.key("asyncPolling")
                .booleanType()
                .defaultValue(false)
                .withDescription("Whether to use Sync and Async polling 
mechanism");
{code}

The option works correctly and is fully wired at runtime. The issue is naming
inconsistency, not behavior:

* It is the only camelCase table option in the HTTP connector. All other options
  use kebab-case or dotted keys (e.g. lookup-method, url-args,
  http.source.lookup.request.timeout).
* This diverges from Flink connector conventions (Kafka, JDBC, etc.), where 
table
  options are consistently kebab-case.



h2. Current behavior (live, not dead config)

The option is actively used end to end:

* HttpLookupTableSourceFactory registers ASYNC_POLLING in optionalOptions() and
  reads readableConfig.get(ASYNC_POLLING) into HttpLookupConfig.useAsync.
* HttpLookupTableSource branches on useAsync:
** true  -> AsyncHttpTableLookupFunction (Flink Async I/O)
** false -> blocking HttpTableLookupFunction
* GenericJsonQueryCreatorFactory and GenericJsonAndUrlQueryCreatorFactory also
  branch on ASYNC_POLLING.

Example DDL today:

{code:sql}
CREATE TABLE lookup_table (...) WITH (
  'connector' = 'http',
  'format' = 'json',
  'url' = 'http://localhost:8080/api',
  'asyncPolling' = 'true'
);
{code}

h2. Proposed change

Rename the canonical key to async-polling and keep asyncPolling as a deprecated
alias using Flink's standard mechanism:

{code:java}
public static final ConfigOption<Boolean> ASYNC_POLLING =
        ConfigOptions.key("async-polling")
                .booleanType()
                .defaultValue(false)
                .withDeprecatedKeys("asyncPolling")
                .withDescription("Whether to use sync or async polling 
mechanism");
{code}

No runtime logic change. Only the canonical key string and documentation change.

h2. Scope of code / doc updates

* HttpLookupConnectorOptions.java - rename key + withDeprecatedKeys
* docs/content/docs/connectors/table/http.md - option table and examples
* docs/content.zh/docs/connectors/table/http.md - same
* Tests and examples - prefer async-polling; add or keep one test proving
  asyncPolling still works via deprecated alias

h2. Compatibility

* Backward compatible: existing DDL using asyncPolling continues to work via
  withDeprecatedKeys.
* No change to default (false) or runtime behavior.
* Release note should mention the new canonical name and that asyncPolling is
  deprecated.


> Rename lookup option asyncPolling to async-polling for Flink naming 
> consistency
> -------------------------------------------------------------------------------
>
>                 Key: FLINK-40149
>                 URL: https://issues.apache.org/jira/browse/FLINK-40149
>             Project: Flink
>          Issue Type: Improvement
>            Reporter: Bharath Reddy Gunapati
>            Priority: Minor
>
> h2. Problem
> The HTTP lookup connector exposes a boolean option to choose sync vs async 
> lookup
> behavior. It is declared as:
> {code:java}
> public static final ConfigOption<Boolean> ASYNC_POLLING =
>         ConfigOptions.key("asyncPolling")
>                 .booleanType()
>                 .defaultValue(false)
>                 .withDescription("Whether to use Sync and Async polling 
> mechanism");
> {code}
> The option works correctly and is fully wired at runtime. The issue is naming
> inconsistency, not behavior:
>  * It is the only camelCase table option in the HTTP connector. All other 
> options
>   use kebab-case or dotted keys (e.g. lookup-method, url-args,
>   http.source.lookup.request.timeout).
>  * This diverges from Flink connector conventions (Kafka, JDBC, etc.), where 
> table
>   options are consistently kebab-case.
> h2. Current behavior (live, not dead config)
> The option is actively used end to end:
>  * HttpLookupTableSourceFactory registers ASYNC_POLLING in optionalOptions() 
> and
>   reads readableConfig.get(ASYNC_POLLING) into HttpLookupConfig.useAsync.
>  * HttpLookupTableSource branches on useAsync:
>  ** true  -> AsyncHttpTableLookupFunction (Flink Async I/O)
>  ** false -> blocking HttpTableLookupFunction
>  * GenericJsonQueryCreatorFactory and GenericJsonAndUrlQueryCreatorFactory 
> also
>   branch on ASYNC_POLLING.
> Example DDL today:
> {code:sql}
> CREATE TABLE lookup_table (...) WITH (
>   'connector' = 'http',
>   'format' = 'json',
>   'url' = 'http://localhost:8080/api',
>   'asyncPolling' = 'true'
> );
> {code}
> h2. Proposed change
> Rename the canonical key to async-polling and keep asyncPolling as a 
> deprecated
> alias using Flink's standard mechanism:
> {code:java}
> public static final ConfigOption<Boolean> ASYNC_POLLING =
>         ConfigOptions.key("async-polling")
>                 .booleanType()
>                 .defaultValue(false)
>                 .withDeprecatedKeys("asyncPolling")
>                 .withDescription("Whether to use sync or async polling 
> mechanism");
> {code}
> No runtime logic change. Only the canonical key string and documentation 
> change.
> h2. Scope of code / doc updates
>  * HttpLookupConnectorOptions.java - rename key + withDeprecatedKeys
>  * docs/content/docs/connectors/table/http.md - option table and examples
>  * docs/content.zh/docs/connectors/table/http.md - same
>  * Tests and examples - prefer async-polling; add or keep one test proving
>   asyncPolling still works via deprecated alias
> h2. Compatibility
>  * Backward compatible: existing DDL using asyncPolling continues to work via
>   withDeprecatedKeys.
>  * No change to default (false) or runtime behavior.
>  * Release note should mention the new canonical name and that asyncPolling is
>   deprecated.
> h2. Acceptance criteria
> * Canonical key is async-polling
> * asyncPolling accepted via withDeprecatedKeys
> * Docs and examples updated to async-polling
> * At least one test verifies deprecated alias still works
> * Default remains false; sync/async runtime behavior unchanged



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to