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

Reply via email to