[VOL-5567] Upgrade protos and remove deprecated dependencies

Change-Id: I61605ee294a3c5abe65ecf94a0fe647c6e3b8479
Signed-off-by: bseeniva <balaji.seenivasan@radisys.com>
diff --git a/internal/pkg/core/device_handler.go b/internal/pkg/core/device_handler.go
index 00b339d..05e85ff 100755
--- a/internal/pkg/core/device_handler.go
+++ b/internal/pkg/core/device_handler.go
@@ -30,13 +30,13 @@
 	"sync"
 	"time"
 
+	"github.com/gogo/protobuf/proto"
 	"github.com/opencord/voltha-lib-go/v7/pkg/db"
 	"github.com/opencord/voltha-lib-go/v7/pkg/db/kvstore"
 
 	vgrpc "github.com/opencord/voltha-lib-go/v7/pkg/grpc"
 
 	"github.com/cenkalti/backoff/v3"
-	"github.com/gogo/protobuf/proto"
 	grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware"
 	grpc_opentracing "github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing"
 	grpc_prometheus "github.com/grpc-ecosystem/go-grpc-prometheus"
@@ -215,14 +215,14 @@
 	dh.cm = cm
 	dh.coreClient = cc
 	dh.EventProxy = ep
-	cloned := (proto.Clone(device)).(*voltha.Device)
-	dh.device = cloned
+	// Note: We use the device directly instead of cloning to avoid issues with protobuf unexported fields
+	dh.device = device
 	dh.openOLT = adapter
 	dh.exitChannel = make(chan struct{})
 	dh.lockDevice = sync.RWMutex{}
 	dh.stopCollector = make(chan bool, 1)      // TODO: Why buffered?
 	dh.stopHeartbeatCheck = make(chan bool, 1) // TODO: Why buffered?
-	dh.metrics = pmmetrics.NewPmMetrics(cloned.Id, pmmetrics.Frequency(150), pmmetrics.FrequencyOverride(false), pmmetrics.Grouped(false), pmmetrics.Metrics(pmNames))
+	dh.metrics = pmmetrics.NewPmMetrics(device.Id, pmmetrics.Frequency(150), pmmetrics.FrequencyOverride(false), pmmetrics.Grouped(false), pmmetrics.Metrics(pmNames))
 	dh.activePorts = sync.Map{}
 	dh.stopIndications = make(chan bool, 1) // TODO: Why buffered?
 	dh.perPonOnuIndicationChannel = make(map[uint32]onuIndicationChannels)
@@ -1153,18 +1153,16 @@
 		return olterrors.NewErrNotFound("device", log.Fields{"device-id": dh.device.Id}, err)
 	}
 
-	cloned := proto.Clone(device).(*voltha.Device)
-
 	// Update the device oper state and connection status
-	cloned.OperStatus = voltha.OperStatus_UNKNOWN
+	device.OperStatus = voltha.OperStatus_UNKNOWN
 	dh.lockDevice.Lock()
-	dh.device = cloned
+	dh.device = device
 	dh.lockDevice.Unlock()
 
 	if err = dh.updateDeviceStateInCore(ctx, &ca.DeviceStateFilter{
-		DeviceId:   cloned.Id,
-		OperStatus: cloned.OperStatus,
-		ConnStatus: cloned.ConnectStatus,
+		DeviceId:   device.Id,
+		OperStatus: device.OperStatus,
+		ConnStatus: device.ConnectStatus,
 	}); err != nil {
 		return olterrors.NewErrAdapter("state-update-failed", log.Fields{"device-id": device.Id}, err)
 	}
