Sylwester Lachiewicz created THRIFT-6384:
--------------------------------------------

             Summary: Go -remote stub calls ReadField<position> instead of the 
argument's field id, so it does not compile for some container arguments
                 Key: THRIFT-6384
                 URL: https://issues.apache.org/jira/browse/THRIFT-6384
             Project: Thrift
          Issue Type: Bug
          Components: Go - Compiler
    Affects Versions: 0.25.0, 0.24.0
            Reporter: Sylwester Lachiewicz
             Fix For: 0.26.0


The {{-remote}} tool the Go generator writes decodes a container argument by 
calling {{ReadField<N>}} on the args struct, with N the argument's position 
({{i + 1}} in 
[t_go_generator.cc|https://github.com/apache/thrift/blob/master/compiler/cpp/src/thrift/generate/t_go_generator.cc]).
 The args struct names its read methods after the field id, so the call does 
not compile whenever a container argument's id differs from its position: an 
explicit id other than the position, or no id at all (implicit ids are 
negative, and the method is {{ReadField_1}}).

{noformat}
namespace go remotemin
service S {
  void a(set<i32> opts)
  void d(5: list<i32> xs)
  void e(1: i32 a, 3: map<string,i32> m)
}
{noformat}
{noformat}
s-remote/s-remote.go: containerStruct0.ReadField1 undefined (type 
*remotemin.SAArgs has no field or method ReadField1)
s-remote/s-remote.go: containerStruct0.ReadField1 undefined (type 
*remotemin.SDArgs has no field or method ReadField1)
s-remote/s-remote.go: containerStruct1.ReadField2 undefined (type 
*remotemin.SEArgs has no field or method ReadField2)
{noformat}

The stub is a package inside the generated tree, so {{go build ./...}} over the 
generated code fails. Apache IoTDB's confignode.thrift hits it, for example 
with {{clearCache(set<i32> cacheClearOptions)}} and 
{{getSchemaPartitionTableWithSlots(map<string, 
list<common.TSeriesPartitionSlot>> dbSlotMap)}}. Scalar arguments are not 
affected. The code is the same in 0.24.0, 0.25.0 and master.

Related: THRIFT-6200, THRIFT-6239.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to