os_mon & alarm_handler in R10B-10

Serge Aleynikov serge@REDACTED
Sat Mar 25 02:23:26 CET 2006


For now I used the following patch to take care of this issue, but I 
would be curious to hear the opinion of the OTP staff.

Regards,

Serge

--- alarm_handler.erl.orig      Fri Mar 24 20:08:18 2006
+++ alarm_handler.erl   Fri Mar 24 20:19:15 2006
@@ -58,7 +58,12 @@
  %% Returns: [{AlarmId, AlarmDesc}]
  %%-----------------------------------------------------------------
  get_alarms() ->
-    gen_event:call(alarm_handler, alarm_handler, get_alarms).
+    case gen_event:which_handlers(alarm_handler) of
+    [M | _] ->
+        gen_event:call(alarm_handler, M, get_alarms);
+    [] ->
+        []
+    end.

  add_alarm_handler(Module) when atom(Module) ->
      gen_event:add_handler(alarm_handler, Module, []).


Serge Aleynikov wrote:
> Hi,
> 
> I've been experimenting with the reworked os_mon in R10B-10, and 
> encountered the following issue.
> 
> The documentation encourages to replace the default alarm handler with 
> something more sophisticated.  For that reason I created a custom 
> handler - lama_alarm_h (LAMA app in jungerl), which uses 
> gen_event:swap_sup_handler/3.
> 
> I initiate that handler prior to starting OS_MON, and then start OS_MON.
> 
> In the latest release R10B-10, OS_MON calls alarm_handler:get_alarms/0 
> upon startup.
> 
> This causes the 'alarm_handler' event manager issue a call in the 
> alarm_handler.erl module.  However, since that handler was replaced by a 
> custom alarm handler, the gen_event's call fails with
> {error, bad_module}.
> 
> gen_event always dispatches a call/3 to a specific handler module passed 
> as a parameter, e.g.:
> 
> -----[alarm_handler.erl (line: 60)]-----
> get_alarms() ->
>     gen_event:call(alarm_handler, alarm_handler, get_alarms).
> ----------------------------------------
> 
> Yet, if the alarm_handler handler was swapped by another module, the 
> gen_event:call will report an error, therefore crashing OS_MON.
> 
> One way to resolve this problem would be to introduce another exported 
> function in gen_event:
> 
> gen_event:call(EventMgrRef, Request) -> Result
> 
> Can the OTP team suggest some other workaround?
> 
> Serge
> 

-- 
Serge Aleynikov
R&D Telecom, IDT Corp.
Tel: (973) 438-3436
Fax: (973) 438-1464
serge@REDACTED



More information about the erlang-questions mailing list