Hi, please do not rush to make any final decision. I think we all need some time to think about these 2 solutions.
So I suggest chilling a couple of days without any discussion. Later we can come back to this topic and dive into it once again, maybe we can merge it into one taking the best parts of both. ср, 20 февр. 2019 г. в 16:07, Anton Vinogradov <a...@apache.org>: > >> 1. Automatic tests scaling for new versions. > >> 2. Automatic dependency management. > Let's just improve the current solution. > See no problems here. > > You'll have my *Veto* on merge without real reasons to replace solution > instead of improvement. > > On Wed, Feb 20, 2019 at 3:55 PM Pavel Kovalenko <jokse...@gmail.com> > wrote: > > > Anton, > > > > In my first message, I already noticed the usability problems of the > > current framework and showed how they can be solved using the new > > framework. > > It gives us 2 major advantages: > > 1. Automatic tests scaling for new versions. > > 2. Automatic dependency management. > > Described approach simplifies tests writing and supporting. > > > > I don't see now how we can avoid manual versions adding and supporting in > > test suites and avoid manual dependency management using custom java api > > for Maven in the current version of the framework. > > If you have ideas how these problems can be resolved in the current > version > > please share it. > > > > Nikolay, > > > > The new framework is designed for persistence compatibility first but can > > be used for thin client testing as well. > > It works exactly as you described. It collects all available testing > > versions by scanning pom files. Then it builds jars for all old versions > > using Maven. > > Test framework run compatibility tests against all detected old versions. > > The number of versions to test is controlled by a property. > > Some versions can be excluded for particular test suite or the user can > > bound it using versions range. > > In all of these cases, there are no needs to copy-paste methods for each > of > > testing Ignite versions. > > > > ср, 20 февр. 2019 г. в 12:45, Nikolay Izhikov <nizhi...@apache.org>: > > > > > Hello, Pavel. > > > > > > Please, clarify. > > > > > > What exactly your new compatibility framework should check? > > > I know at lease 2 compatible subsystem in Ignite that should work with > > > previous versions: > > > > > > 1. Persistence. > > > 2. Thin client. > > > > > > > A new version of Ignite has released and a developer should update > > > compatibility tests to run it against the new version. > > > > > > I propose to change current approach - check version X with version Y. > > > We should check X with X - 1 with X - 2 and so on, depending on our > > > compatibility policies. > > > > > > This approach should lead to the following: > > > > > > 1. Tests should contains only number of previous versions we should > > check. > > > 2. Test framework should build versions list internally and use it to > run > > > tests. > > > > > > What do you think? > > > > > > > > > > > > ср, 20 февр. 2019 г. в 11:41, Pavel Kovalenko <jokse...@gmail.com>: > > > > > > > Vyacheslav, > > > > > > > > Thank you for answers! > > > > > > > > >> I'm not sure what is a problem here? > > > > At the moment it's a little bit hard to understand the impact of > such a > > > > change because the number of test suites is small. > > > > Let's Imagine you have X compatibility test suites where X is a > > > relatively > > > > big number, let's say 20. > > > > A new version of Ignite has released and a developer should update > > > > compatibility tests to run it against the new version. > > > > A developer should manually find all of these 20 test suites and in > > each > > > of > > > > these suites and add a new version to test it (new method). > > > > This is a long process and there could be developer mistakes, some of > > the > > > > test suites can be missed and nobody will know about it before real > > > > compatibility problem appears. > > > > We already faced with the situation when after new version release > > > > (2.5-2.6) no compatibility tests were modified to support new version > > > > because nobody remembers about it and there is no such process after > > > > release. > > > > Adding new pom is a very simple step and can be done by any human who > > > even > > > > may not be familiar with the compatibility module and may not know > > > anything > > > > which compatibility tests are used. If we include adding pom file to > > > > post-release process all existing tests will automatically detect new > > > > version and next TC run will immediately show to us results. If there > > are > > > > some compatibility problems during development new version TC run > will > > > show > > > > it. At the current approach, compatibility tests are out of focus and > > we > > > > may not see potential issues. > > > > > > > > >> This is not about usability, it's about the framework's internals > > > > At the current approach, a developer should take care of dependency > > > > management for the old versions. E.g. if you look > > > > at IgnitePKIndexesMigrationToUnwrapPkTest you can see "magic" H2 > > > dependency > > > > version. I still don't understand why this version was explicitly > added > > > and > > > > not just inherited from ignite-indexing. If we delegate all > dependency > > > > management to Maven itself it will simplify tests development. Tests > > will > > > > look much simpler. > > > > > > > > >> Please, describe the issue in more details? > > > > Suppose you have a closure that invokes some deprecated method which > > will > > > > be removed in next release. After method removal, such tests will be > > > > broken. At the current framework, I can't see a resolution of that > > > problem. > > > > In a new framework, you can keep the old version of closure, mark it > > with > > > > special annotation and place to separate module with old Ignite > version > > > > dependency. This closure will be compiled using an old version of > > Ignite > > > > and the user can still run it on the old version. > > > > > > > > > > > > > > > > вт, 19 февр. 2019 г. в 21:44, Vyacheslav Daradur < > daradu...@gmail.com > > >: > > > > > > > > > Hi, Pavel! > > > > > > > > > > First of all, I'd like to clarify that the Compatibility Testing > > > > > Framework was designed to work with a cluster of multi-version > nodes. > > > > > The main idea is to run a test to verify backward compatibility or > do > > > > > some kind of rolling upgrades. > > > > > > > > > > It's not about persistence compatibility, but actually, it is used > > for > > > > > this now. > > > > > > > > > > >> 1) It's uncomfortable to add and support new versions of Ignite > > > > product. > > > > > > > > > > I'm not sure what is a problem here? > > > > > As I understand you suggest to do similar things - adding new > pom.xml > > > > > when new a version is released. Pay attention that not all tests > > > > > should be tested on all versions, some test may want to test > specific > > > > > versions each other. > > > > > > > > > > >> 2) Manual maven dependency through java api. > > > > > > > > > > This is not about usability, it's about the framework's internals. > If > > > > > you have issues let's fix it and improve approach if needed. > > > > > > > > > > >> 3) It doesn't cover the case when some code which works on the > > > current > > > > > version will not work on older versions due to compile/runtime > > > > > incompatibility. > > > > > > > > > > Please, describe the issue in more details? > > > > > > > > > > On Tue, Feb 19, 2019 at 7:55 PM Pavel Kovalenko < > jokse...@gmail.com> > > > > > wrote: > > > > > > > > > > > > Anton, > > > > > > > > > > > > >> What about the current compatibility framework? > > > > > > Current compatibility framework will be removed after final > > adjusting > > > > to > > > > > > new framework. > > > > > > > > > > > > >> Could you please share examples for each feature you > mentioned? > > > > > > You can see example in PR e.g. file > > > > > > modules/compatibility/ignite-versions/2.1.0/pom.xml > > > > > > < > > > > > > > > > > > > > > > https://github.com/apache/ignite/pull/5974/files#diff-3c44ef223c31de9ff1e10bd7699cbcdc > > > > > > > > > > > > > > > > > > I think such representing of Ignite product version is more > cleaner > > > > than > > > > > > existing approach with Java classes with dependencies and manual > > > > > dependecy > > > > > > management. > > > > > > > > > > > > >> Anyway. I don't like the idea to implement something new > instead > > > of > > > > > > improving the existing. > > > > > > If you have concrete proposals how to improve current framework > > > please > > > > > > share it. > > > > > > > > > > > > > > > > > > вт, 19 февр. 2019 г. в 19:11, Anton Vinogradov <a...@apache.org>: > > > > > > > > > > > > > +5,327 −59 > > > > > > > What about the current compatibility framework? > > > > > > > I see no removal or updates. > > > > > > > > > > > > > > >> Each new version is represented by a single pom > > > > > > > Sound not good. > > > > > > > Could you please share examples for each feature you mentioned? > > > > > > > > > > > > > > Anyway. I don't like the idea to implement something new > instead > > of > > > > > > > improving the existing. > > > > > > > > > > > > > > On Tue, Feb 19, 2019 at 6:48 PM Pavel Kovalenko < > > > jokse...@gmail.com> > > > > > > > wrote: > > > > > > > > > > > > > > > Igniters, > > > > > > > > > > > > > > > > I would like to start a discussion about replacement existing > > > > > > > > persistence compatibility test framework with the newer > > version. > > > > > > > > The main purpose of that action is simplifying compatibility > > > tests > > > > > > > > development and support. > > > > > > > > > > > > > > > > The current version of the test framework has 3 > disadvantages: > > > > > > > > 1) It's uncomfortable to add and support new versions of > Ignite > > > > > product. > > > > > > > > When a new version has released a developer must manually add > > new > > > > > test > > > > > > > > methods to all existing test suites to support the new > product > > > > > version. > > > > > > > > 2) Manual maven dependency through java api. > > > > > > > > If a new version of Ignite product has some specific > dependency > > > > > version > > > > > > > > (like H2) a developer should take care about and manually > cover > > > > this > > > > > case > > > > > > > > using java api. > > > > > > > > 3) It doesn't cover the case when some code which works on > the > > > > > current > > > > > > > > version will not work on older versions due to > compile/runtime > > > > > > > > incompatibility. > > > > > > > > > > > > > > > > A new version of the framework that is under development > right > > > now > > > > > [1] > > > > > > > > doesn't have such problems. > > > > > > > > Here is a list of key features and possibilities: > > > > > > > > > > > > > > > > 1) One codebase - multiple versions support. > > > > > > > > The key feature of the new framework is significant > simplifying > > > > > adding > > > > > > > and > > > > > > > > supporting the new versions of Ignite product. > > > > > > > > Each new version is represented by a single pom file that > > > contains > > > > > Ignite > > > > > > > > dependencies of specific version (core, indexing, etc.). All > > > > > > > subdependecies > > > > > > > > like H2 are covered by Maven automatically. > > > > > > > > To add a new version for compatibility a developer just need > to > > > add > > > > > a new > > > > > > > > pom file with a new version of Ignite. All existing tests > will > > > > > > > > automatically detect the new version and will run tests > against > > > > this > > > > > > > > version without additional changes. This feature covers p. 1 > > and > > > 2 > > > > > of the > > > > > > > > existing framework. > > > > > > > > 2) Unified API to access and run code on old and new versions > > of > > > > > Ignite. > > > > > > > > Each of Ignite instance is represented by remote JVM with a > > > single > > > > > point > > > > > > > of > > > > > > > > interaction - running abstract closures. Each closure is > just a > > > > class > > > > > > > which > > > > > > > > implement a "runner interface". Each closure object is > > serialized > > > > to > > > > > a > > > > > > > file > > > > > > > > through Xstream library and executed on remote Ignite JVM. > This > > > > > approach > > > > > > > > gives unified access to interact with both old and new > versions > > > of > > > > > Ignite > > > > > > > > and simplifies overall tests development. > > > > > > > > 3) Ignite versions support for closures. Sometimes a closure > > > > > couldn't be > > > > > > > > run on newer or older Ignite version due to compile/runtime > > > > > > > incompatibility > > > > > > > > of that code. To resolve this problem a special annotation > has > > > > > > > introduced. > > > > > > > > This annotation named as "@Since" contains minimal possible > > > Ignite > > > > > > > product > > > > > > > > version where annotated closure can be compiled and run. Such > > > > > closures > > > > > > > are > > > > > > > > processed on Ignite versions compile phase and this makes it > > > > > possible to > > > > > > > > use one closure for multiple Ignite versions without > additional > > > > code > > > > > > > > changes. Closures and versioning resolve p. 3 of the existing > > > > > framework. > > > > > > > > > > > > > > > > [1] - https://issues.apache.org/jira/browse/IGNITE-11133 > > > > > > > > > > > > > > > > I would like to hear any opinions about the new framework. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > Best Regards, Vyacheslav D. > > > > > > > > > > > > > > >