diff options
| author | Daniil Fedotov <dfedotov@pivotal.io> | 2016-01-25 15:57:54 +0000 |
|---|---|---|
| committer | Daniil Fedotov <dfedotov@pivotal.io> | 2016-01-25 15:57:54 +0000 |
| commit | 59ce03bfe4710f5a35765a5b49b2cc962b7773dd (patch) | |
| tree | 34c537f253e598b3d799fd709dfaa46e87078e36 /src | |
| parent | 1a292318690bdbf3ee60d63c52045f1dabb4be8e (diff) | |
| download | rabbitmq-server-git-59ce03bfe4710f5a35765a5b49b2cc962b7773dd.tar.gz | |
Support for callbacks on register/unregister in registry.
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_registry.erl | 25 |
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( |
