Thanks Timo, That makes sense to me. And I left the comment about code generation in doc.
Looking forward to participate in it! Best, Jark On Thu, 29 Nov 2018 at 16:42, Timo Walther <twal...@apache.org> wrote: > @Kurt: Yes, I don't think that that forks of Flink will have a hard time > to keep up with the porting. That is also why I called this `long-term > goal` because I don't see big resources for the porting to happen > quicker. But at least new features, API, and runtime profit from Java to > Scala conversion. > > @Jark: I updated the document: > > 1. flink-table-common has been renamed to flink-table-spi by request. > > 2. Yes, good point. flink-sql-client can be moved there as well. > > 3. I added a paragraph to the document. Porting the code generation to > Java makes only sense if acceptable tooling for it is in place. > > > Thanks for the feedback, > > Timo > > > Am 29.11.18 um 08:28 schrieb Jark Wu: > > Hi Timo, > > > > Thanks for the great work! > > > > Moving flink-table to Java is a long-awaited things but will involve much > > effort. Agree with that we should make it as a long-term goal. > > > > I have read the google doc and +1 for the proposal. Here I have some > > questions: > > > > 1. Where should the flink-table-common module place ? Will we move the > > flink-table-common classes to the new modules? > > 2. Should flink-sql-client also as a sub-module under flink-table ? > > 3. The flink-table-planner contains code generation and will be converted > > to Java. Actually, I prefer using Scala to code generate because of the > > Multiline-String and String-Interpolation (i.e. s"hello $user") features > in > > Scala. It makes code of code-generation more readable. Do we really > > want to migrate > > code generation to Java? > > > > Best, > > Jark > > > > > > On Wed, 28 Nov 2018 at 09:14, Kurt Young <ykt...@gmail.com> wrote: > > > >> Hi Timo and Vino, > >> > >> I agree that table is very active and there is no guarantee for not > >> producing any conflicts if you decide > >> to develop based on community version. I think this part is the risk > what > >> we can imagine in the first place. But massively > >> language replacing is something you can not imagine and be ready for, > there > >> is no feature added, no refactor is done, simply changing > >> from scala to java will cause lots of conflicts. > >> > >> But I also agree that this is a "technical debt" that we should > eventually > >> pay, as you said, we can do this slowly, even one file each time, > >> let other people have more time to resolve the conflicts. > >> > >> Best, > >> Kurt > >> > >> > >> On Tue, Nov 27, 2018 at 8:37 PM Timo Walther <twal...@apache.org> > wrote: > >> > >>> Hi Kurt, > >>> > >>> I understand your concerns. However, there is no concrete roadmap for > >>> Flink 2.0 and (as Vino said) the flink-table is developed very > actively. > >>> Major refactorings happened in the past and will also happen with or > >>> without Scala migration. A good example, is the proper catalog support > >>> which will refactor big parts of the TableEnvironment class. Or the > >>> introduction of "retractions" which needed a big refactoring of the > >>> planning phase. Stability is only guaranteed for the API and the > general > >>> behavior, however, currently flink-table is not using @Public or > >>> @PublicEvolving annotations for a reason. > >>> > >>> I think the migration will still happen slowly because it needs people > >>> that allocate time for that. Therefore, even Flink forks can slowly > >>> adapt to the evolving Scala-to-Java code base. > >>> > >>> Regards, > >>> Timo > >>> > >>> > >>> Am 27.11.18 um 13:16 schrieb vino yang: > >>>> Hi Kurt, > >>>> > >>>> Currently, there is still a long time to go from flink 2.0. > Considering > >>>> that the flink-table > >>>> is one of the most active modules in the current flink project, each > >>>> version has > >>>> a number of changes and features added. I think that refactoring > faster > >>>> will reduce subsequent > >>>> complexity and workload. And this may be a gradual and long process. > We > >>>> should be able to > >>>> regard it as a "technical debt", and if it does not change it, it > >> will > >>>> also affect the decision-making of other issues. > >>>> > >>>> Thanks, vino. > >>>> > >>>> Kurt Young <ykt...@gmail.com> 于2018年11月27日周二 下午7:34写道: > >>>> > >>>>> Hi Timo, > >>>>> > >>>>> Thanks for writing up the document. I'm +1 for reorganizing the > module > >>>>> structure and make table scala free. But I have > >>>>> a little concern abount the timing. Is it more appropriate to get > this > >>> done > >>>>> when Flink decide to bump to next big version, like 2.x. > >>>>> It's true you can keep all the class's package path as it is, and > will > >>> not > >>>>> introduce API change. But if some company are developing their own > >>>>> Flink, and sync with community version by rebasing, may face a lot of > >>>>> conflicts. Although you can avoid conflicts by always moving source > >>> codes > >>>>> between packages, but I assume you still need to delete the original > >>> scala > >>>>> file and add a new java file when you want to change program > language. > >>>>> > >>>>> Best, > >>>>> Kurt > >>>>> > >>>>> > >>>>> On Tue, Nov 27, 2018 at 5:57 PM Timo Walther <twal...@apache.org> > >>> wrote: > >>>>>> Hi Hequn, > >>>>>> > >>>>>> thanks for your feedback. Yes, migrating the test cases is another > >>> issue > >>>>>> that is not represented in the document but should naturally go > along > >>>>>> with the migration. > >>>>>> > >>>>>> I agree that we should migrate the main API classes quickly within > >> this > >>>>>> 1.8 release after the module split has been performed. Help here is > >>>>>> highly appreciated! > >>>>>> > >>>>>> I forgot that Java supports static methods in interfaces now, but > >>>>>> actually I don't like the design of calling > >>> `TableEnvironment.get(env)`. > >>>>>> Because people often use `TableEnvironment tEnd = > >>>>>> TableEnvironment.get(env)` and then wonder why there is no > >>>>>> `toAppendStream` or `toDataSet` because they are using the base > >> class. > >>>>>> However, things like that can be discussed in the corresponding > issue > >>>>>> when it comes to implementation. > >>>>>> > >>>>>> @Vino: I think your work fits nicely to these efforts. > >>>>>> > >>>>>> @everyone: I will wait for more feedback until end of this week. > >> Then I > >>>>>> will convert the design document into a FLIP and open subtasks in > >> Jira, > >>>>>> if there are no objections? > >>>>>> > >>>>>> Regards, > >>>>>> Timo > >>>>>> > >>>>>> Am 24.11.18 um 13:45 schrieb vino yang: > >>>>>>> Hi hequn, > >>>>>>> > >>>>>>> I am very glad to hear that you are interested in this work. > >>>>>>> As we all know, this process involves a lot. > >>>>>>> Currently, the migration work has begun. I started with the > >>>>>>> Kafka connector's dependency on flink-table and moved the > >>>>>>> related dependencies to flink-table-common. > >>>>>>> This work is tracked by FLINK-9461. [1] > >>>>>>> I don't know if it will conflict with what you expect to do, but > >> from > >>>>> the > >>>>>>> impact I have observed, > >>>>>>> it will involve many classes that are currently in flink-table. > >>>>>>> > >>>>>>> *Just a statement to prevent unnecessary conflicts.* > >>>>>>> > >>>>>>> Thanks, vino. > >>>>>>> > >>>>>>> [1]: https://issues.apache.org/jira/browse/FLINK-9461 > >>>>>>> > >>>>>>> Hequn Cheng <chenghe...@gmail.com> 于2018年11月24日周六 下午7:20写道: > >>>>>>> > >>>>>>>> Hi Timo, > >>>>>>>> > >>>>>>>> Thanks for the effort and writing up this document. I like the > idea > >>> to > >>>>>> make > >>>>>>>> flink-table scala free, so +1 for the proposal! > >>>>>>>> > >>>>>>>> It's good to make Java the first-class citizen. For a long time, > we > >>>>> have > >>>>>>>> neglected java so that many features in Table are missed in Java > >> Test > >>>>>>>> cases, such as this one[1] I found recently. And I think we may > >> also > >>>>>> need > >>>>>>>> to migrate our test cases, i.e, add java tests. > >>>>>>>> > >>>>>>>> This definitely is a big change and will break API compatible. In > >>>>> order > >>>>>> to > >>>>>>>> bring a smaller impact on users, I think we should go fast when we > >>>>>> migrate > >>>>>>>> APIs targeted to users. It's better to introduce the user > sensitive > >>>>>> changes > >>>>>>>> within a release. However, it may be not that easy. I can help to > >>>>>>>> contribute. > >>>>>>>> > >>>>>>>> Separation of interface and implementation is a good idea. This > may > >>>>>>>> introduce a minimum of dependencies or even no dependencies. I saw > >>>>> your > >>>>>>>> reply in the google doc. Java8 has already supported static method > >>> for > >>>>>>>> interfaces, I think we can make use of it? > >>>>>>>> > >>>>>>>> Best, > >>>>>>>> Hequn > >>>>>>>> > >>>>>>>> [1] https://issues.apache.org/jira/browse/FLINK-11001 > >>>>>>>> > >>>>>>>> > >>>>>>>> On Fri, Nov 23, 2018 at 5:36 PM Timo Walther <twal...@apache.org> > >>>>>> wrote: > >>>>>>>>> Hi everyone, > >>>>>>>>> > >>>>>>>>> thanks for the great feedback so far. I updated the document with > >>> the > >>>>>>>>> input I got so far > >>>>>>>>> > >>>>>>>>> @Fabian: I moved the porting of flink-table-runtime classes up in > >>> the > >>>>>>>> list. > >>>>>>>>> @Xiaowei: Could you elaborate what "interface only" means to you? > >> Do > >>>>>> you > >>>>>>>>> mean a module containing pure Java `interface`s? Or is the > >>> validation > >>>>>>>>> logic also part of the API module? Are 50+ expression classes > part > >>> of > >>>>>>>>> the API interface or already too implementation-specific? > >>>>>>>>> > >>>>>>>>> @Xuefu: I extended the document by almost a page to clarify when > >> we > >>>>>>>>> should develop in Scala and when in Java. As Piotr said, every > new > >>>>>> Scala > >>>>>>>>> line is instant technical debt. > >>>>>>>>> > >>>>>>>>> Thanks, > >>>>>>>>> Timo > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> Am 23.11.18 um 10:29 schrieb Piotr Nowojski: > >>>>>>>>>> Hi Timo, > >>>>>>>>>> > >>>>>>>>>> Thanks for writing this down +1 from my side :) > >>>>>>>>>> > >>>>>>>>>>> I'm wondering that whether we can have rule in the interim when > >>>>> Java > >>>>>>>>> and Scala coexist that dependency can only be one-way. I found > >> that > >>>>> in > >>>>>>>> the > >>>>>>>>> current code base there are cases where a Scala class extends > Java > >>>>> and > >>>>>>>> vise > >>>>>>>>> versa. This is quite painful. I'm thinking if we could say that > >>>>>> extension > >>>>>>>>> can only be from Java to Scala, which will help the situation. > >>>>> However, > >>>>>>>> I'm > >>>>>>>>> not sure if this is practical. > >>>>>>>>>> Xuefu: I’m also not sure what’s the best approach here, probably > >> we > >>>>>>>> will > >>>>>>>>> have to work it out as we go. One thing to consider is that from > >> now > >>>>>> on, > >>>>>>>>> every single new code line written in Scala anywhere in > >> Flink-table > >>>>>>>> (except > >>>>>>>>> of Flink-table-api-scala) is an instant technological debt. From > >>> this > >>>>>>>>> perspective I would be in favour of tolerating quite big > >>>>> inchonvieneces > >>>>>>>>> just to avoid any new Scala code. > >>>>>>>>>> Piotrek > >>>>>>>>>> > >>>>>>>>>>> On 23 Nov 2018, at 03:25, Zhang, Xuefu < > xuef...@alibaba-inc.com > >>>>>>>> wrote: > >>>>>>>>>>> Hi Timo, > >>>>>>>>>>> > >>>>>>>>>>> Thanks for the effort and the Google writeup. During our > >> external > >>>>>>>>> catalog rework, we found much confusion between Java and Scala, > >> and > >>>>>> this > >>>>>>>>> Scala-free roadmap should greatly mitigate that. > >>>>>>>>>>> I'm wondering that whether we can have rule in the interim when > >>>>> Java > >>>>>>>>> and Scala coexist that dependency can only be one-way. I found > >> that > >>>>> in > >>>>>>>> the > >>>>>>>>> current code base there are cases where a Scala class extends > Java > >>>>> and > >>>>>>>> vise > >>>>>>>>> versa. This is quite painful. I'm thinking if we could say that > >>>>>> extension > >>>>>>>>> can only be from Java to Scala, which will help the situation. > >>>>> However, > >>>>>>>> I'm > >>>>>>>>> not sure if this is practical. > >>>>>>>>>>> Thanks, > >>>>>>>>>>> Xuefu > >>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>> > >> ------------------------------------------------------------------ > >>>>>>>>>>> Sender:jincheng sun <sunjincheng...@gmail.com> > >>>>>>>>>>> Sent at:2018 Nov 23 (Fri) 09:49 > >>>>>>>>>>> Recipient:dev <dev@flink.apache.org> > >>>>>>>>>>> Subject:Re: [DISCUSS] Long-term goal of making flink-table > >>>>> Scala-free > >>>>>>>>>>> Hi Timo, > >>>>>>>>>>> Thanks for initiating this great discussion. > >>>>>>>>>>> > >>>>>>>>>>> Currently when using SQL/TableAPI should include many > >> dependence. > >>>>> In > >>>>>>>>>>> particular, it is not necessary to introduce the specific > >>>>>>>> implementation > >>>>>>>>>>> dependencies which users do not care about. So I am glad to see > >>>>> your > >>>>>>>>>>> proposal, and hope when we consider splitting the API interface > >>>>> into > >>>>>> a > >>>>>>>>>>> separate module, so that the user can introduce minimum of > >>>>>>>> dependencies. > >>>>>>>>>>> So, +1 to [separation of interface and implementation; e.g. > >>>>> `Table` & > >>>>>>>>>>> `TableImpl`] which you mentioned in the google doc. > >>>>>>>>>>> Best, > >>>>>>>>>>> Jincheng > >>>>>>>>>>> > >>>>>>>>>>> Xiaowei Jiang <xiaow...@gmail.com> 于2018年11月22日周四 下午10:50写道: > >>>>>>>>>>> > >>>>>>>>>>>> Hi Timo, thanks for driving this! I think that this is a nice > >>>>> thing > >>>>>>>> to > >>>>>>>>> do. > >>>>>>>>>>>> While we are doing this, can we also keep in mind that we want > >> to > >>>>>>>>>>>> eventually have a TableAPI interface only module which users > >> can > >>>>>> take > >>>>>>>>>>>> dependency on, but without including any implementation > >> details? > >>>>>>>>>>>> Xiaowei > >>>>>>>>>>>> > >>>>>>>>>>>> On Thu, Nov 22, 2018 at 6:37 PM Fabian Hueske < > >> fhue...@gmail.com > >>>>>>>>> wrote: > >>>>>>>>>>>>> Hi Timo, > >>>>>>>>>>>>> > >>>>>>>>>>>>> Thanks for writing up this document. > >>>>>>>>>>>>> I like the new structure and agree to prioritize the porting > >> of > >>>>> the > >>>>>>>>>>>>> flink-table-common classes. > >>>>>>>>>>>>> Since flink-table-runtime is (or should be) independent of > the > >>>>> API > >>>>>>>> and > >>>>>>>>>>>>> planner modules, we could start porting these classes once > the > >>>>> code > >>>>>>>> is > >>>>>>>>>>>>> split into the new module structure. > >>>>>>>>>>>>> The benefits of a Scala-free flink-table-runtime would be a > >>>>>>>> Scala-free > >>>>>>>>>>>>> execution Jar. > >>>>>>>>>>>>> > >>>>>>>>>>>>> Best, Fabian > >>>>>>>>>>>>> > >>>>>>>>>>>>> > >>>>>>>>>>>>> Am Do., 22. Nov. 2018 um 10:54 Uhr schrieb Timo Walther < > >>>>>>>>>>>>> twal...@apache.org > >>>>>>>>>>>>>> : > >>>>>>>>>>>>>> Hi everyone, > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> I would like to continue this discussion thread and convert > >> the > >>>>>>>>> outcome > >>>>>>>>>>>>>> into a FLIP such that users and contributors know what to > >>> expect > >>>>>> in > >>>>>>>>> the > >>>>>>>>>>>>>> upcoming releases. > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> I created a design document [1] that clarifies our > motivation > >>>>> why > >>>>>>>> we > >>>>>>>>>>>>>> want to do this, how a Maven module structure could look > >> like, > >>>>> and > >>>>>>>> a > >>>>>>>>>>>>>> suggestion for a migration plan. > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> It would be great to start with the efforts for the 1.8 > >> release > >>>>>>>> such > >>>>>>>>>>>>>> that new features can be developed in Java and major > >>>>> refactorings > >>>>>>>>> such > >>>>>>>>>>>>>> as improvements to the connectors and external catalog > >> support > >>>>> are > >>>>>>>>> not > >>>>>>>>>>>>>> blocked. > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> Please let me know what you think. > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> Regards, > >>>>>>>>>>>>>> Timo > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> [1] > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >> > https://docs.google.com/document/d/1PPo6goW7tOwxmpFuvLSjFnx7BF8IVz0w3dcmPPyqvoY/edit?usp=sharing > >>>>>>>>>>>>>> Am 02.07.18 um 17:08 schrieb Fabian Hueske: > >>>>>>>>>>>>>>> Hi Piotr, > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> thanks for bumping this thread and thanks for Xingcan for > >> the > >>>>>>>>>>>> comments. > >>>>>>>>>>>>>>> I think the first step would be to separate the flink-table > >>>>>> module > >>>>>>>>>>>> into > >>>>>>>>>>>>>>> multiple sub modules. These could be: > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> - flink-table-api: All API facing classes. Can be later > >>> divided > >>>>>>>>>>>> further > >>>>>>>>>>>>>>> into Java/Scala Table API/SQL > >>>>>>>>>>>>>>> - flink-table-planning: involves all planning (basically > >>>>>>>> everything > >>>>>>>>>>>> we > >>>>>>>>>>>>> do > >>>>>>>>>>>>>>> with Calcite) > >>>>>>>>>>>>>>> - flink-table-runtime: the runtime code > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> IMO, a realistic mid-term goal is to have the runtime > module > >>>>> and > >>>>>>>>>>>>> certain > >>>>>>>>>>>>>>> parts of the planning module ported to Java. > >>>>>>>>>>>>>>> The api module will be much harder to port because of > >> several > >>>>>>>>>>>>>> dependencies > >>>>>>>>>>>>>>> to Scala core classes (the parser framework, tree > >> iterations, > >>>>>>>> etc.). > >>>>>>>>>>>>> I'm > >>>>>>>>>>>>>>> not saying we should not port this to Java, but it is not > >>> clear > >>>>>> to > >>>>>>>>> me > >>>>>>>>>>>>>> (yet) > >>>>>>>>>>>>>>> how to do it. > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> I think flink-table-runtime should not be too hard to port. > >>> The > >>>>>>>> code > >>>>>>>>>>>>> does > >>>>>>>>>>>>>>> not make use of many Scala features, i.e., it's writing > very > >>>>>>>>>>>> Java-like. > >>>>>>>>>>>>>>> Also, there are not many dependencies and operators can be > >>>>>>>>>>>> individually > >>>>>>>>>>>>>>> ported step-by-step. > >>>>>>>>>>>>>>> For flink-table-planning, we can have certain packages that > >> we > >>>>>>>> port > >>>>>>>>>>>> to > >>>>>>>>>>>>>> Java > >>>>>>>>>>>>>>> like planning rules or plan nodes. The related classes > >> mostly > >>>>>>>> extend > >>>>>>>>>>>>>>> Calcite's Java interfaces/classes and would be natural > >> choices > >>>>>> for > >>>>>>>>>>>>> being > >>>>>>>>>>>>>>> ported. The code generation classes will require more > effort > >>> to > >>>>>>>>> port. > >>>>>>>>>>>>>> There > >>>>>>>>>>>>>>> are also some dependencies in planning on the api module > >> that > >>>>> we > >>>>>>>>>>>> would > >>>>>>>>>>>>>> need > >>>>>>>>>>>>>>> to resolve somehow. > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> For SQL most work when adding new features is done in the > >>>>>> planning > >>>>>>>>>>>> and > >>>>>>>>>>>>>>> runtime modules. So, this separation should already reduce > >>>>>>>>>>>>> "technological > >>>>>>>>>>>>>>> dept" quite a lot. > >>>>>>>>>>>>>>> The Table API depends much more on Scala than SQL. > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Cheers, Fabian > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> 2018-07-02 16:26 GMT+02:00 Xingcan Cui <xingc...@gmail.com > >>> : > >>>>>>>>>>>>>>>> Hi all, > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> I also think about this problem these days and here are my > >>>>>>>>> thoughts. > >>>>>>>>>>>>>>>> 1) We must admit that it’s really a tough task to > >>> interoperate > >>>>>>>> with > >>>>>>>>>>>>> Java > >>>>>>>>>>>>>>>> and Scala. E.g., they have different collection types > >> (Scala > >>>>>>>>>>>>> collections > >>>>>>>>>>>>>>>> v.s. java.util.*) and in Java, it's hard to implement a > >>> method > >>>>>>>>> which > >>>>>>>>>>>>>> takes > >>>>>>>>>>>>>>>> Scala functions as parameters. Considering the major part > >> of > >>>>> the > >>>>>>>>>>>> code > >>>>>>>>>>>>>> base > >>>>>>>>>>>>>>>> is implemented in Java, +1 for this goal from a long-term > >>>>> view. > >>>>>>>>>>>>>>>> 2) The ideal solution would be to just expose a Scala API > >> and > >>>>>>>> make > >>>>>>>>>>>> all > >>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>> other parts Scala-free. But I am not sure if it could be > >>>>>> achieved > >>>>>>>>>>>> even > >>>>>>>>>>>>>> in a > >>>>>>>>>>>>>>>> long-term. Thus as Timo suggested, keep the Scala codes in > >>>>>>>>>>>>>>>> "flink-table-core" would be a compromise solution. > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> 3) If the community makes the final decision, maybe any > new > >>>>>>>>> features > >>>>>>>>>>>>>>>> should be added in Java (regardless of the modules), in > >> order > >>>>> to > >>>>>>>>>>>>> prevent > >>>>>>>>>>>>>>>> the Scala codes from growing. > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> Best, > >>>>>>>>>>>>>>>> Xingcan > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> On Jul 2, 2018, at 9:30 PM, Piotr Nowojski < > >>>>>>>>>>>> pi...@data-artisans.com> > >>>>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>> Bumping the topic. > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> If we want to do this, the sooner we decide, the less > code > >>> we > >>>>>>>> will > >>>>>>>>>>>>> have > >>>>>>>>>>>>>>>> to rewrite. I have some objections/counter proposals to > >>>>> Fabian's > >>>>>>>>>>>>>> proposal > >>>>>>>>>>>>>>>> of doing it module wise and one module at a time. > >>>>>>>>>>>>>>>>> First, I do not see a problem of having java/scala code > >> even > >>>>>>>>> within > >>>>>>>>>>>>> one > >>>>>>>>>>>>>>>> module, especially not if there are clean boundaries. Like > >> we > >>>>>>>> could > >>>>>>>>>>>>> have > >>>>>>>>>>>>>>>> API in Scala and optimizer rules/logical nodes written in > >>> Java > >>>>>> in > >>>>>>>>>>>> the > >>>>>>>>>>>>>> same > >>>>>>>>>>>>>>>> module. However I haven’t previously maintained mixed > >>>>> scala/java > >>>>>>>>>>>> code > >>>>>>>>>>>>>> bases > >>>>>>>>>>>>>>>> before, so I might be missing something here. > >>>>>>>>>>>>>>>>> Secondly this whole migration might and most like will > >> take > >>>>>>>> longer > >>>>>>>>>>>>> then > >>>>>>>>>>>>>>>> expected, so that creates a problem for a new code that we > >>>>> will > >>>>>>>> be > >>>>>>>>>>>>>>>> creating. After making a decision to migrate to Java, > >> almost > >>>>> any > >>>>>>>>> new > >>>>>>>>>>>>>> Scala > >>>>>>>>>>>>>>>> line of code will be immediately a technological debt and > >> we > >>>>>> will > >>>>>>>>>>>> have > >>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>> rewrite it to Java later. > >>>>>>>>>>>>>>>>> Thus I would propose first to state our end goal - > modules > >>>>>>>>>>>> structure > >>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>> which parts of modules we want to have eventually > >> Scala-free. > >>>>>>>>>>>> Secondly > >>>>>>>>>>>>>>>> taking all steps necessary that will allow us to write new > >>>>> code > >>>>>>>>>>>>>> complaint > >>>>>>>>>>>>>>>> with our end goal. Only after that we should/could focus > on > >>>>>>>>>>>>>> incrementally > >>>>>>>>>>>>>>>> rewriting the old code. Otherwise we could be > stuck/blocked > >>>>> for > >>>>>>>>>>>> years > >>>>>>>>>>>>>>>> writing new code in Scala (and increasing technological > >>> debt), > >>>>>>>>>>>> because > >>>>>>>>>>>>>>>> nobody have found a time to rewrite some non important and > >>> not > >>>>>>>>>>>>> actively > >>>>>>>>>>>>>>>> developed part of some module. > >>>>>>>>>>>>>>>>> Piotrek > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> On 14 Jun 2018, at 15:34, Fabian Hueske < > >> fhue...@gmail.com > >>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>>> Hi, > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> In general, I think this is a good effort. However, it > >>> won't > >>>>>> be > >>>>>>>>>>>> easy > >>>>>>>>>>>>>>>> and I > >>>>>>>>>>>>>>>>>> think we have to plan this well. > >>>>>>>>>>>>>>>>>> I don't like the idea of having the whole code base > >>>>> fragmented > >>>>>>>>>>>> into > >>>>>>>>>>>>>> Java > >>>>>>>>>>>>>>>>>> and Scala code for too long. > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> I think we should do this one step at a time and focus > on > >>>>>>>>>>>> migrating > >>>>>>>>>>>>>> one > >>>>>>>>>>>>>>>>>> module at a time. > >>>>>>>>>>>>>>>>>> IMO, the easiest start would be to port the runtime to > >>> Java. > >>>>>>>>>>>>>>>>>> Extracting the API classes into an own module, porting > >> them > >>>>> to > >>>>>>>>>>>> Java, > >>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>> removing the Scala dependency won't be possible without > >>>>>>>> breaking > >>>>>>>>>>>> the > >>>>>>>>>>>>>> API > >>>>>>>>>>>>>>>>>> since a few classes depend on the Scala Table API. > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> Best, Fabian > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> 2018-06-14 10:33 GMT+02:00 Till Rohrmann < > >>>>>> trohrm...@apache.org > >>>>>>>>> : > >>>>>>>>>>>>>>>>>>> I think that is a noble and honorable goal and we > should > >>>>>>>> strive > >>>>>>>>>>>> for > >>>>>>>>>>>>>> it. > >>>>>>>>>>>>>>>>>>> This, however, must be an iterative process given the > >>> sheer > >>>>>>>> size > >>>>>>>>>>>> of > >>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>> code base. I like the approach to define common Java > >>>>> modules > >>>>>>>>>>>> which > >>>>>>>>>>>>>> are > >>>>>>>>>>>>>>>> used > >>>>>>>>>>>>>>>>>>> by more specific Scala modules and slowly moving > classes > >>>>> from > >>>>>>>>>>>> Scala > >>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>> Java. Thus +1 for the proposal. > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> Cheers, > >>>>>>>>>>>>>>>>>>> Till > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> On Wed, Jun 13, 2018 at 12:01 PM Piotr Nowojski < > >>>>>>>>>>>>>>>> pi...@data-artisans.com> > >>>>>>>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> Hi, > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> I do not have an experience with how scala and java > >>>>>> interacts > >>>>>>>>>>>> with > >>>>>>>>>>>>>>>> each > >>>>>>>>>>>>>>>>>>>> other, so I can not fully validate your proposal, but > >>>>>>>> generally > >>>>>>>>>>>>>>>> speaking > >>>>>>>>>>>>>>>>>>> +1 > >>>>>>>>>>>>>>>>>>>> from me. > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> Does it also mean, that we should slowly migrate > >>>>>>>>>>>>> `flink-table-core` > >>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>> Java? How would you envision it? It would be nice to > be > >>>>> able > >>>>>>>> to > >>>>>>>>>>>>> add > >>>>>>>>>>>>>>>> new > >>>>>>>>>>>>>>>>>>>> classes/features written in Java and so that they can > >>>>>> coexist > >>>>>>>>>>>> with > >>>>>>>>>>>>>> old > >>>>>>>>>>>>>>>>>>>> Scala code until we gradually switch from Scala to > >> Java. > >>>>>>>>>>>>>>>>>>>> Piotrek > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> On 13 Jun 2018, at 11:32, Timo Walther < > >>>>> twal...@apache.org > >>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>>>>>> Hi everyone, > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> as you all know, currently the Table & SQL API is > >>>>>>>> implemented > >>>>>>>>>>>> in > >>>>>>>>>>>>>>>> Scala. > >>>>>>>>>>>>>>>>>>>> This decision was made a long-time ago when the > >> initital > >>>>>> code > >>>>>>>>>>>> base > >>>>>>>>>>>>>> was > >>>>>>>>>>>>>>>>>>>> created as part of a master's thesis. The community > >> kept > >>>>>>>> Scala > >>>>>>>>>>>>>>>> because of > >>>>>>>>>>>>>>>>>>>> the nice language features that enable a fluent Table > >> API > >>>>>>>> like > >>>>>>>>>>>>>>>>>>>> table.select('field.trim()) and because Scala allows > >> for > >>>>>>>> quick > >>>>>>>>>>>>>>>>>>> prototyping > >>>>>>>>>>>>>>>>>>>> (e.g. multi-line comments for code generation). The > >>>>>>>> committers > >>>>>>>>>>>>>>>> enforced > >>>>>>>>>>>>>>>>>>> not > >>>>>>>>>>>>>>>>>>>> splitting the code-base into two programming > languages. > >>>>>>>>>>>>>>>>>>>>> However, nowadays the flink-table module more and > more > >>>>>>>> becomes > >>>>>>>>>>>> an > >>>>>>>>>>>>>>>>>>>> important part in the Flink ecosystem. Connectors, > >>>>> formats, > >>>>>>>> and > >>>>>>>>>>>>> SQL > >>>>>>>>>>>>>>>>>>> client > >>>>>>>>>>>>>>>>>>>> are actually implemented in Java but need to > >> interoperate > >>>>>>>> with > >>>>>>>>>>>>>>>>>>> flink-table > >>>>>>>>>>>>>>>>>>>> which makes these modules dependent on Scala. As > >>> mentioned > >>>>>> in > >>>>>>>>> an > >>>>>>>>>>>>>>>> earlier > >>>>>>>>>>>>>>>>>>>> mail thread, using Scala for API classes also exposes > >>>>> member > >>>>>>>>>>>>>> variables > >>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>> methods in Java that should not be exposed to users > >> [1]. > >>>>>> Java > >>>>>>>>> is > >>>>>>>>>>>>>> still > >>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>> most important API language and right now we treat it > >> as > >>> a > >>>>>>>>>>>>>>>> second-class > >>>>>>>>>>>>>>>>>>>> citizen. I just noticed that you even need to add > Scala > >>> if > >>>>>>>> you > >>>>>>>>>>>>> just > >>>>>>>>>>>>>>>> want > >>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>> implement a ScalarFunction because of method clashes > >>>>> between > >>>>>>>>>>>>> `public > >>>>>>>>>>>>>>>>>>> String > >>>>>>>>>>>>>>>>>>>> toString()` and `public scala.Predef.String > >> toString()`. > >>>>>>>>>>>>>>>>>>>>> Given the size of the current code base, > >> reimplementing > >>>>> the > >>>>>>>>>>>>> entire > >>>>>>>>>>>>>>>>>>>> flink-table code in Java is a goal that we might never > >>>>>> reach. > >>>>>>>>>>>>>>>> However, we > >>>>>>>>>>>>>>>>>>>> should at least treat the symptoms and have this as a > >>>>>>>> long-term > >>>>>>>>>>>>> goal > >>>>>>>>>>>>>>>> in > >>>>>>>>>>>>>>>>>>>> mind. My suggestion would be to convert user-facing > and > >>>>>>>> runtime > >>>>>>>>>>>>>>>> classes > >>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>> split the code base into multiple modules: > >>>>>>>>>>>>>>>>>>>>>> flink-table-java {depends on flink-table-core} > >>>>>>>>>>>>>>>>>>>>> Implemented in Java. Java users can use this. This > >> would > >>>>>>>>>>>> require > >>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>> convert classes like TableEnvironment, Table. > >>>>>>>>>>>>>>>>>>>>>> flink-table-scala {depends on flink-table-core} > >>>>>>>>>>>>>>>>>>>>> Implemented in Scala. Scala users can use this. > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> flink-table-common > >>>>>>>>>>>>>>>>>>>>> Implemented in Java. Connectors, formats, and UDFs > can > >>>>> use > >>>>>>>>>>>> this. > >>>>>>>>>>>>> It > >>>>>>>>>>>>>>>>>>>> contains interface classes such as descriptors, table > >>>>> sink, > >>>>>>>>>>>> table > >>>>>>>>>>>>>>>> source. > >>>>>>>>>>>>>>>>>>>>>> flink-table-core {depends on flink-table-common and > >>>>>>>>>>>>>>>>>>>> flink-table-runtime} > >>>>>>>>>>>>>>>>>>>>> Implemented in Scala. Contains the current main code > >>>>> base. > >>>>>>>>>>>>>>>>>>>>>> flink-table-runtime > >>>>>>>>>>>>>>>>>>>>> Implemented in Java. This would require to convert > >>>>> classes > >>>>>>>> in > >>>>>>>>>>>>>>>>>>>> o.a.f.table.runtime but would improve the runtime > >>>>>>>> potentially. > >>>>>>>>>>>>>>>>>>>>> What do you think? > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> Regards, > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> Timo > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> [1] > >>>>>>>>>>>>>>>>>>>> http://apache-flink-mailing-list-archive.1008284.n3. > >>>>>>>>>>>>>>>>>>> > nabble.com/DISCUSS-Convert-main-Table-API-classes-into- > >>>>>>>>>>>>>>>> traits-tp21335.html > >>> > >