VOL-2518 - reconnect to voltha on disconnect
Change-Id: Ia497bb6a83312f15e54de0d7556753e1d9ef58b0
diff --git a/internal/pkg/ofagent/packetOut.go b/internal/pkg/ofagent/packetOut.go
index 30466a6..928d19c 100644
--- a/internal/pkg/ofagent/packetOut.go
+++ b/internal/pkg/ofagent/packetOut.go
@@ -24,8 +24,15 @@
)
func (ofa *OFAgent) streamPacketOut(ctx context.Context) {
- if logger.V(log.DebugLevel) {
- logger.Debug("GrpcClient streamPacketOut called")
+ logger.Debug("packet-out-started")
+ // If we exit, assume disconnected
+ defer func() {
+ ofa.events <- ofaEventVolthaDisconnected
+ logger.Debug("packet-out-finished")
+ }()
+ if ofa.volthaClient == nil {
+ logger.Error("no-voltha-connection")
+ return
}
opt := grpc.EmptyCallOption{}
streamCtx, streamDone := context.WithCancel(context.Background())
@@ -33,18 +40,24 @@
defer streamDone()
if err != nil {
logger.Errorw("streamPacketOut Error creating packetout stream ", log.Fields{"error": err})
- ofa.events <- ofaEventVolthaDisconnected
+ return
}
+top:
for {
select {
case <-ctx.Done():
- return
+ break top
case ofPacketOut := <-ofa.packetOutChannel:
if logger.V(log.DebugLevel) {
js, _ := json.Marshal(ofPacketOut)
logger.Debugw("streamPacketOut Receive PacketOut from Channel", log.Fields{"PacketOut": js})
}
- outClient.Send(ofPacketOut)
+ if err := outClient.Send(ofPacketOut); err != nil {
+ logger.Errorw("packet-out-send-error",
+ log.Fields{"error": err.Error()})
+ break top
+ }
+ logger.Debug("packet-out-send")
}
}
}