mesos-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Benjamin Mahler (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (MESOS-7828) Current approach to parse protobuf enum from JSON does not support upgrades
Date Mon, 31 Jul 2017 19:47:00 GMT

    [ https://issues.apache.org/jira/browse/MESOS-7828?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16107853#comment-16107853
] 

Benjamin Mahler commented on MESOS-7828:
----------------------------------------

[~qianzhang] do you know how the protobuf supplied json libraries address this issue? Seems
like they don't? Or does the 'ignore unknown fields' parameter they provide also apply to
unknown enum values? I would be curious to know what they did in proto3, since they wrote
this in the release notes:

{quote}
iv. Fix semantics for unknown enum values.
{quote}

https://github.com/google/protobuf/releases/tag/v3.0.0-alpha-1


> Current approach to parse protobuf enum from JSON does not support upgrades
> ---------------------------------------------------------------------------
>
>                 Key: MESOS-7828
>                 URL: https://issues.apache.org/jira/browse/MESOS-7828
>             Project: Mesos
>          Issue Type: Bug
>            Reporter: Qian Zhang
>            Assignee: Qian Zhang
>
> To use protobuf enum in a backwards compatible way, [the suggestion on the protobuf mailing
list|https://groups.google.com/forum/#!msg/protobuf/NhUjBfDyGmY/pf294zMi2bIJ] is to use optional
enum fields and include an UNKNOWN value as the first entry in the enum list (and/or explicitly
specifying it as the default). This can handle the case of parsing protobuf message from a
serialized string, but it can not handle the case of parsing protobuf message from JSON.
> E.g., when I access master endpoint with an inexistent enum {{xxx}}, I will get an error:
> {code}
> $ curl -X POST -H "Content-Type: application/json" -d '{"type": "xxx"}' 127.0.0.1:5050/api/v1
> Failed to convert JSON into Call protobuf: Failed to find enum for 'xxx'% 
> {code}
> In the {{Call}} protobuf message, the enum {{Type}} already has a default value {{UNKNOWN}}
(see [here|https://github.com/apache/mesos/blob/1.3.0/include/mesos/v1/master/master.proto#L45]
for details) and the field {{Call.type}} is optional, but the above curl command will still
fail. The root cause is, in the code [here|https://github.com/apache/mesos/blob/1.3.0/3rdparty/stout/include/stout/protobuf.hpp#L449:L454]
when we try to get the enum value for the string "xxx", it will fail since there is no any
enum value corresponding to "xxx".



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Mime
View raw message