diff options
author | Magnus Feuer <mfeuer@jaguarlandrover.com> | 2015-03-06 14:40:24 -0800 |
---|---|---|
committer | Magnus Feuer <mfeuer@jaguarlandrover.com> | 2015-03-06 14:40:24 -0800 |
commit | fde8bde8d09004e897072e47bc923dca2e63aed8 (patch) | |
tree | badd87bbdde28c4f97512f45710f8606dadb4229 | |
parent | 66c5a6f8fb4cc2f7bd1570f978ca4225bf1e72ee (diff) | |
download | rvi_core-fde8bde8d09004e897072e47bc923dca2e63aed8.tar.gz |
unregister_remote_services_by_name now handles an array of multiple servic enames
-rw-r--r-- | components/data_link_bert_rpc/src/data_link_bert_rpc_rpc.erl | 10 | ||||
-rw-r--r-- | components/service_discovery/src/service_discovery_rpc.erl | 32 |
2 files changed, 28 insertions, 14 deletions
diff --git a/components/data_link_bert_rpc/src/data_link_bert_rpc_rpc.erl b/components/data_link_bert_rpc/src/data_link_bert_rpc_rpc.erl index 8e9ec5f..7d8b2c8 100644 --- a/components/data_link_bert_rpc/src/data_link_bert_rpc_rpc.erl +++ b/components/data_link_bert_rpc/src/data_link_bert_rpc_rpc.erl @@ -353,19 +353,19 @@ handle_socket(_FromPid, RemoteIP, RemotePort, data, { service_announce, TransactionID, unavailable, - Service, + Services, Signature}, _ExtraArgs) -> ?info("data_link_bert:service_announce(unavailable): TransactionID: ~p", [ TransactionID ]), ?info("data_link_bert:service_announce(unavailable): Remote IP: ~p", [ RemoteIP ]), ?info("data_link_bert:service_announce(unavailable): Remote Port: ~p", [ RemotePort ]), ?info("data_link_bert:service_announce(unavailable): Signature: ~p", [ Signature ]), - ?info("data_link_bert:service_announce(unavailable): Service: ~p", [ Service ]), + ?info("data_link_bert:service_announce(unavailable): Service: ~p", [ Services ]), %% Register the received services with all relevant components - - rvi_common:send_component_request(service_discovery, unregister_single_remote_service, + + rvi_common:send_component_request(service_discovery, unregister_remote_services_by_name, [ - {service, Service} + {services, Services} ]), ok; diff --git a/components/service_discovery/src/service_discovery_rpc.erl b/components/service_discovery/src/service_discovery_rpc.erl index d3e92cf..ef54518 100644 --- a/components/service_discovery/src/service_discovery_rpc.erl +++ b/components/service_discovery/src/service_discovery_rpc.erl @@ -175,8 +175,8 @@ unregister_remote_services_by_address(NetworkAddress) -> {ok, [ { status, rvi_common:json_rpc_status(ok)}]}. -unregister_single_remote_service(Service) -> - ?info("service_discovery_rpc:unregister_single_remote_service(): ~p", +unregister_single_remote_service_by_name_(Service) -> + ?info("service_discovery_rpc:unregister_remote_services_by_name(): ~p", [Service]), @@ -187,8 +187,18 @@ unregister_single_remote_service(Service) -> network_address = '_' }), + Prior = ets:foldl(fun(#service_entry { service = Svc }, Acc) -> + [ Svc | Acc ] end, + [], ?REMOTE_SERVICE_TABLE), + + ?debug("Before removing ~p: ~p", [ Service, Prior ]), ets:delete(?REMOTE_SERVICE_TABLE, Service), + After = ets:foldl(fun(#service_entry { service = Svc }, Acc) -> + [ Svc | Acc ] end, + [], ?REMOTE_SERVICE_TABLE), + ?debug("AFter removing ~p: ~p", [ Service, After ]), + %% Forward to service edge so that it can inform its locally %% connected services. %% Build a list of all our local services' addresses to provide @@ -206,8 +216,12 @@ unregister_single_remote_service(Service) -> { services, [Service]} ]), - {ok, [ { status, rvi_common:json_rpc_status(ok)}]}. + ok. + +unregister_remote_services_by_name(Services) -> + [ unregister_single_remote_service_by_name_(Svc) || Svc <- Services], + {ok, [ { status, rvi_common:json_rpc_status(ok)}]}. unregister_local_service(Service) -> ?info("service_discovery_rpc:unregister_local_service(): Service~p", @@ -440,11 +454,11 @@ handle_rpc("unregister_remote_services_by_address", Args) -> %% Loop through the services and de-register them. unregister_remote_services_by_address(Address); -handle_rpc("unregister_single_remote_service", Args) -> - {ok, Service} = rvi_common:get_json_element(["service"], Args), +handle_rpc("unregister_remote_services_by_name", Args) -> + {ok, Services} = rvi_common:get_json_element(["services"], Args), %% Loop through the services and de-register them. - unregister_single_remote_service(Service); + unregister_remote_services_by_name(Services); handle_rpc("unregister_local_service", Args) -> {ok, Service} = rvi_common:get_json_element(["service"], Args), @@ -535,9 +549,9 @@ handle_call({rvi_call, unregister_remote_services_by_address, Args}, _From, Stat {_, Address} = lists:keyfind(network_address, 1, Args), {reply, unregister_remote_services_by_address(Address), State }; -handle_call({rvi_call, unregister_single_remote_service, Args}, _From, State) -> - {_, Service} = lists:keyfind(service, 1, Args), - {reply, unregister_single_remote_service(Service), State }; +handle_call({rvi_call, unregister_remote_services_by_name, Args}, _From, State) -> + {_, Services} = lists:keyfind(services, 1, Args), + {reply, unregister_remote_services_by_name(Services), State }; handle_call({rvi_call, unregister_local_service, Args}, _From, State) -> {_, Service} = lists:keyfind(service, 1, Args), |