+1

On Tue, Apr 16, 2013 at 8:36 PM, Denis Gervalle <[email protected]> wrote:
> Hi devs,
>
> I have filed today a blocker issue: http://jira.xwiki.org/browse/XWIKI-9041
> This serious issue is the result of our current schema migration process.
>
> Currently, managing schema changes is done at two level:
>
>  1) A automatic script is computed by hibernate, comparing the current DB
> schema, and the targeted schema extracted from mapping files.
>  2) DataMigration may change schema using liquibase (git like solution for
> managing schema changes)
>
> According to the Hibernate team, 1) should only be used for development
> purpose. The Hibernate team clearly discourage usage of 1) in production,
> since it does not cover every use cases. For example, it does not:
>  - drop column, table, etc...
>  - change datatype
>  - add constrainst
> ...
> However, this was the first, and until 4.x, the only way we had to manage
> our database schema. This is why we have introduced 2) in 4.0, to be able
> to change more information in our schema. Since 4.3, 2) was even be
> splitted in two steps, one before and one after step 1) for partially
> solving similar issue to  http://jira.xwiki.org/browse/XWIKI-9041.
>
> While 1) is an uncontrollable monolithic step, 2) is like the underlying
> data migration, a chronologic process, that apply change in order. These
> two methods does not really work well join together, since parts of step 1)
> may need some part of step 2) to be done, and the reverse.
>
> For example, migration of IDs from 32bits to 64bits bases its schema
> changes on the hibernate mapping, and need the schema to be updated by
> hibernate first. A new table like xwikistringlists introduced in 5.0M2
> implies the creation of new constraints against existing IDs, and therefore
> need the change of datatype to be processed first. There is no way out of
> that situation, and this is the cause of
> http://jira.xwiki.org/browse/XWIKI-9041.
>
> Since we do not do a lot of schema updates during a release cycle, the
> current situation has been manageable during the 4.x cycle. But, to avoid
> XWIKI-9041, it implies that user must not skip a major release during
> migration. This is a possible option, but it may implies some refactoring
> of existing migration inside a given release cycle, and probably some
> limitations as well.
>
> After brainstorming about the situation with Thomas, we have concluded that
> it would be better to get rid of step 1), to control precisely the
> evolution of the schema. However, we do not want to cause a breakage for
> existing users. So here what we proposed:
>
> A) For any existing database having a version lower than 50000, apply the
> automatic update of schema using hibernate, but based on the mapping file
> of the latest 4.5.x release, and followed by B)
> B) Any changes in mapping file done in 5.x or later (implying schema
> changes) should be backed by a corresponding DataMigration that provide
> Liquibase changelogs to reflect those changes on the database.
> C) Newly created database are setup using the latest mapping file by
> hibernate (since we manage versioning of our database, old liquibase change
> logs will never be applied to these new db)
> D) Advanced user will be allowed to also provide liquibase file, to manage
> their schema updated properly (existing hidden feature), but...
> E) The automatic hibernate schema update script is computed after the above
> steps to check that it is empty, and that the DB schema is in sync with the
> mapping file. Optionally  we may allow this step to apply more schema
> updates for advanced users (at their own risk) that do not provide the
> liquibase change log required. (keeping the existing internal custom
> mapping feature, as well as the logic of our dynamic mapping).
>
> The pros:
>  - New database will no more be updated blindly, and liquibase will provide
> a complete history of changes (except advanced user changes and dynamic
> mapping)
>  - Existing database will start to have a complete history of schema
> changes starting from 5.x (and a somewhat partial history for 4.x versions)
>  - Migration test will only be needed from pre-5.x to 5.x version, future
> migration will be more isolated, and can be tested more locally between the
> release introducing the migration and the previous one
>  - We optionally keep existing functionalities (step E)
>
> The cons:
>  - More work to be done while changing mapping file
>  - Advanced user may need also to be more careful about their change in
> .hbm file
>  - We keep using our versioning solution (we do not really use the
> liquibase way), maybe a advantage as well
>  - We need some time to put that in place and we have already a slipping RC1
>
> However, the only alternative I see to fix
> http://jira.xwiki.org/browse/XWIKI-9041 would be to revert the schema
> changes until the above, or a similar solution is available.
>
> The bad news now. Once again, I have not planned to work on this, and my
> planning is already really busy. It will also require to
> be thoroughly tested, and Sorin will not say the opposite, migration test
> is time consuming. So, this will not improve our schedule to release 5.0
> and I will need serious support from you guys to put that in place.
>
> WDTH ?
>
> --
> Denis Gervalle
> SOFTEC sa - CEO
> eGuilde sarl - CTO
> _______________________________________________
> devs mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/devs



-- 
Thomas Mortagne
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to