[VOL-2895] : Pings fail intermittently after OLT reboot and ONU disable
- There was a possible data corruption due to lock not being applied
over the entire routine where a new FlowID was being allocated.
There could be similar corruptions for other PON resource allocations
as well, so the locks are applied over entire routine where PON resources
are being managed. This comes at a slightly increased cost of end-to-end
flow handling transaction time when there are many susbcriber, but
guarantees sanity of data.
Change-Id: I0644aab4ffd6a636ea9eadccea13e2ed1ccb5d7b
(cherry picked from commit b77ded932e2d0e5802cb04c67203b368fb446410)
diff --git a/internal/pkg/core/openolt_flowmgr.go b/internal/pkg/core/openolt_flowmgr.go
index 451485f..546ac95 100644
--- a/internal/pkg/core/openolt_flowmgr.go
+++ b/internal/pkg/core/openolt_flowmgr.go
@@ -254,7 +254,7 @@
}
flowMgr.lockCache = sync.RWMutex{}
flowMgr.pendingFlowDelete = sync.Map{}
- flowMgr.perUserFlowHandleLock = mapmutex.NewMapMutex()
+ flowMgr.perUserFlowHandleLock = mapmutex.NewCustomizedMapMutex(300, 100000000, 10000000, 1.1, 0.2)
flowMgr.interfaceToMcastQueueMap = make(map[uint32]*queueInfoBrief)
//load interface to multicast queue map from kv store
flowMgr.loadInterfaceToMulticastQueueMap(ctx)