Re: [rt.cpan.org #81516] Test failures due to hash randomisation in perl 5.17.6

Jens Rehsack <[email protected]>
Newsgroups gmane.comp.lang.perl.modules.dbi.sybase.devel
Message-ID <[email protected]>
On 12.12.12 20:34, H.Merijn Brand wrote:
> On Wed, 12 Dec 2012 16:31:44 +0100, Jens Rehsack <[email protected]>
> wrote:
>
>> On 01.12.12 23:14, Tim Bunce wrote:
>>> On Thu, Nov 29, 2012 at 10:15:19PM +0100, Jens Rehsack wrote:
>>>>
>>>> But back to the issue - now it seems dbm_tables is fetched earlier
>>>> in some cases than f_dir which causes an invocation of
>>>> DBI::DBD::SqlEngine::Table::get_table_meta (including
>>>> DBI::DBD::SqlEngine::Table::bootstrap_table_meta) before f_dir
>>>> has been set. This causes $dbh->{sql_meta}->{fred}->{f_dir} being
>>>> initialized to the default value of $dbh->{f_dir} which is
>>>> always cur_dir().
>>>>
>>>> Looking into DBI::DBD::SqlEngine::dr::connect around line 180
>>>> it could be seen that there's already some magic for "some
>>>> settings must be done before others".
>>>>
>>>> A quick fix for "now" could be: keys: ("sql_meta", $dbh->{dbm_meta},
>>>> ...) must be initialized last - after any other k/v pair from %$attrs.
>>>> Another quick should could be forbid setting meta info during connect(),
>>>> as it's documented - but this would be a hugh step backwards in my
>>>> effort making DBI::DBD::SqlEngine and derived DBD's usable through
>>>> Gofer proxy. So I'd prefer the first quick shot ...
>>>>
>>>> For longer way, I'd like to refactor the order procedure to a
>>>> more flexible way:
>>>> $dbh->{dbd_init_order} = [
>>>>     [qw(Profile RaiseError PrintError AutoCommit)],
>>>>     [qw(ReadOnly ...)],
>>>>     ...
>>>>     [qw(sql_meta dbm_tables ...)]
>>>> ];
>>>>
>>>> Remaining question in that proposal: where's the fence between "must
>>>> be last" and "insert unnamed attrs here"?
>>>
>>> I don't know, but I would like a working DBI for 5.17.6+ before too long.
>>
>> Well, we developed two patches for now:
>>
>> 1) Merijn's patch - http://pasta.test-smoke.org/385
>>
>> + looks simple, easy to understand
>    + easy to extend
>    + easy to override

This is a good and bad point in once: easy to override allows
easy modifying the order, but it allows modifying the order
easily ;) This can cause in hard to debug errors like we got
one in RT#81516. And put a warning on it: use only if you
completely understood DBI::DBD::SqlEngine and DBD::File internals
is similar to: "don't do"

>    + one single point of maintenance

Which ignores the design of DBI::DBD::SqlEngine which forces
a separate place for those kind of initializations:
DBD::Your_Drv::db::init_default_attributes.

>> - makes assumptions about attribute names of derived DBD's
>>     (e.g. dbm_tables, but this can be easily renamed by assigning
>>      new name for it to $dbh->{dbm_meta} (by driver author), eg.
>>      $dbh->{dbm_meta} = "dbm_sources")
>      which makes me/us/you want more documentation about what DBI/DBD
>      guarantees, expects, supports etc. there is no real "you should do
>      this" or "this is officially off-bound"

Did you read DBD::File::Developers (and DBI::DBD::SqlEngine::Developers)?

I agree, those documents need to be extended, but many of the
things I tell are described there.

>> - increases complexitiy when more issues came up with similar
>>     patterns (eg. /_meta$/ can't be set from outside, but from
>>     derived driver)
>      but still offers easy documentation for every single entry
>
>> 2) Jens' patch - http://pasta.test-smoke.org/387
>>
>> + backward compatible to ancient attributes (csv_file, csv_ext, ...)
>      though I value this point, we are talking about DBD's we all
>      control. The newest DBD::CSV and DBD::DBM will require the new DBI
>      so conflicts are not likely to happen. To be honest, I - as
>      maintainer of DBD::CSV - didn't even know csv_file was still
>      supported

My fault, I thought it would. But DBD::File supports dbm_ext (aliases
f_ext) as well as dbm_lockfile (aliases f_lockfile). I'm pretty sure,
DBD::AnyData (greetings to Sven Doweit) will have similar surprises.

>> + no assumptions on derived DBD's
>      a very good point
>> + no false positives on pattern match
>      if everything is well-documented, then false positives should not
>      happen or better cause havoc
>> - more complicated for quick review
>      can be solved by well-chosen inline docs
>    - This patch will probably need to have extra code in (many) other
>      places, which my patch tried to avoid

I wouldn't expect - I see only one extra point which is in DBD::File
to enable backward compatibility to DBD::File 0.40 for at least
developers (aliasing f_meta to sql_meta). Skipping this, even DBD::File
needs no extra code.

To value your comments, I've reworked my patch a little bit to allow
easier modifying in sub-classes (derived DBD's).
You can find it at http://pasta.test-smoke.org/389

>> Any other +/- comments?
>
> Yes please, don't feel shy!
> Tell us!
>
>> In general both versions would fix the root cause of RT#81516,
>> while the maintainers (Merijn, me) cannot choose the right one.
>
> What he said
>
>> Jens

/o\

Jens
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.