[thrift] gut Erlang exception handling
Summary: * move type field to tException from subclasses
* add backtrace to tException
* add oop:is_a
* on exit, wrap exceptions in {thrift_exception, E} ... otherwise can't distinguish e.g. exit:{{tBinProtException, {tException, ...}}, Stack} vs. exit:{tBinProtException, {tException, ...} -- I hate erlang
* all throws/exits to tException:throw which does the wrapping described above
Reviewed By: eletuchy
Test Plan: been using this code on my live server ^_^
Revert: OK
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665350 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/erl/src/transport/tSocket.erl b/lib/erl/src/transport/tSocket.erl
index f002fd8..5aead1e 100644
--- a/lib/erl/src/transport/tSocket.erl
+++ b/lib/erl/src/transport/tSocket.erl
@@ -75,10 +75,8 @@
case gen_tcp:connect(Host, Port, Options) of
{error, _} ->
- exit(tTransportException:new(
- ?tTransportException_NOT_OPEN,
- "Could not connect to " ++ Host ++ ":" ++ Port)
- );
+ tException:throw(tTransportException,
+ [?tTransportException_NOT_OPEN, "Could not connect to " ++ Host ++ ":" ++ Port]);
{ok, Socket} ->
effectful_setHandle(This, Socket)
end.
@@ -97,7 +95,7 @@
case Val of
{error, _} ->
- throw(tTransportException:new(?tTransportException_NOT_OPEN, "in write"));
+ tException:throw(tTransportException, [?tTransportException_NOT_OPEN, "in write"]);
ok ->
{ok, This}
end.
@@ -108,13 +106,13 @@
{ok, []} ->
Host = oop:get(This, host),
Port = oop:get(This, port),
- throw(tTransportException:new(?tTransportException_UNKNOWN, "TSocket: Could not read " ++ Sz ++ "bytes from " ++ Host ++ ":" ++ Port));
+ tException:throw(tTransportException, [?tTransportException_UNKNOWN, "TSocket: Could not read " ++ Sz ++ "bytes from " ++ Host ++ ":" ++ Port]);
{ok, Data} ->
%% DEBUG
?INFO("tSocket: read ~p", [Data]),
Data;
{error, Error} ->
- exit(tTransportException:new(?tTransportException_NOT_OPEN, "in tSocket:read/2: gen_tcp:recv"))
+ tException:throw(tTransportException, [?tTransportException_NOT_OPEN, "in tSocket:read/2: gen_tcp:recv"])
end.
effectful_close(This) ->