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