[ https://issues.apache.org/jira/browse/THRIFT-5802?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Team_RPCtester updated THRIFT-5802: ----------------------------------- Description: *Hi,* We discover an inconsistent behavior under V20.0 and V19.0 by the following example. The thrift file: {code:java} namespace java com.example namespace go commonResource service DataService { set<i8> Method_1(1: set<i8> agr_method_1) } {code} When using Go,Py3 and Node.js as the client side(writer) and Node.js as the server side(reader) with the protocol set to “json” and the transport set to “framed“. We sent the value [10, 43, 38, 38, -2]to the server, but the server received differently. The received are respectively nothing, [10, 43, 38, -2] and [10, 43, 38, 38, -2] from Go,Py3 and Node.js which is unexpected. Here is the relevant code:We use agr_method_1_0 as the parameter sent to the client side(writer). Go client side : It throws an error “[]int8 error writing set field: slice is not unique back” {code:java} set_item_0 := []int8 {10, 43, 38, 38, -2} re_1, err := dataserviceclient.Method_1(context.Background(),set_item_0) if err != nil { fmt.Println("Method_1 receives error ", err, " back") } else { fmt.Println("Method_1 receives ", re_1, " back") } {code} py3 client side {code:java} agr_method_1 = [10, 43, 38, 38, -2] try: re_1 = client.Method_1(agr_method_1) # re_1: [10, 43, 38, -2] except Exception as ex: print(f"Method_1 receives error {ex} back") {code} Nodejs client side {code:java} const arg_Method_1 = [10, 43, 38, 38, -2]; console.log("Method_1 sends ", arg_Method_1, " end"); try { const re_1 = await client.Method_1(arg_Method_1); console.log("Method_1 receives ", re_1, " back"); //re_1 [10, 43, 38, 38, -2] } catch (error) { console.log("Method_1 receives error ", error, " back"); } {code} Nodejs server: {code:java} Method_1: async function(agr_method_1, result) { console.log("Method_1 receives ", agr_method_1); result(null, agr_method_1); } {code} The Go client throws an error before transmitting the parameter, indicating that the items are not unique. The Node.js client transmits the duplicate values and receives duplicated values from the Node.js server. The Python client automatically de-duplicates the values and receives the de-duplicated values. This behavior is inconsistent across the different clients. Can you help check the issue? Thank you. was: *Hi,* We discover an inconsistent behavior under V20.0 and V19.0 by the following example. The thrift file: {code:java} namespace java com.example namespace go commonResource service DataService { set<i8> Method_1(1: set<i8> agr_method_1) } {code} When using Go,Py3 and Node.js as the client side(writer) and Node.js as the server side(reader) with the protocol set to “json” and the transport set to “framed“. We sent the value [10, 43, 38, 38, -2]to the server, but the server received differently. The received are respectively nothing, [10, 43, 38, -2] and [10, 43, 38, 38, -2] from Go,Py3 and Node.js which is unexpected. Here is the relevant code:We use agr_method_1_0 as the parameter sent to the client side(writer). Go client side : It throws an error “[]int8 error writing set field: slice is not unique back” {code:java} set_item_0 := []int8 {10, 43, 38, 38, -2} re_1, err := dataserviceclient.Method_1(context.Background(),set_item_0) if err != nil { fmt.Println("Method_1 receives error ", err, " back") } else { fmt.Println("Method_1 receives ", re_1, " back") } {code} py3 client side {code:java} agr_method_1 = [10, 43, 38, 38, -2] try: re_1 = client.Method_1(agr_method_1) # re_1: [10, 43, 38, -2] except Exception as ex: print(f"Method_1 receives error {ex} back") {code} Nodejs client side {code:java} const arg_Method_1 = [10, 43, 38, 38, -2]; console.log("Method_1 sends ", arg_Method_1, " end"); try { const re_1 = await client.Method_1(arg_Method_1); console.log("Method_1 receives ", re_1, " back"); //re_1 [10, 43, 38, 38, -2] } catch (error) { console.log("Method_1 receives error ", error, " back"); } {code} Nodejs server: {code:java} Method_1: async function(agr_method_1, result) { console.log("Method_1 receives ", agr_method_1); result(null, agr_method_1); } {code} The Go client throws an error before transmitting the parameter, indicating that the items are not unique. The Node.js client transmits the duplicate values and receives de-duplicated values from the Python server. The Python client automatically de-duplicates the values and receives the de-duplicated values. This behavior is inconsistent across the different clients. Can you help check the issue? Thank you. > Inconsistent Validation for transmitted values > ----------------------------------------------- > > Key: THRIFT-5802 > URL: https://issues.apache.org/jira/browse/THRIFT-5802 > Project: Thrift > Issue Type: Bug > Affects Versions: 0.19.0, 0.20.0 > Reporter: Team_RPCtester > Priority: Major > > *Hi,* > We discover an inconsistent behavior under V20.0 and V19.0 by the following > example. > The thrift file: > {code:java} > namespace java com.example > namespace go commonResource > service DataService { > set<i8> Method_1(1: set<i8> agr_method_1) > } > {code} > When using Go,Py3 and Node.js as the client side(writer) and Node.js as the > server side(reader) with the protocol set to “json” and the transport set to > “framed“. We sent the value [10, 43, 38, 38, -2]to the server, but the server > received differently. The received are respectively nothing, [10, 43, 38, -2] > and [10, 43, 38, 38, -2] from Go,Py3 and Node.js which is unexpected. Here > is the relevant code:We use agr_method_1_0 as the parameter sent to the > client side(writer). > Go client side : It throws an error “[]int8 error writing set field: slice > is not unique back” > {code:java} > set_item_0 := []int8 {10, 43, 38, 38, -2} > re_1, err := dataserviceclient.Method_1(context.Background(),set_item_0) > if err != nil { > fmt.Println("Method_1 receives error ", err, " back") > } else { > fmt.Println("Method_1 receives ", re_1, " back") > } > {code} > py3 client side > {code:java} > agr_method_1 = [10, 43, 38, 38, -2] > try: > re_1 = client.Method_1(agr_method_1) > # re_1: [10, 43, 38, -2] > except Exception as ex: > print(f"Method_1 receives error {ex} back") > {code} > Nodejs client side > {code:java} > const arg_Method_1 = [10, 43, 38, 38, -2]; > console.log("Method_1 sends ", arg_Method_1, " end"); > try { > const re_1 = await client.Method_1(arg_Method_1); > console.log("Method_1 receives ", re_1, " back"); > //re_1 [10, 43, 38, 38, -2] > } catch (error) { > console.log("Method_1 receives error ", error, " back"); > } > {code} > Nodejs server: > {code:java} > Method_1: async function(agr_method_1, result) { > console.log("Method_1 receives ", agr_method_1); > result(null, agr_method_1); > } > {code} > The Go client throws an error before transmitting the parameter, indicating > that the items are not unique. The Node.js client transmits the duplicate > values and receives duplicated values from the Node.js server. The Python > client automatically de-duplicates the values and receives the de-duplicated > values. This behavior is inconsistent across the different clients. > Can you help check the issue? > Thank you. > -- This message was sent by Atlassian Jira (v8.20.10#820010)