You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Jens Geyer (Jira)" <ji...@apache.org> on 2020/02/05 21:02:00 UTC

[jira] [Comment Edited] (THRIFT-5085) How do I execute a call to a server that supports multiple versions?

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

Jens Geyer edited comment on THRIFT-5085 at 2/5/20 9:01 PM:
------------------------------------------------------------

You can't do it that way, because the client is for a different service. Even if the methid names accidentally match like with {{findPosition}}, there is no guarantee that the call succeeds. The argument list may be differnt, there may be different return data or the throws clause may not match. From the interface contract, these are two different services.

But in that case you still have an option left. Thrift supports inheritance at the service level, like so:
{code:java}
service PositionService {
PositionDTO findPosition(1:PositionInputDTO) throws (1: PositionServiceException e);
}

service PositionServiceV2 extends PositionService {
OwnerStoresListDTO listPositions(1:ListPositionInputDTO)  throws (1:PositionServiceException e);
}
{code}
 

Of course, a server can still only respond to calls that are actually implemented server-side. Targeting a V2 client at a V1 server will not magically implement the V2 interface. 


was (Author: jensg):
You can't do it that way, because the client is for a different service. Even if the methid names accidentally match like with {{findPosition}}, there is no guarantee that the call succeeds. The argument list may be differnt, there may be different return data or the throws clause may not match. From the interface contract, these are two different services.

But in that case you still have an option left. Thrift supports inheritance at the service level, like so:

{code}
service PositionService {
PositionDTO findPosition(1:PositionInputDTO) throws (1: PositionServiceException e);
}

service PositionServiceV2 extends PositionService {
OwnerStoresListDTO listPositions(1:ListPositionInputDTO)  throws (1:PositionServiceException e);
}
{code}




 

 

> How do I execute a call to a server that supports multiple versions?
> --------------------------------------------------------------------
>
>                 Key: THRIFT-5085
>                 URL: https://issues.apache.org/jira/browse/THRIFT-5085
>             Project: Thrift
>          Issue Type: Question
>          Components: Go - Compiler, Go - Library
>    Affects Versions: 0.13.0
>         Environment: OS:macOS
> On the client-side, I've got auto-generated code for go
> On the server-side, I've got auto-generated code for java 
>            Reporter: Andres Camilo Martinez Cano
>            Priority: Major
>             Fix For: 0.13.0
>
>
> Hi, my apologies beforehand If I say something strange or weird. I'm still quite new to thrift but I love it so far.
> I have a thrift file that supports two services like so(both services use the same structs):
> {code:java}
> service PositionService {
>  PositionDTO findPosition(1:PositionInputDTO) throws (1: PositionServiceException e);
>  }
> service PositionServiceV2 {
>  PositionDTO findPosition(1:PositionInputDTO) throws (1: PositionServiceException e),
>  OwnerStoresListDTO listPositions(1:ListPositionInputDTO)  throws (1:PositionServiceException e);
>  }
>  {code}
> What I'm currently trying to do is to call the method \{{listPositions from the {{PositionServiceV2 }}but when I execute the call I keep receiving the error message "Invalid method name: listPositions" which makes me think that my call is being directed towards the PositionService even though I'm using the PostionServiceV2Client to make the call for this. Please help I don't know how to make this work. 
>  



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