OFAgent now has suicidal tendencies.
If OFAgent cannot find voltha-grpc it kills itself only to be restarted
by docker, this will continue until it is happy. Similarly, if voltha
goes away ofagent will kill itself until voltha comes back
Change-Id: Ib2a2cbf5ed438f8bd40f80a4543bd80f065461f1
diff --git a/ofagent/grpc_client.py b/ofagent/grpc_client.py
index d1b78bd..ccdb98b 100644
--- a/ofagent/grpc_client.py
+++ b/ofagent/grpc_client.py
@@ -18,6 +18,7 @@
The gRPC client layer for the OpenFlow agent
"""
from Queue import Queue, Empty
+import os
from grpc import StatusCode
from grpc._channel import _Rendezvous
@@ -77,7 +78,11 @@
def stream_packets_out():
generator = packet_generator()
- self.local_stub.StreamPacketsOut(generator)
+ try:
+ self.local_stub.StreamPacketsOut(generator)
+ except _Rendezvous, e:
+ if e.code() == StatusCode.UNAVAILABLE:
+ os.system("kill -15 {}".format(os.getpid()))
reactor.callInThread(stream_packets_out)
@@ -86,12 +91,16 @@
def receive_packet_in_stream():
streaming_rpc_method = self.local_stub.ReceivePacketsIn
iterator = streaming_rpc_method(empty_pb2.Empty())
- for packet_in in iterator:
- reactor.callFromThread(self.packet_in_queue.put,
- packet_in)
- log.debug('enqued-packet-in',
- packet_in=packet_in,
- queue_len=len(self.packet_in_queue.pending))
+ try:
+ for packet_in in iterator:
+ reactor.callFromThread(self.packet_in_queue.put,
+ packet_in)
+ log.debug('enqued-packet-in',
+ packet_in=packet_in,
+ queue_len=len(self.packet_in_queue.pending))
+ except _Rendezvous, e:
+ if e.code() == StatusCode.UNAVAILABLE:
+ os.system("kill -15 {}".format(os.getpid()))
reactor.callInThread(receive_packet_in_stream)
@@ -100,11 +109,15 @@
def receive_change_events():
streaming_rpc_method = self.local_stub.ReceiveChangeEvents
iterator = streaming_rpc_method(empty_pb2.Empty())
- for event in iterator:
- reactor.callFromThread(self.change_event_queue.put, event)
- log.debug('enqued-change-event',
- change_event=event,
- queue_len=len(self.change_event_queue.pending))
+ try:
+ for event in iterator:
+ reactor.callFromThread(self.change_event_queue.put, event)
+ log.debug('enqued-change-event',
+ change_event=event,
+ queue_len=len(self.change_event_queue.pending))
+ except _Rendezvous, e:
+ if e.code() == StatusCode.UNAVAILABLE:
+ os.system("kill -15 {}".format(os.getpid()))
reactor.callInThread(receive_change_events)