[erlang-questions] Why does this crash?
Vimal Kumar
vimal7370@REDACTED
Sun Sep 27 09:30:30 CEST 2015
Hi all,
Erlang newbie here. This is my first attempt to write an OTP module myself
- a simple bank server. API functions allow users to register, login,
deposit/withdraw money to/from their own account.
The bank_server:login/2 function returns a secret key (sort of unique
session id, lets assume) which is required for further meaningful
transactions (like bank_server:deposit/3 or bank_server:withdraw/3).
1> bank_server:start_link().
{ok,<0.549.0>}
2> whereis(bank_server).
<0.549.0>
3> bank_server:new_user(user1, "mysecretpass1").
{ok}
4> {_, SecretKey1} = bank_server:login(user1, "mysecretpass1").
{ok,"lYWrBFIi7CoeYN8KSK3QgA=="}
5> bank_server:deposit(user1, SecretKey1, 10.00).
{ok,success}
6> bank_server:check_balance(user1, SecretKey1).
{ok,10.0}
7> bank_server:new_user(user2, "mysecretpass2").
{ok}
8> {_, SecretKey1} = bank_server:login(user2, "mysecretpass2").
** exception error: no match of right hand side value {ok,
"vYaWQbNQvROqXybVf424lQ=="}
9> whereis(bank_server).
undefined
In line 8, I understand that I should have used a different variable, since
SecretKey1 already has a value. But I am curious why a simple mistake ***
from client side *** crashed the server itself? Is there any way to avoid
it?
I am yet to learn OTP supervisors, but I believe it might have restarted
the server without any delay in such a crash.
The complete code for bank_server.erl is available at
http://pastebin.com/4bMWjNG7 to check.
Thank you!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20150927/e5948bff/attachment.htm>
More information about the erlang-questions
mailing list