From: David Reiss Date: Thu, 4 Jun 2009 02:01:28 +0000 (+0000) Subject: THRIFT-211. erlang: Allow clients to be created without connecting X-Git-Tag: 0.2.0~87 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=bb97fd90a501ce7a7b37170295c4d02c719a2150;p=common%2Fthrift.git THRIFT-211. erlang: Allow clients to be created without connecting Add a client option to prevent the initial connect (which causes the protocol factory to be ignored). The main use case for this is testing the proper handling of clients that cannot connect. Update the tether test to use this feature instead of a raw gen_server:start call. git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@781635 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/lib/erl/src/thrift_client.erl b/lib/erl/src/thrift_client.erl index d70df344..92c531ab 100644 --- a/lib/erl/src/thrift_client.erl +++ b/lib/erl/src/thrift_client.erl @@ -109,16 +109,33 @@ start(ProtocolFactory, Service, ClientOpts) start end, - case gen_server:Starter(?MODULE, [Service], []) of - {ok, Pid} -> - case gen_server:call(Pid, {connect, ProtocolFactory}) of - ok -> - {ok, Pid}; - Error -> - Error + Connect = + case lists:keysearch(connect, 1, ClientOpts) of + {value, {connect, Choice}} -> + Choice; + _ -> + %% By default, connect at creation-time. + true + end, + + + Started = gen_server:Starter(?MODULE, [Service], []), + + if + Connect -> + case Started of + {ok, Pid} -> + case gen_server:call(Pid, {connect, ProtocolFactory}) of + ok -> + {ok, Pid}; + Error -> + Error + end; + Else -> + Else end; - Else -> - Else + true -> + Started end. call(Client, Function, Args) diff --git a/test/erl/src/test_tether.erl b/test/erl/src/test_tether.erl index 07d1ee99..35794e63 100644 --- a/test/erl/src/test_tether.erl +++ b/test/erl/src/test_tether.erl @@ -62,6 +62,9 @@ check_extras(N) -> io:format("FAIL. Expected ~p more clients.~n", [N]) end. +make_thrift_client(Opts) -> + thrift_client:start(fun()->ok end, thriftTest_thrift, Opts). + make_protocol_factory(Port) -> {ok, TransportFactory} = thrift_socket_transport:new_transport_factory( @@ -73,9 +76,9 @@ make_protocol_factory(Port) -> test_start() -> - {ok, Client1} = gen_server:start(thrift_client, [thriftTest_thrift], []), + {ok, Client1} = make_thrift_client([{connect, false}]), tester ! {client, unlinked, Client1}, - {ok, Client2} = gen_server:start(thrift_client, [thriftTest_thrift], []), + {ok, Client2} = make_thrift_client([{connect, false}]), io:format("PASS. Unlinked clients created.~n"), try gen_server:call(Client2, {connect, make_protocol_factory(2)}), @@ -93,9 +96,9 @@ test_start() -> exit(die). test_linked() -> - {ok, Client1} = gen_server:start_link(thrift_client, [thriftTest_thrift], []), + {ok, Client1} = make_thrift_client([{connect, false}, {monitor, link}]), tester ! {client, linked, Client1}, - {ok, Client2} = gen_server:start_link(thrift_client, [thriftTest_thrift], []), + {ok, Client2} = make_thrift_client([{connect, false}, {monitor, link}]), io:format("PASS. Linked clients created.~n"), try gen_server:call(Client2, {connect, make_protocol_factory(2)}),