[VOL-3731] Delete etcd stale data after olt reboot
Change-Id: I345b1af33de943c795888ad2defe2e470b6ea2c4
diff --git a/rw_core/core/device/logical_manager.go b/rw_core/core/device/logical_manager.go
index def6dc9..7ed5f8c 100644
--- a/rw_core/core/device/logical_manager.go
+++ b/rw_core/core/device/logical_manager.go
@@ -25,13 +25,12 @@
"sync"
"time"
- "github.com/opencord/voltha-lib-go/v7/pkg/probe"
-
"github.com/golang/protobuf/ptypes/empty"
"github.com/opencord/voltha-go/db/model"
"github.com/opencord/voltha-go/rw_core/core/device/event"
"github.com/opencord/voltha-go/rw_core/utils"
"github.com/opencord/voltha-lib-go/v7/pkg/log"
+ "github.com/opencord/voltha-lib-go/v7/pkg/probe"
"github.com/opencord/voltha-protos/v5/go/openflow_13"
"github.com/opencord/voltha-protos/v5/go/voltha"
"google.golang.org/grpc/codes"
@@ -422,6 +421,30 @@
return nil
}
+// deleteAllLogicalMeters removes the logical meters associated with a child device
+func (ldMgr *LogicalManager) deleteAllLogicalMeters(ctx context.Context, deviceID string) error {
+ logger.Debugw(ctx, "delete-logical-meters", log.Fields{"device-id": deviceID})
+ // Get logical port
+ ldID, err := ldMgr.getLogicalDeviceIDFromDeviceID(ctx, deviceID)
+ if err != nil {
+ return err
+ }
+ if agent := ldMgr.getLogicalDeviceAgent(ctx, *ldID); agent != nil {
+ for meterID := range agent.meterLoader.ListIDs() {
+ if meterHandle, have := agent.meterLoader.Lock(meterID); have {
+ // Update the store and cache
+ if err := meterHandle.Delete(ctx); err != nil {
+ meterHandle.Unlock()
+ logger.Errorw(ctx, "unable-to-delete-meter", log.Fields{"logical-device-id": ldID, "meterID": meterID})
+ continue
+ }
+ meterHandle.Unlock()
+ }
+ }
+ }
+ return nil
+}
+
func (ldMgr *LogicalManager) setupUNILogicalPorts(ctx context.Context, childDevice *voltha.Device, childDevicePorts map[uint32]*voltha.Port) error {
logger.Debugw(ctx, "setup-uni-logical-ports", log.Fields{"child-device-id": childDevice.Id, "parent-device-id": childDevice.ParentId, "current-data": childDevice})
// Sanity check