Skip to content

Instantly share code, notes, and snippets.

@bosky101
Created December 3, 2008 23:30
Show Gist options
  • Save bosky101/31761 to your computer and use it in GitHub Desktop.
Save bosky101/31761 to your computer and use it in GitHub Desktop.
%%==============================================================================================
%% figuring out the best way to catch a gen_server call, when process group ceases to exist
%%
%% until i figure out why it disappears,i want to catch the current gen call arg's .so IMHO options are
%% ( i) recreate the group in the Else, and redo the call
%% OR
%% (ii) crash wih prev state and redo it somehow (not sure of how but i htink ive seen this being done)
%%
%% -b101
%%==============================================================================================
.
.
init(_Arg) ->
process_flag(trap_exit, true),
ProcessGroup = ?MODULE:group_name(),
ok=pg2:create(ProcessGroup),
ok=pg2:join(ProcessGroup,self()),
[ timer:apply_after(10000,X,runjob,[self()]) ||X <- [?MODULE] ],
{ok, ?MODULE:default()}.
.
.
.
runjob()->
ProcessGroup = ?MODULE:group_name(),
Pid = pg2:get_closest_pid(ProcessGroup),
case Pid of
SomePid when is_pid(SomePid) ->
?MODULE:runjob(SomePid);
_Else ->
erlang:exit( yaws_api:f("~p : ~p",[ProcessGroup,_Else]) )
end.
runjob(Pid)->
Timeout = ?CALL_TIMEOUT,
case catch gen_server:call(Pid,
{run},
Timeout) of
{'EXIT', {timeout, _}} ->
timer:apply_after(?RECHECK_DELAY, ?MODULE , runjob , [ ] );
recheck ->
timer:apply_after(?RECHECK_DELAY, ?MODULE , runjob , [ ] );
_Else ->
error_logger:info_msg("flowcontrol: runjob else...",[_Else])
end,
ok.
%%===============================================
%% exits
%%===============================================
=INFO REPORT==== 3-Dec-2008::20:31:53 ===
Termination due to REASON:shutdown
=INFO REPORT==== 3-Dec-2008::20:31:53 ===
Termination of hybridq_worker due to REASON shutdown, prev STATE ={ {1228,336275,973853}}
=INFO REPORT==== 3-Dec-2008::20:31:53 ===
ERROR: "flowcontrol: runjob else..." - [{'EXIT',
{{function_clause,
[{gen,
call,
[{error,
{no_process,
"hi_pg_flowcontrol_updater"}},
'$gen_call',
{run},
60000]},
{gen_server,
call,
3},
{hi_flowcontrol_updater,
runjob,
1}]},
{gen_server,
call,
[{error,
{no_process,
"hi_pg_flowcontrol_updater"}},
{run},
60000]}}}]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment