ignite-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Pavel Kovalenko <jokse...@gmail.com>
Subject Re: [Discussion] Persistence compatibility framework refactoring
Date Wed, 20 Feb 2019 12:55:16 GMT
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 <nizhikov@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 <jokserfn@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 <daradurvs@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 <jokserfn@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 <av@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 <
> jokserfn@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.
> > >
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message