Alex, what about : «compatibility when the transitive Guava dependency will be updated to a new version.» ? I don`t know is it an issue for us, but we need to answer it before move forward.
>Andrey, >I think that the benefits of using Guava methods instead of copy-pasting >them are quite obvious: you don't have to copy-paste code and support it. I >also find this situation quite strange: we have a dependency and copy-paste >code from it instead of using it directly. > > >On Thu, Sep 2, 2021 at 1:58 PM Andrey Mashenkov < andrey.mashen...@gmail.com > >wrote: > >> Alex, >> >> As I understand we agree to shade Guava transitive dependency and >> you said a 'maven-shade-plugin' can drop unused Guava methods to reduce the >> footprint of Ignite jar. >> >> At this point, there is no difference between copy-pasting Guava method to >> Ignite and use Guava one. >> The resulted jar will have one copy of such method, but in the second case, >> we have to care about compatibility when the transitive Guava dependency >> will be updated to a new version. >> >> So, I see no benefits from using Guava directly. >> >> >> On Thu, Sep 2, 2021 at 11:56 AM Alexander Polovtcev < >> alexpolovt...@gmail.com > >> wrote: >> >> > Hi, Andrey! >> > I mostly agree with your proposal, but, since we already have some >> > copy-paste in our code, can we at least use Guava to remove it? So I >> would >> > propose to allow at least *some* methods that we consider useful, while >> > disallowing everything else. I understand that it may be difficult to >> > formalize, so maybe we can create some kind of a whitelist of Guava >> > methods? What do you think? >> > >> > On Mon, Aug 30, 2021 at 2:54 PM Andrey Gura < ag...@apache.org > wrote: >> > >> > > Follow up >> > > >> > > On Mon, Aug 23, 2021 at 1:22 PM Andrey Gura < ag...@apache.org > wrote: >> > > > >> > > > Igniters, >> > > > >> > > > What I actually didn't understand from this thread: Is Guava allowed >> > > > in production code of Ignite 3 modules (not dependencies like >> > > > Calcite)? >> > > > >> > > > While we agree with using shading I don't see any arguments about >> > > > using Guava library in our code base except for the fact that we have >> > > > some copy-paste of Guava code in the project. >> > > > >> > > > Guava is rich enough library and it has both advantages and >> > > > disadvantages. Ignite code base always strived to be not overloaded >> > > > and minimalistic. For example we usually use immutability very rare, >> > > > we try to avoid complex and overloaded APIs on hot path, we try >> reduce >> > > > GC pressure, etc. In turn, Guava is some sense forces using of >> > > > immutable collections, has a lot of utility methods which produces >> > > > temp object (yes, I don't trust to escap analysys), etc. Rich set of >> > > > collections and utility functions will also lead to different >> > > > programming styles during Ignite development. I can't predict it, but >> > > > it is usual enough when some developers force immutablity while >> others >> > > > remove static type declaration and replace it by var :) >> > > > >> > > > This is a common pratice to reduce language possibilies subset and >> > > > limiting using of some libraries in order to provide more or less >> > > > unified approach to coding. So I propose to disallow using Guava in >> > > > our code base. >> > > > >> > > > WDYT? >> > > > >> > > > >> > > > On Fri, Aug 20, 2021 at 7:37 PM Alexander Polovtcev >> > > > < alexpolovt...@gmail.com > wrote: >> > > > > >> > > > > Guys, >> > > > > >> > > > > Thanks again for your responses. I've created a ticket about using >> > the >> > > > > Shade plugin in order to understand if it is possible to shade and >> > > minimize >> > > > > Guava, I will start working on it shortly: >> > > > > https://issues.apache.org/jira/browse/IGNITE-15354 >> > > > > >> > > > > On Tue, Aug 10, 2021 at 1:51 PM Courtney Robinson < >> > > courtney.robin...@hypi.io > >> > > > > wrote: >> > > > > >> > > > > > I think since Calcite brings it in already then your arguments >> make >> > > sense. >> > > > > > Would it be pinned to the same version as Calcite? Risk >> > > NoSuchMethodError >> > > > > > at runtime if not. >> > > > > > +1 >> > > > > > >> > > > > > On Mon, Aug 9, 2021 at 9:56 AM Alexander Polovtcev < >> > > > > > alexpolovt...@gmail.com > >> > > > > > wrote: >> > > > > > >> > > > > > > Zhenya, Courtney, Andrey, >> > > > > > > >> > > > > > > What do you think about my arguments, was I able to convince >> you? >> > > I would >> > > > > > > like to reach some consensus here. At the moment, my original >> > > points >> > > > > > still >> > > > > > > stand, I'm also ok with shading Guava if needed, though I think >> > it >> > > is not >> > > > > > > necessary at this point. >> > > > > > > >> > > > > > > On Fri, Aug 6, 2021 at 12:45 PM Alexander Polovtcev < >> > > > > > > alexpolovt...@gmail.com > >> > > > > > > wrote: >> > > > > > > >> > > > > > > > Zhenya, >> > > > > > > > >> > > > > > > > > But there is no restrictions from running ignite server >> nodes >> > > from >> > > > > > some >> > > > > > > > other code with it`s own guava version seems we obtain fast >> > path >> > > to jar >> > > > > > > > hell here? >> > > > > > > > >> > > > > > > > I'm not sure if I fully understand your question, but it >> looks >> > > like we >> > > > > > > are >> > > > > > > > in this situation already, because we have some dependencies >> > > that use >> > > > > > > > Guava. That's why I propose to add Guava explicitly to at >> least >> > > have a >> > > > > > > > deterministic runtime configuration (see this link >> > > > > > > > < >> > > > > > > >> > > > > > >> > > >> > >> >> https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Management >> > > > > > > > >> > > > > > > > for an explanation). >> > > > > > > > >> > > > > > > > On Fri, Aug 6, 2021 at 12:25 PM Zhenya Stanilovsky >> > > > > > > > < arzamas...@mail.ru.invalid > wrote: >> > > > > > > > >> > > > > > > >> >> > > > > > > >> Alexander, first of all looks like Ivan Daschinsky approach >> > > about thin >> > > > > > > >> client use only and shadow plugin are cover all Andrey >> > Mashenkov >> > > > > > listing >> > > > > > > >> problems. >> > > > > > > >> But there is no restrictions from running ignite server >> nodes >> > > from >> > > > > > some >> > > > > > > >> other code with it`s own guava version seems we obtain fast >> > > path to >> > > > > > jar >> > > > > > > >> hell here? >> > > > > > > >> >> > > > > > > >> >> > > > > > > >> >Zhenya, >> > > > > > > >> > >> > > > > > > >> >My intentions are the following: >> > > > > > > >> > >> > > > > > > >> >1. Remove some copy-pasted code (like the "bytecode" module >> > or >> > > some >> > > > > > > >> utility >> > > > > > > >> >methods). Please see my original message for the links to >> the >> > > code. >> > > > > > > >> >2. Explicitly pin the Guava version to avoid conflicts in >> the >> > > > > > runtime. >> > > > > > > >> > >> > > > > > > >> >About allowing to use Guava in the codebase, my thoughts >> are >> > > the >> > > > > > > >> following: >> > > > > > > >> > >> > > > > > > >> >1. We *already* use some code from Guava either directly >> > (like >> > > in the >> > > > > > > >> >"calcite" module) or by copy-pasting it into a utility >> class. >> > > > > > > >> >2. I understand that some Guava methods are obsolete as of >> > > Java 11, >> > > > > > but >> > > > > > > >> >some of them still don't have any standard library >> > > counterparts, in >> > > > > > > which >> > > > > > > >> >case I think using Guava is justified (which is supported >> by >> > > point >> > > > > > 1). >> > > > > > > >> > >> > > > > > > >> >Can you please explain why you would disapprove of my >> > proposal? >> > > > > > > >> > >> > > > > > > >> >On Thu, Aug 5, 2021 at 7:56 PM Zhenya Stanilovsky >> > > > > > > >> >< arzamas...@mail.ru.invalid > wrote: >> > > > > > > >> > >> > > > > > > >> >> >> > > > > > > >> >> alexpolovtcev please clarify what do you mean under : >> > > «possibility >> > > > > > of >> > > > > > > >> >> using Guava in Ignite 3», using how necessary dependency >> of >> > > calcite >> > > > > > > or >> > > > > > > >> >> using like «using in our code» ? If using in code, i -1 >> > here. >> > > > > > > >> >> thanks. >> > > > > > > >> >> >> > > > > > > >> >> >> > > > > > > >> >> >Hello, dear Igniters! >> > > > > > > >> >> > >> > > > > > > >> >> >I would like to discuss the possibility of using Guava >> > > > > > > >> >> >< https://github.com/google/guava > in Ignite 3. I >> know >> > > about >> > > > > > the >> > > > > > > >> >> restrictive >> > > > > > > >> >> >policy of using it in Ignite 2, but I have the following >> > > reasons: >> > > > > > > >> >> > >> > > > > > > >> >> >1. We are de-facto using it already as an implicit >> > > dependency, >> > > > > > since >> > > > > > > >> the >> > > > > > > >> >> >Calcite module depends on it, and Calcite is going to >> stay >> > > for a >> > > > > > > >> while =) >> > > > > > > >> >> >2. AFAIK, the "bytecode" module is copied into the >> > codebase >> > > only >> > > > > > to >> > > > > > > >> strip >> > > > > > > >> >> >Guava away from it. We can remove this module, which >> will >> > > improve >> > > > > > > the >> > > > > > > >> >> >maintainability of the project. >> > > > > > > >> >> >3. We have some copy-paste of Guava code in the project. >> > For >> > > > > > > example, >> > > > > > > >> see >> > > > > > > >> >> >this >> > > > > > > >> >> >< >> > > > > > > >> >> >> > > > > > > >> >> > > > > > > >> > > > > > >> > > >> > >> >> https://github.com/apache/ignite-3/blob/main/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java#L136 >> > > > > > > >> >> > >> > > > > > > >> >> >and this >> > > > > > > >> >> >< >> > > > > > > >> >> >> > > > > > > >> >> > > > > > > >> > > > > > >> > > >> > >> >> https://github.com/apache/ignite-3/blob/main/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java#L428 >> > > > > > > >> >> > >> > > > > > > >> >> >. >> > > > > > > >> >> >4. Regarding security concerns, this report >> > > > > > > >> >> >< >> > > > > > > >> >> >> > > > > > > >> >> > > > > > > >> > > > > > >> > > >> > >> https://www.cvedetails.com/product/52274/Google-Guava.html?vendor_id=1224 >> > > > > > > >> >> > >> > > > > > > >> >> >shows no major vulnerability issues for the last three >> > > years. >> > > > > > > >> >> > >> > > > > > > >> >> >Taking these points into account, I propose to allow >> using >> > > Guava >> > > > > > > both >> > > > > > > >> in >> > > > > > > >> >> >production and test code and to add it as an explicit >> > > dependency. >> > > > > > > >> >> > >> > > > > > > >> >> >What do you think? >> > > > > > > >> >> > >> > > > > > > >> >> >-- >> > > > > > > >> >> >With regards, >> > > > > > > >> >> >Aleksandr Polovtcev >> > > > > > > >> >> >> > > > > > > >> >> >> > > > > > > >> >> >> > > > > > > >> >> >> > > > > > > >> > >> > > > > > > >> > >> > > > > > > >> >-- >> > > > > > > >> >With regards, >> > > > > > > >> >Aleksandr Polovtcev >> > > > > > > >> >> > > > > > > >> >> > > > > > > >> >> > > > > > > >> >> > > > > > > > >> > > > > > > > >> > > > > > > > >> > > > > > > > -- >> > > > > > > > With regards, >> > > > > > > > Aleksandr Polovtcev >> > > > > > > > >> > > > > > > >> > > > > > > >> > > > > > > -- >> > > > > > > With regards, >> > > > > > > Aleksandr Polovtcev >> > > > > > > >> > > > > > >> > > > > >> > > > > >> > > > > -- >> > > > > With regards, >> > > > > Aleksandr Polovtcev >> > > >> > >> > >> > -- >> > With regards, >> > Aleksandr Polovtcev >> > >> >> >> -- >> Best regards, >> Andrey V. Mashenkov >> > >-- >With regards, >Aleksandr Polovtcev