VOL-2631 Update to voltha-lib-go 3.0.14

Change-Id: I21ef41d49ad6bd42ad301962583d2aabdea7ccad
diff --git a/VERSION b/VERSION
index f90b1af..ca2d639 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.3.2
+2.3.3-dev
diff --git a/db/model/persisted_revision.go b/db/model/persisted_revision.go
index bbb4a1d..3637e9a 100644
--- a/db/model/persisted_revision.go
+++ b/db/model/persisted_revision.go
@@ -136,7 +136,7 @@
 		log.Debugw("setting-watch-channel", log.Fields{"key": key, "revision-hash": pr.GetHash()})
 
 		pr.SetName(key)
-		pr.events = pr.kvStore.CreateWatch(ctx, key)
+		pr.events = pr.kvStore.CreateWatch(ctx, key, false)
 	}
 
 	if !pr.isWatched {
diff --git a/go.mod b/go.mod
index ef050dc..12a6664 100644
--- a/go.mod
+++ b/go.mod
@@ -6,7 +6,7 @@
 	github.com/gogo/protobuf v1.3.0
 	github.com/golang/protobuf v1.3.2
 	github.com/google/uuid v1.1.1
-	github.com/opencord/voltha-lib-go/v3 v3.0.12
+	github.com/opencord/voltha-lib-go/v3 v3.0.14
 	github.com/opencord/voltha-protos/v3 v3.2.3
 	github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2
 	github.com/stretchr/testify v1.4.0
diff --git a/go.sum b/go.sum
index 64bb746..fcdaf47 100644
--- a/go.sum
+++ b/go.sum
@@ -190,8 +190,8 @@
 github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/gomega v1.4.2 h1:3mYCb7aPxS/RU7TI1y4rkEn1oKmPRjNJLNEXgw7MH2I=
 github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/opencord/voltha-lib-go/v3 v3.0.12 h1:YGpyjl0UxdVUpKuo/VO5eCi+1+5EbMK9ZUqjDvWUQWQ=
-github.com/opencord/voltha-lib-go/v3 v3.0.12/go.mod h1:69Y+rVd25Nq2SUeoY7Q1BXtwrcUPllG0erhq+aK8Qec=
+github.com/opencord/voltha-lib-go/v3 v3.0.14 h1:klI6Qt5iA9bTqI42jflSbU6YyEMJRcpaqh6rRw7qNnI=
+github.com/opencord/voltha-lib-go/v3 v3.0.14/go.mod h1:69Y+rVd25Nq2SUeoY7Q1BXtwrcUPllG0erhq+aK8Qec=
 github.com/opencord/voltha-protos/v3 v3.2.3 h1:Wv73mw1Ye0bCfyhOk5svgrlE2tLizHq6tQluoDq9Vg8=
 github.com/opencord/voltha-protos/v3 v3.2.3/go.mod h1:RIGHt7b80BHpHh3ceodknh0DxUjUHCWSbYbZqRx7Og0=
 github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
diff --git a/rw_core/core/transaction.go b/rw_core/core/transaction.go
index fb51d2e..fc55683 100644
--- a/rw_core/core/transaction.go
+++ b/rw_core/core/transaction.go
@@ -242,7 +242,7 @@
 // Watch watches transaction
 func (c *KVTransaction) Watch(ctxt context.Context, durationInSecs int64) int {
 	var res int
-	events := ctx.kvClient.Watch(ctxt, c.txnKey)
+	events := ctx.kvClient.Watch(ctxt, c.txnKey, false)
 	defer ctx.kvClient.CloseWatch(c.txnKey, events)
 
 	transactionWasAcquiredByOther := false
diff --git a/rw_core/mocks/adapter.go b/rw_core/mocks/adapter.go
index 28d06da..63474ef 100644
--- a/rw_core/mocks/adapter.go
+++ b/rw_core/mocks/adapter.go
@@ -249,3 +249,8 @@
 func (ta *Adapter) Disable_port(deviceId string, port *voltha.Port) error { //nolint
 	return nil
 }
+
+// Child_device_lost -
+func (ta *Adapter) Child_device_lost(pDeviceID string, pPortNo uint32, onuID uint32) error { //nolint
+	return nil
+}
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/core_proxy.go b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/core_proxy.go
index 1882135..86f186d 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/core_proxy.go
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/core_proxy.go
@@ -284,7 +284,7 @@
 		volthaDevice := &voltha.Device{}
 		if err := ptypes.UnmarshalAny(result, volthaDevice); err != nil {
 			logger.Warnw("cannot-unmarshal-response", log.Fields{"error": err})
-			return nil, status.Errorf(codes.InvalidArgument, "%s", err.Error())
+			return nil, status.Error(codes.InvalidArgument, err.Error())
 		}
 		return volthaDevice, nil
 	} else {
@@ -294,8 +294,8 @@
 			logger.Warnw("cannot-unmarshal-response", log.Fields{"error": err})
 		}
 		logger.Debugw("ChildDeviceDetected-return", log.Fields{"deviceid": parentDeviceId, "success": success, "error": err})
-		// TODO: Need to get the real error code
-		return nil, status.Errorf(codes.Internal, "%s", unpackResult.Reason)
+
+		return nil, status.Error(ICProxyErrorCodeToGrpcErrorCode(unpackResult.Code), unpackResult.Reason)
 	}
 
 }
@@ -361,7 +361,7 @@
 		volthaDevice := &voltha.Device{}
 		if err := ptypes.UnmarshalAny(result, volthaDevice); err != nil {
 			logger.Warnw("cannot-unmarshal-response", log.Fields{"error": err})
-			return nil, status.Errorf(codes.InvalidArgument, "%s", err.Error())
+			return nil, status.Error(codes.InvalidArgument, err.Error())
 		}
 		return volthaDevice, nil
 	} else {
@@ -372,7 +372,7 @@
 		}
 		logger.Debugw("GetDevice-return", log.Fields{"deviceid": parentDeviceId, "success": success, "error": err})
 		// TODO:  Need to get the real error code
-		return nil, status.Errorf(codes.Internal, "%s", unpackResult.Reason)
+		return nil, status.Error(ICProxyErrorCodeToGrpcErrorCode(unpackResult.Code), unpackResult.Reason)
 	}
 }
 
@@ -421,7 +421,7 @@
 		volthaDevice := &voltha.Device{}
 		if err := ptypes.UnmarshalAny(result, volthaDevice); err != nil {
 			logger.Warnw("cannot-unmarshal-response", log.Fields{"error": err})
-			return nil, status.Errorf(codes.InvalidArgument, "%s", err.Error())
+			return nil, status.Error(codes.InvalidArgument, err.Error())
 		}
 		return volthaDevice, nil
 	} else {
@@ -432,13 +432,7 @@
 		}
 		logger.Debugw("GetChildDevice-return", log.Fields{"deviceid": parentDeviceId, "success": success, "error": err})
 
-		code := codes.Internal
-
-		if unpackResult.Code == ic.ErrorCode_DEADLINE_EXCEEDED {
-			code = codes.DeadlineExceeded
-		}
-
-		return nil, status.Errorf(code, "%s", unpackResult.Reason)
+		return nil, status.Error(ICProxyErrorCodeToGrpcErrorCode(unpackResult.Code), unpackResult.Reason)
 	}
 }
 
@@ -463,7 +457,7 @@
 		volthaDevices := &voltha.Devices{}
 		if err := ptypes.UnmarshalAny(result, volthaDevices); err != nil {
 			logger.Warnw("cannot-unmarshal-response", log.Fields{"error": err})
-			return nil, status.Errorf(codes.InvalidArgument, "%s", err.Error())
+			return nil, status.Error(codes.InvalidArgument, err.Error())
 		}
 		return volthaDevices, nil
 	} else {
@@ -474,13 +468,7 @@
 		}
 		logger.Debugw("GetChildDevices-return", log.Fields{"deviceid": parentDeviceId, "success": success, "error": err})
 
-		code := codes.Internal
-
-		if unpackResult.Code == ic.ErrorCode_DEADLINE_EXCEEDED {
-			code = codes.DeadlineExceeded
-		}
-
-		return nil, status.Errorf(code, "%s", unpackResult.Reason)
+		return nil, status.Error(ICProxyErrorCodeToGrpcErrorCode(unpackResult.Code), unpackResult.Reason)
 	}
 }
 
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/events_proxy.go b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/events_proxy.go
index 034de8e..da9c9eb 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/events_proxy.go
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/events_proxy.go
@@ -23,6 +23,7 @@
 	"strings"
 	"time"
 
