diff options
author | Magnus Feuer <mfeuer@jaguarlandrover.com> | 2014-11-06 16:37:18 -0800 |
---|---|---|
committer | Magnus Feuer <mfeuer@jaguarlandrover.com> | 2014-11-06 16:37:18 -0800 |
commit | 84d4de2702a6d8b4bd5066c10bc2a88e99fe7fc4 (patch) | |
tree | 344d22693d0b0a364eb095a2a685bd6e5d26f33b /components/schedule | |
parent | ed72af918b6eb4e7943dd06c9759bb106d424588 (diff) | |
download | rvi_core-84d4de2702a6d8b4bd5066c10bc2a88e99fe7fc4.tar.gz |
Added handling of a data link loss, with the removal of all associated services.
Diffstat (limited to 'components/schedule')
-rw-r--r-- | components/schedule/src/schedule.erl | 39 | ||||
-rw-r--r-- | components/schedule/src/schedule_rpc.erl | 8 |
2 files changed, 20 insertions, 27 deletions
diff --git a/components/schedule/src/schedule.erl b/components/schedule/src/schedule.erl index bc5ac9b..c9221ae 100644 --- a/components/schedule/src/schedule.erl +++ b/components/schedule/src/schedule.erl @@ -111,8 +111,8 @@ schedule_message(SvcName, register_remote_services(NetworkAddress, AvailableServices) -> gen_server:cast(?SERVER, { register_remote_services, NetworkAddress, AvailableServices }). -unregister_remote_services(NetworkAddress) -> - gen_server:cast(?SERVER, { unregister_remote_services, NetworkAddress }). +unregister_remote_services(ServiceNames) -> + gen_server:cast(?SERVER, { unregister_remote_services, ServiceNames }). %%-------------------------------------------------------------------- %% @private @@ -179,9 +179,9 @@ handle_cast( {register_remote_services, NetworkAddress, AvailableServices}, St) {noreply, NSt}; -handle_cast( {unregister_remote_services, NetworkAddress}, St) -> - ?info("schedule:register_remote_services(): NetworkAddress: ~p", [NetworkAddress]), - +handle_cast( {unregister_remote_services, ServiceNames}, St) -> + ?info("schedule:unregister_remote_services(): Services: ~p", [ServiceNames]), + {ok, NSt} = multiple_services_unavailable(ServiceNames, St), {noreply, NSt }; handle_cast(_Msg, St) -> @@ -335,7 +335,7 @@ try_sending_messages(#service { ?debug("schedule:try_send(): SvcName: ~p", [SvcName]), ?debug("schedule:try_send(): Network Address: ~p", [NetworkAddress]), - + %% Extract the first message of the queue. case ets:first(Tid) of %% No more messages to send. @@ -394,21 +394,10 @@ service_available(SvcName, NetworkAddress, St) -> try_sending_messages(Svc, NSt1). -service_unavailable(NetworkAddress, #st { services_tid = SvcTid } = St) -> - ?info("schedule:service_unavailable(): address: ~p", [ NetworkAddress ]), - - NSt1 = - case ets:lookup(SvcTid, SvcName) of - [] -> %% The given service does not exist. - St ; - - [ Svc ] -> - %% Update the network address, if applicable. - {ok, _, TmpSt, _} = update_service_network_address(Svc, unavailable, St), - TmpSt - end, - - { ok, NSt1 }. +service_unavailable(SvcName, #st { services_tid = SvcTid } = St) -> + ?info("schedule:service_unavailable(): Service: ~p", [ SvcName ]), + ets:delete(SvcTid, SvcName), + { ok, St }. bring_up_data_link(SvcName) -> @@ -479,13 +468,19 @@ send_message(NetworkAddress, SvcName, Timeout, %% service. %% multiple_services_available([], _NetworkAddress, St) -> - ?info("schedule:multiple_services_available(): St: ~p", [ St]), {ok, St}; multiple_services_available([ Svc | T], NetworkAddress, St) -> {ok, NSt} = service_available(Svc, NetworkAddress, St), multiple_services_available(T, NetworkAddress, NSt). +multiple_services_unavailable([], St) -> + {ok, St}; + +multiple_services_unavailable([ SvcName | T], St) -> + {ok, NSt} = service_unavailable(SvcName, St), + multiple_services_unavailable(T, NSt). + find_or_create_service(ServiceName, St) -> %% Invoke with retain to keep any exising network addresses already diff --git a/components/schedule/src/schedule_rpc.erl b/components/schedule/src/schedule_rpc.erl index 8563aa1..9a19d40 100644 --- a/components/schedule/src/schedule_rpc.erl +++ b/components/schedule/src/schedule_rpc.erl @@ -49,10 +49,9 @@ register_remote_services(NetworkAddress, AvailableServices) -> {ok, [ { status, rvi_common:json_rpc_status(ok)}]}. -unregister_remote_services(NetworkAddress, DiscountinuedServices) -> - ?debug("schedule_rpc:unregister_remote_services(): network_address: ~p", [ NetworkAddress]), +unregister_remote_services(DiscountinuedServices) -> ?debug("schedule_rpc:unregister_remote_services(): services ~p", [ DiscountinuedServices]), - schedule:unregister_remote_services(NetworkAddress, DiscountinuedServices), + schedule:unregister_remote_services(DiscountinuedServices), {ok, [ { status, rvi_common:json_rpc_status(ok)}]}. @@ -76,9 +75,8 @@ handle_rpc("register_remote_services", Args) -> register_remote_services(NetworkAddress, AvailableServices); handle_rpc("unregister_remote_services", Args) -> - {ok, NetworkAddress} = rvi_common:get_json_element(["network_address"], Args), {ok, DiscountinuedServices} = rvi_common:get_json_element(["services"], Args), - unregister_remote_services(NetworkAddress, DiscountinuedServices); + unregister_remote_services(DiscountinuedServices); handle_rpc(Other, _Args) -> ?debug("schedule_rpc:handle_rpc(~p): unknown", [ Other ]), |