Yufan Gong created THRIFT-5264:
----------------------------------

             Summary: Argument requiredness and field requiredness
                 Key: THRIFT-5264
                 URL: https://issues.apache.org/jira/browse/THRIFT-5264
             Project: Thrift
          Issue Type: Question
    Affects Versions: 0.13.0
            Reporter: Yufan Gong


I have two questions regarding the requiredness in the generated code.

1. Argument requiredness is ignored

When defining a method 
{code:java}
string echo(1: optional string msg){code}
got
{code:java}
optional keyword is ignored in argument lists. 
{code}
We would like to ask about the future plan of supporting argument requiredness. 
Full context: our team maintains a Thrift code generator built upon Apache 
Thrift, [Scrooge|https://github.com/twitter/scrooge], which now respects the 
optional keyword in the argument list and generates an Optional argument. We 
want to align with the libthrift's future plan to reduce potential incompatible 
issues.


2. Field requiredness is unmatched across languages

We noticed that Apache Thrift generated different behavioral code for different 
languages.

Taking this as an example
{code:java}
struct TestRequiredness {
 1: i32 A
 2: required i32 B
 3: optional i32 C
}{code}
Generated Java code has 3 different read/write requiredness combinations for 
all three, and they are what we expected. OptInReqOut: optional write and 
required Read, Required: required on both read and write, Optional: optional on 
both read and write.

However, the generated Python code treats all three the same: Optional read and 
write. (there is a validate method checking for B, but doesn't seem to be 
forced on either read or write path).

After a quick skim, it seems the generated PHP code has the same behavior as 
Python.

Assuming python client talking to java server with required fields set, this 
could cause the TProtocolExceptions being propagated to the server, while 
python client should catch them earlier.

Thanks!



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

Reply via email to