The voting has been started here <https://lists.apache.org/thread.html/rfd7f449d5cfcffb728689ba4250a07a0df068d4ad1bdb677d855b8c6%40%3Cdev.ignite.apache.org%3E>
On Mon, Sep 6, 2021 at 8:11 PM Andrey Gura <ag...@apache.org> wrote: > Alexander, > > Feel free to start voting. Please, refer to this discussion in order > to avoid a new flaming thread in the voting topic. > > On Thu, Sep 2, 2021 at 6:04 PM Alexander Polovtcev > <alexpolovt...@gmail.com> wrote: > > > > Andrey, > > > > > It just doesn't work. If there is precedent of usage of Guava methods > > then somebody will use other methods. > > > > Maybe you are right. I would suggest a vote on whether we should allow > Guava methods in the codebase or not. Let's do that in a separate thread? > In the meantime we will prohibit using Guava until the voting is complete. > > > > On Thu, Sep 2, 2021 at 3:58 PM Andrey Gura <ag...@apache.org> wrote: > >> > >> > So I would propose to allow at least *some* methods that we consider > useful, while disallowing everything else. > >> > >> It just doesn't work. If there is precedent of usage of Guava methods > >> then somebody will use other methods. > >> > >> > 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 don't understand why somebody did such a copy-paste, but I believe > >> that nobody supports this code. So, from my point of view, it isn't a > >> problem. > >> > >> On Thu, Sep 2, 2021 at 2:52 PM Alexander Polovtcev > >> <alexpolovt...@gmail.com> wrote: > >> > > >> > 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 > > > > > > > > -- > > With regards, > > Aleksandr Polovtcev > -- With regards, Aleksandr Polovtcev