Hi Zhe,

You are right, and the status table promised a 404 the endpoint cannot
decide on its own. I've split it by who can know: Flink answers 404 for
the cases it can observe, and a coordinator that does not serve these
requests says so with a RestHandlerException carrying NOT_FOUND.
IllegalArgumentException is now only for a payload the coordinator does
serve and finds wrong. Flink's own two coordinators will do the same; the
compatibility section says what that changes on the internal route.

Both cases you asked about are named in the test plan now, with a unit
test for each of Flink's own coordinators.

Thanks,
Yunfeng Zhou

> 2026年11月2日 13:26,Zhe Wang <[email protected]> 写道:
> 
> Hi Yunfeng,
> 
> Thanks for narrowing the scope. Reusing the existing coordinator request
> path makes sense to me.
> 
> I have one question about the 404 contract for coordinators that do not
> accept external requests. `DefaultOperatorCoordinatorHandler` currently
> only checks whether the coordinator implements
> `CoordinationRequestHandler`. For example, `CollectSinkOperatorCoordinator`
> implements that interface but rejects anything other than
> `CollectCoordinationRequest` with `Preconditions.checkArgument`. With the
> proposed `IllegalArgumentException` mapping, an external request reaching
> it would appear to produce 400 rather than 404.
> 
> Is 404 intended only for coordinators without `CoordinationRequestHandler`,
> or also for those that implement it but do not support
> `ExternalCoordinationRequest`? Could the integration tests explicitly cover
> an internal-only coordinator alongside an external-capable coordinator
> rejecting an invalid payload, so this distinction is clear?
> 
> Best,
> Zhe Wang
> 
> 
> Yunfeng Zhou <[email protected]> 于2026年10月18日周日 20:58写道:
> 
>> Hi Gen,
>> 
>> You were right, and I've narrowed FLIP-617 the way you suggested — to an
>> externally accessible coordinator handler. It delivers one opaque JSON
>> payload
>> to the addressed operator's coordinator and returns the coordinator's
>> answer.
>> 
>> Your point about the bridge is what the design rests on: rather than an
>> SPI that
>> needs a bridge handed to it, the endpoint reuses the delivery path Flink
>> already
>> has. Why the general SPI was dropped is written up under "Rejected
>> Alternatives".
>> 
>> The page has been retitled and rewritten for the narrowed scope:
>> https://cwiki.apache.org/confluence/x/C6rwGg
>> 
>> Thanks,
>> Yunfeng Zhou
>> 
>> On 2026/10/14 03:43:56 Gen Luo wrote:
>>> Hi Yunfeng,
>>> 
>>> Thanks for this proposal. It's helpful to be able to customize REST
>>> handlers, so
>>> developers can easily expose a service of their own that accesses their
>>> plugin
>>> components running in the JobManager or inside a Flink job, like some RPC
>>> operator
>>> service.
>>> 
>>> However, I suppose that accessing a plugin needs a bridge from the REST
>>> handler to
>>> the internal component/service, but the bridge to the component itself is
>>> not
>>> included in this proposal, and we don't exactly know what bridge is
>> needed.
>>> At this
>>> point, I think OperatorCoordinator is the most widely used plugin
>>> component, which
>>> does have the bridge. Other pluggable components like ShuffleService are
>>> rarely
>>> customized and also lack the bridge. In conclusion, for components
>> without
>>> such a
>>> bridge, to implement a customized REST service, patches on Flink are
>> still
>>> needed,
>>> so the proposal itself may only cover a narrow scene like
>>> OperatorCoordinator.
>>> 
>>> Can you share the aiming scene and reevaluate whether we need a fully
>>> pluggable REST
>>> handler, or a specific handler that is needed? If you indeed need a
>> service
>>> that
>>> accesses an OperatorCoordinator, maybe we can narrow down the proposal
>> to an
>>> externally accessible coordinator handler.
>>> 
>>> On Sat, Oct 10, 2026 at 4:16 PM Yunfeng Zhou <[email protected]> wrote:
>>> 
>>>> Hi all,
>>>> 
>>>> I'd like to start a discussion on FLIP-617: Support Pluggable REST
>> Handler
>>>> Extensions.
>>>> 
>>>> Currently, Flink's JobManager exposes a REST endpoint as the
>> control-plane
>>>> entry point for cluster and job operations, but adding a new REST
>> operation
>>>> requires registering it inside Flink core. For components that are
>>>> developed and released separately from Flink, this leaves only two
>>>> unattractive options: maintain a Flink fork, or add component-specific
>> APIs
>>>> to Flink core and couple the component's release cycle to Flink's.
>> Flink
>>>> already offers extension mechanisms for areas such as file systems,
>>>> metrics, and security, but the REST endpoint has no general mechanism
>> for a
>>>> component to contribute its own routes.
>>>> 
>>>> This FLIP proposes a pluggable, cluster-level extension mechanism that
>>>> lets a trusted component register its own JobManager REST routes,
>> reusing
>>>> Flink's existing REST routing, versioning, leader retrieval, and
>> lifecycle,
>>>> while keeping the component's REST resources and runtime semantics
>> outside
>>>> Flink core. The mechanism is intended to be experimental and additive,
>> and
>>>> to leave the behavior of existing REST endpoints unchanged.
>>>> 
>>>> FLIP page:
>>>> https://cwiki.apache.org/confluence/x/C6rwGg
>>>> 
>>>> Feedback on any part is welcome.
>>>> 
>>>> Thanks,
>>>> Yunfeng Zhou
>>> 

Reply via email to