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

Allen George edited comment on THRIFT-5300 at 11/2/20, 9:37 PM:
----------------------------------------------------------------

[~shuoli84] and [~ulidtko]: I just checked the spec again (it's been a long 
time since I looked at the code and the spec) and I noticed that the spec _is_ 
correct as well. It clearly points out that the field encoding in structs is 
different from the field encoding in lists/sets. I've taken screenshots of the 
spec and attached them to the ticket. The values in the rust implementation are 
correct.

So:

* There is no bug in the spec.
* There is no bug in the implementation.

I'll also point out that the rust client/server (like most other language 
implementations) does cross-language tests. There are definitely bugs (see the 
list of explicitly-disabled cross-tests) in the implementation, but this 
particular bug should have triggered failures across the board. Separately, I 
would have checked other implementations to make sure that the rust one was 
consistent (the spec is not exhaustive, and one definitely has to make some 
judgement calls in some cases.)

It doesn't seem like there's any action to be taken here at all.


was (Author: allengeorge):
[~shuoli84] and [~ulidtko]: I just checked the spec again (it's been a long 
time since I looked at the code and the spec) and I noticed that the spec _is_ 
correct as well. It clearly points out that the field encoding in structs is 
different from the field encoding in lists/sets. I've taken screenshots of the 
spec and attached them to the ticket. The values in the rust implementation are 
correct.

So:

* There is no bug in the spec.
* There is no bug in the implementation.

I'll also point out that the rust client/server (like most other language 
implementations) does cross-language tests. There are definitely bugs (see the 
list of explicitly-disabled cross-tests) in the implementation, but this should 
have triggered failures across the board.

It doesn't seem like there's any action to be taken here at all.

> rs compact protocol collection elem type to ttype mapping wrong
> ---------------------------------------------------------------
>
>                 Key: THRIFT-5300
>                 URL: https://issues.apache.org/jira/browse/THRIFT-5300
>             Project: Thrift
>          Issue Type: Bug
>          Components: Rust - Library
>    Affects Versions: 0.13.0
>            Reporter: shuo li
>            Assignee: Allen George
>            Priority: Major
>         Attachments: Screen Shot 2020-11-02 at 16.31.09.png, Screen Shot 
> 2020-11-02 at 16.31.31.png
>
>
> collection_u8_to_type only overrides bool, but in spec, other types are 
> different too. 
> In field:
>  * {{BOOLEAN_TRUE}}, encoded as {{1}}
>  * {{BOOLEAN_FALSE}}, encoded as {{2}}
>  * {{BYTE}}, encoded as {{3}}
>  * {color:#FF0000}{{I16}}, encoded as {{4}}{color}
>  * {color:#FF0000}{{I32}}, encoded as {{5}}{color}
>  * {{I64}}, encoded as {{6}}
>  * {{DOUBLE}}, encoded as {{7}}
>  * {{BINARY}}, used for binary and string fields, encoded as {{8}}
>  * {{LIST}}, encoded as {{9}}
>  * {{SET}}, encoded as {{10}}
>  * {{MAP}}, encoded as {{11}}
>  * {{STRUCT}}, used for both structs and union fields, encoded as {{12}}
> In colleciton:
>  * {{BOOL}}, encoded as {{2}}
>  * {{BYTE}}, encoded as {{3}}
>  * {{DOUBLE}}, encoded as {{4}}
>  * {color:#FF0000}{{I16}}, encoded as {{6}}{color}
>  * {color:#FF0000}{{I32}}, encoded as {{8}}{color}
>  * {{I64}}, encoded as {{10}}
>  * {{STRING}}, used for binary and string fields, encoded as {{11}}
>  * {{STRUCT}}, used for structs and union fields, encoded as {{12}}
>  * {{MAP}}, encoded as {{13}}
>  * {{SET}}, encoded as {{14}}
>  * {{LIST}}, encoded as {{15}}
> {code:java}
> // code placeholder
> fn collection_u8_to_type(b: u8) -> crate::Result<TType> {    
>   match b {     
>    0x01 => Ok(TType::Bool), 
>    o => u8_to_type(o),  
>   }
> }
> fn u8_to_type(b: u8) -> crate::Result<TType> {    
>   match b {        
>         0x00 => Ok(TType::Stop),
>         0x03 => Ok(TType::I08), // equivalent to TType::Byte
>         0x04 => Ok(TType::I16),
>         0x05 => Ok(TType::I32),
>         0x06 => Ok(TType::I64),
>         0x07 => Ok(TType::Double),
>         0x08 => Ok(TType::String),
>         0x09 => Ok(TType::List),
>         0x0A => Ok(TType::Set),
>         0x0B => Ok(TType::Map),
>         0x0C => Ok(TType::Struct),
>         unkn => Err(crate::Error::Protocol(crate::ProtocolError {            
> kind: crate::ProtocolErrorKind::InvalidData,            message: 
> format!("cannot convert {} into TType", unkn), 
>        })),    
> }}
> {code}
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to