[VOL-3622] Stop and restart gRPC server
Change-Id: I443e7ed75f79dd90782a1a4342c8e4d3a7294488
diff --git a/internal/bbsim/devices/olt.go b/internal/bbsim/devices/olt.go
index beeffce..008e3be 100644
--- a/internal/bbsim/devices/olt.go
+++ b/internal/bbsim/devices/olt.go
@@ -48,6 +48,7 @@
type OltDevice struct {
sync.Mutex
+ oltServer *grpc.Server
// BBSIM Internals
ID int
@@ -79,7 +80,6 @@
}
var olt OltDevice
-var oltServer *grpc.Server
func GetOLT() *OltDevice {
return &olt
@@ -224,10 +224,9 @@
func (o *OltDevice) InitOlt() {
- if oltServer == nil {
- oltServer, _ = o.newOltServer()
+ if o.oltServer == nil {
+ o.oltServer, _ = o.StartOltServer()
} else {
- // FIXME there should never be a server running if we are initializing the OLT
oltLogger.Fatal("OLT server already running.")
}
@@ -267,12 +266,8 @@
return err
}
- // TODO handle hard poweroff (i.e. no indications sent to Voltha) vs soft poweroff
time.Sleep(1 * time.Second) // we need to give the OLT the time to respond to all the pending gRPC request before stopping the server
- if err := o.StopOltServer(); err != nil {
- oltLogger.Errorf("Error in stopping OLT server")
- return err
- }
+ o.StopOltServer()
if softReboot {
for _, pon := range o.Pons {
@@ -341,18 +336,28 @@
return grpcServer, nil
}
+// StartOltServer will create the grpc server that VOLTHA uses
+// to communicate with the device
+func (o *OltDevice) StartOltServer() (*grpc.Server, error) {
+ oltServer, err := o.newOltServer()
+ if err != nil {
+ oltLogger.WithFields(log.Fields{
+ "err": err,
+ }).Error("Cannot OLT gRPC server")
+ return nil, err
+ }
+ return oltServer, nil
+}
+
// StopOltServer stops the OpenOLT grpc server
-func (o *OltDevice) StopOltServer() error {
- // TODO handle poweroff vs graceful shutdown
- if oltServer != nil {
+func (o *OltDevice) StopOltServer() {
+ if o.oltServer != nil {
oltLogger.WithFields(log.Fields{
"oltId": o.SerialNumber,
}).Warnf("Stopping OLT gRPC server")
- oltServer.Stop()
- oltServer = nil
+ o.oltServer.Stop()
+ o.oltServer = nil
}
-
- return nil
}
// Device Methods