[ https://issues.apache.org/jira/browse/THRIFT-5803?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17869948#comment-17869948 ]
Jens Geyer commented on THRIFT-5803: ------------------------------------ You explained "consistency". You did not explain "suggesteed need" for it. Do we need consistency or is it optional, and if so, why? > Inconsistencies in Handling Default Values for Required Fields Across Thrift > Implementations > -------------------------------------------------------------------------------------------- > > Key: THRIFT-5803 > URL: https://issues.apache.org/jira/browse/THRIFT-5803 > Project: Thrift > Issue Type: Bug > Affects Versions: 0.19.0, 0.20.0 > Reporter: Team_RPCtester > Priority: Major > > Hi, > We discover an inconsistent behavior with respect to default values for > required string fields. Specifically, in Go, a required string field is > automatically initialized to an empty string if not explicitly set, whereas > other languages do not automatically initialize this field. This > inconsistency can be illustrated with the following example: > Thrift Definition: > {code:java} > namespace go commonResource > struct StructClass_0 { > 1: required string f_1, > } > service DataService { > StructClass_0 Method_1(1: StructClass_0 agr_method_1) > } > {code} > Go client side, > {code:java} > agr_method_1_0 := commonResource.NewStructClass_0() > fmt.Println(agr_method_1_0) > // method_1_re_agr_method_1_0: StructClass_0({F_1:}) > {code} > python client side > {code:java} > agr_method_1 = StructClass_0() > print(agr_method_1) > # StructClass_0(f_1=None) > {code} > nodejs client side > {code:java} > arg_Method_1 = new ttypes.StructClass_0(); > console.log(arg_Method_1); > // { f_1: null } > {code} > GO server side > {code:java} > func (d DataServiceHandler) Method_1(ctx context.Context, agr_method_1 > *commonResource.StructClass_0) (re_agr_method_1 > *commonResource.StructClass_0, _err error) { > re_agr_method_1 = agr_method_1 > return re_agr_method_1, nil > } > {code} > *Behavior Observed:* > * On the Go client side, if agr_method_1_0 is sent with an uninitialized > f_1, Go automatically sets f_1 to an empty string. The server receives this > empty string and processes it accordingly. > * On the Node.js client side, if arg_Method_1 is sent with an uninitialized > f_1, Node.js client reports an error: "Required field f_1 is unset!" and does > not allow the call to proceed. > * On the Python client side, if agr_method_1 is sent with f_1 as null, the > Go server reports: "*commonResource.StructClass_0 error reading struct: > Required field F_1 is not, the Nodejs server will prompt “"Required field f_1 > is unset!"”, the Python server will return what it receives. > Can you help check this issue. > Thank you. -- This message was sent by Atlassian Jira (v8.20.10#820010)