You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@thrift.apache.org by Michał Ziemba <zi...@gmail.com> on 2011/08/24 15:30:51 UTC
Problem with thrift c_glib library and scribe
Hello,
I would like to use thrift's c_glib library to generate code that allows
me to send log messages from C programs to Facebook's scribe. I managed
to generate some code with scribe.thrift specification, and have written
a client code that should send a message to a local scribe instance.
I am using TBinaryProtocol and TFramedTransport (as needed by scribe),
and as a result the message is sent but scribe produces an error:
Thrift: Wed Aug 24 13:57:38 2011 TConnection:workSocket() Negative frame
size -2147418111, remote side not using TFramedTransport?
As you can see in the client code below, I am actually using
TFramedTransport, am I?
What can be the problem?
I am using thrift 0.6.1 and scribe 2.2 on a debian squeeze machine.
/* create a ThriftSocket */
tsocket = g_object_new(THRIFT_TYPE_SOCKET, "hostname", "localhost",
"port", 1464, NULL);
/* create ThriftFramedTransport */
transport = g_object_new(THRIFT_TYPE_FRAMED_TRANSPORT, "transport",
THRIFT_TRANSPORT(tsocket), NULL);
thrift_framed_transport_open(transport, NULL);
assert(thrift_framed_transport_is_open(transport));
/* create a ThriftBinaryProtocol */
tb = g_object_new(THRIFT_TYPE_BINARY_PROTOCOL, "transport",
tsocket, NULL);
protocol = THRIFT_PROTOCOL(tb);
assert(protocol != NULL);
/* create a Scribe message */
message = g_object_new(TYPE_LOG_ENTRY, "category", "test_category",
"message", "test message from C", NULL);
messages = g_ptr_array_new();
g_ptr_array_add(messages, &message);
/* create a Scribe Client */
client = g_object_new(TYPE_SCRIBE_CLIENT, "input_protocol",
protocol, "output_protocol", protocol, NULL);
iface = SCRIBE_IF(client);
assert(thrift_framed_transport_is_open(transport));
scribe_client_log(iface, result, messages, &err);
Thanks for any help,
Michał Ziemba
Re: Problem with thrift c_glib library and scribe
Posted by Michał Ziemba <zi...@gmail.com>.
Thanks for the reply, I will try it out.
On 24.08.2011 15:43, Jake Farrell wrote:
> I wrote this wrapper awhile ago around the c++ client, this was before the c_glib client was fully available. Should be easy enough to add into your project if you need it right away.
>
> https://github.com/bterm/sandbox/tree/master/c/scribe_client
>
>
>
> On Aug 24, 2011, at 8:30 AM, Michał Ziemba wrote:
>
>> Hello,
>>
>> I would like to use thrift's c_glib library to generate code that allows
>> me to send log messages from C programs to Facebook's scribe. I managed
>> to generate some code with scribe.thrift specification, and have written
>> a client code that should send a message to a local scribe instance.
>>
>> I am using TBinaryProtocol and TFramedTransport (as needed by scribe),
>> and as a result the message is sent but scribe produces an error:
>>
>> Thrift: Wed Aug 24 13:57:38 2011 TConnection:workSocket() Negative frame
>> size -2147418111, remote side not using TFramedTransport?
>>
>> As you can see in the client code below, I am actually using
>> TFramedTransport, am I?
>> What can be the problem?
>> I am using thrift 0.6.1 and scribe 2.2 on a debian squeeze machine.
>>
>>
>> /* create a ThriftSocket */
>> tsocket = g_object_new(THRIFT_TYPE_SOCKET, "hostname", "localhost",
>> "port", 1464, NULL);
>>
>> /* create ThriftFramedTransport */
>> transport = g_object_new(THRIFT_TYPE_FRAMED_TRANSPORT, "transport",
>> THRIFT_TRANSPORT(tsocket), NULL);
>>
>> thrift_framed_transport_open(transport, NULL);
>> assert(thrift_framed_transport_is_open(transport));
>>
>> /* create a ThriftBinaryProtocol */
>> tb = g_object_new(THRIFT_TYPE_BINARY_PROTOCOL, "transport",
>> tsocket, NULL);
>> protocol = THRIFT_PROTOCOL(tb);
>> assert(protocol != NULL);
>>
>> /* create a Scribe message */
>> message = g_object_new(TYPE_LOG_ENTRY, "category", "test_category",
>> "message", "test message from C", NULL);
>>
>> messages = g_ptr_array_new();
>> g_ptr_array_add(messages,&message);
>>
>> /* create a Scribe Client */
>> client = g_object_new(TYPE_SCRIBE_CLIENT, "input_protocol",
>> protocol, "output_protocol", protocol, NULL);
>>
>> iface = SCRIBE_IF(client);
>> assert(thrift_framed_transport_is_open(transport));
>>
>> scribe_client_log(iface, result, messages,&err);
>>
>>
>> Thanks for any help,
>>
>> Michał Ziemba
Re: Problem with thrift c_glib library and scribe
Posted by Jake Farrell <jf...@apache.org>.
I wrote this wrapper awhile ago around the c++ client, this was before the c_glib client was fully available. Should be easy enough to add into your project if you need it right away.
https://github.com/bterm/sandbox/tree/master/c/scribe_client
On Aug 24, 2011, at 8:30 AM, Michał Ziemba wrote:
> Hello,
>
> I would like to use thrift's c_glib library to generate code that allows
> me to send log messages from C programs to Facebook's scribe. I managed
> to generate some code with scribe.thrift specification, and have written
> a client code that should send a message to a local scribe instance.
>
> I am using TBinaryProtocol and TFramedTransport (as needed by scribe),
> and as a result the message is sent but scribe produces an error:
>
> Thrift: Wed Aug 24 13:57:38 2011 TConnection:workSocket() Negative frame
> size -2147418111, remote side not using TFramedTransport?
>
> As you can see in the client code below, I am actually using
> TFramedTransport, am I?
> What can be the problem?
> I am using thrift 0.6.1 and scribe 2.2 on a debian squeeze machine.
>
>
> /* create a ThriftSocket */
> tsocket = g_object_new(THRIFT_TYPE_SOCKET, "hostname", "localhost",
> "port", 1464, NULL);
>
> /* create ThriftFramedTransport */
> transport = g_object_new(THRIFT_TYPE_FRAMED_TRANSPORT, "transport",
> THRIFT_TRANSPORT(tsocket), NULL);
>
> thrift_framed_transport_open(transport, NULL);
> assert(thrift_framed_transport_is_open(transport));
>
> /* create a ThriftBinaryProtocol */
> tb = g_object_new(THRIFT_TYPE_BINARY_PROTOCOL, "transport",
> tsocket, NULL);
> protocol = THRIFT_PROTOCOL(tb);
> assert(protocol != NULL);
>
> /* create a Scribe message */
> message = g_object_new(TYPE_LOG_ENTRY, "category", "test_category",
> "message", "test message from C", NULL);
>
> messages = g_ptr_array_new();
> g_ptr_array_add(messages, &message);
>
> /* create a Scribe Client */
> client = g_object_new(TYPE_SCRIBE_CLIENT, "input_protocol",
> protocol, "output_protocol", protocol, NULL);
>
> iface = SCRIBE_IF(client);
> assert(thrift_framed_transport_is_open(transport));
>
> scribe_client_log(iface, result, messages, &err);
>
>
> Thanks for any help,
>
> Michał Ziemba