Hi Devs, Thanks for all your advice, it helps a lot. I have already revised the document[1] and started a vote[2].
Thanks, Hongshun [1] https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=278465498 [2] https://lists.apache.org/thread/t1zff21z440pvv48jyhm8pgtqsyplchn On Fri, Jan 12, 2024 at 1:00 AM Becket Qin <becket....@gmail.com> wrote: > Hi Qingsheng, > > Thanks for the comment. I think the initial idea is to hide the queue > completely from the users, i.e. make FutureCompletingBlockingQueue class > internal. If it is OK to expose the class to the users, then just returning > the queue sounds reasonable to me. > > Thanks, > > Jiangjie (Becket) Qin > > On Wed, Jan 10, 2024 at 10:39 PM Hongshun Wang <loserwang1...@gmail.com> > wrote: > >> Hi Qingsheng, >> >> >> I agree with you that it would be clearer to have a new interface that >> extracts the SplitFetcher creation and management logic from the current >> SplitFetcherManager. However, extensive modifications to the interface may >> influence a lot and cause compatibility issues. Perhaps we can consider >> doing it later, rather than in this FLIP. >> >> >> Adding a new internal method, SplitFetcherManager#getQueue(), to >> SourceReaderBase seems to be a better option than exposing methods like >> poll and notifyAvailable on SplitFetcherManager. >> >> >> I have taken this valuable suggestion and updated the FLIP accordingly. >> >> >> Thanks, >> >> Hongshun >> >> On Thu, Jan 11, 2024 at 2:09 PM Qingsheng Ren <renqs...@gmail.com> wrote: >> >>> Hi Hongshun and Becket, >>> >>> Sorry for being late in the discussion! I went through the entire FLIP >>> but I still have some concerns about the new SplitFetcherManager. >>> >>> First of all I agree that we should hide the elementQueue from connector >>> developers. This could simplify the interface exposed to developers so that >>> they can focus on the interaction with external systems. >>> >>> However in the current FLIP, SplitFetcherManager exposes 4 more methods, >>> poll / getAvailabilityFuture / notifyAvailable / noAvailableElement, which >>> are tightly coupled with the implementation of the elementQueue. The naming >>> of these methods look weird to me, like what does it mean to "poll from a >>> SplitFetcherManager" / "notify a SplitFetcherManager available"? To clarify >>> these methods we have to explain to developers that "well we hide a queue >>> inside SplitFetcherMamager and the poll method is actually polling from the >>> queue". I'm afraid these methods will implicitly expose the concept and the >>> implementation of the queue to developers. >>> >>> I think a cleaner solution would be having a new interface that extracts >>> SplitFetcher creating and managing logic from the current >>> SplitFetcherManager, but having too many concepts might make the entire >>> Source API even harder to understand. To make a compromise, I'm considering >>> only exposing constructors of SplitFetcherManager as public APIs, and >>> adding a new internal method SplitFetcherManager#getQueue() for >>> SourceReaderBase (well it's a bit hacky I admit but I think exposing >>> methods like poll and notifyAvailable on SplitFetcherManager is even >>> worth). WDTY? >>> >>> Thanks, >>> Qingsheng >>> >>> On Thu, Dec 21, 2023 at 8:36 AM Becket Qin <becket....@gmail.com> wrote: >>> >>>> Hi Hongshun, >>>> >>>> I think the proposal in the FLIP is basically fine. A few minor >>>> comments: >>>> >>>> 1. In FLIPs, we define all the user-sensible changes as public >>>> interfaces. >>>> The public interface section should list all of them. So, the code >>>> blocks >>>> currently in the proposed changes section should be put into the public >>>> interface section instead. >>>> >>>> 2. It would be good to put all the changes of one class together. For >>>> example, for SplitFetcherManager, we can say: >>>> - Change SplitFetcherManager from Internal to PublicEvolving. >>>> - Deprecate the old constructor exposing the >>>> FutureCompletingBlockingQueue, and add new constructors as replacements >>>> which creates the FutureCompletingBlockingQueue instance internally. >>>> - Add a few new methods to expose the functionality of the internal >>>> FutureCompletingBlockingQueue via the SplitFetcherManager. >>>> And then follows the code block containing all the changes above. >>>> Ideally, the changes should come with something like "// <------ New", >>>> so >>>> that it is. easier to be found. >>>> >>>> 3. In the proposed changes section, it would be good to add some more >>>> detailed explanation of the idea behind the public interface changes. So >>>> even people new to Flink can understand better how exactly the interface >>>> changes will help fulfill the motivation. For example, regarding the >>>> constructor signature change, we can say the following. We can mention a >>>> few things in this section: >>>> - By exposing the SplitFetcherManager / SingleThreadFetcheManager, >>>> by >>>> implementing addSplits() and removeSplits(), connector developers can >>>> easily create their own threading models in the SourceReaderBase. >>>> - Note that the SplitFetcher constructor is package private, so >>>> users >>>> can only create SplitFetchers via >>>> SplitFetcherManager.createSplitFetcher(). >>>> This ensures each SplitFetcher is always owned by the >>>> SplitFetcherManager. >>>> - This FLIP essentially embedded the element queue (a >>>> FutureCompletingBlockingQueue) instance into the SplitFetcherManager. >>>> This >>>> hides the element queue from the connector developers and simplifies the >>>> SourceReaderBase to consist of only SplitFetcherManager and >>>> RecordEmitter >>>> as major components. >>>> >>>> In short, the public interface section answers the question of "what". >>>> We >>>> should list all the user-sensible changes in the public interface >>>> section, >>>> without verbose explanation. The proposed changes section answers "how", >>>> where we can add more details to explain the changes listed in the >>>> public >>>> interface section. >>>> >>>> Thanks, >>>> >>>> Jiangjie (Becket) Qin >>>> >>>> >>>> >>>> On Wed, Dec 20, 2023 at 10:07 AM Hongshun Wang <loserwang1...@gmail.com >>>> > >>>> wrote: >>>> >>>> > Hi Becket, >>>> > >>>> > >>>> > It has been a long time since we last discussed. Are there any other >>>> > problems with this Flip from your side? I am looking forward to >>>> hearing >>>> > from you. >>>> > >>>> > >>>> > Thanks, >>>> > Hongshun Wang >>>> > >>>> >>>