Reputation: 318
I am trying to use this example but it always return write_len = 10 bytes.
ThriftTransport* transport = THRIFT_TRANSPORT(
g_object_new(THRIFT_TYPE_MEMORY_BUFFER, "buf_size", 8096, NULL));
ThriftProtocol* protocol = THRIFT_PROTOCOL(
g_object_new(THRIFT_TYPE_BINARY_PROTOCOL, "transport", transport,
NULL));
Exception* src = g_object_new(TYPE_EXCEPTION, NULL);
ExceptionClass* cls = EXCEPTION_GET_CLASS(src);
g_object_set(src,
"ex_sign", exception_signature,
"cl_sign", class_signature,
"caught", catch_method != NULL,
NULL);
int write_len = THRIFT_STRUCT_CLASS(cls)->write(THRIFT_STRUCT(src), protocol, &error);
Upvotes: 2
Views: 313
Reputation: 318
After some research and with the help of community I came up with serializing solution that works not only with master branch, but with 0.9.3 version as well. Actually we don't need variable write_len at all:
ThriftMemoryBuffer* tbuffer = g_object_new(THRIFT_TYPE_MEMORY_BUFFER,
"buf_size", 2048, NULL);
ThriftTransport *transport = NULL;
ThriftProtocol* protocol = NULL;
GError* error = NULL;
if (tbuffer) {
transport = THRIFT_TRANSPORT(tbuffer);
thrift_transport_open(transport, &error);
protocol =
THRIFT_PROTOCOL(
g_object_new(THRIFT_TYPE_BINARY_PROTOCOL, "transport", transport, NULL));
if (protocol) {
ExceptionData* exception_data = g_object_new(TYPE_EXCEPTION_DATA, "ex_sign",
exception_signature, "cl_sign", class_signature, "caught",
catch_method != NULL,
NULL);
if (exception_data) {
ThriftStructClass* cls = THRIFT_STRUCT_CLASS(EXCEPTION_DATA_GET_CLASS(exception_data));
cls->write(exception_data, protocol, &error);
if(tbuffer->buf != NULL) {
printf("Buffer length %i bytes\n", tbuffer->buf->len);
send_kafka_message((const void *)tbuffer->buf->data, tbuffer->buf->len);
}
g_object_unref(exception_data);
}
g_object_unref(protocol);
}
if (thrift_transport_is_open(transport)) {
thrift_transport_close(transport, &error);
}
g_object_unref(tbuffer);
}
Upvotes: 1
Reputation:
This was a bug in the C (GLib) implementation that was reported and fixed just recently, so you'll need to fetch and build the latest Thrift source from git for the example to work correctly.
If you're curious, you can see the discussion on the user mailing list that led to the bug being identified.
Upvotes: 1