[
https://issues.apache.org/jira/browse/MESOS-8727?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16410757#comment-16410757
]
Qian Zhang commented on MESOS-8727:
-----------------------------------
The root cause of this issue is, if we call {{JSON::parse()}} with a JSON
string which have duplicated map keys, the last key seen is used.
> JSON -> protobuf conversion in stout handles duplicated keys in a map
> incorrectly
> ---------------------------------------------------------------------------------
>
> Key: MESOS-8727
> URL: https://issues.apache.org/jira/browse/MESOS-8727
> Project: Mesos
> Issue Type: Bug
> Components: stout
> Reporter: Qian Zhang
> Priority: Major
>
> In Mesos code, we usually use the following two functions in stout to convert
> a JSON string to a protobuf message.
> # {{JSON::parse()}} to convert a JSON string to a JSON object (i.e.,
> {{JSON::Object}}).
> # {{protobuf::parse()}} to convert the JSON object to a protobuf message.
> In Google protobuf, there is a single function which can be used to achieve
> the same goal: {{JsonStringToMessage()}}. And based on [the doc of Google
> protobuf|https://developers.google.com/protocol-buffers/docs/proto#maps], if
> there are duplicated keys in a map in a JSON string, the conversion to
> protobuf message may fail, i.e., if we use {{JsonStringToMessage}} to convert
> the following JSON string to a protobuf message, it will fail with an error
> like {{int32_to_string[0]: Repeated map key: '1' is already set.}}
> {code:java}
> "int32_to_string": {
> "1": "value1",
> "1": "value2"
> }
> {code}
> However, {{JSON::parse()}} and {{protobuf::parse()}} handles this case
> differently: they will succeed, and in the resulted protobuf message, we will
> see only one key-value pair {{"1": "value2"}}, i.e., the first key-value pair
> is overwritten. We should have the same behavior with {{JsonStringToMessage}}.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)