summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniil Fedotov <dfedotov@pivotal.io>2016-01-25 15:57:54 +0000
committerDaniil Fedotov <dfedotov@pivotal.io>2016-01-25 15:57:54 +0000
commit59ce03bfe4710f5a35765a5b49b2cc962b7773dd (patch)
tree34c537f253e598b3d799fd709dfaa46e87078e36 /src
parent1a292318690bdbf3ee60d63c52045f1dabb4be8e (diff)
downloadrabbitmq-server-git-59ce03bfe4710f5a35765a5b49b2cc962b7773dd.tar.gz
Support for callbacks on register/unregister in registry.
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_registry.erl25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/rabbit_registry.erl b/src/rabbit_registry.erl
index db61c958ec..6633a279a7 100644
--- a/src/rabbit_registry.erl
+++ b/src/rabbit_registry.erl
@@ -87,12 +87,14 @@ internal_register(Class, TypeName, ModuleName)
RegArg = {{Class, internal_binary_to_type(TypeName)}, ModuleName},
true = ets:insert(?ETS_NAME, RegArg),
conditional_register(RegArg),
+ registered(RegArg),
ok.
internal_unregister(Class, TypeName) ->
UnregArg = {Class, internal_binary_to_type(TypeName)},
conditional_unregister(UnregArg),
true = ets:delete(?ETS_NAME, UnregArg),
+ unregistered(UnregArg),
ok.
%% register exchange decorator route callback only when implemented,
@@ -114,6 +116,29 @@ conditional_unregister({exchange_decorator, Type}) ->
conditional_unregister(_) ->
ok.
+% update channels to enable/disable interceptors
+registered({{Class, Type}, ModuleName}) ->
+ ClassModule = class_module(Class),
+ case proplists:get_value(registered, ClassModule:module_info(functions)) of
+ 2 -> ClassModule:registered(Type, ModuleName);
+ undefined -> ok;
+ Arity ->
+ rabbit_log:error("Wrong arity '~p' of ~p:registered. Should be 2",
+ [Arity, ClassModule])
+ end.
+
+unregistered({Class, Type}) ->
+ ClassModule = class_module(Class),
+ Functions = ClassModule:module_info(functions),
+ case proplists:get_value(unregistered, Functions) of
+ 1 -> ClassModule:unregistered(Type);
+ undefined -> ok;
+ Arity ->
+ rabbit_log:error("Wrong arity '~p' of ~p:unregistered. Should be 1",
+ [Arity, ClassModule])
+ end.
+
+
sanity_check_module(ClassModule, Module) ->
case catch lists:member(ClassModule,
lists:flatten(