Implement async_void in alterl bindings
Summary:
- reply_type for async void functions is now async_void instead of
the empty struct definition
- async void functions should return "ok". otherwise the processor
will crash and the connection will be killed. Is this behaviour
expected?
Test Plan: tested using testAsync() in ThriftTest. Didn't used to work
but works now
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@666415 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/compiler/cpp/src/generate/t_alterl_generator.cc b/compiler/cpp/src/generate/t_alterl_generator.cc
index cb4c1af..f3d661f 100644
--- a/compiler/cpp/src/generate/t_alterl_generator.cc
+++ b/compiler/cpp/src/generate/t_alterl_generator.cc
@@ -527,6 +527,8 @@
if (!tfunction->get_returntype()->is_void())
indent(f_service_) << generate_type_term(tfunction->get_returntype(), true) << ";" << endl;
+ else if (tfunction->is_async())
+ indent(f_service_) << "async_void;" << endl;
else
indent(f_service_) << "{struct, []}" << ";" << endl;
indent_down();
@@ -537,13 +539,6 @@
indent_up();
indent(f_service_) << generate_type_term(xs, true) << ";" << endl;
indent_down();
-
- // function_info(Function, is_async):
- indent(f_service_) <<
- "function_info(" << name_atom << ", is_async) -> ";
-
- f_service_ << ((tfunction->is_async()) ? "true" : "false");
- f_service_ << ";" << endl;
}
diff --git a/lib/alterl/src/thrift_processor.erl b/lib/alterl/src/thrift_processor.erl
index c3434cd..2b435ac 100644
--- a/lib/alterl/src/thrift_processor.erl
+++ b/lib/alterl/src/thrift_processor.erl
@@ -73,7 +73,11 @@
ok = send_reply(OProto, Function, ?tMessageType_REPLY, Reply);
ok when ReplyType == {struct, []} ->
- ok = send_reply(OProto, Function, ?tMessageType_REPLY, {ReplyType, {StructName}})
+ ok = send_reply(OProto, Function, ?tMessageType_REPLY, {ReplyType, {StructName}});
+
+ ok when ReplyType == async_void ->
+ % no reply for async void
+ ok
end,
ok.
diff --git a/test/erl/src/test_server.erl b/test/erl/src/test_server.erl
index 1bd0e1c..d44e902 100644
--- a/test/erl/src/test_server.erl
+++ b/test/erl/src/test_server.erl
@@ -148,4 +148,8 @@
#xtruct{string_thing = "This is an Xception2"}});
_ ->
{reply, #xtruct{string_thing = Arg1}}
- end.
+ end;
+
+handle_function(testAsync, {Seconds}) ->
+ timer:sleep(1000 * Seconds),
+ ok.