summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMagnus Feuer <mfeuer@jaguarlandrover.com>2015-03-06 14:40:24 -0800
committerMagnus Feuer <mfeuer@jaguarlandrover.com>2015-03-06 14:40:24 -0800
commitfde8bde8d09004e897072e47bc923dca2e63aed8 (patch)
treebadd87bbdde28c4f97512f45710f8606dadb4229
parent66c5a6f8fb4cc2f7bd1570f978ca4225bf1e72ee (diff)
downloadrvi_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.erl10
-rw-r--r--components/service_discovery/src/service_discovery_rpc.erl32
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),