Correction:
exception info that might need to be returned
from the client to be raised there.
should read
exception info that might need to be returned
from the SERVER TO THE client to be raised there.
JensG
-----Ursprüngliche Nachricht-----
From: Jens Geyer
Sent: Wednesday, November 20, 2013 4:57 PM
To: [email protected]
Subject: Re: Thrift optional type for rpc response
Hi Aditya Sarawgi,
I think most of the confusion originates from making a mental difference
between call arguments and response data. Think of the service function call
as something like
response = service.function( arg1, arg2, arg3)
The args could be a struct as well, like
request = struct {
1: i32 arg1
2: string arg2
3: bool arg3
}
thus we could write
response = service.function( request)
Now let's assume for a moment, that we could do the following with Thrift
(which we actually can't):
void service.function( in request, out response)
In fact, behind the scenes, exactly that happens. Both request and response
are transported in a struct, and responses additionally do carry any
exception info that might need to be returned from the client to be raised
there.
You see, there is no conceptual difference between a request and response
data. The only difference is, that Thrift IDL syntax does not allow multiple
fields to be returned, so you have to wrap them into a struct. But that is a
purely syntactical limitation.
1) Should optional be ever used in a response
Yes, of yourse. It absolutely makes sense to be able to return only some
data, for various reasons. I can give you plenty of examples.
2) If doesn't return the msgs until I do a
_return.__set_msgs(vector_of_msgs) which looks hacky to me.
Maybe I overlook something, but of course you have to assign the return
value somehow. What language is that?
Any guidance on this is much appreciated, the documentation is really
sparse.
Maybe you want to look at the tutorials, which do a pretty good job
explaining the fundamentals. I'm not sure what extra documentation you are
looking for with regard to the above?
Have fun,
JensG
-----Ursprüngliche Nachricht-----
From: Aditya Sarawgi
Sent: Wednesday, November 20, 2013 9:53 AM
To: [email protected]
Subject: Thrift optional type for rpc response
Hi Everyone,
I have some questions about the way I am using thrift optional types or
rather I am not sure if this is the right way to use it. The thrift file
looks something like this
namespace something
struct Response {
1: Status status,
2: optional list<string> msgs
}
service Something {
Respone getMessages(1: i16 id)
}
Now first of all I am confused by the following
1) Should optional be ever used in a response
2) If doesn't return the msgs until I do a
_return.__set_msgs(vector_of_msgs) which looks hacky to me.
Any guidance on this is much appreciated, the documentation is really
sparse.
Thanks
Aditya Sarawgi