[ZODB-Dev] zodb conversion questions

Jürgen Herrmann Juergen.Herrmann at XLhost.de
Thu Feb 14 20:29:41 UTC 2013


Am 07.02.2013 17:11, schrieb Jim Fulton:
> On Thu, Feb 7, 2013 at 10:48 AM, Jürgen Herrmann
> <Juergen.Herrmann at xlhost.de> wrote:
>> Am 06.02.2013 15:05, schrieb Jürgen Herrmann:
>>
>>> Hi there!
>>>
>>> I hav a relstorage with mysql backend that grew out of bounds
>>> and we're looking into different backend solutions now. Possibly
>>> also going back to FileStorage and using zeo...
>>>
>>> Anyway we'll have to convert the databases at some point. As these
>>> are live DBs we cannot shut them down for longer than the
>>> ususal maintenance interval during the night, so for maybe 2-3h.
>>>
>>> a full conversion process will never complete in this time so
>>> we're looking for a process that can split the conversion into
>>> two phases:
>>>
>>> 1. copy transactions from backup of the source db to the 
>>> destination
>>>    db. this can take a long time, we don't care. note the last
>>>    timestamp/transaction_id converted.
>>> 2. shut down the source db
>>> 3. copy transactions from the source db to the destination db, 
>>> starting
>>>    at the last converted transaction_id. this should be fast, as 
>>> only
>>>    a few transactions need to be converted, say < 1% .
>>>
>>>
>>> if i would reimplement copyTransactionsFrom() to accept a start
>>> transaction_id/timestamp, would this result in dest being an exact
>>> copy of source?
>>>
>>> source = open_my_source_storage()
>>> dest = open_my_destination_storage()
>>> dest.copyTransactionsFrom(source)
>>> last_txn_id = source.lastTransaction()
>>> source.close()
>>> dest.close()
>>>
>>> source = open_my_source_storage()
>>> # add some transactions
>>> source.close()
>>>
>>> source = open_my_source_storage()
>>> dest = open_my_destination_storage()
>>> dest.copyTransactionsFrom(source, last_txn_id=last_txn_id)
>>> source.close()
>>> dest.close()
>>
>>
>> I will reply to myself here :) This actually works, tested with a
>> modified version of FileStorage for now. I modified the signature
>> of copyTransactionsFrom to look like this:
>>
>> def copyTransactionsFrom(self, source, verbose=0, 
>> not_before_tid=None):
>
> ``start`` would be better to be consistent with the iterator API.
>
>> not_before_tid is a packed tid or None, None meaning "copy all"
>> (the default, so no existing API usage would break).
>>
>> Is there public interest in modifying this API permamently?
>
> +.1
>
> This "API" is a bit of an attractive nuisance.  I'd rather people
> learn how to use iterators in their own scripts, as they are very
> useful and powerful.  This API just hides that.
>
> The second part, replaying old transactions is a bit more subtle,
> but it's still worth it for people to be aware of it.
>
> If I were doing this today, I'd make this documentation
> rather than API. But then, documentation ... whimper.
>
>> Anybody want to look at the actual code changes?
>
> Sure, if they have tests.  Unfortunately, we can only accept
> pull requests from zope contributors. Are you one?
> Wanna be one? :)
>
> Jim

1. SUCCESS. I migrated to FileStorage/ZEO successfully with the 
modified
    copyTransactionsFrom() with downtime of only 10 minutes. Very cool 
:)
    DB sizes are reasonable again and repozo backups are set up, just 
like
    before the migration to RelStorage. Feels robust again, a good 
feeling.
    I'd advise anybody thinking about migrating to RelStorage to think
    about a proper (incremental) backup strategy for the underlying sql 
db
    first, this might become crucial! repozo makes your life easy there
    when using FileStorage.

2. Regarding the tests: I did not find any test for 
copyTransactionsFrom()
    in the current test suite, am I blind? If there isn't any test yet,
    maybe you could suggest a proper file for the test, maybe even a 
similar
    one to start from?

3. Regarding my request to have this in ZODB 3.10.5:
    After reading my own statement I quickly realized that changing an 
API
    can only happen in a major version. Anyway, this was a one-shot 
action
    so I'll probably never need my own code again :)

best regards,
Jürgen
-- 
>> XLhost.de ® - Webhosting von supersmall bis eXtra Large <<

XLhost.de GmbH
Jürgen Herrmann, Geschäftsführer
Boelckestrasse 21, 93051 Regensburg, Germany

Geschäftsführer: Jürgen Herrmann
Registriert unter: HRB9918
Umsatzsteuer-Identifikationsnummer: DE245931218

Fon:  +49 (0)800 XLHOSTDE [0800 95467833]
Fax:  +49 (0)800 95467830
Web:  http://www.XLhost.de


More information about the ZODB-Dev mailing list