+	"github.com/golang/protobuf/ptypes"
 	"github.com/opencord/voltha-lib-go/v3/pkg/adapters/adapterif"
 	"github.com/opencord/voltha-lib-go/v3/pkg/kafka"
 	"github.com/opencord/voltha-lib-go/v3/pkg/log"
@@ -60,7 +61,11 @@
 	return fmt.Sprintf("Voltha.openolt.%s.%s", eventName, strconv.FormatInt(time.Now().UnixNano(), 10))
 }
 
-func (ep *EventProxy) getEventHeader(eventName string, category adapterif.EventCategory, subCategory adapterif.EventSubCategory, eventType adapterif.EventType, raisedTs int64) *voltha.EventHeader {
+func (ep *EventProxy) getEventHeader(eventName string,
+	category adapterif.EventCategory,
+	subCategory adapterif.EventSubCategory,
+	eventType adapterif.EventType,
+	raisedTs int64) (*voltha.EventHeader, error) {
 	var header voltha.EventHeader
 	if strings.Contains(eventName, "_") {
 		eventName = strings.Join(strings.Split(eventName, "_")[:len(strings.Split(eventName, "_"))-2], "_")
@@ -73,9 +78,21 @@
 	header.SubCategory = subCategory
 	header.Type = eventType
 	header.TypeVersion = adapterif.EventTypeVersion
-	header.RaisedTs = float32(raisedTs)
-	header.ReportedTs = float32(time.Now().UnixNano())
-	return &header
+
+	// raisedTs is in nanoseconds
+	timestamp, err := ptypes.TimestampProto(time.Unix(0, raisedTs))
+	if err != nil {
+		return nil, err
+	}
+	header.RaisedTs = timestamp
+
+	timestamp, err = ptypes.TimestampProto(time.Now())
+	if err != nil {
+		return nil, err
+	}
+	header.ReportedTs = timestamp
+
+	return &header, nil
 }
 
 /* Send out device events*/
@@ -86,8 +103,11 @@
 	}
 	var event voltha.Event
 	var de voltha.Event_DeviceEvent
+	var err error
 	de.DeviceEvent = deviceEvent
-	event.Header = ep.getEventHeader(deviceEvent.DeviceEventName, category, subCategory, voltha.EventType_DEVICE_EVENT, raisedTs)
+	if event.Header, err = ep.getEventHeader(deviceEvent.DeviceEventName, category, subCategory, voltha.EventType_DEVICE_EVENT, raisedTs); err != nil {
+		return err
+	}
 	event.EventType = &de
 	if err := ep.sendEvent(&event); err != nil {
 		logger.Errorw("Failed to send device event to KAFKA bus", log.Fields{"device-event": deviceEvent})
@@ -110,8 +130,11 @@
 	}
 	var event voltha.Event
 	var de voltha.Event_KpiEvent2
+	var err error
 	de.KpiEvent2 = kpiEvent
-	event.Header = ep.getEventHeader(id, category, subCategory, voltha.EventType_KPI_EVENT2, raisedTs)
+	if event.Header, err = ep.getEventHeader(id, category, subCategory, voltha.EventType_KPI_EVENT2, raisedTs); err != nil {
+		return err
+	}
 	event.EventType = &de
 	if err := ep.sendEvent(&event); err != nil {
 		logger.Errorw("Failed to send kpi event to KAFKA bus", log.Fields{"device-event": kpiEvent})
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/request_handler.go b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/request_handler.go
index 78b8eb5..5b00887 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/request_handler.go
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/request_handler.go
@@ -658,3 +658,46 @@
 	}
 	return deviceId.Val, port, nil
 }
+
+func (rhp *RequestHandlerProxy) Child_device_lost(args []*ic.Argument) error {
+	if len(args) < 4 {
+		logger.Warn("invalid-number-of-args", log.Fields{"args": args})
+		return errors.New("invalid-number-of-args")
+	}
+
+	pDeviceId := &ic.StrType{}
+	pPortNo := &ic.IntType{}
+	onuID := &ic.IntType{}
+	fromTopic := &ic.StrType{}
+	for _, arg := range args {
+		switch arg.Key {
+		case "pDeviceId":
+			if err := ptypes.UnmarshalAny(arg.Value, pDeviceId); err != nil {
+				logger.Warnw("cannot-unmarshal-parent-deviceId", log.Fields{"error": err})
+				return err
+			}
+		case "pPortNo":
+			if err := ptypes.UnmarshalAny(arg.Value, pPortNo); err != nil {
+				logger.Warnw("cannot-unmarshal-port", log.Fields{"error": err})
+				return err
+			}
+		case "onuID":
+			if err := ptypes.UnmarshalAny(arg.Value, onuID); err != nil {
+				logger.Warnw("cannot-unmarshal-transaction-ID", log.Fields{"error": err})
+				return err
+			}
+		case kafka.FromTopic:
+			if err := ptypes.UnmarshalAny(arg.Value, fromTopic); err != nil {
+				logger.Warnw("cannot-unmarshal-from-topic", log.Fields{"error": err})
+				return err
+			}
+		}
+	}
+	//Update the core reference for that device
+	rhp.coreProxy.UpdateCoreReference(pDeviceId.Val, fromTopic.Val)
+	//Invoke the Child_device_lost API on the adapter
+	if err := rhp.adapter.Child_device_lost(pDeviceId.Val, uint32(pPortNo.Val), uint32(onuID.Val)); err != nil {
+		return status.Errorf(codes.NotFound, "%s", err.Error())
+	}
+	return nil
+}
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/utils.go b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/utils.go
index d3c562a..b782ebe 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/utils.go
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/utils.go
@@ -17,6 +17,9 @@
 
 import (
 	"fmt"
+	"github.com/opencord/voltha-lib-go/v3/pkg/log"
+	ic "github.com/opencord/voltha-protos/v3/go/inter_container"
+	"google.golang.org/grpc/codes"
 	"math/rand"
 	"time"
 )
@@ -71,3 +74,17 @@
 	}
 	return string(b)
 }
+
+func ICProxyErrorCodeToGrpcErrorCode(icErr ic.ErrorCodeCodes) codes.Code {
+	switch icErr {
+	case ic.ErrorCode_INVALID_PARAMETERS:
+		return codes.InvalidArgument
+	case ic.ErrorCode_UNSUPPORTED_REQUEST:
+		return codes.Unavailable
+	case ic.ErrorCode_DEADLINE_EXCEEDED:
+		return codes.DeadlineExceeded
+	default:
+		log.Warnw("cannnot-map-ic-error-code-to-grpc-error-code", log.Fields{"err": icErr})
+		return codes.Internal
+	}
+}
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/iAdapter.go b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/iAdapter.go
index c0e44be..fc57247 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/iAdapter.go
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/iAdapter.go
@@ -51,4 +51,5 @@
 	Revert_image_update(device *voltha.Device, request *voltha.ImageDownload) (*voltha.ImageDownload, error)
 	Enable_port(deviceId string, port *voltha.Port) error
 	Disable_port(deviceId string, port *voltha.Port) error
+	Child_device_lost(parentDeviceId string, parentPortNo uint32, onuID uint32) error
 }
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/db/backend.go b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/db/backend.go
index 96829c5..04fe35d 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/db/backend.go
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/db/backend.go
@@ -247,14 +247,14 @@
 }
 
 // CreateWatch starts watching events for the specified key
