Fix for meter delete and meter state update
Change-Id: Ic0945a6785da87aa66ab9620b0a599d75e563c78
diff --git a/internal/pkg/controller/device.go b/internal/pkg/controller/device.go
index 8d185a3..a3527c8 100644
--- a/internal/pkg/controller/device.go
+++ b/internal/pkg/controller/device.go
@@ -393,6 +393,19 @@
return nil
}
+// UpdateMeter to update meter
+func (d *Device) UpdateMeter(cntx context.Context, meter *of.Meter) error {
+ d.meterLock.Lock()
+ defer d.meterLock.Unlock()
+ if _, ok := d.meters[meter.ID]; ok {
+ d.meters[meter.ID] = meter
+ d.AddMeterToDb(cntx, meter)
+ } else {
+ return errors.New("Meter not found for updation")
+ }
+ return nil
+}
+
// GetMeter to get meter
func (d *Device) GetMeter(id uint32) (*of.Meter, error) {
d.meterLock.RLock()
diff --git a/internal/pkg/controller/modmeter.go b/internal/pkg/controller/modmeter.go
index 62d2f40..acbef44 100644
--- a/internal/pkg/controller/modmeter.go
+++ b/internal/pkg/controller/modmeter.go
@@ -93,6 +93,7 @@
// Meter already exists so we dont have to do anything here
return nil
}
+ logger.Infow(ctx, "Updated meter state to pending", log.Fields{"Meter": mmt.meter.ID})
} else {
if !mmt.device.DelMeter(ctx, mmt.meter) {
// Meter doesn't exist so we dont have to do anything here
@@ -114,6 +115,13 @@
if _, err = vc.UpdateLogicalDeviceMeterTable(mmt.ctx, meterMod); err != nil {
logger.Errorw(ctx, "Update Meter Table Failed", log.Fields{"Reason": err.Error()})
+ } else {
+ mmt.meter.State = of.MeterOperSuccess
+ if err := mmt.device.UpdateMeter(ctx, mmt.meter); err != nil {
+ // Meter does not exist, update failed
+ logger.Error(ctx, "Update meter to DB failed")
+ }
+ logger.Infow(ctx, "Updated meter state to success", log.Fields{"Meter": mmt.meter.ID})
}
//triggerMeterNotification(err)
return err