[oslo][nova] Revert of oslo.messaging JSON serialization change

Ben Nemec openstack at nemebean.com
Thu Oct 3 16:02:49 UTC 2019


TLDR: I've abandoned the revert.

After looking at Gibi's investigation further I agree that rabbit was 
actually using the jsonutils version of dumps, so making the fake driver 
use it is consistent. Apologies for the confusion.

-Ben

On 10/1/19 3:35 PM, Ken Giusti wrote:
> Sorry I'm late to the party....
> 
> At the risk of stating the obvious I wouldn't put much faith in the fact 
> that the Kafka and Amqp1 drivers use jsonutils.   The use of jsonutils 
> in these drivers is simply a cut-n-paste from the way old qpidd 
> driver.    Why jsonutils was used there... I dunno.
> 
> IMHO the RabbitMQ driver is the authoritative source for correct driver 
> implementation - the Fake driver (and the others) should use the same 
> serialization as the rabbitmq driver if possible.
> 
> -K
> 
> On Tue, Oct 1, 2019 at 4:30 AM Balázs Gibizer <balazs.gibizer at est.tech> 
> wrote:
> 
> 
> 
>     On Mon, Sep 30, 2019 at 5:35 PM, Balázs Gibizer
>     <balazs.gibizer at est.tech> wrote:
>      >
>      >
>      > On Mon, Sep 30, 2019 at 4:45 PM, Ben Nemec
>     <openstack at nemebean.com <mailto:openstack at nemebean.com>>
>      > wrote:
>      >>  Hi,
>      >>
>      >>  I've just proposed https://review.opendev.org/#/c/685724/ which
>      >>  reverts a change that recently went in to make the fake driver in
>      >>  oslo.messaging use jsonutils for message serialization instead of
>      >>  json.dumps.
>      >>
>      >>  As explained in the commit message on the revert, this is
>      >> problematic
>      >>  because the rabbit driver uses kombu's default serialization
>     method,
>      >>  which is json.dumps. By changing the fake driver to use jsonutils
>      >>  we've made it more lenient than the most used real driver which
>      >> opens
>      >>  us up to merging broken changes in consumers of oslo.messaging.
>      >>
>      >>  We did have some discussion of whether we should try to
>     override the
>      >>  kombu default and tell it to use jsonutils too, as a number of
>     other
>      >>  drivers do. The concern with this was that the jsonutils
>     handler for
>      >>  things like datetime objects is not tz-aware, which means if you
>      >> send
>      >>  a datetime object over RPC and don't explicitly handle it you could
>      >>  lose important information.
>      >>
>      >>  I'm open to being persuaded otherwise, but at the moment I'm
>     leaning
>      >>  toward less magic happening at the RPC layer and requiring projects
>      >>  to explicitly handle types that aren't serializable by the standard
>      >>  library json module. If you have a different preference, please
>      >> share
>      >>  it here.
>      >
>      > Hi,
>      >
>      > I might me totally wrong here and please help me understand how the
>      > RabbitDriver works. What I did when I created the original patch
>     that
>      > I
>      > looked at each drivers how they handle sending messages. The
>      > oslo_messaging._drivers.base.BaseDriver defines the interface with a
>      > send() message. The oslo_messaging._drivers.amqpdriver.AMQPDriverBase
>      > implements the BaseDriver interface's send() method to call _send().
>      > Then _send() calls rpc_commom.serialize_msg which then calls
>      > jsonutils.dumps.
>      >
>      > The oslo_messaging._drivers.impl_rabbit.RabbitDriver driver inherits
>      > from AMQPDriverBase and does not override send() or _send() so I
>     think
>      > the AMQPDriverBase ._send() is called that therefore jsonutils is
>     used
>      > during sending a message with RabbitDriver.
> 
>     I did some tracing in devstack to prove my point. See the result in
>     https://review.opendev.org/#/c/685724/1//COMMIT_MSG@11
> 
>     Cheers,
>     gibi
> 
>      >
>      > Cheers,
>      > gibi
>      >
>      >
>      > [1]
>      >
>     https://github.com/openstack/oslo.messaging/blob/7734ac1376a1a9285c8245a91cf43599358bfa9d/oslo_messaging/_drivers/amqpdriver.py#L599
>      >
>      >>
>      >>  Thanks.
>      >>
>      >>  -Ben
>      >>
>      >
>      >
> 
> 
> 
> 
> -- 
> Ken Giusti  (kgiusti at gmail.com <mailto:kgiusti at gmail.com>)



More information about the openstack-discuss mailing list