On Fri, Feb 17, 2012 at 09:29, Ludovic Dubost <[email protected]> wrote:

> If I understand properly the string length is there to assure easier
> migration.
>

The length are there to provide truly unique ids, whatever the content,
without escaping which would be longer and useless since these key are only
internal.


> Are we sure this will work with Unicode strings which can use 2 bytes (if
> we were ever to use Unicode) ?
>

This is already unicode, since this is the length of java string.


> I give my +1 but I think we need to put in the M1 release notes that this
> Milestone is really for people that know what they are doing.
>

I fully agree, this is why we have waited for 4.0M1, since most of this is
ready since 3.4.


> Also we need to have a good testing process on existing databases. Let us
> know when this is commited, XWiki SAS can put some people to do a migration
> test of some of our wikis.
>

This is great news, I have tested carefully on MySQL but I cannot afford
testing other infrastructure.
On the other hand, I use mostly HQL in the migration process or liquibase,
to avoir any database dependent access.
I will commit this morning.

Denis


> Ludovic
>
>
>
> 2012/2/17 Denis Gervalle <[email protected]>
>
> > 9 days, nobody care, most of this was voted previously, I will go ahead
> and
> > commit.
> > Document base key format will be like: 5:space8:document
> > Object base key format will be like: 5:space8:document15:xspace.class[0]
> >
> > Denis
> >
> > On Wed, Feb 8, 2012 at 18:08, Denis Gervalle <[email protected]> wrote:
> >
> > >
> > >
> > > On Wed, Feb 8, 2012 at 13:43, Denis Gervalle <[email protected]> wrote:
> > >
> > >> Hi devs,
> > >>
> > >> I know this subject will seems to you already voted and discussed in
> > >> http://xwiki.markmail.org/thread/fsd25bvft74xwgcx
> > >> But following the remarks and the discussion under that thread, I had
> > >> largely improved the proposed changes.
> > >> This is an important matter, so I prefer to resume here to be sure we
> > all
> > >> really agree on this.
> > >>
> > >> To resume the current situation, we have:
> > >>  - document id
> > >>     - used in document table, rcs, attachment...
> > >>     - simple 32bits string hashcode of a locally serialized
> > >> document reference, including the language for translated documents
> > >>     - stored in a 64bits field.
> > >>  - object id
> > >>     - used in object and property tables, but also in statistics
> tables
> > >>     - simple 32bits string hashcode of the concatenation of the
> document
> > >> reference, the class reference and the object number
> > >>     - stored in a 32bits field (except in Oracle, where the mapping is
> > >> 32bits, but the storage is larger)
> > >>
> > >> The vote is about:
> > >>  - document id
> > >>    - use the lower 64bits of an MD5 hashcode
> > >>    - the base key for the hashcode is serialized using a
> > >> LocalUidEntityReferenceSerializer of the document reference
> > >>        - the result is appended with the current locale for translated
> > >> document, until locale are integrated in references
> > >>        - format for original document: 5space8document
> > >>
> > >  Please read:
> > >         - format for original document: 5:space8:document
> > >
> > >
> > >>        - format for translation: 5:space8:document2:fr
> > >>  - object id
> > >>    - use the lower 64bits of an MD5 hashcode
> > >>    - the base key for the hashcode is serialized using a
> > >> LocalUidEntityReferenceSerializer of the BaseObjectReference
> > >>        - current format would be: 5:space8:document12:xspace.class[0]
> > >>        - if my proposal in the object reference thread is adopted:
> > >> 5:space8:document18:6:xspace5:class[0]
> > >>
> > >> Since changing document id could really not helps since document
> > >> reference are used in object ids and therefore unambiguous document
> > could
> > >> receive ambiguous objects, I do not advice to split the change.
> > Moreover,
> > >> this is really sensible change in the database, so not multiplying
> them
> > is
> > >> better. I think the upcoming 4 is a really good time to introduce this
> > >> change, so I propose to introduce this in version 40000 of the
> database
> > >> (4.0M1 release).
> > >> But I would like to use it internally earlier. So you would be pleased
> > to
> > >> settle on this thread and the previous one before.
> > >>
> > >> It implies the following migration for existing instances:
> > >>   - customer custom mapping have to be adapted before the migration,
> > >> including dynamic one which could be not so easy, but this is already
> > >> rarely used and very rarely require any change in fact.
> > >>   - change XWikiDocument to provide the key required for IDs, by the
> > way,
> > >> also use that key (non local version) for the document cache
> > >>   - refactor the BaseElement hierarchy to provide long IDs (no more
> > >> integer) based on references (generic way to have ids for any element)
> > >>   - change the hibernate mapping for all object ids
> > >>   - provide dynamic schema updates using liquibase to fix all object
> id
> > >> types, including those in custom mapping and collection
> > >>   - migrate in HQL document id for persisted
> > >> class:  XWikiDocument, XWikiRCSNodeInfo, XWikiLink, XWikiAttachment,
> > DeletedAttachment
> > >>   - migrate in HQL object id for persisted class: BaseObject,
> *Property,
> > >> internal custom mapped class, dynamic custom mapped class
> > >>   - migrate in HQL object id for custom statistics class derived form
> > >> XWikiStats
> > >>   - migrate in SQL ids for all relational collections in the above
> > >> migrated tables
> > >>
> > >> To provide this migration as safely as possible:
> > >>   - Liquibase provide a safe way to change the schema
> > >>   - All id conversion are gathered from the database in a first single
> > >> read-only transaction, and new id are computed.
> > >>   - Potentially already migrated ids are detected, allowing the
> process
> > >> to fails and be restarted.
> > >>   - Proceed to ids replacement using a safe algorithm that may support
> > >> non-circular conflict between old and new ids (very unlikely anyway,
> > since
> > >> we move from 32 to 64bits)
> > >>   - Use a single transaction for each id conversion, replacing it in
> all
> > >> related tables
> > >>   - Use Database independent queries (HQL) as much as possible, only
> > bulk
> > >> update on collection which are not supported by hibernate are in a
> > >> minimalistic SQL update statement.
> > >>
> > >> Some helps for testing the migration on different
> > >> environments is requested ! (I do my tests on MySQL deeply)
> > >> I will commit my branch on platform soon.
> > >>
> > >> Here is my +1.
> > >>
> > >> --
> > >> Denis Gervalle
> > >> SOFTEC sa - CEO
> > >> eGuilde sarl - CTO
> > >>
> > >
> > >
> > >
> > > --
> > > Denis Gervalle
> > > SOFTEC sa - CEO
> > > eGuilde sarl - CTO
> > >
> >
> >
> >
> > --
> > Denis Gervalle
> > SOFTEC sa - CEO
> > eGuilde sarl - CTO
> > _______________________________________________
> > devs mailing list
> > [email protected]
> > http://lists.xwiki.org/mailman/listinfo/devs
> >
>
>
>
> --
> Ludovic Dubost
> Founder and CEO
> Blog: http://blog.ludovic.org/
> XWiki: http://www.xwiki.com
> Skype: ldubost GTalk: ldubost
> _______________________________________________
> devs mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/devs
>



-- 
Denis Gervalle
SOFTEC sa - CEO
eGuilde sarl - CTO
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to