@@ -1192,7 +1190,7 @@
 		if err != nil {
 			_ = olterrors.NewErrCommunication("inter-adapter-send-failed", log.Fields{
 				"source":        dh.openOLT.config.AdapterEndpoint,
-				"onu-indicator": onuInd,
+				"onu-indicator": onuInd.String(),
 				"device-type":   onuDevice.Type,
 				"device-id":     onuDevice.Id}, err).LogAt(log.ErrorLevel)
 			// Do not return here and continue to process other ONUs
@@ -1285,15 +1283,14 @@
 	if device.AdminState == voltha.AdminState_DISABLED {
 		logger.Debugln(ctx, "do-state-connected--device-admin-state-down")
 
-		cloned := proto.Clone(device).(*voltha.Device)
-		cloned.ConnectStatus = voltha.ConnectStatus_REACHABLE
-		cloned.OperStatus = voltha.OperStatus_UNKNOWN
-		dh.device = cloned
+		device.ConnectStatus = voltha.ConnectStatus_REACHABLE
+		device.OperStatus = voltha.OperStatus_UNKNOWN
+		dh.device = device
 
 		if err = dh.updateDeviceStateInCore(ctx, &ca.DeviceStateFilter{
-			DeviceId:   cloned.Id,
-			OperStatus: cloned.OperStatus,
-			ConnStatus: cloned.ConnectStatus,
+			DeviceId:   device.Id,
+			OperStatus: device.OperStatus,
+			ConnStatus: device.ConnectStatus,
 		}); err != nil {
 			return olterrors.NewErrAdapter("device-state-update-failed", log.Fields{"device-id": dh.device.Id}, err).LogAt(log.ErrorLevel)
 		}
@@ -1804,7 +1801,7 @@
 		if st.Code() == codes.AlreadyExists {
 			logger.Debugw(ctx, "onu-activation-in-progress", log.Fields{"SerialNumber": serialNumber, "onu-id": onuID, "device-id": dh.device.Id})
 		} else {
-			return olterrors.NewErrAdapter("onu-activate-failed", log.Fields{"onu": Onu, "device-id": dh.device.Id}, err)
+			return olterrors.NewErrAdapter("onu-activate-failed", log.Fields{"onu-serial": serialNumber, "onu-id": onuID, "device-id": dh.device.Id}, err)
 		}
 	} else {
 		logger.Infow(ctx, "activated-onu", log.Fields{"SerialNumber": serialNumber, "device-id": dh.device.Id})
@@ -2491,13 +2488,12 @@
 	dh.lockDevice.RUnlock()
 
 	go dh.notifyChildDevices(ctx, "unreachable")
-	cloned := proto.Clone(device).(*voltha.Device)
 	// Update device Admin state
-	dh.device = cloned
+	dh.device = device
 
 	// Update the all pon ports state on that device to disable and NNI remains active as NNI remains active in openolt agent.
 	if err := dh.updatePortsStateInCore(ctx, &ca.PortStateFilter{
-		DeviceId:       cloned.Id,
+		DeviceId:       device.Id,
 		PortTypeFilter: ^uint32(1 << voltha.Port_PON_OLT),
 		OperStatus:     voltha.OperStatus_UNKNOWN,
 	}); err != nil {
@@ -2524,7 +2520,7 @@
 				OnuIndication: &onuInd,
 			})
 			if err != nil {
-				logger.Errorw(ctx, "failed-to-send-inter-adapter-message", log.Fields{"OnuInd": onuInd,
+				logger.Errorw(ctx, "failed-to-send-inter-adapter-message", log.Fields{"OnuInd": onuInd.String(),
 					"From Adapter": dh.openOLT.config.AdapterEndpoint, "DeviceType": onuDevice.Type, "device-id": onuDevice.Id})
 			}
 		}
@@ -2801,7 +2797,7 @@
 func (dh *DeviceHandler) handlePacketIndication(ctx context.Context, packetIn *oop.PacketIndication) error {
 	if logger.V(log.DebugLevel) {
 		logger.Debugw(ctx, "received-packet-in", log.Fields{
-			"packet-indication": *packetIn,
+			"packet-indication": packetIn.String(),
 			"device-id":         dh.device.Id,
 			"packet":            hex.EncodeToString(packetIn.Pkt),
 		})
@@ -2856,7 +2852,7 @@
 
 	if logger.V(log.DebugLevel) {
 		logger.Debugw(ctx, "sending-packet-to-nni", log.Fields{
-			"uplink-pkt": uplinkPkt,
+			"uplink-pkt": uplinkPkt.String(),
 			"packet":     hex.EncodeToString(packet.Data),
 			"device-id":  dh.device.Id,
 		})
@@ -3091,11 +3087,10 @@
 
 		// raise olt communication failure event
 		raisedTs := time.Now().Unix()
-		cloned := proto.Clone(device).(*voltha.Device)
-		cloned.ConnectStatus = voltha.ConnectStatus_UNREACHABLE
-		cloned.OperStatus = voltha.OperStatus_UNKNOWN
-		dh.device = cloned // update local copy of the device
-		go dh.eventMgr.oltCommunicationEvent(ctx, cloned, raisedTs)
+		device.ConnectStatus = voltha.ConnectStatus_UNREACHABLE
+		device.OperStatus = voltha.OperStatus_UNKNOWN
+		dh.device = device // update local copy of the device
+		go dh.eventMgr.oltCommunicationEvent(ctx, device, raisedTs)
 
 		dh.lockDevice.RLock()
 		// Stop the Stats collector
@@ -3163,11 +3158,10 @@
 
 	//raise olt communication failure event
 	raisedTs := time.Now().Unix()
-	cloned := proto.Clone(device).(*voltha.Device)
-	cloned.ConnectStatus = voltha.ConnectStatus_UNREACHABLE
-	cloned.OperStatus = voltha.OperStatus_UNKNOWN
-	dh.device = cloned // update local copy of the device
-	go dh.eventMgr.oltCommunicationEvent(ctx, cloned, raisedTs)
+	device.ConnectStatus = voltha.ConnectStatus_UNREACHABLE
+	device.OperStatus = voltha.OperStatus_UNKNOWN
+	dh.device = device // update local copy of the device
+	go dh.eventMgr.oltCommunicationEvent(ctx, device, raisedTs)
 
 	if err := dh.cleanupDeviceResources(ctx); err != nil {
 		logger.Errorw(ctx, "failure-in-cleanup-device-resources", log.Fields{"device-id": dh.device.Id, "err": err})
@@ -3713,9 +3707,9 @@
 		select {
 		// process one indication per onu, before proceeding to the next one
 		case onuInd := <-onuChannels.indicationChannel:
-			indication := *(proto.Clone(onuInd.indication)).(*oop.Indication)
+			indication := onuInd.indication
 			logger.Debugw(onuInd.ctx, "calling-indication", log.Fields{"device-id": dh.device.Id,
-				"ind": indication})
+				"ind": indication.String()})
 			switch indication.Data.(type) {
 			case *oop.Indication_OnuInd:
 				if err := dh.onuIndication(onuInd.ctx, indication.GetOnuInd()); err != nil {
@@ -4183,7 +4177,7 @@
 	rxPower, err := dh.Client.GetPonRxPower(subCtx, &Onu)
 	cancel()
 	if err != nil {
-		logger.Errorw(ctx, "error-while-getting-rx-power", log.Fields{"Onu": Onu, "err": err})
+		logger.Errorw(ctx, "error-while-getting-rx-power", log.Fields{"intf-id": Onu.IntfId, "onu-id": Onu.OnuId, "err": err})
 		return generateSingleGetValueErrorResponse(err)
 	}
 	return &extension.SingleGetValueResponse{
@@ -4246,7 +4240,7 @@
 			rxPower, err := dh.Client.GetPonRxPower(subCtx, &Onu)
 			cancel()
 			if err != nil {
-				logger.Errorw(ctx, "error-while-getting-rx-power", log.Fields{"Onu": Onu, "err": err})
+				logger.Errorw(ctx, "error-while-getting-rx-power", log.Fields{"intf-id": Onu.IntfId, "onu-id": Onu.OnuId, "err": err})
 				return generateSingleGetValueErrorResponse(err)
 			}
 
@@ -4269,7 +4263,7 @@
 				rxPower, err := dh.Client.GetPonRxPower(subCtx, &Onu)
 				cancel()
 				if err != nil {
-					logger.Errorw(ctx, "error-while-getting-rx-power, however considering to proceed further with other ONUs on PON", log.Fields{"Onu": Onu, "err": err})
+					logger.Errorw(ctx, "error-while-getting-rx-power, however considering to proceed further with other ONUs on PON", log.Fields{"intf-id": Onu.IntfId, "onu-id": Onu.OnuId, "err": err})
 				} else {
 					rxPowerValue := extension.RxPower{}
 					rxPowerValue.OnuSn = onuInCache.(*OnuDevice).serialNumber
@@ -4280,11 +4274,11 @@
 					resp.Response.GetOltRxPower().RxPower = append(resp.Response.GetOltRxPower().RxPower, &rxPowerValue)
 				}
 			}
-			logger.Infow(ctx, "getPONRxPower response ", log.Fields{"Response": resp})
+			logger.Infow(ctx, "getPONRxPower response ", log.Fields{"status": resp.Response.Status})
 			return true
 		})
 	}
-	logger.Infow(ctx, "getPONRxPower response ", log.Fields{"Response": resp})
+	logger.Infow(ctx, "getPONRxPower response ", log.Fields{"status": resp.Response.Status})
 	return &resp
 }
 
@@ -4337,7 +4331,7 @@
 	ponPortStats.PonPort = uint32(portNumber)
 	ponPortStats.PortStatistics = ponStats
 
-	logger.Infow(ctx, "getPonPortStats response ", log.Fields{"Response": resp})
+	logger.Infow(ctx, "getPonPortStats response ", log.Fields{"status": resp.Response.Status, "pon-port": portNumber})
 	return &resp
 }
 
@@ -4390,7 +4384,7 @@
 	nniPortStats.NniPort = uint32(portNumber)
 	nniPortStats.PortStatistics = nniStats
 
-	logger.Infow(ctx, "getNniPortStats response ", log.Fields{"Response": resp})
+	logger.Infow(ctx, "getNniPortStats response ", log.Fields{"status": resp.Response.Status, "nni-port": portNumber})
 	return &resp
 }
 
diff --git a/internal/pkg/core/device_handler_test.go b/internal/pkg/core/device_handler_test.go
index 6f670e0..b4274c9 100644
--- a/internal/pkg/core/device_handler_test.go
+++ b/internal/pkg/core/device_handler_test.go
@@ -26,10 +26,9 @@
 	"time"
 
 	conf "github.com/opencord/voltha-lib-go/v7/pkg/config"
-	vgrpc "github.com/opencord/voltha-lib-go/v7/pkg/grpc"
-
 	"github.com/opencord/voltha-lib-go/v7/pkg/db"
 	fu "github.com/opencord/voltha-lib-go/v7/pkg/flows"
+	vgrpc "github.com/opencord/voltha-lib-go/v7/pkg/grpc"
 	plt "github.com/opencord/voltha-lib-go/v7/pkg/platform"
 	"github.com/opencord/voltha-lib-go/v7/pkg/pmmetrics"
 	ponrmgr "github.com/opencord/voltha-lib-go/v7/pkg/ponresourcemanager"
@@ -37,6 +36,7 @@
 	"github.com/opencord/voltha-openolt-adapter/internal/pkg/olterrors"
 	"github.com/opencord/voltha-openolt-adapter/internal/pkg/resourcemanager"
 	"github.com/opencord/voltha-openolt-adapter/pkg/mocks"
+	"github.com/opencord/voltha-protos/v5/go/adapter_service"
 	cmn "github.com/opencord/voltha-protos/v5/go/common"
 	ia "github.com/opencord/voltha-protos/v5/go/inter_adapter"
 	of "github.com/opencord/voltha-protos/v5/go/openflow_13"
@@ -168,7 +168,14 @@
 	cm := &conf.ConfigManager{}
 	cm.Backend = &db.Backend{StoreType: "etcd", Client: &mocks.MockKVClient{}}
 	cfg := &config.AdapterFlags{OmccEncryption: true}
-	openOLT := &OpenOLT{eventProxy: ep, config: cfg, KVStoreType: "etcd", KVStoreAddress: "1:2"}
+	openOLT := &OpenOLT{
+		UnimplementedAdapterServiceServer: adapter_service.UnimplementedAdapterServiceServer{},
+		eventProxy:                        ep,
+		config:                            cfg,
+		KVStoreType:                       "etcd",
+		KVStoreAddress:                    "1:2",
+	}
+
 	dh := NewDeviceHandler(cc, ep, device, openOLT, cm, cfg)
 	dh.kvStore = cm.Backend
 	oopRanges := []*oop.DeviceInfo_DeviceResourceRanges{{
diff --git a/internal/pkg/core/openolt.go b/internal/pkg/core/openolt.go
index ddd331f..0dd2325 100644
--- a/internal/pkg/core/openolt.go
+++ b/internal/pkg/core/openolt.go
@@ -23,7 +23,6 @@
 	"sync"
 	"time"
 
-	"github.com/golang/protobuf/ptypes/empty"
 	conf "github.com/opencord/voltha-lib-go/v7/pkg/config"
 	"github.com/opencord/voltha-lib-go/v7/pkg/events/eventif"
 	vgrpc "github.com/opencord/voltha-lib-go/v7/pkg/grpc"
@@ -40,10 +39,12 @@
 	"github.com/opencord/voltha-protos/v5/go/voltha"
 	"google.golang.org/grpc/codes"
 	"google.golang.org/grpc/status"
+	"google.golang.org/protobuf/types/known/emptypb"
 )
 
 // OpenOLT structure holds the OLT information
 type OpenOLT struct {
+	adapter_service.UnimplementedAdapterServiceServer
 	eventProxy                         eventif.EventProxy
 	configManager                      *conf.ConfigManager
 	deviceHandlers                     map[string]*DeviceHandler
@@ -145,7 +146,7 @@
 }
 
 // AdoptDevice creates a new device handler if not present already and then adopts the device
-func (oo *OpenOLT) AdoptDevice(ctx context.Context, device *voltha.Device) (*empty.Empty, error) {
+func (oo *OpenOLT) AdoptDevice(ctx context.Context, device *voltha.Device) (*emptypb.Empty, error) {
 	if device == nil {
 		return nil, olterrors.NewErrInvalidValue(log.Fields{"device": nil}, nil).Log()
 	}
@@ -156,7 +157,7 @@
 		oo.addDeviceHandlerToMap(handler)
 		go handler.AdoptDevice(log.WithSpanFromContext(context.Background(), ctx), device)
 	}
-	return &empty.Empty{}, nil
+	return &emptypb.Empty{}, nil
 }
 
 // GetOfpDeviceInfo returns OFP information for the given device
@@ -169,7 +170,7 @@
 }
 
 // ReconcileDevice unimplemented
-func (oo *OpenOLT) ReconcileDevice(ctx context.Context, device *voltha.Device) (*empty.Empty, error) {
+func (oo *OpenOLT) ReconcileDevice(ctx context.Context, device *voltha.Device) (*emptypb.Empty, error) {
 	if device == nil {
 		return nil, olterrors.NewErrInvalidValue(log.Fields{"device": nil}, nil)
 	}
@@ -229,49 +230,49 @@
 		go handler.transitionMap.Handle(dhCtx, DeviceInit)
 	} else {
 		logger.Warnf(ctx, "device-already-reconciled-or-active", log.Fields{"device-id": device.Id})
-		return &empty.Empty{}, status.Errorf(codes.AlreadyExists, "handler exists: %s", device.Id)
+		return &emptypb.Empty{}, status.Errorf(codes.AlreadyExists, "handler exists: %s", device.Id)
 	}
-	return &empty.Empty{}, nil
+	return &emptypb.Empty{}, nil
 }
 
 // DisableDevice disables the given device
-func (oo *OpenOLT) DisableDevice(ctx context.Context, device *voltha.Device) (*empty.Empty, error) {
+func (oo *OpenOLT) DisableDevice(ctx context.Context, device *voltha.Device) (*emptypb.Empty, error) {
 	logger.Infow(ctx, "disable-device", log.Fields{"device-id": device.Id})
 	if handler := oo.getDeviceHandler(device.Id); handler != nil {
 		if err := handler.DisableDevice(log.WithSpanFromContext(context.Background(), ctx), device); err != nil {
 			return nil, err
 		}
-		return &empty.Empty{}, nil
+		return &emptypb.Empty{}, nil
 	}
 	return nil, olterrors.NewErrNotFound("device-handler", log.Fields{"device-id": device.Id}, nil)
 }
 
 // ReEnableDevice enables the olt device after disable
-func (oo *OpenOLT) ReEnableDevice(ctx context.Context, device *voltha.Device) (*empty.Empty, error) {
+func (oo *OpenOLT) ReEnableDevice(ctx context.Context, device *voltha.Device) (*emptypb.Empty, error) {
 	logger.Infow(ctx, "reenable-device", log.Fields{"device-id": device.Id})
 	if handler := oo.getDeviceHandler(device.Id); handler != nil {
 		if err := handler.ReenableDevice(log.WithSpanFromContext(context.Background(), ctx), device); err != nil {
 			return nil, err
 		}
-		return &empty.Empty{}, nil
+		return &emptypb.Empty{}, nil
 	}
 	return nil, olterrors.NewErrNotFound("device-handler", log.Fields{"device-id": device.Id}, nil)
 }
 
 // RebootDevice reboots the given device
-func (oo *OpenOLT) RebootDevice(ctx context.Context, device *voltha.Device) (*empty.Empty, error) {
+func (oo *OpenOLT) RebootDevice(ctx context.Context, device *voltha.Device) (*emptypb.Empty, error) {
 	logger.Infow(ctx, "reboot-device", log.Fields{"device-id": device.Id})
 	if handler := oo.getDeviceHandler(device.Id); handler != nil {
 		if err := handler.RebootDevice(log.WithSpanFromContext(context.Background(), ctx), device); err != nil {
 			return nil, err
 		}
-		return &empty.Empty{}, nil
+		return &emptypb.Empty{}, nil
 	}
 	return nil, olterrors.NewErrNotFound("device-handler", log.Fields{"device-id": device.Id}, nil)
 }
 
 // DeleteDevice deletes a device
-func (oo *OpenOLT) DeleteDevice(ctx context.Context, device *voltha.Device) (*empty.Empty, error) {
+func (oo *OpenOLT) DeleteDevice(ctx context.Context, device *voltha.Device) (*emptypb.Empty, error) {
 	logger.Infow(ctx, "delete-device", log.Fields{"device-id": device.Id})
 	if handler := oo.getDeviceHandler(device.Id); handler != nil {
 		if err := handler.DeleteDevice(log.WithSpanFromContext(context.Background(), ctx), device); err != nil {
@@ -291,13 +292,13 @@
 				if !handler.isHeartbeatCheckActive && !handler.isCollectorActive && !handler.isReadIndicationRoutineActive {
 					logger.Debugf(ctx, "delete-device-handler")
 					oo.deleteDeviceHandlerToMap(handler)
-					return &empty.Empty{}, nil
+					return &emptypb.Empty{}, nil
 				}
 			case <-timeout:
 				// Timeout exceeded
 				logger.Warnw(ctx, "delete-device-handler timeout exceeded", log.Fields{"device-id": device.Id})
 				oo.deleteDeviceHandlerToMap(handler) // Clean up anyway
-				return &empty.Empty{}, nil
+				return &emptypb.Empty{}, nil
 			}
 		}
 	}
@@ -305,55 +306,55 @@
 }
 
 // UpdateFlowsIncrementally updates (add/remove) the flows on a given device
-func (oo *OpenOLT) UpdateFlowsIncrementally(ctx context.Context, incrFlows *ca.IncrementalFlows) (*empty.Empty, error) {
+func (oo *OpenOLT) UpdateFlowsIncrementally(ctx context.Context, incrFlows *ca.IncrementalFlows) (*emptypb.Empty, error) {
 	logger.Infow(ctx, "update_flows_incrementally", log.Fields{"device-id": incrFlows.Device.Id, "flows": incrFlows.Flows, "flowMetadata": incrFlows.FlowMetadata})
 	if handler := oo.getDeviceHandler(incrFlows.Device.Id); handler != nil {
 		if err := handler.UpdateFlowsIncrementally(log.WithSpanFromContext(context.Background(), ctx), incrFlows.Device, incrFlows.Flows, incrFlows.Groups, incrFlows.FlowMetadata); err != nil {
 			return nil, err
 		}
-		return &empty.Empty{}, nil
+		return &emptypb.Empty{}, nil
 	}
 	return nil, olterrors.NewErrNotFound("device-handler", log.Fields{"device-id": incrFlows.Device.Id}, nil)
 }
 
 // UpdatePmConfig returns PmConfigs nil or error
-func (oo *OpenOLT) UpdatePmConfig(ctx context.Context, configs *ca.PmConfigsInfo) (*empty.Empty, error) {
+func (oo *OpenOLT) UpdatePmConfig(ctx context.Context, configs *ca.PmConfigsInfo) (*emptypb.Empty, error) {
 	logger.Debugw(ctx, "update_pm_config", log.Fields{"device-id": configs.DeviceId, "pm-configs": configs.PmConfigs})
 	if handler := oo.getDeviceHandler(configs.DeviceId); handler != nil {
 		handler.UpdatePmConfig(log.WithSpanFromContext(context.Background(), ctx), configs.PmConfigs)
-		return &empty.Empty{}, nil
+		return &emptypb.Empty{}, nil
 	}
 	return nil, olterrors.NewErrNotFound("device-handler", log.Fields{"device-id": configs.DeviceId}, nil)
 }
 
 // SendPacketOut sends packet out to the device
-func (oo *OpenOLT) SendPacketOut(ctx context.Context, packet *ca.PacketOut) (*empty.Empty, error) {
+func (oo *OpenOLT) SendPacketOut(ctx context.Context, packet *ca.PacketOut) (*emptypb.Empty, error) {
 	logger.Debugw(ctx, "send_packet_out", log.Fields{"device-id": packet.DeviceId, "egress_port_no": packet.EgressPortNo, "pkt": packet.Packet})
 	if handler := oo.getDeviceHandler(packet.DeviceId); handler != nil {
 		if err := handler.PacketOut(log.WithSpanFromContext(context.Background(), ctx), packet.EgressPortNo, packet.Packet); err != nil {
 			return nil, err
 		}
-		return &empty.Empty{}, nil
+		return &emptypb.Empty{}, nil
 	}
 	return nil, olterrors.NewErrNotFound("device-handler", log.Fields{"device-id": packet.DeviceId}, nil)
 }
 
 // EnableOnuSerialNumber to Enable onu serial number
-func (oo *OpenOLT) EnableOnuSerialNumber(ctx context.Context, device *voltha.OnuSerialNumberOnOLTPon) (*empty.Empty, error) {
+func (oo *OpenOLT) EnableOnuSerialNumber(ctx context.Context, device *voltha.OnuSerialNumberOnOLTPon) (*emptypb.Empty, error) {
 	logger.Infow(ctx, "enable_onu_serial_number", log.Fields{"olt_device_id": device.OltDeviceId, "onu_serial_number": device.SerialNumber})
 	if err := oo.enableDisableOnuSerialNumber(log.WithSpanFromContext(context.Background(), ctx), device, true); err != nil {
 		return nil, err
 	}
-	return &empty.Empty{}, nil
+	return &emptypb.Empty{}, nil
 }
 
 // DisableOnuSerialNumber to Disable onu serial number
-func (oo *OpenOLT) DisableOnuSerialNumber(ctx context.Context, device *voltha.OnuSerialNumberOnOLTPon) (*empty.Empty, error) {
+func (oo *OpenOLT) DisableOnuSerialNumber(ctx context.Context, device *voltha.OnuSerialNumberOnOLTPon) (*emptypb.Empty, error) {
 	logger.Infow(ctx, "disable_onu_serial_number", log.Fields{"olt_device_id": device.OltDeviceId, "onu_serial_number": device.SerialNumber})
 	if err := oo.enableDisableOnuSerialNumber(log.WithSpanFromContext(context.Background(), ctx), device, false); err != nil {
 		return nil, err
 	}
-	return &empty.Empty{}, nil
+	return &emptypb.Empty{}, nil
 }
 
 // enableDisableOnuSerialNumber to Disable onu or Enable onu
@@ -389,21 +390,21 @@
 }
 
 // EnableOnuDevice to Enable onu
-func (oo *OpenOLT) EnableOnuDevice(ctx context.Context, device *voltha.Device) (*empty.Empty, error) {
+func (oo *OpenOLT) EnableOnuDevice(ctx context.Context, device *voltha.Device) (*emptypb.Empty, error) {
 	logger.Infow(ctx, "enable_onu", log.Fields{"onu_device_id": device.Id, "onu_serial_number": device.SerialNumber})
 	if err := oo.enableDisableOnuDevice(log.WithSpanFromContext(context.Background(), ctx), device, true); err != nil {
 		return nil, err
 	}
-	return &empty.Empty{}, nil
+	return &emptypb.Empty{}, nil
 }
 
 // DisableOnuDevice to Disable onu
-func (oo *OpenOLT) DisableOnuDevice(ctx context.Context, device *voltha.Device) (*empty.Empty, error) {
+func (oo *OpenOLT) DisableOnuDevice(ctx context.Context, device *voltha.Device) (*emptypb.Empty, error) {
 	logger.Infow(ctx, "disable_onu", log.Fields{"onu_device_id": device.Id, "onu_serial_number": device.SerialNumber})
 	if err := oo.enableDisableOnuDevice(log.WithSpanFromContext(context.Background(), ctx), device, false); err != nil {
 		return nil, err
 	}
-	return &empty.Empty{}, nil
+	return &emptypb.Empty{}, nil
 }
 
 // enableDisableOnuDevice to Disable onu or Enable onu
@@ -434,21 +435,21 @@
 }
 
 // EnablePort to Enable PON/NNI interface
-func (oo *OpenOLT) EnablePort(ctx context.Context, port *voltha.Port) (*empty.Empty, error) {
+func (oo *OpenOLT) EnablePort(ctx context.Context, port *voltha.Port) (*emptypb.Empty, error) {
 	logger.Infow(ctx, "enable_port", log.Fields{"device-id": port.DeviceId, "port": port})
 	if err := oo.enableDisablePort(log.WithSpanFromContext(context.Background(), ctx), port.DeviceId, port, true); err != nil {
 		return nil, err
 	}
-	return &empty.Empty{}, nil
+	return &emptypb.Empty{}, nil
 }
 
 // DisablePort to Disable pon/nni interface
-func (oo *OpenOLT) DisablePort(ctx context.Context, port *voltha.Port) (*empty.Empty, error) {
+func (oo *OpenOLT) DisablePort(ctx context.Context, port *voltha.Port) (*emptypb.Empty, error) {
 	logger.Infow(ctx, "disable_port", log.Fields{"device-id": port.DeviceId, "port": port})
 	if err := oo.enableDisablePort(log.WithSpanFromContext(context.Background(), ctx), port.DeviceId, port, false); err != nil {
 		return nil, err
 	}
-	return &empty.Empty{}, nil
+	return &emptypb.Empty{}, nil
 }
 
 // enableDisablePort to Disable pon or Enable PON interface
@@ -476,13 +477,13 @@
 }
 
 // ChildDeviceLost deletes the ONU and its references from PONResources
-func (oo *OpenOLT) ChildDeviceLost(ctx context.Context, childDevice *voltha.Device) (*empty.Empty, error) {
+func (oo *OpenOLT) ChildDeviceLost(ctx context.Context, childDevice *voltha.Device) (*emptypb.Empty, error) {
 	logger.Infow(ctx, "Child-device-lost", log.Fields{"parent-device-id": childDevice.ParentId, "child-device-id": childDevice.Id})
 	if handler := oo.getDeviceHandler(childDevice.ParentId); handler != nil {
 		if err := handler.ChildDeviceLost(log.WithSpanFromContext(context.Background(), ctx), childDevice.ParentPortNo, childDevice.ProxyAddress.OnuId, childDevice.SerialNumber); err != nil {
 			return nil, err
 		}
-		return &empty.Empty{}, nil
+		return &emptypb.Empty{}, nil
 	}
 	return nil, olterrors.NewErrNotFound("device-handler", log.Fields{"parent-device-id": childDevice.ParentId}, nil).Log()
 }
@@ -602,25 +603,25 @@
  */
 
 // ProxyOmciRequests proxies an onu sw download OMCI request from the child adapter
-func (oo *OpenOLT) ProxyOmciRequests(ctx context.Context, request *ia.OmciMessages) (*empty.Empty, error) {
+func (oo *OpenOLT) ProxyOmciRequests(ctx context.Context, request *ia.OmciMessages) (*emptypb.Empty, error) {
 	if handler := oo.getDeviceHandler(request.ParentDeviceId); handler != nil {
 		if err := handler.ProxyOmciRequests(ctx, request); err != nil {
 			return nil, err
 		}
-		return &empty.Empty{}, nil
+		return &emptypb.Empty{}, nil
 	}
 	return nil, olterrors.NewErrNotFound("no-device-handler", log.Fields{"parent-device-id": request.ParentDeviceId, "child-device-id": request.ChildDeviceId}, nil).Log()
 }
 
 // ProxyOmciRequest proxies an OMCI request from the child adapter
-func (oo *OpenOLT) ProxyOmciRequest(ctx context.Context, request *ia.OmciMessage) (*empty.Empty, error) {
+func (oo *OpenOLT) ProxyOmciRequest(ctx context.Context, request *ia.OmciMessage) (*emptypb.Empty, error) {
 	logger.Debugw(ctx, "proxy-omci-request", log.Fields{"request": request})
 
 	if handler := oo.getDeviceHandler(request.ParentDeviceId); handler != nil {
 		if err := handler.ProxyOmciMessage(ctx, request); err != nil {
 			return nil, err
 		}
-		return &empty.Empty{}, nil
+		return &emptypb.Empty{}, nil
 	}
 	return nil, olterrors.NewErrNotFound("no-device-handler", log.Fields{"parent-device-id": request.ParentDeviceId, "child-device-id": request.ChildDeviceId}, nil).Log()
 }
@@ -684,7 +685,7 @@
 }
 
 // UpdateDevice updates the address of the OLT for now
-func (oo *OpenOLT) UpdateDevice(ctx context.Context, updateDeviceReq *voltha.UpdateDevice) (*empty.Empty, error) {
+func (oo *OpenOLT) UpdateDevice(ctx context.Context, updateDeviceReq *voltha.UpdateDevice) (*emptypb.Empty, error) {
 	logger.Infow(ctx, "update-device", log.Fields{"device": updateDeviceReq})
 	if updateDeviceReq == nil {
 		return nil, fmt.Errorf("nil-device-config")
@@ -694,7 +695,7 @@
 	}
 	if handler := oo.getDeviceHandler(updateDeviceReq.Id); handler != nil {
 		go handler.UpdateDevice(context.Background(), updateDeviceReq)
-		return &empty.Empty{}, nil
+		return &emptypb.Empty{}, nil
 	}
 
 	return nil, olterrors.NewErrNotFound("device-handler", log.Fields{"device-id": updateDeviceReq.Id}, nil).Log()
@@ -712,7 +713,7 @@
 }
 
 // SetExtValue is unimplemented
-func (oo *OpenOLT) SetExtValue(context.Context, *ca.SetExtValueMessage) (*empty.Empty, error) {
+func (oo *OpenOLT) SetExtValue(context.Context, *ca.SetExtValueMessage) (*emptypb.Empty, error) {
 	return nil, olterrors.ErrNotImplemented
 }
 
@@ -722,12 +723,12 @@
 }
 
 // SuppressEvent unimplemented
-func (oo *OpenOLT) SuppressEvent(ctx context.Context, filter *voltha.EventFilter) (*empty.Empty, error) {
+func (oo *OpenOLT) SuppressEvent(ctx context.Context, filter *voltha.EventFilter) (*emptypb.Empty, error) {
 	return nil, olterrors.ErrNotImplemented
 }
 
 // UnSuppressEvent  unimplemented
-func (oo *OpenOLT) UnSuppressEvent(ctx context.Context, filter *voltha.EventFilter) (*empty.Empty, error) {
+func (oo *OpenOLT) UnSuppressEvent(ctx context.Context, filter *voltha.EventFilter) (*emptypb.Empty, error) {
 	return nil, olterrors.ErrNotImplemented
 }
 
@@ -787,11 +788,11 @@
 }
 
 // UpdateFlowsBulk is unimplemented
-func (oo *OpenOLT) UpdateFlowsBulk(ctx context.Context, flows *ca.BulkFlows) (*empty.Empty, error) {
+func (oo *OpenOLT) UpdateFlowsBulk(ctx context.Context, flows *ca.BulkFlows) (*emptypb.Empty, error) {
 	return nil, olterrors.ErrNotImplemented
 }
 
 // SelfTestDevice unimplemented
-func (oo *OpenOLT) SelfTestDevice(ctx context.Context, device *voltha.Device) (*empty.Empty, error) {
+func (oo *OpenOLT) SelfTestDevice(ctx context.Context, device *voltha.Device) (*emptypb.Empty, error) {
 	return nil, olterrors.ErrNotImplemented
 }
diff --git a/internal/pkg/core/openoltInterAdapter.go b/internal/pkg/core/openoltInterAdapter.go
index d27f600..84c6dd2 100644
--- a/internal/pkg/core/openoltInterAdapter.go
+++ b/internal/pkg/core/openoltInterAdapter.go
@@ -22,16 +22,17 @@
 	"fmt"
 	"time"
 
-	"github.com/golang/protobuf/ptypes/empty"
 	"github.com/opencord/voltha-lib-go/v7/pkg/log"
 	"github.com/opencord/voltha-protos/v5/go/common"
 	"github.com/opencord/voltha-protos/v5/go/health"
 	ia "github.com/opencord/voltha-protos/v5/go/inter_adapter"
 	oltia "github.com/opencord/voltha-protos/v5/go/olt_inter_adapter_service"
+	"google.golang.org/protobuf/types/known/emptypb"
 )
 
 // OpenOLTInterAdapter structure holds a reference to the oltAdapter
 type OpenOLTInterAdapter struct {
+	oltia.UnimplementedOltInterAdapterServiceServer
 	oltAdapter  *OpenOLT
 	exitChannel chan struct{}
 }
@@ -53,12 +54,12 @@
 }
 
 // ProxyOmciRequest proxies an OMCI request from the child adapter
-func (oo *OpenOLTInterAdapter) ProxyOmciRequest(ctx context.Context, request *ia.OmciMessage) (*empty.Empty, error) {
+func (oo *OpenOLTInterAdapter) ProxyOmciRequest(ctx context.Context, request *ia.OmciMessage) (*emptypb.Empty, error) {
 	return oo.oltAdapter.ProxyOmciRequest(ctx, request)
 }
 
 // ProxyOmciRequests proxies an OMCI request from the child adapter
-func (oo *OpenOLTInterAdapter) ProxyOmciRequests(ctx context.Context, request *ia.OmciMessages) (*empty.Empty, error) {
+func (oo *OpenOLTInterAdapter) ProxyOmciRequests(ctx context.Context, request *ia.OmciMessages) (*emptypb.Empty, error) {
 	return oo.oltAdapter.ProxyOmciRequests(ctx, request)
 }
 
diff --git a/internal/pkg/core/openolt_flowmgr.go b/internal/pkg/core/openolt_flowmgr.go
index 134b095..958ab19 100644
--- a/internal/pkg/core/openolt_flowmgr.go
+++ b/internal/pkg/core/openolt_flowmgr.go
@@ -395,8 +395,9 @@
 	case tp_pb.Direction_DOWNSTREAM:
 		SchedCfg = f.techprofile.GetDsScheduler(sq.tpInst.(*tp_pb.TechProfileInstance))
 	}
-	TrafficSched := []*tp_pb.TrafficScheduler{f.techprofile.GetTrafficScheduler(sq.tpInst.(*tp_pb.TechProfileInstance), SchedCfg, TrafficShaping)}
-	TrafficSched[0].TechProfileId = sq.tpID
+	trafficSched := f.techprofile.GetTrafficScheduler(sq.tpInst.(*tp_pb.TechProfileInstance), SchedCfg, TrafficShaping)
+	trafficSched.TechProfileId = sq.tpID
+	TrafficSched := []*tp_pb.TrafficScheduler{trafficSched}
 
 	/* Lets make a simple assumption that if the meter-id is present on the KV store,
 	 * then the scheduler and queues configuration is applied on the OLT device
@@ -689,8 +690,9 @@
 
 	TrafficShaping := &tp_pb.TrafficShapingInfo{} // this info is not really useful for the agent during flow removal. Just use default values.
 
-	TrafficSched := []*tp_pb.TrafficScheduler{f.techprofile.GetTrafficScheduler(sq.tpInst.(*tp_pb.TechProfileInstance), SchedCfg, TrafficShaping)}
-	TrafficSched[0].TechProfileId = sq.tpID
+	trafficSched := f.techprofile.GetTrafficScheduler(sq.tpInst.(*tp_pb.TechProfileInstance), SchedCfg, TrafficShaping)
+	trafficSched.TechProfileId = sq.tpID
+	TrafficSched := []*tp_pb.TrafficScheduler{trafficSched}
 
 	subCtx, cancel := context.WithTimeout(log.WithSpanFromContext(context.Background(), ctx), f.deviceHandler.cfg.RPCTimeout)
 	if _, err = f.deviceHandler.Client.RemoveTrafficSchedulers(subCtx, &tp_pb.TrafficSchedulers{
@@ -759,8 +761,9 @@
 	}
 
 	TrafficShaping := &tp_pb.TrafficShapingInfo{} // this info is not really useful for the agent during flow removal. Just use default values.
-	TrafficSched := []*tp_pb.TrafficScheduler{f.techprofile.GetTrafficScheduler(sq.tpInst.(*tp_pb.TechProfileInstance), schedCfg, TrafficShaping)}
-	TrafficSched[0].TechProfileId = sq.tpID
+	trafficSched := f.techprofile.GetTrafficScheduler(sq.tpInst.(*tp_pb.TechProfileInstance), schedCfg, TrafficShaping)
+	trafficSched.TechProfileId = sq.tpID
+	TrafficSched := []*tp_pb.TrafficScheduler{trafficSched}
 
 	// Remove traffic queues. Ignore any errors, just log them.
 	if TrafficQueues, err := f.techprofile.GetTrafficQueues(ctx, sq.tpInst.(*tp_pb.TechProfileInstance), sq.direction); err != nil {
@@ -1074,16 +1077,16 @@
 	logicalFlow := flowContext.logicalFlow
 	logger.Infow(ctx, "adding-hsia-flow",
 		log.Fields{
-			"intf-id":     intfID,
-			"onu-id":      onuID,
-			"uni-id":      uniID,
-			"device-id":   f.deviceHandler.device.Id,
-			"classifier":  classifier,
-			"action":      action,
-			"direction":   direction,
-			"alloc-id":    allocID,
-			"gemport-id":  gemPortID,
-			"logicalflow": *logicalFlow})
+			"intf-id":    intfID,
+			"onu-id":     onuID,
+			"uni-id":     uniID,
+			"device-id":  f.deviceHandler.device.Id,
+			"classifier": classifier,
+			"action":     action,
+			"direction":  direction,
+			"alloc-id":   allocID,
+			"gemport-id": gemPortID,
+			"flow-id":    logicalFlow.Id})
 
 	present, err := f.resourceMgr.IsFlowOnKvStore(ctx, int32(onuID), logicalFlow.Id)
 	if present {
@@ -1105,7 +1108,7 @@
 	}
 	logger.Debugw(ctx, "created-classifier-proto",
 		log.Fields{
-			"classifier": *classifierProto,
+			"classifier": classifierProto.String(),
 			"device-id":  f.deviceHandler.device.Id})
 	actionProto, err := makeOpenOltActionField(action, classifier)
 	if err != nil {
@@ -1113,7 +1116,7 @@
 	}
 	logger.Debugw(ctx, "created-action-proto",
 		log.Fields{
-			"action":    *actionProto,
+			"action":    actionProto.String(),
 			"device-id": f.deviceHandler.device.Id})
 	networkIntfID, err := getNniIntfID(ctx, classifier, action)
 	if err != nil {
@@ -1149,7 +1152,7 @@
 	logger.Infow(ctx, "hsia-flow-added-to-device-successfully",
 		log.Fields{"direction": direction,
 			"device-id": f.deviceHandler.device.Id,
-			"flow":      flow,
+			"flow-id":   flow.FlowId,
 			"intf-id":   intfID,
 			"onu-id":    onuID})
 
@@ -1210,7 +1213,7 @@
 	if err != nil {
 		return olterrors.NewErrInvalidValue(log.Fields{"classifier": classifier}, err).Log()
 	}
-	logger.Debugw(ctx, "created-classifier-proto", log.Fields{"classifier": *classifierProto})
+	logger.Debugw(ctx, "created-classifier-proto", log.Fields{"classifier": classifierProto.String()})
 	actionProto, err := makeOpenOltActionField(action, classifier)
 	if err != nil {
 		return olterrors.NewErrInvalidValue(log.Fields{"action": action}, err).Log()
@@ -1235,7 +1238,7 @@
 		GemportToAes:  flowContext.gemToAes,
 	}
 	if err := f.addFlowToDevice(ctx, logicalFlow, &dhcpFlow); err != nil {
-		return olterrors.NewErrFlowOp("add", logicalFlow.Id, log.Fields{"dhcp-flow": dhcpFlow}, err).Log()
+		return olterrors.NewErrFlowOp("add", logicalFlow.Id, log.Fields{"dhcp-flow-id": dhcpFlow.FlowId}, err).Log()
 	}
 	logger.Infow(ctx, "dhcp-ul-flow-added-to-device-successfully",
 		log.Fields{
@@ -1305,7 +1308,7 @@
 	}
 	logger.Debugw(ctx, "created-classifier-proto",
 		log.Fields{
-			"classifier": *classifierProto,
+			"classifier": classifierProto.String(),
 			"device-id":  f.deviceHandler.device.Id})
 	actionProto, err := makeOpenOltActionField(action, classifier)
 	if err != nil {
@@ -1332,7 +1335,7 @@
 	}
 
 	if err := f.addFlowToDevice(ctx, logicalFlow, &flow); err != nil {
-		return olterrors.NewErrFlowOp("add", logicalFlow.Id, log.Fields{"flow": flow, "device-id": f.deviceHandler.device.Id}, err).Log()
+		return olterrors.NewErrFlowOp("add", logicalFlow.Id, log.Fields{"flow-id": flow.FlowId, "device-id": f.deviceHandler.device.Id}, err).Log()
 	}
 
 	return nil
@@ -1402,7 +1405,7 @@
 	}
 	logger.Debugw(ctx, "created-classifier-proto",
 		log.Fields{
-			"classifier": *classifierProto,
+			"classifier": classifierProto.String(),
 			"device-id":  f.deviceHandler.device.Id})
 	actionProto, err := makeOpenOltActionField(uplinkAction, uplinkClassifier)
 	if err != nil {
@@ -1410,7 +1413,7 @@
 	}
 	logger.Debugw(ctx, "created-action-proto",
 		log.Fields{
-			"action":    *actionProto,
+			"action":    actionProto.String(),
 			"device-id": f.deviceHandler.device.Id})
 	networkIntfID, err := getNniIntfID(ctx, classifier, action)
 	if err != nil {
@@ -1440,7 +1443,7 @@
 		GemportToAes:  flowContext.gemToAes,
 	}
 	if err := f.addFlowToDevice(ctx, logicalFlow, &upstreamFlow); err != nil {
-		return olterrors.NewErrFlowOp("add", logicalFlow.Id, log.Fields{"flow": upstreamFlow}, err).Log()
+		return olterrors.NewErrFlowOp("add", logicalFlow.Id, log.Fields{"flow-id": upstreamFlow.FlowId}, err).Log()
 	}
 	logger.Infow(ctx, "ethType-ul-flow-added-to-device-successfully",
 		log.Fields{
@@ -1640,7 +1643,7 @@
 	}
 
 	logger.Debugw(ctx, "sending-flow-to-device-via-grpc", log.Fields{
-		"flow":      *deviceFlow,
+		"flow-id":   deviceFlow.FlowId,
 		"device-id": f.deviceHandler.device.Id,
 		"intf-id":   intfID})
 	subCtx, cancel := context.WithTimeout(log.WithSpanFromContext(context.Background(), ctx), f.deviceHandler.cfg.RPCTimeout)
@@ -1650,24 +1653,24 @@
 	st, _ := status.FromError(err)
 	if st.Code() == codes.AlreadyExists {
 		logger.Debug(ctx, "flow-already-exists", log.Fields{
-			"err":        err,
-			"deviceFlow": deviceFlow,
-			"device-id":  f.deviceHandler.device.Id,
-			"intf-id":    intfID})
+			"err":       err,
+			"flow-id":   deviceFlow.FlowId,
+			"device-id": f.deviceHandler.device.Id,
+			"intf-id":   intfID})
 		return nil
 	}
 
 	if err != nil {
 		logger.Errorw(ctx, "failed-to-add-flow-to-device",
 			log.Fields{"err": err,
-				"device-flow": deviceFlow,
-				"device-id":   f.deviceHandler.device.Id,
-				"intf-id":     intfID})
+				"flow-id":   deviceFlow.FlowId,
+				"device-id": f.deviceHandler.device.Id,
+				"intf-id":   intfID})
 		return err
 	}
 	logger.Infow(ctx, "flow-added-to-device-successfully ",
 		log.Fields{
-			"flow":      *deviceFlow,
+			"flow-id":   deviceFlow.FlowId,
 			"device-id": f.deviceHandler.device.Id,
 			"intf-id":   intfID})
 
@@ -1681,7 +1684,7 @@
 func (f *OpenOltFlowMgr) removeFlowFromDevice(ctx context.Context, deviceFlow *openoltpb2.Flow, ofFlowID uint64) error {
 	logger.Debugw(ctx, "sending-flow-to-device-via-grpc",
 		log.Fields{
-			"flow":      *deviceFlow,
+			"flow-id":   deviceFlow.FlowId,
 			"device-id": f.deviceHandler.device.Id})
 	subCtx, cancel := context.WithTimeout(log.WithSpanFromContext(context.Background(), ctx), f.deviceHandler.cfg.RPCTimeout)
 	_, err := f.deviceHandler.Client.FlowRemove(subCtx, deviceFlow)
@@ -1700,7 +1703,7 @@
 	}
 	logger.Infow(ctx, "flow-removed-from-device-successfully", log.Fields{
 		"of-flow-id": ofFlowID,
-		"flow":       *deviceFlow,
+		"flow-id":    deviceFlow.FlowId,
 		"device-id":  f.deviceHandler.device.Id,
 	})
 	return nil
@@ -1753,7 +1756,7 @@
 	}
 	logger.Debugw(ctx, "created-classifier-proto",
 		log.Fields{
-			"classifier": *classifierProto,
+			"classifier": classifierProto.String(),
 			"device-id":  f.deviceHandler.device.Id})
 	actionProto, err := makeOpenOltActionField(actionInfo, classifierInfo)
 	if err != nil {
@@ -1764,7 +1767,7 @@
 	}
 	logger.Debugw(ctx, "created-action-proto",
 		log.Fields{
-			"action":    *actionProto,
+			"action":    actionProto.String(),
 			"device-id": f.deviceHandler.device.Id})
 
 	downstreamflow := openoltpb2.Flow{AccessIntfId: int32(-1), // AccessIntfId not required
@@ -1782,7 +1785,7 @@
 	if err := f.addFlowToDevice(ctx, flow, &downstreamflow); err != nil {
 		return olterrors.NewErrFlowOp("add", flow.Id,
 			log.Fields{
-				"flow":      downstreamflow,
+				"flow-id":   downstreamflow.FlowId,
 				"device-id": f.deviceHandler.device.Id}, err)
 	}
 	logger.Infow(ctx, "lldp-trap-on-nni-flow-added-to-device-successfully",
@@ -1873,7 +1876,7 @@
 		TpInstancePath: tpPath,
 		GemPortId:      gemPortID,
 	}
-	logger.Debugw(ctx, "sending-gem-port-delete-to-openonu-adapter", log.Fields{"msg": *delGemPortMsg, "child-device-id": onuDev.deviceID})
+	logger.Debugw(ctx, "sending-gem-port-delete-to-openonu-adapter", log.Fields{"msg": delGemPortMsg.String(), "child-device-id": onuDev.deviceID})
 
 	if err := f.deviceHandler.sendDeleteGemPortToChildAdapter(ctx, onuDev.adapterEndpoint, delGemPortMsg); err != nil {
 		return olterrors.NewErrCommunication("send-delete-gem-port-to-onu-adapter",
@@ -1916,7 +1919,7 @@
 
 	logger.Debugw(ctx, "sending-tcont-delete-to-openonu-adapter",
 		log.Fields{
-			"msg":       *delTcontMsg,
+			"msg":       delTcontMsg.String(),
 			"device-id": f.deviceHandler.device.Id})
 
 	if err := f.deviceHandler.sendDeleteTContToChildAdapter(ctx, onuDev.adapterEndpoint, delTcontMsg); err != nil {
@@ -2131,7 +2134,7 @@
 	logger.Debugw(ctx, "clear-flow-from-resource-manager",
 		log.Fields{
 			"flowDirection": flowDirection,
-			"flow":          *flow,
+			"flow-id":       flow.Id,
 			"device-id":     f.deviceHandler.device.Id})
 
 	if flowDirection == Multicast {
@@ -2212,7 +2215,7 @@
 
 // RemoveFlow removes the flow from the device
 func (f *OpenOltFlowMgr) RemoveFlow(ctx context.Context, flow *ofp.OfpFlowStats) error {
-	logger.Debugw(ctx, "removing-flow", log.Fields{"flow": *flow})
+	logger.Debugw(ctx, "removing-flow", log.Fields{"flow-id": flow.Id})
 	var direction string
 	actionInfo := make(map[string]interface{})
 
@@ -2519,7 +2522,7 @@
 		Cookie:        flow.Cookie}
 
 	if err := f.addFlowToDevice(ctx, flow, &multicastFlow); err != nil {
-		return olterrors.NewErrFlowOp("add", flow.Id, log.Fields{"flow": multicastFlow}, err)
+		return olterrors.NewErrFlowOp("add", flow.Id, log.Fields{"flow-id": multicastFlow.FlowId}, err)
 	}
 	logger.Info(ctx, "multicast-flow-added-to-device-successfully")
 	// get cached group
@@ -2552,7 +2555,7 @@
 }
 
 // sendTPDownloadMsgToChild send payload
-func (f *OpenOltFlowMgr) sendTPDownloadMsgToChild(ctx context.Context, intfID uint32, onuID uint32, uniID uint32, uni string, TpID uint32, tpInst tp_pb.TechProfileInstance) error {
+func (f *OpenOltFlowMgr) sendTPDownloadMsgToChild(ctx context.Context, intfID uint32, onuID uint32, uniID uint32, uni string, TpID uint32, tpInst *tp_pb.TechProfileInstance) error {
 	onuDev, err := f.getOnuDevice(ctx, intfID, onuID)
 	if err != nil {
 		logger.Errorw(ctx, "couldnt-find-onu-child-device",
@@ -2569,9 +2572,9 @@
 		DeviceId:       onuDev.deviceID,
 		UniId:          uniID,
 		TpInstancePath: tpPath,
-		TechTpInstance: &ia.TechProfileDownloadMessage_TpInstance{TpInstance: &tpInst},
+		TechTpInstance: &ia.TechProfileDownloadMessage_TpInstance{TpInstance: tpInst},
 	}
-	logger.Debugw(ctx, "sending-load-tech-profile-request-to-brcm-onu-adapter", log.Fields{"tpDownloadMsg": *tpDownloadMsg})
+	logger.Debugw(ctx, "sending-load-tech-profile-request-to-brcm-onu-adapter", log.Fields{"tpDownloadMsg": tpDownloadMsg.String()})
 
 	err = f.deviceHandler.sendDownloadTechProfileToChildAdapter(ctx, onuDev.adapterEndpoint, tpDownloadMsg)
 	if err != nil {
@@ -2711,12 +2714,12 @@
 	if err != nil {
 		return olterrors.NewErrInvalidValue(log.Fields{"classifier": classifier}, err)
 	}
-	logger.Debugw(ctx, "created-classifier-proto", log.Fields{"classifier": *classifierProto})
+	logger.Debugw(ctx, "created-classifier-proto", log.Fields{"classifier": classifierProto.String()})
 	actionProto, err := makeOpenOltActionField(action, classifier)
 	if err != nil {
 		return olterrors.NewErrInvalidValue(log.Fields{"action": action}, err)
 	}
-	logger.Debugw(ctx, "created-action-proto", log.Fields{"action": *actionProto})
+	logger.Debugw(ctx, "created-action-proto", log.Fields{"action": actionProto.String()})
 	downstreamflow := openoltpb2.Flow{AccessIntfId: int32(-1), // AccessIntfId not required
 		OnuId:         int32(onuID), // OnuId not required
 		UniId:         int32(uniID), // UniId not used
@@ -2731,7 +2734,7 @@
 		Cookie:        logicalFlow.Cookie,
 		PortNo:        portNo}
 	if err := f.addFlowToDevice(ctx, logicalFlow, &downstreamflow); err != nil {
-		return olterrors.NewErrFlowOp("add", logicalFlow.Id, log.Fields{"flow": downstreamflow}, err)
+		return olterrors.NewErrFlowOp("add", logicalFlow.Id, log.Fields{"flow-id": downstreamflow.FlowId}, err)
 	}
 	logger.Info(ctx, "trap-on-nni-flow-added–to-device-successfully")
 	return nil
@@ -2818,12 +2821,12 @@
 	if err != nil {
 		return olterrors.NewErrInvalidValue(log.Fields{"classifier": classifier}, err)
 	}
-	logger.Debugw(ctx, "created-classifier-proto-for-the-igmp-flow", log.Fields{"classifier": *classifierProto})
+	logger.Debugw(ctx, "created-classifier-proto-for-the-igmp-flow", log.Fields{"classifier": classifierProto.String()})
 	actionProto, err := makeOpenOltActionField(action, classifier)
 	if err != nil {
 		return olterrors.NewErrInvalidValue(log.Fields{"action": action}, err)
 	}
-	logger.Debugw(ctx, "created-action-proto-for-the-igmp-flow", log.Fields{"action": *actionProto})
+	logger.Debugw(ctx, "created-action-proto-for-the-igmp-flow", log.Fields{"action": actionProto.String()})
 	downstreamflow := openoltpb2.Flow{AccessIntfId: int32(-1), // AccessIntfId not required
 		OnuId:         int32(onuID), // OnuId not required
 		UniId:         int32(uniID), // UniId not used
@@ -2838,7 +2841,7 @@
 		Cookie:        logicalFlow.Cookie,
 		PortNo:        portNo}
 	if err := f.addFlowToDevice(ctx, logicalFlow, &downstreamflow); err != nil {
-		return olterrors.NewErrFlowOp("add", logicalFlow.Id, log.Fields{"flow": downstreamflow}, err)
+		return olterrors.NewErrFlowOp("add", logicalFlow.Id, log.Fields{"flow-id": downstreamflow.FlowId}, err)
 	}
 	logger.Info(ctx, "igmp-trap-on-nni-flow-added-to-device-successfully")
 
@@ -3032,7 +3035,7 @@
 	}
 	// Send Techprofile download event to child device in go routine as it takes time
 	go func() {
-		if err := f.sendTPDownloadMsgToChild(ctx, intfID, onuID, uniID, uni, tpID, *(TpInst.(*tp_pb.TechProfileInstance))); err != nil {
+		if err := f.sendTPDownloadMsgToChild(ctx, intfID, onuID, uniID, uni, tpID, TpInst.(*tp_pb.TechProfileInstance)); err != nil {
 			logger.Warn(ctx, err)
 		}
 	}()
@@ -3044,7 +3047,7 @@
 	if tpInst.InstanceControl.Onu == "single-instance" && sq.direction == tp_pb.Direction_UPSTREAM {
 		tpInstances := f.techprofile.FindAllTpInstances(ctx, f.deviceHandler.device.Id, sq.tpID, sq.intfID, sq.onuID).([]tp_pb.TechProfileInstance)
 		for i := 0; i < len(tpInstances); i++ {
-			tpI := tpInstances[i]
+			tpI := &tpInstances[i]
 			if tpI.SubscriberIdentifier != tpInst.SubscriberIdentifier &&
 				tpI.UsScheduler.AllocId == tpInst.UsScheduler.AllocId {
 				logger.Debugw(ctx, "alloc-is-in-use-on-another-uni",
diff --git a/internal/pkg/core/openolt_groupmgr.go b/internal/pkg/core/openolt_groupmgr.go
index f52c481..9b40516 100644
--- a/internal/pkg/core/openolt_groupmgr.go
+++ b/internal/pkg/core/openolt_groupmgr.go
@@ -70,18 +70,18 @@
 		Command: openoltpb2.Group_SET_MEMBERS,
 		Action:  g.buildGroupAction(),
 	}
-	logger.Debugw(ctx, "sending-group-to-device", log.Fields{"groupToOlt": groupToOlt})
+	logger.Debugw(ctx, "sending-group-to-device", log.Fields{"group-id": groupToOlt.GroupId})
 	subCtx, cancel := context.WithTimeout(log.WithSpanFromContext(context.Background(), ctx), g.deviceHandler.cfg.RPCTimeout)
 	_, err := g.deviceHandler.Client.PerformGroupOperation(subCtx, &groupToOlt)
 	cancel()
 	if err != nil {
-		return olterrors.NewErrAdapter("add-group-operation-failed", log.Fields{"groupToOlt": groupToOlt}, err)
+		return olterrors.NewErrAdapter("add-group-operation-failed", log.Fields{"group-id": groupToOlt.GroupId}, err)
 	}
 	// group members not created yet. So let's store the group
 	if err := g.resourceMgr.AddFlowGroupToKVStore(ctx, group, true); err != nil {
 		return olterrors.NewErrPersistence("add", "flow-group", uint64(group.Desc.GroupId), log.Fields{"group": group}, err)
 	}
-	logger.Infow(ctx, "add-group-operation-performed-on-the-device-successfully ", log.Fields{"groupToOlt": groupToOlt})
+	logger.Infow(ctx, "add-group-operation-performed-on-the-device-successfully ", log.Fields{"group-id": groupToOlt.GroupId})
 	return nil
 }
 
@@ -95,19 +95,19 @@
 	groupToOlt := openoltpb2.Group{
 		GroupId: group.Desc.GroupId,
 	}
-	logger.Debugw(ctx, "deleting-group-from-device", log.Fields{"groupToOlt": groupToOlt})
+	logger.Debugw(ctx, "deleting-group-from-device", log.Fields{"group-id": groupToOlt.GroupId})
 	subCtx, cancel := context.WithTimeout(log.WithSpanFromContext(context.Background(), ctx), g.deviceHandler.cfg.RPCTimeout)
 	_, err := g.deviceHandler.Client.DeleteGroup(subCtx, &groupToOlt)
 	cancel()
 	if err != nil {
-		logger.Errorw(ctx, "delete-group-failed-on-dev", log.Fields{"groupToOlt": groupToOlt, "err": err})
-		return olterrors.NewErrAdapter("delete-group-operation-failed", log.Fields{"groupToOlt": groupToOlt}, err)
+		logger.Errorw(ctx, "delete-group-failed-on-dev", log.Fields{"group-id": groupToOlt.GroupId, "err": err})
+		return olterrors.NewErrAdapter("delete-group-operation-failed", log.Fields{"group-id": groupToOlt.GroupId}, err)
 	}
 	// remove group from the store
 	if err := g.resourceMgr.RemoveFlowGroupFromKVStore(ctx, group.Desc.GroupId, false); err != nil {
 		return olterrors.NewErrPersistence("delete", "flow-group", uint64(group.Desc.GroupId), log.Fields{"group": group}, err)
 	}
-	logger.Debugw(ctx, "delete-group-operation-performed-on-the-device-successfully ", log.Fields{"groupToOlt": groupToOlt})
+	logger.Debugw(ctx, "delete-group-operation-performed-on-the-device-successfully ", log.Fields{"group-id": groupToOlt.GroupId})
 	return nil
 }