Ohhh, I was confused. I thought that the proposal is to make `CoordinatorContextBase` part of the public API.
However, I'm also against extracting `CoordinatorContextBase` as an `@Internal` class as well. 1. Connectors shouldn't reuse internal classes. Using `@Internal` CoordinatedOperatorFactory would be already quite bad, but at least this is a relatively stable internal API. Using `@Internal` `@CoordinatorContextBase`, and refactoring out this base class just for the sake of re-using it in a connector is IMO even worse. 2. Double so if they are in a separate repository (as the iceberg connector will be/is, right?). There would be no way to prevent breaking changes between repositories. If that's only intended as the stop-gap solution until we properly expose coordinators, the lesser evil would be IMO to copy/paste/modify SourceCoordinatorContext to the flink-connector-iceberg repository. Best, Piotrek czw., 3 lis 2022 o 12:51 Maximilian Michels <m...@apache.org> napisał(a): > +1 If we wanted to expose the OperatorCoordinator API, we should provide > an adequate interface. The FLIP partially addresses this by trying to > factor out RPC code which other coordinators might make use of, but there > is additional design necessary to realize a public operator API. > > Just to be clear, I'm not opposed to any of the changes in the FLIP. I > think they make sense in the context of an Iceberg ShuffleCoordinator in > Flink. If we were to add such a new coordinator, feel free to make the > proposed code refactoring as part of a pull request. A FLIP isn't strictly > necessary here because this is a purely internal change which does not > alter public APIs, nor does it alter the internal architecture, apart from > reusing a bit of existing code. I'm sorry if we consumed some of your time > revising the document but I think we had a healthy discussion here. And > we're definitely looking forward to seeing some of these code changes! > > -Max > > On Thu, Nov 3, 2022 at 11:56 AM Piotr Nowojski <pnowoj...@apache.org> > wrote: > >> Hi, >> >> Sorry for the delay, but I've given more thoughts into this. First I >> share the same thoughts as Maximilian, that this FLIP is incomplete. As I >> understand it, you are trying to hack existing code to expose small bits of >> internal functionalities as part of the public API without solving many of >> the underlying issues. >> >> For example, what's the point of exposing `CoordinatorContextBase` as a >> public API if users can not use it? After all, the `OperatorCoordinator` >> and `CoordinatedOperatorFactory` would remain internal. At the same time, >> this FLIP would officially force us to support and maintain this >> CoordinatorContextBase, while I have strong feelings that we don't want to >> do that in the long term. I think we would need to take a big step back and >> first discuss how we would like to expose the coordinators and agree how to >> deal with the issues. >> >> First big issue that I see is that I would feel very worried exposing >> coordinator API without at least designing/planning how to deal with >> checkpointing their state. Without that, I'm afraid we might end up in a >> situation where we need to break the API in order to properly support >> stateful coordinators. And at the moment I don't see a good and easy >> solution to this problem. >> >> Second issue is the shape of the exposed public API. Exposing >> `OperatorCoordinator` or `CoordinatorContextBase` looks to me like a bad >> design, that would expose way too many things to the users, making future >> development more complicated for us and making implementation of those >> interfaces by the user unnecessary difficult. I see this as a similar issue >> as the low level `StreamOperator` API vs the higher level >> `org.apache.flink.api.common.functions.Function` API. (instead of exposing >> `StreamOperator`, `AbstractStreamOperatorV2` etc, we should beef up the >> `ProcessFunction` to expose all of the remaining functionalities in a >> user-friendly way). In the context of the coordinators, I would say that we >> should expose as the public API not the `OperatorCoordinator`, but for >> example some kind of an `EventProcessFunction` that would have a simple >> interface like: >> ``` >> interface EventProcessFunction { >> void processEvent(int subtask, OperatorEvent event, EventDispatcher >> eventDispatcher); >> } >> ``` >> + maybe some features like processing time timers/mailbox style async >> actions. >> (or maybe that could have been just a regular `ProcessFunction` but with >> `OperatorEvent` with `int subtask` as input/output). >> >> Best, >> Piotrek >> >> śr., 2 lis 2022 o 19:40 gang ye <yegang...@gmail.com> napisał(a): >> >>> Hi Max and Qingsheng, >>> >>> Thanks for the feedback. The initial motivation to propose this is to >>> reduce the duplicated code since ShuffleCoordinator would need similar >>> communication logic as SourceCoordinator to talk with operators. I >>> understand your concern that OperatorCoordinator is an internal class and >>> except SourceCoordinator for now no other uses this. >>> How about let's do it like what Qingsheng said? I can go ahead with the >>> ShufflingCoordinator implementation without the extraction. Then we have >>> intuitive sense of how many codes are copied and can be reused. If we feel >>> that there is still a need to extract, we can revisit the discussion. >>> >>> Thanks >>> Gang >>> >>> >>> >>> On Wed, Nov 2, 2022 at 12:21 AM Qingsheng Ren <re...@apache.org> wrote: >>> >>>> Thanks Gang and Steven for the FLIP. Actually I share the same concern >>>> with Piotr and Maximilian. >>>> >>>> OperatorCoordinator is marked as @Internal intentionally considering >>>> some existing issues, like consistency between non-source operator and >>>> coordinator on checkpoint. I'm wondering if it is useful to expose a public >>>> context to developers but have the OperatorCoordinator as an internal API. >>>> If we finally close all issues and decide to expose the operator >>>> coordinator API, it would be a better chance to include the base context as >>>> a part of it. >>>> >>>> Best, >>>> Qingsheng >>>> >>>> On Tue, Nov 1, 2022 at 8:29 PM Maximilian Michels <m...@apache.org> >>>> wrote: >>>> >>>>> Thanks Steven! My confusion stemmed from the lack of context in the >>>>> FLIP. >>>>> The first version did not lay out how the refactoring would be used >>>>> down >>>>> the line, e.g. by the ShuffleCoordinator. The OperatorCoordinator API >>>>> is a >>>>> non-public API and before reading the code, I wasn't even aware how >>>>> exactly >>>>> it worked and whether it would be available to regular operators (it >>>>> was >>>>> originally intended for sources only). >>>>> >>>>> I might seem pedantic here but I believe the purpose of a FLIP should >>>>> be to >>>>> describe the *why* behind the changes, not only the changes itself. A >>>>> FLIP >>>>> is not a formality but is a tool to communicate and discuss changes. I >>>>> think we still haven't laid out the exact reasons why we are factoring >>>>> out >>>>> the base. As far as I understand now, we need the base class to deal >>>>> with >>>>> concurrent updates in the custom Coordinator from the runtime >>>>> (sub)tasks. >>>>> Effectively, we are enforcing an actor model for the processing of the >>>>> incoming messages such that the OperatorCoordinator can cleanly update >>>>> its >>>>> state. However, if there are no actual implementations that make use >>>>> of the >>>>> refactoring in Flink itself, I wonder if it would make sense to copy >>>>> this >>>>> code to the downstream implementation, e.g. the ShuffleCoordinator. As >>>>> soon >>>>> as it is part of Flink, we could of course try to consolidate this >>>>> code. >>>>> >>>>> Considering the *how* of this, there appear to be both methods from >>>>> SourceCoordinator (e.g. runInEventLoop) as well as >>>>> SourceCoordinatorContext >>>>> listed in the FLIP, as well as methods which do not appear anywhere in >>>>> Flink code, e.g. subTaskReady / subTaskNotReady / sendEventToOperator. >>>>> It >>>>> appears that some of this has been extracted from a downstream >>>>> implementation. It would be great to adjust this, such that it >>>>> reflects the >>>>> status quo in Flink. >>>>> >>>>> -Max >>>>> >>>>> On Fri, Oct 28, 2022 at 5:53 AM Steven Wu <stevenz...@gmail.com> >>>>> wrote: >>>>> >>>>> > Max, >>>>> > >>>>> > Thanks a lot for the comments. We should clarify that the shuffle >>>>> > operator/coordinator is not really part of the Flink sink >>>>> > function/operator. shuffle operator is a custom operator that can be >>>>> > inserted right before the Iceberg writer operator. Shuffle operator >>>>> > calculates the traffic statistics and performs a custom >>>>> partition/shuffle >>>>> > (DataStream#partitionCustom) to cluster the data right before they >>>>> get to >>>>> > the Iceberg writer operator. >>>>> > >>>>> > We are not proposing to introduce a sink coordinator for the sink >>>>> > interface. Shuffle operator needs the CoordinatorContextBase to >>>>> > facilitate the communication btw shuffle subtasks and coordinator for >>>>> > traffic statistics aggregation. The communication part is already >>>>> > implemented by SourceCoordinatorContext. >>>>> > >>>>> > Here are some details about the communication needs. >>>>> > - subtasks periodically calculate local statistics and send to the >>>>> > coordinator for global aggregation >>>>> > - the coordinator sends the globally aggregated statistics to the >>>>> subtasks >>>>> > - subtasks use the globally aggregated statistics to guide the >>>>> > partition/shuffle decision >>>>> > >>>>> > Regards, >>>>> > Steven >>>>> > >>>>> > On Thu, Oct 27, 2022 at 5:38 PM Maximilian Michels <m...@apache.org> >>>>> wrote: >>>>> > >>>>> > > Hi Gang, >>>>> > > >>>>> > > Looks much better! I've actually gone through the >>>>> OperatorCoordinator >>>>> > code. >>>>> > > It turns out, any operator already has an OperatorCoordinator >>>>> assigned. >>>>> > > Also, any operator can add custom coordinator code. So it looks >>>>> like you >>>>> > > won't have to implement any additional runtime logic to add a >>>>> > > ShuffleCoordinator. However, I'm wondering, why do you >>>>> specifically need >>>>> > to >>>>> > > refactor the SourceCoordinatorContext? You could simply add your >>>>> own >>>>> > > coordinator code. I'm not sure the sink requirements map to the >>>>> source >>>>> > > interface so closely that you can reuse the same logic. >>>>> > > >>>>> > > If you can refactor SourceCoordinatorContext in a way that makes >>>>> it fit >>>>> > > your use case, I have nothing to object here. By the way, another >>>>> example >>>>> > > of an existing OperatorCoordinator is >>>>> CollectSinkOperatorCoordinator >>>>> > which >>>>> > > is quite trivial but it might be worth evaluating whether you need >>>>> the >>>>> > full >>>>> > > power of SourceCoordinatorContext which is why I wanted to get more >>>>> > > context. >>>>> > > >>>>> > > -Max >>>>> > > >>>>> > > On Thu, Oct 27, 2022 at 4:15 PM gang ye <yegang...@gmail.com> >>>>> wrote: >>>>> > > >>>>> > > > Hi Max, >>>>> > > > I got your concern. Since shuffling support for Flink Iceberg >>>>> sink is >>>>> > not >>>>> > > > the main body of the proposal, I add another appendix part just >>>>> now >>>>> > with >>>>> > > > more details about how to use CoordinatorContextBase and how to >>>>> define >>>>> > > > ShufflingCoordinator. >>>>> > > > >>>>> > > > Let me know if that cannot solve your concern. >>>>> > > > >>>>> > > > Thanks >>>>> > > > Gang >>>>> > > > >>>>> > > > On Thu, Oct 27, 2022 at 1:31 PM Maximilian Michels < >>>>> m...@apache.org> >>>>> > > wrote: >>>>> > > > >>>>> > > >> Hey Gang, >>>>> > > >> >>>>> > > >> What I'm looking for here is a complete picture of why the >>>>> change is >>>>> > > >> necessary and what the next steps are. Ultimately, refactoring >>>>> any >>>>> > code >>>>> > > >> serves a purpose. Here, we want to refactor the Coordinator >>>>> code such >>>>> > > that >>>>> > > >> we can add a SinkCoordinator, similar to the SourceCoordinator. >>>>> The >>>>> > FLIP >>>>> > > >> should address the next steps, i.e. how you plan to add the >>>>> > > >> SinkCoordinator, its interfaces, runtime changes. It doesn't >>>>> have to >>>>> > be >>>>> > > in >>>>> > > >> great detail but without this information, I don't think the >>>>> FLIP is >>>>> > > >> complete. >>>>> > > >> >>>>> > > >> This feature should be generic enough to be usable by other >>>>> sinks than >>>>> > > >> the Iceberg sink. Of course Iceberg can still load its own >>>>> > > implementation >>>>> > > >> which may be outlined in a separate FLIP. >>>>> > > >> >>>>> > > >> Unless there is a good reason, normal operators should not >>>>> support the >>>>> > > >> coordinator functionality. At least I'm not convinced it would >>>>> play >>>>> > well >>>>> > > >> with Flink's execution model. But I see how it is required for >>>>> sources >>>>> > > and >>>>> > > >> sinks. >>>>> > > >> >>>>> > > >> -Max >>>>> > > >> >>>>> > > >> On Wed, Oct 26, 2022 at 3:05 PM gang ye <yegang...@gmail.com> >>>>> wrote: >>>>> > > >> >>>>> > > >>> Hi Max, >>>>> > > >>> >>>>> > > >>> Thanks for reviewing. >>>>> > > >>> >>>>> > > >>> For this Flip 264, yes, we will only focus on abstracting RPC >>>>> calls >>>>> > > >>> between the task and the job manager for communications and >>>>> won't >>>>> > touch >>>>> > > >>> watermark checkpoint. >>>>> > > >>> If the coordinator doesn't need RPC calls to talk with >>>>> subtasks, then >>>>> > > it >>>>> > > >>> can define context without extending from the >>>>> > CoordinatorContextBase(or >>>>> > > >>> find another class name to limit the scope). >>>>> > > >>> >>>>> > > >>> Regarding the code-changing scope, for this Flip 264, we will >>>>> only do >>>>> > > >>> context extraction. The shuffling coordinator and operator >>>>> > > >>> < >>>>> > > >>>>> > >>>>> https://docs.google.com/document/d/13N8cMqPi-ZPSKbkXGOBMPOzbv2Fua59j8bIjjtxLWqo >>>>> > > > >>>>> > > >>> which will use the context will come with a separate proposal, >>>>> thus >>>>> > we >>>>> > > try >>>>> > > >>> to keep it simple in Flip 264 to understand. I can add a >>>>> little bit >>>>> > > more >>>>> > > >>> about how to use the coordinator context in Flip 264 if you >>>>> think >>>>> > that >>>>> > > will >>>>> > > >>> be helpful. >>>>> > > >>> >>>>> > > >>> Thanks! >>>>> > > >>> Gang >>>>> > > >>> >>>>> > > >>> >>>>> > > >>> >>>>> > > >>> On Wed, Oct 26, 2022 at 7:25 AM Maximilian Michels < >>>>> m...@apache.org> >>>>> > > >>> wrote: >>>>> > > >>> >>>>> > > >>>> Thanks for the proposal, Gang! This is indeed somewhat of a >>>>> bigger >>>>> > > >>>> change. The coordinator for sources, as part of FLIP-27, was >>>>> > > specifically >>>>> > > >>>> added to synchronize the global watermark and to assign splits >>>>> > > dynamically. >>>>> > > >>>> However, it practically allows arbitrary RPC calls between >>>>> the task >>>>> > > and the >>>>> > > >>>> job manager. I understand that there is concern that such a >>>>> powerful >>>>> > > >>>> mechanism should not be available to all operators. >>>>> Nevertheless, I >>>>> > > see the >>>>> > > >>>> practical use in case of sinks like Iceberg. So I'd suggest >>>>> limiting >>>>> > > this >>>>> > > >>>> feature to sinks (and sources) only. >>>>> > > >>>> >>>>> > > >>>> I'm wondering whether extracting the SourceCoordinatorContext >>>>> is >>>>> > > >>>> enough to achieve what you want. There will be additional work >>>>> > > necessary, >>>>> > > >>>> e.g. create a SinkCoordinator similarly to SourceCoordinator >>>>> which >>>>> > > handles >>>>> > > >>>> the RPC calls and the checkpointing. I think it would be good >>>>> to >>>>> > > outline >>>>> > > >>>> this in the FLIP. >>>>> > > >>>> >>>>> > > >>>> -Max >>>>> > > >>>> >>>>> > > >>>> On Sun, Oct 16, 2022 at 9:01 AM Steven Wu < >>>>> stevenz...@gmail.com> >>>>> > > wrote: >>>>> > > >>>> >>>>> > > >>>>> sorry. sent the incomplete reply by mistake. >>>>> > > >>>>> >>>>> > > >>>>> If there are any concrete concerns, we can discuss. In the >>>>> > > FLINK-27405 >>>>> > > >>>>> [1], >>>>> > > >>>>> Avid pointed out some implications regarding checkpointing. >>>>> In this >>>>> > > >>>>> small >>>>> > > >>>>> FLIP, we are not exposing/changing any checkpointing logic, >>>>> we >>>>> > mainly >>>>> > > >>>>> need >>>>> > > >>>>> the coordinator context functionality to facilitate the >>>>> > communication >>>>> > > >>>>> between coordinator and subtasks. >>>>> > > >>>>> >>>>> > > >>>>> [1] https://issues.apache.org/jira/browse/FLINK-27405 >>>>> > > >>>>> >>>>> > > >>>>> On Sun, Oct 16, 2022 at 8:56 AM Steven Wu < >>>>> stevenz...@gmail.com> >>>>> > > >>>>> wrote: >>>>> > > >>>>> >>>>> > > >>>>> > Hang, appreciate your input. Agree that >>>>> `CoordinatorContextBase` >>>>> > > is a >>>>> > > >>>>> > better name considering Flink code convention. >>>>> > > >>>>> > >>>>> > > >>>>> > If there are any concrete concerns, we can discuss. In the >>>>> jira, >>>>> > > >>>>> > >>>>> > > >>>>> > >>>>> > > >>>>> > >>>>> > > >>>>> > On Sun, Oct 16, 2022 at 12:12 AM Hang Ruan < >>>>> > ruanhang1...@gmail.com >>>>> > > > >>>>> > > >>>>> wrote: >>>>> > > >>>>> > >>>>> > > >>>>> >> Hi, >>>>> > > >>>>> >> >>>>> > > >>>>> >> IMP, I agree to extract a base class for >>>>> > SourceCoordinatorContext. >>>>> > > >>>>> >> But I prefer to use the name >>>>> `OperatorCoordinatorContextBase` or >>>>> > > >>>>> >> `CoordinatorContextBase` as the format like >>>>> `SourceReaderBase`. >>>>> > > >>>>> >> I also agree to what Piotr said. Maybe more problems will >>>>> occur >>>>> > > when >>>>> > > >>>>> >> connectors start to use it. >>>>> > > >>>>> >> >>>>> > > >>>>> >> Best, >>>>> > > >>>>> >> Hang >>>>> > > >>>>> >> >>>>> > > >>>>> >> Steven Wu <stevenz...@gmail.com> 于2022年10月14日周五 22:31写道: >>>>> > > >>>>> >> >>>>> > > >>>>> >> > Piotr, >>>>> > > >>>>> >> > >>>>> > > >>>>> >> > The proposal is to extract the listed methods from >>>>> @Iinternal >>>>> > > >>>>> >> > SourceCoordinatorContext to a @PublicEvolving >>>>> > > >>>>> BaseCoordinatorContext. >>>>> > > >>>>> >> > >>>>> > > >>>>> >> > The motivation is that other operators can leverage the >>>>> > > >>>>> communication >>>>> > > >>>>> >> > mechanism btw operator coordinator and operator >>>>> subtasks. For >>>>> > > >>>>> example, >>>>> > > >>>>> >> in >>>>> > > >>>>> >> > the linked google doc shuffle operator (in Flink >>>>> Iceberg sink) >>>>> > > can >>>>> > > >>>>> >> leverage >>>>> > > >>>>> >> > it for computing traffic distribution statistics. >>>>> > > >>>>> >> > * subtasks calculate local statistics and periodically >>>>> send >>>>> > them >>>>> > > >>>>> to the >>>>> > > >>>>> >> > coordinator for global aggregation. >>>>> > > >>>>> >> > * The coordinator can broadcast the globally aggregated >>>>> > > >>>>> statistics to >>>>> > > >>>>> >> > subtasks, which can be used to guide the shuffling >>>>> decision >>>>> > > >>>>> (selecting >>>>> > > >>>>> >> > downstream channels). >>>>> > > >>>>> >> > >>>>> > > >>>>> >> > Thanks, >>>>> > > >>>>> >> > Steven >>>>> > > >>>>> >> > >>>>> > > >>>>> >> > >>>>> > > >>>>> >> > On Fri, Oct 14, 2022 at 2:16 AM Piotr Nowojski < >>>>> > > >>>>> pnowoj...@apache.org> >>>>> > > >>>>> >> > wrote: >>>>> > > >>>>> >> > >>>>> > > >>>>> >> > > Hi, >>>>> > > >>>>> >> > > >>>>> > > >>>>> >> > > Could you clarify what's the proposal that you have >>>>> in mind? >>>>> > > >>>>> From the >>>>> > > >>>>> >> > > context I would understand that the newly extracted >>>>> > > >>>>> >> > > `BaseCoordinatorContext` would have to be marked as >>>>> > > >>>>> `@PublicEvolving` >>>>> > > >>>>> >> or >>>>> > > >>>>> >> > > `@Experimental`, since otherwise extracting it and >>>>> keeping >>>>> > > >>>>> `@Internal` >>>>> > > >>>>> >> > > wouldn't change much? Such `@Internal` base class >>>>> could have >>>>> > > >>>>> been >>>>> > > >>>>> >> removed >>>>> > > >>>>> >> > > at any point of time in the future. Having said that, >>>>> it >>>>> > > sounds >>>>> > > >>>>> to me >>>>> > > >>>>> >> > like >>>>> > > >>>>> >> > > your proposal is a bit bigger than it looks at the >>>>> first >>>>> > > glance >>>>> > > >>>>> and >>>>> > > >>>>> >> you >>>>> > > >>>>> >> > > actually want to expose the operator coordinator >>>>> concept to >>>>> > > the >>>>> > > >>>>> public >>>>> > > >>>>> >> > API? >>>>> > > >>>>> >> > > >>>>> > > >>>>> >> > > AFAIK there were some discussions about that, and it >>>>> was a >>>>> > bit >>>>> > > >>>>> of a >>>>> > > >>>>> >> > > conscious decision to NOT do that. I don't know those >>>>> > reasons >>>>> > > >>>>> however. >>>>> > > >>>>> >> > Only >>>>> > > >>>>> >> > > now, I've just heard that there are for example some >>>>> > problems >>>>> > > >>>>> with >>>>> > > >>>>> >> > > checkpointing of hypothetical non source operator >>>>> > > coordinators. >>>>> > > >>>>> Maybe >>>>> > > >>>>> >> > > someone else could shed some light on this? >>>>> > > >>>>> >> > > >>>>> > > >>>>> >> > > Conceptually I would be actually in favour of exposing >>>>> > > operator >>>>> > > >>>>> >> > > coordinators if there is a good reason behind that, >>>>> but it >>>>> > is >>>>> > > a >>>>> > > >>>>> more >>>>> > > >>>>> >> > > difficult topic and might be a larger effort than it >>>>> seems >>>>> > at >>>>> > > >>>>> the >>>>> > > >>>>> >> first >>>>> > > >>>>> >> > > glance. >>>>> > > >>>>> >> > > >>>>> > > >>>>> >> > > Best, >>>>> > > >>>>> >> > > Piotrek >>>>> > > >>>>> >> > > >>>>> > > >>>>> >> > > wt., 4 paź 2022 o 19:41 Steven Wu < >>>>> stevenz...@gmail.com> >>>>> > > >>>>> napisał(a): >>>>> > > >>>>> >> > > >>>>> > > >>>>> >> > > > Jing, thanks a lot for your reply. The linked >>>>> google doc >>>>> > is >>>>> > > >>>>> not for >>>>> > > >>>>> >> > this >>>>> > > >>>>> >> > > > FLIP, which is fully documented in the wiki page. >>>>> The >>>>> > linked >>>>> > > >>>>> google >>>>> > > >>>>> >> doc >>>>> > > >>>>> >> > > is >>>>> > > >>>>> >> > > > the design doc to introduce shuffling in Flink >>>>> Iceberg >>>>> > sink, >>>>> > > >>>>> which >>>>> > > >>>>> >> > > > motivated this FLIP proposal so that the shuffle >>>>> > coordinator >>>>> > > >>>>> can >>>>> > > >>>>> >> > leverage >>>>> > > >>>>> >> > > > the introduced BaseCoordinatorContext to avoid code >>>>> > > >>>>> duplication. >>>>> > > >>>>> >> > > > >>>>> > > >>>>> >> > > > On Tue, Oct 4, 2022 at 1:04 AM Jing Ge < >>>>> > j...@ververica.com> >>>>> > > >>>>> wrote: >>>>> > > >>>>> >> > > > >>>>> > > >>>>> >> > > > > Thanks for bringing this up. It looks overall >>>>> good! One >>>>> > > >>>>> small >>>>> > > >>>>> >> thing, >>>>> > > >>>>> >> > > you >>>>> > > >>>>> >> > > > > might want to write all content on the wiki page >>>>> instead >>>>> > > of >>>>> > > >>>>> >> linking >>>>> > > >>>>> >> > to >>>>> > > >>>>> >> > > a >>>>> > > >>>>> >> > > > > google doc. The reason is that some people might >>>>> not be >>>>> > > >>>>> able to >>>>> > > >>>>> >> > access >>>>> > > >>>>> >> > > > the >>>>> > > >>>>> >> > > > > google doc. >>>>> > > >>>>> >> > > > > >>>>> > > >>>>> >> > > > > Best regards, >>>>> > > >>>>> >> > > > > Jing >>>>> > > >>>>> >> > > > > >>>>> > > >>>>> >> > > > > On Tue, Oct 4, 2022 at 3:57 AM gang ye < >>>>> > > yegang...@gmail.com >>>>> > > >>>>> > >>>>> > > >>>>> >> wrote: >>>>> > > >>>>> >> > > > > >>>>> > > >>>>> >> > > > >> Hi, >>>>> > > >>>>> >> > > > >> >>>>> > > >>>>> >> > > > >> We submit the Flip proposal >>>>> > > >>>>> >> > > > >> < >>>>> > > >>>>> >> > > > >> >>>>> > > >>>>> >> > > > >>>>> > > >>>>> >> > > >>>>> > > >>>>> >> > >>>>> > > >>>>> >> >>>>> > > >>>>> >>>>> > > >>>>> > >>>>> https://cwiki.apache.org/confluence/display/FLINK/FLIP-264%3A+Extract+BaseCoordinatorContext >>>>> > > >>>>> >> > > > >> > >>>>> > > >>>>> >> > > > >> at Confluent to extract BaseCoordinatorContext >>>>> from >>>>> > > >>>>> >> > > > >> SourceCoordinatorContext to reuse it for other >>>>> > > >>>>> coordinators E.g. >>>>> > > >>>>> >> in >>>>> > > >>>>> >> > > the >>>>> > > >>>>> >> > > > >> shuffling support of Flink Iceberg sink >>>>> > > >>>>> >> > > > >> < >>>>> > > >>>>> >> > > > >> >>>>> > > >>>>> >> > > > >>>>> > > >>>>> >> > > >>>>> > > >>>>> >> > >>>>> > > >>>>> >> >>>>> > > >>>>> >>>>> > > >>>>> > >>>>> https://docs.google.com/document/d/13N8cMqPi-ZPSKbkXGOBMPOzbv2Fua59j8bIjjtxLWqo >>>>> > > >>>>> >> > > > >> > >>>>> > > >>>>> >> > > > >> >>>>> > > >>>>> >> > > > >> Could you help to take a look? >>>>> > > >>>>> >> > > > >> Thanks >>>>> > > >>>>> >> > > > >> >>>>> > > >>>>> >> > > > >> Gang >>>>> > > >>>>> >> > > > >> >>>>> > > >>>>> >> > > > > >>>>> > > >>>>> >> > > > >>>>> > > >>>>> >> > > >>>>> > > >>>>> >> > >>>>> > > >>>>> >> >>>>> > > >>>>> > >>>>> > > >>>>> >>>>> > > >>>> >>>>> > > >>>>> > >>>>> >>>>