-func (b *Backend) CreateWatch(ctx context.Context, key string) chan *kvstore.Event {
+func (b *Backend) CreateWatch(ctx context.Context, key string, withPrefix bool) chan *kvstore.Event {
 	b.Lock()
 	defer b.Unlock()
 
 	formattedPath := b.makePath(key)
 	logger.Debugw("creating-key-watch", log.Fields{"key": key, "path": formattedPath})
 
-	return b.Client.Watch(ctx, formattedPath)
+	return b.Client.Watch(ctx, formattedPath, withPrefix)
 }
 
 // DeleteWatch stops watching events for the specified key
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/db/kvstore/client.go b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/db/kvstore/client.go
index d30e049..b9cb1ee 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/db/kvstore/client.go
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/db/kvstore/client.go
@@ -81,7 +81,7 @@
 	ReleaseReservation(ctx context.Context, key string) error
 	ReleaseAllReservations(ctx context.Context) error
 	RenewReservation(ctx context.Context, key string) error
-	Watch(ctx context.Context, key string) chan *Event
+	Watch(ctx context.Context, key string, withPrefix bool) chan *Event
 	AcquireLock(ctx context.Context, lockName string, timeout int) error
 	ReleaseLock(lockName string) error
 	IsConnectionUp(ctx context.Context) bool // timeout in second
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/db/kvstore/consulclient.go b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/db/kvstore/consulclient.go
index fdf39be..bdf2d10 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/db/kvstore/consulclient.go
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/db/kvstore/consulclient.go
@@ -360,7 +360,7 @@
 
 // Watch provides the watch capability on a given key.  It returns a channel onto which the callee needs to
 // listen to receive Events.
-func (c *ConsulClient) Watch(ctx context.Context, key string) chan *Event {
+func (c *ConsulClient) Watch(ctx context.Context, key string, withPrefix bool) chan *Event {
 
 	// Create a new channel
 	ch := make(chan *Event, maxClientChannelBufferSize)
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/db/kvstore/etcdclient.go b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/db/kvstore/etcdclient.go
index 2d126f7..1014ada 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/db/kvstore/etcdclient.go
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/db/kvstore/etcdclient.go
@@ -298,10 +298,15 @@
 
 // Watch provides the watch capability on a given key.  It returns a channel onto which the callee needs to
 // listen to receive Events.
-func (c *EtcdClient) Watch(ctx context.Context, key string) chan *Event {
+func (c *EtcdClient) Watch(ctx context.Context, key string, withPrefix bool) chan *Event {
 	w := v3Client.NewWatcher(c.ectdAPI)
 	ctx, cancel := context.WithCancel(ctx)
-	channel := w.Watch(ctx, key)
+	var channel v3Client.WatchChan
+	if withPrefix {
+		channel = w.Watch(ctx, key, v3Client.WithPrefix())
+	} else {
+		channel = w.Watch(ctx, key)
+	}
 
 	// Create a new channel
 	ch := make(chan *Event, maxClientChannelBufferSize)
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/kafka/kafka_inter_container_library.go b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/kafka/kafka_inter_container_library.go
index aa77ffb..91b2143 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/kafka/kafka_inter_container_library.go
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/kafka/kafka_inter_container_library.go
@@ -189,9 +189,15 @@
 	kp.doneOnce.Do(func() { close(kp.doneCh) })
 	// TODO : Perform cleanup
 	kp.kafkaClient.Stop()
-	//kp.deleteAllTopicRequestHandlerChannelMap()
-	//kp.deleteAllTopicResponseChannelMap()
-	//kp.deleteAllTransactionIdToChannelMap()
+	err := kp.deleteAllTopicRequestHandlerChannelMap()
+	if err != nil {
+		log.Errorw("failed-delete-all-topic-request-handler-channel-map", log.Fields{"error": err})
+	}
+	err = kp.deleteAllTopicResponseChannelMap()
+	if err != nil {
+		log.Errorw("failed-delete-all-topic-response-channel-map", log.Fields{"error": err})
+	}
+	kp.deleteAllTransactionIdToChannelMap()
 }
 
 func (kp *interContainerProxy) GetDefaultTopic() *Topic {
@@ -409,17 +415,25 @@
 
 // nolint: unused
 func (kp *interContainerProxy) deleteAllTopicResponseChannelMap() error {
+	logger.Debug("delete-all-topic-response-channel")
 	kp.lockTopicResponseChannelMap.Lock()
 	defer kp.lockTopicResponseChannelMap.Unlock()
-	var err error
+	var unsubscribeFailTopics []string
 	for topic := range kp.topicToResponseChannelMap {
 		// Unsubscribe to this topic first - this will close the subscribed channel
-		if err = kp.kafkaClient.UnSubscribe(&Topic{Name: topic}, kp.topicToResponseChannelMap[topic]); err != nil {
+		if err := kp.kafkaClient.UnSubscribe(&Topic{Name: topic}, kp.topicToResponseChannelMap[topic]); err != nil {
+			unsubscribeFailTopics = append(unsubscribeFailTopics, topic)
 			logger.Errorw("unsubscribing-error", log.Fields{"topic": topic, "error": err})
+			// Do not return. Continue to try to unsubscribe to other topics.
+		} else {
+			// Only delete from channel map if successfully unsubscribed.
+			delete(kp.topicToResponseChannelMap, topic)
 		}
-		delete(kp.topicToResponseChannelMap, topic)
 	}
-	return err
+	if len(unsubscribeFailTopics) > 0 {
+		return fmt.Errorf("unsubscribe-errors: %v", unsubscribeFailTopics)
+	}
+	return nil
 }
 
 func (kp *interContainerProxy) addToTopicRequestHandlerChannelMap(topic string, arg *requestHandlerChannel) {
@@ -447,17 +461,25 @@
 
 // nolint: unused
 func (kp *interContainerProxy) deleteAllTopicRequestHandlerChannelMap() error {
+	logger.Debug("delete-all-topic-request-channel")
 	kp.lockTopicRequestHandlerChannelMap.Lock()
 	defer kp.lockTopicRequestHandlerChannelMap.Unlock()
-	var err error
+	var unsubscribeFailTopics []string
 	for topic := range kp.topicToRequestHandlerChannelMap {
 		// Close the kafka client client first by unsubscribing to this topic
-		if err = kp.kafkaClient.UnSubscribe(&Topic{Name: topic}, kp.topicToRequestHandlerChannelMap[topic].ch); err != nil {
+		if err := kp.kafkaClient.UnSubscribe(&Topic{Name: topic}, kp.topicToRequestHandlerChannelMap[topic].ch); err != nil {
+			unsubscribeFailTopics = append(unsubscribeFailTopics, topic)
 			logger.Errorw("unsubscribing-error", log.Fields{"topic": topic, "error": err})
+			// Do not return. Continue to try to unsubscribe to other topics.
+		} else {
+			// Only delete from channel map if successfully unsubscribed.
+			delete(kp.topicToRequestHandlerChannelMap, topic)
 		}
-		delete(kp.topicToRequestHandlerChannelMap, topic)
 	}
-	return err
+	if len(unsubscribeFailTopics) > 0 {
+		return fmt.Errorf("unsubscribe-errors: %v", unsubscribeFailTopics)
+	}
+	return nil
 }
 
 func (kp *interContainerProxy) addToTransactionIdToChannelMap(id string, topic *Topic, arg chan *ic.InterContainerMessage) {
@@ -491,6 +513,7 @@
 
 // nolint: unused
 func (kp *interContainerProxy) deleteAllTransactionIdToChannelMap() {
+	logger.Debug("delete-all-transaction-id-channel-map")
 	kp.lockTransactionIdToChannelMap.Lock()
 	defer kp.lockTransactionIdToChannelMap.Unlock()
 	for key, value := range kp.transactionIdToChannelMap {
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/log/log.go b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/log/log.go
index 69e22a4..3ebdd3a 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/log/log.go
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/log/log.go
@@ -193,6 +193,22 @@
 	return 0, errors.New("Given LogLevel is invalid : " + l)
 }
 
+func LogLevelToString(l LogLevel) (string, error) {
+	switch l {
+	case DebugLevel:
+		return "DEBUG", nil
+	case InfoLevel:
+		return "INFO", nil
+	case WarnLevel:
+		return "WARN", nil
+	case ErrorLevel:
+		return "ERROR", nil
+	case FatalLevel:
+		return "FATAL", nil
+	}
+	return "", errors.New("Given LogLevel is invalid " + string(l))
+}
+
 func getDefaultConfig(outputType string, level LogLevel, defaultFields Fields) zp.Config {
 	return zp.Config{
 		Level:            logLevelToAtomicLevel(level),
diff --git a/vendor/github.com/opencord/voltha-protos/v3/go/voltha/events.pb.go b/vendor/github.com/opencord/voltha-protos/v3/go/voltha/events.pb.go
index 7df3e27..7f6a921 100644
--- a/vendor/github.com/opencord/voltha-protos/v3/go/voltha/events.pb.go
+++ b/vendor/github.com/opencord/voltha-protos/v3/go/voltha/events.pb.go
@@ -6,6 +6,7 @@
 import (
 	fmt "fmt"
 	proto "github.com/golang/protobuf/proto"
+	timestamp "github.com/golang/protobuf/ptypes/timestamp"
 	_ "github.com/opencord/voltha-protos/v3/go/common"
 	_ "google.golang.org/genproto/googleapis/api/annotations"
 	math "math"
@@ -876,11 +877,13 @@
 	// Overall impact of the alarm on the system
 	Severity AlarmEventSeverity_Types `protobuf:"varint,5,opt,name=severity,proto3,enum=voltha.AlarmEventSeverity_Types" json:"severity,omitempty"`
 	// Timestamp at which the alarm was first raised
-	RaisedTs float32 `protobuf:"fixed32,6,opt,name=raised_ts,json=raisedTs,proto3" json:"raised_ts,omitempty"`
+	// TODO: Is this obsolete? Eventheader already has a raised_ts
+	RaisedTs *timestamp.Timestamp `protobuf:"bytes,6,opt,name=raised_ts,json=raisedTs,proto3" json:"raised_ts,omitempty"`
 	// Timestamp at which the alarm was reported
-	ReportedTs float32 `protobuf:"fixed32,7,opt,name=reported_ts,json=reportedTs,proto3" json:"reported_ts,omitempty"`
+	// TODO: Is this obsolete? Eventheader already has a reported_ts
+	ReportedTs *timestamp.Timestamp `protobuf:"bytes,7,opt,name=reported_ts,json=reportedTs,proto3" json:"reported_ts,omitempty"`
 	// Timestamp at which the alarm has changed since it was raised
-	ChangedTs float32 `protobuf:"fixed32,8,opt,name=changed_ts,json=changedTs,proto3" json:"changed_ts,omitempty"`
+	ChangedTs *timestamp.Timestamp `protobuf:"bytes,8,opt,name=changed_ts,json=changedTs,proto3" json:"changed_ts,omitempty"`
 	// Identifier of the originating resource of the alarm
 	ResourceId string `protobuf:"bytes,9,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"`
 	// Textual explanation of the alarm
@@ -956,25 +959,25 @@
 	return AlarmEventSeverity_INDETERMINATE
 }
 
-func (m *AlarmEvent) GetRaisedTs() float32 {
+func (m *AlarmEvent) GetRaisedTs() *timestamp.Timestamp {
 	if m != nil {
 		return m.RaisedTs
 	}
-	return 0
+	return nil
 }
 
-func (m *AlarmEvent) GetReportedTs() float32 {
+func (m *AlarmEvent) GetReportedTs() *timestamp.Timestamp {
 	if m != nil {
 		return m.ReportedTs
 	}
-	return 0
+	return nil
 }
 
-func (m *AlarmEvent) GetChangedTs() float32 {
+func (m *AlarmEvent) GetChangedTs() *timestamp.Timestamp {
 	if m != nil {
 		return m.ChangedTs
 	}
-	return 0
+	return nil
 }
 
 func (m *AlarmEvent) GetResourceId() string {
@@ -1201,16 +1204,16 @@
 	// the event was first raised from the source entity.
 	// If the source entity doesn't send the raised_ts, this shall be set
 	// to timestamp when the event was received.
-	RaisedTs float32 `protobuf:"fixed32,6,opt,name=raised_ts,json=raisedTs,proto3" json:"raised_ts,omitempty"`
+	RaisedTs *timestamp.Timestamp `protobuf:"bytes,6,opt,name=raised_ts,json=raisedTs,proto3" json:"raised_ts,omitempty"`
 	// Timestamp at which the event was reported.
 	// This represents the UTC time stamp since epoch (in seconds) when the
 	// the event was reported (this time stamp is >= raised_ts).
 	// If the source entity that reported this event doesn't send the
 	// reported_ts, this shall be set to the same value as raised_ts.
-	ReportedTs           float32  `protobuf:"fixed32,7,opt,name=reported_ts,json=reportedTs,proto3" json:"reported_ts,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	ReportedTs           *timestamp.Timestamp `protobuf:"bytes,7,opt,name=reported_ts,json=reportedTs,proto3" json:"reported_ts,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
 }
 
 func (m *EventHeader) Reset()         { *m = EventHeader{} }
@@ -1273,18 +1276,18 @@
 	return ""
 }
 
-func (m *EventHeader) GetRaisedTs() float32 {
+func (m *EventHeader) GetRaisedTs() *timestamp.Timestamp {
 	if m != nil {
 		return m.RaisedTs
 	}
-	return 0
+	return nil
 }
 
-func (m *EventHeader) GetReportedTs() float32 {
+func (m *EventHeader) GetReportedTs() *timestamp.Timestamp {
 	if m != nil {
 		return m.ReportedTs
 	}
-	return 0
+	return nil
 }
 
 //
@@ -1450,89 +1453,91 @@
 func init() { proto.RegisterFile("voltha_protos/events.proto", fileDescriptor_e63e6c07044fd2c4) }
 
 var fileDescriptor_e63e6c07044fd2c4 = []byte{
-	// 1334 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0xdd, 0x72, 0xdb, 0x44,
-	0x14, 0xb6, 0xe4, 0x9f, 0xd8, 0x47, 0x4e, 0xa2, 0x6c, 0x19, 0x30, 0xee, 0x5f, 0x10, 0x43, 0x27,
-	0xd3, 0x0e, 0x36, 0x38, 0xcc, 0x10, 0x02, 0x0c, 0xb8, 0x8e, 0x68, 0xd4, 0xd6, 0x72, 0x90, 0x9d,
-	0x74, 0xe0, 0xc6, 0xb3, 0xb1, 0x36, 0xb6, 0x26, 0xb6, 0xe4, 0x91, 0x36, 0xa6, 0x79, 0x00, 0xae,
-	0xb9, 0xe4, 0x82, 0x07, 0xe0, 0x49, 0x78, 0x0c, 0x5e, 0x80, 0x6b, 0x1e, 0x80, 0xd9, 0x1f, 0x59,
-	0x92, 0xe3, 0xc2, 0x45, 0xa6, 0x5c, 0x79, 0x75, 0xfe, 0xf6, 0x3b, 0xdf, 0x9e, 0x73, 0x76, 0x0d,
-	0xf5, 0x45, 0x30, 0xa5, 0x13, 0x3c, 0x9c, 0x87, 0x01, 0x0d, 0xa2, 0x26, 0x59, 0x10, 0x9f, 0x46,
-	0x0d, 0xfe, 0x85, 0x4a, 0x42, 0x57, 0xaf, 0x65, 0x6d, 0x66, 0x84, 0x62, 0x61, 0x51, 0xbf, 0x37,
-	0x0e, 0x82, 0xf1, 0x94, 0x34, 0xf1, 0xdc, 0x6b, 0x62, 0xdf, 0x0f, 0x28, 0xa6, 0x5e, 0xe0, 0x4b,
-	0x7f, 0xe3, 0x4b, 0xd8, 0xee, 0x04, 0xfe, 0x85, 0x37, 0x36, 0x59, 0xd4, 0xc1, 0xf5, 0x9c, 0x18,
-	0x7b, 0x50, 0x64, 0xbf, 0x11, 0xda, 0x80, 0x3c, 0x76, 0x5d, 0x3d, 0x87, 0x00, 0x4a, 0x21, 0x99,
-	0x05, 0x0b, 0xa2, 0x2b, 0x6c, 0x7d, 0x35, 0x77, 0x31, 0x25, 0xba, 0x6a, 0x4c, 0x40, 0x4b, 0x39,
-	0xa3, 0x4f, 0xa1, 0x40, 0xaf, 0xe7, 0xa4, 0xa6, 0xec, 0x2a, 0x7b, 0x5b, 0xad, 0xfb, 0x0d, 0x01,
-	0xa9, 0xb1, 0x12, 0xbf, 0xc1, 0x83, 0x3b, 0xdc, 0x14, 0x21, 0x28, 0x4c, 0x70, 0x34, 0xa9, 0xa9,
-	0xbb, 0xca, 0x5e, 0xc5, 0xe1, 0x6b, 0x26, 0x73, 0x31, 0xc5, 0xb5, 0xbc, 0x90, 0xb1, 0xb5, 0xf1,
-	0x18, 0xaa, 0x2f, 0xe6, 0x5e, 0x82, 0xb1, 0x1e, 0x63, 0xac, 0x40, 0x31, 0x9a, 0x7a, 0x23, 0xa2,
-	0xe7, 0x50, 0x09, 0x54, 0x1a, 0xe9, 0x8a, 0xf1, 0xab, 0x0a, 0x5b, 0x5d, 0x42, 0x43, 0x6f, 0xd4,
-	0x25, 0x14, 0x1f, 0x61, 0x8a, 0xd1, 0x3b, 0x50, 0xa4, 0x1e, 0x9d, 0x0a, 0x68, 0x15, 0x47, 0x7c,
-	0xa0, 0x2d, 0xe6, 0xc0, 0xb7, 0x56, 0x1c, 0x95, 0x46, 0xe8, 0x31, 0xec, 0x4c, 0x83, 0xb1, 0x37,
-	0xc2, 0xd3, 0xa1, 0x4b, 0x16, 0xde, 0x88, 0x0c, 0x3d, 0x57, 0xa2, 0xd8, 0x96, 0x8a, 0x23, 0x2e,
-	0xb7, 0x5c, 0x74, 0x17, 0x2a, 0x11, 0x09, 0x3d, 0x3c, 0x1d, 0xfa, 0x41, 0xad, 0xc0, 0x6d, 0xca,
-	0x42, 0x60, 0x07, 0x4c, 0x99, 0x04, 0x28, 0x0a, 0xa5, 0x1b, 0x7b, 0x7e, 0x0d, 0x1b, 0xa3, 0xc0,
-	0xa7, 0xe4, 0x35, 0xad, 0x95, 0x76, 0xf3, 0x7b, 0x5a, 0xeb, 0xc3, 0x98, 0xa8, 0x2c, 0x68, 0xc6,
-	0x1b, 0xb3, 0x32, 0x7d, 0x1a, 0x5e, 0x3b, 0xb1, 0x4f, 0xfd, 0x10, 0xaa, 0x69, 0x05, 0xd2, 0x21,
-	0x7f, 0x49, 0xae, 0x65, 0x62, 0x6c, 0xc9, 0x92, 0x5d, 0xe0, 0xe9, 0x15, 0x91, 0xa4, 0x8a, 0x8f,
-	0x43, 0xf5, 0x40, 0x31, 0x7e, 0x51, 0x40, 0x17, 0x9b, 0x9c, 0x31, 0xd9, 0x09, 0xf6, 0xc2, 0x08,
-	0x7d, 0x03, 0x1b, 0x33, 0x2e, 0x8b, 0x6a, 0x0a, 0xc7, 0xf3, 0x51, 0x16, 0x4f, 0x62, 0x2a, 0x05,
-	0x91, 0x44, 0x24, 0xbd, 0x18, 0xa2, 0xb4, 0xe2, 0xbf, 0x10, 0xa9, 0x69, 0x44, 0x7f, 0x28, 0xb0,
-	0x23, 0x9c, 0x2d, 0xff, 0x22, 0x08, 0x67, 0xbc, 0x36, 0x51, 0x0b, 0xca, 0xac, 0x80, 0x79, 0x15,
-	0xb0, 0x30, 0x5a, 0xeb, 0xdd, 0xf5, 0x1c, 0x39, 0x4b, 0x3b, 0xf4, 0x6d, 0x92, 0x86, 0xca, 0xd3,
-	0x78, 0x94, 0x75, 0x49, 0xc5, 0x7f, 0x0b, 0x79, 0xfc, 0xa9, 0x40, 0x39, 0x2e, 0x50, 0xd4, 0xc8,
-	0xf4, 0x41, 0x3d, 0xc6, 0x91, 0x2e, 0xe0, 0x4c, 0x13, 0x24, 0x75, 0xa8, 0xf2, 0x3a, 0x3c, 0x84,
-	0xf2, 0x3c, 0x24, 0x17, 0xde, 0x6b, 0x12, 0xd5, 0xf2, 0x3c, 0x97, 0x07, 0xab, 0x31, 0x1a, 0x27,
-	0xd2, 0x40, 0xe4, 0xb0, 0xb4, 0xaf, 0x9f, 0xc2, 0x66, 0x46, 0xb5, 0x26, 0x8b, 0x46, 0x3a, 0x0b,
-	0xad, 0x55, 0x7b, 0xd3, 0x71, 0xa7, 0xf3, 0xfb, 0x59, 0x81, 0x4a, 0xbc, 0x77, 0xeb, 0x16, 0x09,
-	0x8a, 0x46, 0x3b, 0x00, 0xe0, 0x4d, 0x3b, 0x94, 0x7d, 0xce, 0x52, 0x7c, 0xff, 0x8d, 0xc7, 0xe5,
-	0x54, 0xb8, 0x31, 0x3b, 0x6f, 0xe3, 0x27, 0xd8, 0x6a, 0x4f, 0x71, 0x38, 0x4b, 0x26, 0x01, 0x89,
-	0x27, 0xc1, 0x0e, 0x6c, 0x76, 0x7a, 0xdd, 0xee, 0xa9, 0x6d, 0x75, 0xda, 0x03, 0xab, 0x67, 0xeb,
-	0x39, 0xb4, 0x0d, 0x9a, 0x69, 0x9f, 0x59, 0x4e, 0xcf, 0xee, 0x9a, 0xf6, 0x40, 0x57, 0xd0, 0x26,
-	0x54, 0xcc, 0xef, 0x4f, 0xad, 0x13, 0xfe, 0xa9, 0x22, 0x0d, 0x36, 0xfa, 0xa6, 0x73, 0x66, 0x75,
-	0x4c, 0x3d, 0x8f, 0xb6, 0x00, 0x4e, 0x9c, 0x5e, 0xc7, 0xec, 0xf7, 0x2d, 0xfb, 0x99, 0x5e, 0x40,
-	0x55, 0x28, 0xf7, 0xcd, 0xce, 0xa9, 0x63, 0x0d, 0x7e, 0xd0, 0x8b, 0xc6, 0x73, 0x40, 0xc9, 0xc6,
-	0x1d, 0x4c, 0xc9, 0x38, 0x08, 0xaf, 0x8d, 0xcf, 0x52, 0xa3, 0xf2, 0x84, 0x6f, 0xb9, 0x01, 0xf9,
-	0xde, 0x4b, 0xb6, 0x15, 0x5b, 0xf0, 0x4d, 0xf8, 0xe2, 0x54, 0xcf, 0xb3, 0x85, 0x6d, 0x5b, 0x7a,
-	0xc1, 0xd8, 0x87, 0xed, 0x24, 0x56, 0x9f, 0x62, 0x4a, 0x8c, 0xdd, 0x38, 0x10, 0x40, 0xc9, 0x69,
-	0x5b, 0x7d, 0xf3, 0x48, 0xcf, 0x31, 0x78, 0x9d, 0x97, 0x66, 0xdb, 0x31, 0x8f, 0x74, 0xc5, 0xc0,
-	0x69, 0x00, 0x7d, 0xb2, 0x20, 0xa1, 0x47, 0xaf, 0x8d, 0x17, 0xa9, 0xec, 0x2d, 0xfb, 0xc8, 0x1c,
-	0x98, 0x4e, 0xd7, 0xb2, 0xdb, 0x03, 0x53, 0xb8, 0xbf, 0x6a, 0x3b, 0x36, 0xcb, 0x46, 0x61, 0x73,
-	0xb2, 0x6b, 0xd9, 0x3d, 0x47, 0x57, 0xf9, 0xb2, 0xfd, 0xbc, 0xe7, 0xe8, 0x79, 0x96, 0x63, 0xc7,
-	0xb1, 0x06, 0x56, 0xa7, 0xfd, 0x52, 0x2f, 0x18, 0x7f, 0x15, 0x00, 0x92, 0x3d, 0xd8, 0xa9, 0x79,
-	0xae, 0x2c, 0x1c, 0xd5, 0x73, 0xd1, 0x27, 0xf2, 0xd4, 0x55, 0x7e, 0xea, 0xf7, 0xe2, 0xf3, 0xca,
-	0x9e, 0x47, 0xe6, 0xdc, 0xbf, 0x82, 0xf2, 0x48, 0x52, 0xc5, 0xe7, 0xe8, 0x56, 0x6b, 0xf7, 0xa6,
-	0x57, 0x4c, 0xa6, 0xf4, 0x5c, 0x7a, 0xa0, 0x7d, 0x28, 0x46, 0x8c, 0x1c, 0x3e, 0x5e, 0x53, 0xf7,
-	0xc9, 0x0a, 0x77, 0xd2, 0x4f, 0xd8, 0xb2, 0x2d, 0x23, 0x49, 0x0e, 0x9f, 0xbc, 0x6b, 0xb7, 0x8c,
-	0xe9, 0x8b, 0xb7, 0x8c, 0x3d, 0xd8, 0xe0, 0x0e, 0xb1, 0x17, 0x11, 0x77, 0x48, 0xa3, 0x5a, 0x89,
-	0x37, 0x64, 0x59, 0x08, 0x06, 0x11, 0x7a, 0x08, 0x5a, 0x48, 0xe6, 0x41, 0x48, 0x85, 0x7a, 0x83,
-	0xab, 0x21, 0x16, 0x0d, 0x22, 0x74, 0x1f, 0x60, 0x34, 0xc1, 0xfe, 0x58, 0xe8, 0xcb, 0x5c, 0x5f,
-	0x91, 0x92, 0xd8, 0x3f, 0x0a, 0xae, 0x42, 0x71, 0x2f, 0x54, 0x38, 0xb1, 0x10, 0x8b, 0x2c, 0x17,
-	0xed, 0x82, 0xe6, 0x92, 0x68, 0x14, 0x7a, 0x73, 0x56, 0xf6, 0x35, 0xe0, 0x06, 0x69, 0x11, 0xfa,
-	0x22, 0xb9, 0x3b, 0x34, 0xde, 0x35, 0x0f, 0x6f, 0x26, 0xb7, 0xfe, 0xde, 0x58, 0x7f, 0xb9, 0x55,
-	0xd7, 0x5f, 0x6e, 0x8f, 0x60, 0x1b, 0xb3, 0x78, 0x43, 0x76, 0x8a, 0x43, 0x1f, 0xcf, 0x48, 0x6d,
-	0x93, 0x5b, 0x6e, 0x72, 0x31, 0x63, 0xcd, 0xc6, 0x33, 0x72, 0xab, 0xbb, 0xe8, 0x6f, 0x05, 0x34,
-	0xb1, 0xa1, 0xa8, 0xb6, 0x15, 0x76, 0x94, 0x1b, 0xec, 0x3c, 0x86, 0x1d, 0x09, 0x9c, 0x3f, 0x80,
-	0x04, 0x2c, 0x11, 0x76, 0xdb, 0x4d, 0x02, 0x31, 0x60, 0xab, 0x4c, 0xe6, 0x6f, 0x32, 0x79, 0x98,
-	0x30, 0x59, 0xe0, 0x4c, 0x2e, 0xcb, 0x24, 0x05, 0xea, 0x2d, 0x5c, 0xc1, 0x0b, 0xd8, 0xcc, 0x8e,
-	0x90, 0xff, 0x69, 0x7e, 0x1d, 0x83, 0x2e, 0x4a, 0xff, 0xea, 0xfc, 0x96, 0xd3, 0xeb, 0x15, 0x54,
-	0x92, 0xe9, 0xfb, 0x3c, 0x0e, 0xa1, 0x43, 0xb5, 0xd3, 0xb3, 0xbf, 0xb3, 0x9e, 0x0d, 0xcd, 0x33,
-	0x06, 0x2e, 0xc7, 0xb0, 0xbe, 0x38, 0xb1, 0xe4, 0xa7, 0xc2, 0xe0, 0x2d, 0x3f, 0x5b, 0xba, 0xca,
-	0x1c, 0x8e, 0x4c, 0x06, 0x5d, 0x5a, 0xe4, 0x8d, 0xdf, 0x55, 0xd0, 0x78, 0xe4, 0x63, 0x82, 0x5d,
-	0x12, 0xde, 0x98, 0x3f, 0x9f, 0xa7, 0xa6, 0x89, 0x98, 0x41, 0x77, 0xe3, 0x33, 0xfb, 0xf7, 0x41,
-	0xd2, 0x86, 0x6a, 0x74, 0x75, 0x3e, 0x5c, 0x19, 0x45, 0x0f, 0x32, 0xce, 0x29, 0x5e, 0xa4, 0xbf,
-	0x16, 0x25, 0x22, 0xf4, 0x44, 0xce, 0x3e, 0x31, 0x8a, 0xde, 0xcb, 0xb8, 0xde, 0x18, 0x7b, 0x1f,
-	0x40, 0x95, 0x37, 0xce, 0x82, 0x84, 0x11, 0x2b, 0x3f, 0xf1, 0x02, 0xd4, 0x98, 0xec, 0x4c, 0x88,
-	0x6e, 0x37, 0x68, 0x8c, 0xdf, 0x54, 0x28, 0x8a, 0xae, 0x79, 0x02, 0xa5, 0x09, 0x67, 0x4b, 0xbe,
-	0x93, 0xee, 0x64, 0x90, 0x09, 0x22, 0x1d, 0x69, 0x82, 0x0e, 0xa0, 0x3a, 0xe2, 0x6f, 0x71, 0xd1,
-	0x41, 0xf2, 0xfe, 0xbf, 0xb3, 0xe6, 0x9d, 0x7e, 0x9c, 0x73, 0xb4, 0x51, 0xea, 0x65, 0xdf, 0x84,
-	0xca, 0xe5, 0xdc, 0x93, 0x6e, 0x79, 0xee, 0xa6, 0xaf, 0xde, 0xfa, 0xc7, 0x39, 0xa7, 0x7c, 0x19,
-	0x3f, 0x81, 0x5a, 0x00, 0x4b, 0x87, 0x16, 0x67, 0x4d, 0x6b, 0xed, 0xac, 0x7a, 0xb4, 0x8e, 0x73,
-	0x4e, 0xe5, 0x72, 0xf9, 0xaa, 0x38, 0x80, 0x6a, 0xba, 0xc1, 0x39, 0x6d, 0x29, 0x78, 0xa9, 0xbe,
-	0x64, 0xf0, 0x52, 0x2d, 0xff, 0xb4, 0x0a, 0x20, 0x66, 0x02, 0xa3, 0xf8, 0xa9, 0x09, 0x77, 0x82,
-	0x70, 0xdc, 0x08, 0xe6, 0xc4, 0x1f, 0x05, 0xa1, 0x2b, 0xfd, 0x7f, 0x6c, 0x8c, 0x3d, 0x3a, 0xb9,
-	0x3a, 0x6f, 0x8c, 0x82, 0x59, 0x33, 0xd6, 0x35, 0x85, 0xee, 0x63, 0xf9, 0xaf, 0x69, 0xb1, 0xdf,
-	0x1c, 0x07, 0x52, 0x76, 0x5e, 0xe2, 0xc2, 0xfd, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x8c, 0x4c,
-	0x16, 0xa6, 0x7e, 0x0d, 0x00, 0x00,
+	// 1374 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x57, 0x5f, 0x73, 0xdb, 0x44,
+	0x10, 0xb7, 0xe4, 0x3f, 0xb1, 0x57, 0x4e, 0xa2, 0x5c, 0x19, 0x30, 0x6e, 0x69, 0x83, 0x18, 0x3a,
+	0x99, 0x76, 0xb0, 0xc1, 0x61, 0xa6, 0x69, 0x0a, 0x03, 0xae, 0x23, 0x1a, 0xb5, 0xb5, 0x1c, 0x64,
+	0x27, 0x1d, 0x78, 0xf1, 0x5c, 0xac, 0x8b, 0xad, 0x89, 0x6d, 0x79, 0xa4, 0xb3, 0x69, 0x3e, 0x00,
+	0xcf, 0x3c, 0xf2, 0xc0, 0x77, 0xe1, 0x8d, 0x8f, 0xc1, 0xf0, 0x25, 0xf8, 0x00, 0xcc, 0xfd, 0x91,
+	0x25, 0x39, 0x2e, 0x7d, 0xc8, 0x14, 0x9e, 0x7c, 0xda, 0xdb, 0xdf, 0xee, 0x6f, 0x77, 0x6f, 0xf7,
+	0xce, 0x50, 0x5d, 0xf8, 0x63, 0x3a, 0xc2, 0xfd, 0x59, 0xe0, 0x53, 0x3f, 0xac, 0x93, 0x05, 0x99,
+	0xd2, 0xb0, 0xc6, 0xbf, 0x50, 0x41, 0xec, 0x55, 0x2b, 0x69, 0x9d, 0x09, 0xa1, 0x58, 0x68, 0x54,
+	0xef, 0x0c, 0x7d, 0x7f, 0x38, 0x26, 0x75, 0x3c, 0xf3, 0xea, 0x78, 0x3a, 0xf5, 0x29, 0xa6, 0x9e,
+	0x3f, 0x95, 0xf8, 0xea, 0x3d, 0xb9, 0xcb, 0xbf, 0xce, 0xe7, 0x17, 0x75, 0xea, 0x4d, 0x48, 0x48,
+	0xf1, 0x64, 0x26, 0x14, 0x8c, 0x27, 0xb0, 0xdd, 0xf2, 0xa7, 0x17, 0xde, 0xd0, 0x64, 0x6e, 0x7b,
+	0x57, 0x33, 0x62, 0xec, 0x41, 0x9e, 0xfd, 0x86, 0x68, 0x03, 0xb2, 0xd8, 0x75, 0xf5, 0x0c, 0x02,
+	0x28, 0x04, 0x64, 0xe2, 0x2f, 0x88, 0xae, 0xb0, 0xf5, 0x7c, 0xe6, 0x62, 0x4a, 0x74, 0xd5, 0x18,
+	0x81, 0x96, 0x00, 0xa3, 0x2f, 0x20, 0x47, 0xaf, 0x66, 0xa4, 0xa2, 0xec, 0x2a, 0x7b, 0x5b, 0x8d,
+	0x8f, 0x6a, 0x82, 0x73, 0x6d, 0xc5, 0x7e, 0x8d, 0x1b, 0x77, 0xb8, 0x2a, 0x42, 0x90, 0x1b, 0xe1,
+	0x70, 0x54, 0x51, 0x77, 0x95, 0xbd, 0x92, 0xc3, 0xd7, 0x4c, 0xe6, 0x62, 0x8a, 0x2b, 0x59, 0x21,
+	0x63, 0x6b, 0xe3, 0x01, 0x94, 0x5f, 0xcc, 0xbc, 0x98, 0x63, 0x35, 0xe2, 0x58, 0x82, 0x7c, 0x38,
+	0xf6, 0x06, 0x44, 0xcf, 0xa0, 0x02, 0xa8, 0x34, 0xd4, 0x15, 0xe3, 0x57, 0x15, 0xb6, 0xda, 0x84,
+	0x06, 0xde, 0xa0, 0x4d, 0x28, 0x3e, 0xc2, 0x14, 0xa3, 0xf7, 0x20, 0x4f, 0x3d, 0x3a, 0x16, 0xd4,
+	0x4a, 0x8e, 0xf8, 0x40, 0x5b, 0x0c, 0xc0, 0x5d, 0x2b, 0x8e, 0x4a, 0x43, 0xf4, 0x00, 0x76, 0xc6,
+	0xfe, 0xd0, 0x1b, 0xe0, 0x71, 0xdf, 0x25, 0x0b, 0x6f, 0x40, 0xfa, 0x9e, 0x2b, 0x59, 0x6c, 0xcb,
+	0x8d, 0x23, 0x2e, 0xb7, 0x5c, 0x74, 0x1b, 0x4a, 0x21, 0x09, 0x3c, 0x3c, 0xee, 0x4f, 0xfd, 0x4a,
+	0x8e, 0xeb, 0x14, 0x85, 0xc0, 0xf6, 0xd9, 0x66, 0x6c, 0x20, 0x2f, 0x36, 0xdd, 0x08, 0xf9, 0x35,
+	0x6c, 0x0c, 0xfc, 0x29, 0x25, 0xaf, 0x69, 0xa5, 0xb0, 0x9b, 0xdd, 0xd3, 0x1a, 0x9f, 0x44, 0x89,
+	0x4a, 0x93, 0x66, 0x79, 0x63, 0x5a, 0xe6, 0x94, 0x06, 0x57, 0x4e, 0x84, 0xa9, 0x1e, 0x42, 0x39,
+	0xb9, 0x81, 0x74, 0xc8, 0x5e, 0x92, 0x2b, 0x19, 0x18, 0x5b, 0xb2, 0x60, 0x17, 0x78, 0x3c, 0x27,
+	0x32, 0xa9, 0xe2, 0xe3, 0x50, 0x3d, 0x50, 0x8c, 0x5f, 0x14, 0xd0, 0x85, 0x93, 0x33, 0x26, 0x3b,
+	0xc1, 0x5e, 0x10, 0xa2, 0x6f, 0x60, 0x63, 0xc2, 0x65, 0x61, 0x45, 0xe1, 0x7c, 0x3e, 0x4d, 0xf3,
+	0x89, 0x55, 0xa5, 0x20, 0x94, 0x8c, 0x24, 0x8a, 0x31, 0x4a, 0x6e, 0xbc, 0x8d, 0x91, 0x9a, 0x64,
+	0xf4, 0x87, 0x02, 0x3b, 0x02, 0x6c, 0x4d, 0x2f, 0xfc, 0x60, 0xc2, 0x0f, 0x2f, 0x6a, 0x40, 0x91,
+	0x9d, 0x70, 0x7e, 0x0a, 0x98, 0x19, 0xad, 0xf1, 0xfe, 0xfa, 0x1c, 0x39, 0x4b, 0x3d, 0xf4, 0x6d,
+	0x1c, 0x86, 0xca, 0xc3, 0xb8, 0x9f, 0x86, 0x24, 0xec, 0xbf, 0x83, 0x38, 0xfe, 0x54, 0xa0, 0x18,
+	0x1d, 0x50, 0x54, 0x4b, 0xf5, 0x41, 0x35, 0xe2, 0x91, 0x3c, 0xc0, 0xa9, 0x26, 0x88, 0xcf, 0xa1,
+	0xca, 0xcf, 0xe1, 0x21, 0x14, 0x67, 0x01, 0xb9, 0xf0, 0x5e, 0x93, 0xb0, 0x92, 0xe5, 0xb1, 0xdc,
+	0x5d, 0xb5, 0x51, 0x3b, 0x91, 0x0a, 0x22, 0x86, 0xa5, 0x7e, 0xf5, 0x14, 0x36, 0x53, 0x5b, 0x6b,
+	0xa2, 0xa8, 0x25, 0xa3, 0xd0, 0x1a, 0x95, 0x37, 0x95, 0x3b, 0x19, 0xdf, 0xcf, 0x0a, 0x94, 0x22,
+	0xdf, 0x8d, 0x1b, 0x04, 0x28, 0x1a, 0xed, 0x00, 0x80, 0x37, 0x6d, 0x5f, 0xf6, 0x39, 0x0b, 0xf1,
+	0xc3, 0x37, 0x96, 0xcb, 0x29, 0x71, 0x65, 0x56, 0x6f, 0xe3, 0x27, 0xd8, 0x6a, 0x8e, 0x71, 0x30,
+	0x89, 0x27, 0x01, 0x89, 0x26, 0xc1, 0x0e, 0x6c, 0xb6, 0x3a, 0xed, 0xf6, 0xa9, 0x6d, 0xb5, 0x9a,
+	0x3d, 0xab, 0x63, 0xeb, 0x19, 0xb4, 0x0d, 0x9a, 0x69, 0x9f, 0x59, 0x4e, 0xc7, 0x6e, 0x9b, 0x76,
+	0x4f, 0x57, 0xd0, 0x26, 0x94, 0xcc, 0xef, 0x4f, 0xad, 0x13, 0xfe, 0xa9, 0x22, 0x0d, 0x36, 0xba,
+	0xa6, 0x73, 0x66, 0xb5, 0x4c, 0x3d, 0x8b, 0xb6, 0x00, 0x4e, 0x9c, 0x4e, 0xcb, 0xec, 0x76, 0x2d,
+	0xfb, 0x99, 0x9e, 0x43, 0x65, 0x28, 0x76, 0xcd, 0xd6, 0xa9, 0x63, 0xf5, 0x7e, 0xd0, 0xf3, 0xc6,
+	0x73, 0x40, 0xb1, 0xe3, 0x16, 0xa6, 0x64, 0xe8, 0x07, 0x57, 0xc6, 0x97, 0x89, 0x51, 0x79, 0xc2,
+	0x5d, 0x6e, 0x40, 0xb6, 0xf3, 0x92, 0xb9, 0x62, 0x0b, 0xee, 0x84, 0x2f, 0x4e, 0xf5, 0x2c, 0x5b,
+	0xd8, 0xb6, 0xa5, 0xe7, 0x8c, 0x7d, 0xd8, 0x8e, 0x6d, 0x75, 0x29, 0xa6, 0xc4, 0xd8, 0x8d, 0x0c,
+	0x01, 0x14, 0x9c, 0xa6, 0xd5, 0x35, 0x8f, 0xf4, 0x0c, 0xa3, 0xd7, 0x7a, 0x69, 0x36, 0x1d, 0xf3,
+	0x48, 0x57, 0x0c, 0x9c, 0x24, 0xd0, 0x25, 0x0b, 0x12, 0x78, 0xf4, 0xca, 0x78, 0x91, 0x88, 0xde,
+	0xb2, 0x8f, 0xcc, 0x9e, 0xe9, 0xb4, 0x2d, 0xbb, 0xd9, 0x33, 0x05, 0xfc, 0x55, 0xd3, 0xb1, 0x59,
+	0x34, 0x0a, 0x9b, 0x93, 0x6d, 0xcb, 0xee, 0x38, 0xba, 0xca, 0x97, 0xcd, 0xe7, 0x1d, 0x47, 0xcf,
+	0xb2, 0x18, 0x5b, 0x8e, 0xd5, 0xb3, 0x5a, 0xcd, 0x97, 0x7a, 0xce, 0xf8, 0x3d, 0x0f, 0x10, 0xfb,
+	0x60, 0x55, 0xf3, 0x5c, 0x79, 0x70, 0x54, 0xcf, 0x45, 0x9f, 0xcb, 0xaa, 0xab, 0xbc, 0xea, 0x77,
+	0xa2, 0x7a, 0xa5, 0xeb, 0x91, 0xaa, 0xfb, 0x57, 0x50, 0x1c, 0xc8, 0x54, 0xf1, 0x39, 0xba, 0xd5,
+	0xd8, 0xbd, 0x8e, 0x8a, 0x92, 0x29, 0x91, 0x4b, 0x04, 0xda, 0x87, 0x7c, 0xc8, 0x92, 0xc3, 0xc7,
+	0x6b, 0xe2, 0x3e, 0x59, 0xc9, 0x9d, 0xc4, 0x09, 0x5d, 0xe6, 0x32, 0x94, 0xc9, 0xe1, 0x93, 0x77,
+	0xad, 0xcb, 0x28, 0x7d, 0x91, 0xcb, 0x08, 0x81, 0x1e, 0x41, 0x29, 0xc0, 0x5e, 0x48, 0xdc, 0x3e,
+	0x0d, 0x2b, 0x05, 0xde, 0x1e, 0xd5, 0x9a, 0xb8, 0x42, 0x6b, 0xd1, 0x15, 0x5a, 0xeb, 0x45, 0x57,
+	0xa8, 0x53, 0x14, 0xca, 0xbd, 0x10, 0x3d, 0x01, 0x2d, 0x20, 0x33, 0x3f, 0xa0, 0x02, 0xba, 0xf1,
+	0x56, 0x28, 0x44, 0xea, 0xbd, 0x10, 0x3d, 0x06, 0x18, 0x8c, 0xf0, 0x74, 0x28, 0xb0, 0xc5, 0xb7,
+	0x62, 0x4b, 0x52, 0xbb, 0x17, 0xa2, 0x7b, 0xcc, 0x6f, 0xe8, 0xcf, 0x03, 0x71, 0xd7, 0x94, 0x78,
+	0xb1, 0x20, 0x12, 0x59, 0x2e, 0xda, 0x05, 0xcd, 0x25, 0xe1, 0x20, 0xf0, 0x66, 0xac, 0x95, 0x2a,
+	0xc0, 0x15, 0x92, 0x22, 0xf4, 0x38, 0xbe, 0x8f, 0x34, 0xde, 0x89, 0xf7, 0xae, 0x27, 0x6c, 0xfd,
+	0x5d, 0xb4, 0xfe, 0xc2, 0x2c, 0xaf, 0xbf, 0x30, 0xef, 0xc3, 0x36, 0x66, 0xf6, 0xfa, 0xec, 0x64,
+	0xf4, 0xa7, 0x78, 0x42, 0x2a, 0x9b, 0x5c, 0x73, 0x93, 0x8b, 0x59, 0x25, 0x6c, 0x3c, 0x21, 0x37,
+	0xba, 0xdf, 0xfe, 0x56, 0x40, 0x13, 0x0e, 0xc5, 0x09, 0x5e, 0xc9, 0x8e, 0x72, 0x2d, 0x3b, 0x0f,
+	0x60, 0x47, 0x12, 0xe7, 0xaf, 0x2e, 0x41, 0x4b, 0x98, 0xdd, 0x76, 0x63, 0x43, 0x8c, 0xd8, 0x6a,
+	0x26, 0xb3, 0xd7, 0x33, 0x79, 0x18, 0x67, 0x32, 0xc7, 0x33, 0xb9, 0x3c, 0x7a, 0x09, 0x52, 0xef,
+	0xe0, 0x5a, 0x5f, 0xc0, 0x66, 0x7a, 0x2c, 0xfd, 0x47, 0x33, 0xf1, 0x18, 0x74, 0xd1, 0x4e, 0xf3,
+	0xf3, 0x1b, 0x4e, 0xc4, 0x57, 0x50, 0x8a, 0x27, 0xfa, 0xf3, 0xc8, 0x84, 0x0e, 0xe5, 0x56, 0xc7,
+	0xfe, 0xce, 0x7a, 0xd6, 0x37, 0xcf, 0x18, 0xb9, 0x0c, 0xe3, 0xfa, 0xe2, 0xc4, 0x92, 0x9f, 0x0a,
+	0xa3, 0xb7, 0xfc, 0x6c, 0xe8, 0x2a, 0x03, 0x1c, 0x99, 0x8c, 0xba, 0xd4, 0xc8, 0x1a, 0x7f, 0xa9,
+	0xa0, 0x71, 0xcb, 0xc7, 0x04, 0xbb, 0x24, 0xb8, 0x36, 0xd3, 0x1e, 0x25, 0x26, 0x94, 0x98, 0x6b,
+	0xb7, 0xa3, 0x9a, 0xfd, 0xfb, 0x70, 0x6a, 0x42, 0x39, 0x9c, 0x9f, 0xf7, 0x57, 0xc6, 0xdb, 0xdd,
+	0x14, 0x38, 0x91, 0x17, 0x89, 0xd7, 0xc2, 0x58, 0x84, 0x1e, 0xca, 0x79, 0x2a, 0xc6, 0xdb, 0x07,
+	0x29, 0xe8, 0xb5, 0x51, 0xfa, 0x31, 0x94, 0x79, 0xe3, 0x2c, 0x48, 0x10, 0xb2, 0xe3, 0x27, 0x5e,
+	0x95, 0x1a, 0x93, 0x9d, 0x09, 0xd1, 0xff, 0x33, 0xbc, 0x8c, 0xdf, 0x54, 0xc8, 0x8b, 0x6e, 0x7b,
+	0x08, 0x85, 0x11, 0xcf, 0xb2, 0x7c, 0xb3, 0xdd, 0x4a, 0x45, 0x24, 0x0a, 0xe0, 0x48, 0x15, 0x74,
+	0x00, 0xe5, 0x01, 0xff, 0x5f, 0x20, 0x3a, 0x4f, 0xbe, 0x45, 0x6e, 0xad, 0xf9, 0xcf, 0x70, 0x9c,
+	0x71, 0xb4, 0x41, 0xe2, 0x5f, 0x46, 0x1d, 0x4a, 0x97, 0x33, 0x4f, 0xc2, 0xb2, 0x1c, 0xa6, 0xaf,
+	0xbe, 0x40, 0x8e, 0x33, 0x4e, 0xf1, 0x32, 0x7a, 0x8e, 0x35, 0x00, 0x96, 0x80, 0x06, 0xcf, 0xb6,
+	0xd6, 0xd8, 0x59, 0x45, 0x34, 0x8e, 0x33, 0x4e, 0xe9, 0x72, 0xf9, 0xc2, 0x39, 0x80, 0x72, 0x72,
+	0x30, 0xf0, 0x74, 0x27, 0xe8, 0x25, 0xfa, 0x99, 0xd1, 0x4b, 0x8c, 0x8a, 0xa7, 0x65, 0x00, 0x31,
+	0x4b, 0x58, 0x69, 0x9e, 0x9a, 0x70, 0xcb, 0x0f, 0x86, 0x35, 0x7f, 0x46, 0xa6, 0x03, 0x3f, 0x70,
+	0x25, 0xfe, 0xc7, 0xda, 0xd0, 0xa3, 0xa3, 0xf9, 0x79, 0x6d, 0xe0, 0x4f, 0xea, 0xd1, 0x5e, 0x5d,
+	0xec, 0x7d, 0x26, 0xff, 0xe2, 0x2d, 0xf6, 0xeb, 0x43, 0x5f, 0xca, 0xce, 0x0b, 0x5c, 0xb8, 0xff,
+	0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x08, 0xad, 0xf2, 0x6f, 0x2b, 0x0e, 0x00, 0x00,
 }
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 9c7063f..1d14f0b 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -96,7 +96,7 @@
 github.com/modern-go/concurrent
 # github.com/modern-go/reflect2 v1.0.1
 github.com/modern-go/reflect2
-# github.com/opencord/voltha-lib-go/v3 v3.0.12
+# github.com/opencord/voltha-lib-go/v3 v3.0.14
 github.com/opencord/voltha-lib-go/v3/pkg/log
 github.com/opencord/voltha-lib-go/v3/pkg/db
 github.com/opencord/voltha-lib-go/v3/pkg/db/kvstore
@@ -109,7 +109,7 @@
 github.com/opencord/voltha-lib-go/v3/pkg/adapters/common
 github.com/opencord/voltha-lib-go/v3/pkg/adapters
 github.com/opencord/voltha-lib-go/v3/pkg/mocks
-# github.com/opencord/voltha-protos/v3 v3.2.2
+# github.com/opencord/voltha-protos/v3 v3.2.3
 github.com/opencord/voltha-protos/v3/go/common
 github.com/opencord/voltha-protos/v3/go/openflow_13
 github.com/opencord/voltha-protos/v3/go/voltha