You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@mesos.apache.org by "Qian Zhang (JIRA)" <ji...@apache.org> on 2017/07/25 14:59:00 UTC
[jira] [Created] (MESOS-7828) Current approach to parse protobuf
enum from JSON does not support upgrades
Qian Zhang created MESOS-7828:
---------------------------------
Summary: 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, 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)