Fixes related to failed grpc network connection

Add timeouts to all gRPC remote calls and bump yagrc package requirement to a version that does same for the reflection service, as well as fixing a state issue around failed lazy import resolution.

This should address the script hang symptom on issue #36.
This commit is contained in:
sparky8512 2021-11-06 20:16:50 -07:00
parent 833f82f575
commit c35588d01f
3 changed files with 10 additions and 5 deletions

View file

@ -11,7 +11,7 @@ from spacex.api.device import dish_pb2
# call channel.close() when you're done with the gRPC connection. # call channel.close() when you're done with the gRPC connection.
with grpc.insecure_channel("192.168.100.1:9200") as channel: with grpc.insecure_channel("192.168.100.1:9200") as channel:
stub = device_pb2_grpc.DeviceStub(channel) stub = device_pb2_grpc.DeviceStub(channel)
response = stub.Handle(device_pb2.Request(get_status={})) response = stub.Handle(device_pb2.Request(get_status={}), timeout=10)
# Dump everything # Dump everything
print(response) print(response)

View file

@ -1,7 +1,7 @@
grpcio>=1.12.0 grpcio>=1.12.0
grpcio-tools>=1.20.0 grpcio-tools>=1.20.0
protobuf>=3.6.0 protobuf>=3.6.0
yagrc>=1.1.0 yagrc>=1.1.1
paho-mqtt>=1.5.1 paho-mqtt>=1.5.1
influxdb>=5.3.1 influxdb>=5.3.1
pypng>=0.0.20 pypng>=0.0.20

View file

@ -351,6 +351,10 @@ from spacex.api.device import device_pb2
from spacex.api.device import device_pb2_grpc from spacex.api.device import device_pb2_grpc
from spacex.api.device import dish_pb2 from spacex.api.device import dish_pb2
# Max wait time for gRPC request completion, in seconds. This is just to
# prevent hang if the connection goes dead without closing.
REQUEST_TIMEOUT = 10
HISTORY_FIELDS = ("pop_ping_drop_rate", "pop_ping_latency_ms", "downlink_throughput_bps", HISTORY_FIELDS = ("pop_ping_drop_rate", "pop_ping_latency_ms", "downlink_throughput_bps",
"uplink_throughput_bps") "uplink_throughput_bps")
@ -546,7 +550,7 @@ def get_status(context=None):
if imports_pending: if imports_pending:
resolve_imports(channel) resolve_imports(channel)
stub = device_pb2_grpc.DeviceStub(channel) stub = device_pb2_grpc.DeviceStub(channel)
response = stub.Handle(device_pb2.Request(get_status={})) response = stub.Handle(device_pb2.Request(get_status={}), timeout=REQUEST_TIMEOUT)
return response.dish_get_status return response.dish_get_status
return call_with_channel(grpc_call, context=context) return call_with_channel(grpc_call, context=context)
@ -816,7 +820,7 @@ def get_history(context=None):
if imports_pending: if imports_pending:
resolve_imports(channel) resolve_imports(channel)
stub = device_pb2_grpc.DeviceStub(channel) stub = device_pb2_grpc.DeviceStub(channel)
response = stub.Handle(device_pb2.Request(get_history={})) response = stub.Handle(device_pb2.Request(get_history={}), timeout=REQUEST_TIMEOUT)
return response.dish_get_history return response.dish_get_history
return call_with_channel(grpc_call, context=context) return call_with_channel(grpc_call, context=context)
@ -1209,7 +1213,8 @@ def get_obstruction_map(context=None):
if imports_pending: if imports_pending:
resolve_imports(channel) resolve_imports(channel)
stub = device_pb2_grpc.DeviceStub(channel) stub = device_pb2_grpc.DeviceStub(channel)
response = stub.Handle(device_pb2.Request(dish_get_obstruction_map={})) response = stub.Handle(device_pb2.Request(dish_get_obstruction_map={}),
timeout=REQUEST_TIMEOUT)
return response.dish_get_obstruction_map return response.dish_get_obstruction_map
return call_with_channel(grpc_call, context=context) return call_with_channel(grpc_call, context=context)