>> 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. > > > > > > > > > >