Re: hstore_plpython regression test does not work on Python 3 - Mailing list pgsql-hackers

From Oskari Saarenmaa
Subject Re: hstore_plpython regression test does not work on Python 3
Date
Msg-id 5564E377.7030809@ohmu.fi
Whole thread Raw
In response to Re: hstore_plpython regression test does not work on Python 3  (Christian Ullrich <chris@chrullrich.net>)
Responses Re: hstore_plpython regression test does not work on Python 3
List pgsql-hackers
22.05.2015, 09:44, Christian Ullrich kirjoitti:
> * Peter Eisentraut wrote:
>> On 5/16/15 12:06 PM, Tom Lane wrote:
>>> As exhibited for instance here:
>>>
>>> http://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=spoonbill&dt=2015-05-16%2011%3A00%3A07
>>>
>>>
>>> I've been able to replicate this on a Fedora 21 box: works fine with
>>> Python 2, fails with Python 3.  Seems like we still have an issue
>>> with reliance on a system-provided sort method.
>>
>> Pushed a fix, tested with 2.3 .. 3.4.
> 
> There is still a sorting problem (of sorts). jaguarundi [1] keeps
> failing intermittently like this:
> 
> *** 47,53 ****
>   return len(val)
>   $$;
>   SELECT test1arr(array['aa=>bb, cc=>NULL'::hstore, 'dd=>ee']);
> ! INFO:  [{'aa': 'bb', 'cc': None}, {'dd': 'ee'}]
>   CONTEXT:  PL/Python function "test1arr"
>    test1arr
>   ----------
> --- 47,53 ----
>   return len(val)
>   $$;
>   SELECT test1arr(array['aa=>bb, cc=>NULL'::hstore, 'dd=>ee']);
> ! INFO:  [{'cc': None, 'aa': 'bb'}, {'dd': 'ee'}]
>   CONTEXT:  PL/Python function "test1arr"
>    test1arr
>   ----------
> 
> I cannot find any other animal that does the same, but I doubt it's due
> to CCA this time.
> 
> Should dict tests perhaps output sorted(thedict.items()) instead?
> Testing dict formatting could be done with single-item dicts.
> 
> [1] http://pgbuildfarm.org/cgi-bin/show_history.pl?nm=jaguarundi&br=HEAD

Looks like that animal uses Python 3.4.  Python 3.3 and newer versions
default to using a random seed for hashing objects into dicts which
makes the order of dict elements random; see
https://docs.python.org/3/using/cmdline.html#cmdoption-R

The test case could be changed to use sorted(dict.items()) always, but
there are multiple places where it would need to be applied.  Setting
the PYTHONHASHSEED environment variable to a stable value would probably
be easier.

/ Oskari



pgsql-hackers by date:

Previous
From: Andres Freund
Date:
Subject: Re: Run pgindent now?
Next
From: Jeff Janes
Date:
Subject: Re: Redesigning checkpoint_segments