diff --git a/internal/pkg/resourcemanager/resourcemanager.go b/internal/pkg/resourcemanager/resourcemanager.go
old mode 100755
new mode 100644
index b8053f4..bc0524d
--- a/internal/pkg/resourcemanager/resourcemanager.go
+++ b/internal/pkg/resourcemanager/resourcemanager.go
@@ -43,7 +43,7 @@
 	BasePathKvStore = "%s/openolt/{%s}"
 	// tpIDPathSuffix - <(pon_id, onu_id, uni_id)>/tp_id
 	tpIDPathSuffix = "{%d,%d,%d}/tp_id"
-	//MeterIDPathSuffix - <(pon_id, onu_id, uni_id)>/<tp_id>/meter_id/<direction>
+	// MeterIDPathSuffix - <(pon_id, onu_id, uni_id)>/<tp_id>/meter_id/<direction>
 	MeterIDPathSuffix = "{%d,%d,%d}/{%d}/meter_id/{%s}"
 
 	// OnuPacketInPathPrefix - path prefix where ONU packet-in vlanID/PCP is stored
@@ -53,18 +53,18 @@
 	//format: onu_packetin/{<intfid>,<onuid>,<logicalport>}/{<vlanId>,<priority>}
 	OnuPacketInPath = OnuPacketInPathPrefix + "/{%d,%d}"
 
-	//FlowIDsForGemPathPrefix format: flowids_for_gem/<intfid>
+	// FlowIDsForGemPathPrefix format: flowids_for_gem/<intfid>
 	FlowIDsForGemPathPrefix = "flowids_per_gem/{%d}"
-	//FlowIDsForGem flowids_for_gem/<intfid>/<gemport-id>
+	// FlowIDsForGem flowids_for_gem/<intfid>/<gemport-id>
 	FlowIDsForGem = FlowIDsForGemPathPrefix + "/{%d}"
 
-	//McastQueuesForIntf multicast queues for pon interfaces
+	// McastQueuesForIntf multicast queues for pon interfaces
 	McastQueuesForIntf = "mcast_qs_for_int"
-	//FlowGroup flow_groups/<flow_group_id>
+	// FlowGroup flow_groups/<flow_group_id>
 	// A group is stored under this path on the KV store after it has been installed to the device.
 	// It should also be deleted after it has been removed from the device accordingly.
 	FlowGroup = "flow_groups/{%d}"
-	//FlowGroupCached flow_groups_cached/<flow_group_id>
+	// FlowGroupCached flow_groups_cached/<flow_group_id>
 	// When a group add request received, we create the group without setting any members to it since we cannot
 	// set any members to a group until it is associated with a multicast flow. It is a BAL limitation.
 	// When the related multicast flow has been created we perform set members operation for the group.
@@ -73,13 +73,13 @@
 	// we remove the group from the cached group store.
 	FlowGroupCached = "flow_groups_cached/{%d}"
 
-	//FlowIDPath - Path on the KV store for storing list of Flow IDs for a given subscriber
+	// FlowIDPath - Path on the KV store for storing list of Flow IDs for a given subscriber
 	//Format: BasePathKvStore/<(pon_intf_id, onu_id, uni_id)>/flow_ids
 	FlowIDPath = "{%s}/flow_ids"
 
-	//OnuGemInfoPathPathPrefix format: onu_gem_info/<intfid>
+	// OnuGemInfoPathPathPrefix format: onu_gem_info/<intfid>
 	OnuGemInfoPathPathPrefix = "onu_gem_info/{%d}"
-	//OnuGemInfoPath is path on the kvstore to store onugem info map
+	// OnuGemInfoPath is path on the kvstore to store onugem info map
 	//format: onu_gem_info/<intfid>/<onu_id>
 	OnuGemInfoPath = OnuGemInfoPathPathPrefix + "/{%d}"
 
@@ -95,11 +95,11 @@
 
 // OnuGemInfo holds onu information along with gem port list and uni port list
 type OnuGemInfo struct {
-	OnuID        uint32
 	SerialNumber string
-	IntfID       uint32
 	GemPorts     []uint32
 	UniPorts     []uint32
+	OnuID        uint32
+	IntfID       uint32
 }
 
 // PacketInInfoKey is the key for packet in gemport
@@ -113,8 +113,8 @@
 
 // GroupInfo holds group information
 type GroupInfo struct {
-	GroupID  uint32
 	OutPorts []uint32
+	GroupID  uint32
 }
 
 // MeterInfo store meter information at path <(pon_id, onu_id, uni_id)>/<tp_id>/meter_id/<direction>
@@ -125,47 +125,54 @@
 
 // OpenOltResourceMgr holds resource related information as provided below for each field
 type OpenOltResourceMgr struct {
-	PonIntfID  uint32
-	DeviceID   string      // OLT device id
-	Address    string      // Host and port of the kv store to connect to
-	Args       string      // args
-	KVStore    *db.Backend // backend kv store connection handle
-	DeviceType string
-	DevInfo    *openolt.DeviceInfo // device information
+	TechprofileRef tp.TechProfileIf
+	KVStore        *db.Backend         // backend kv store connection handle
+	DevInfo        *openolt.DeviceInfo // device information
 	// array of pon resource managers per interface technology
 	PonRsrMgr *ponrmgr.PONResourceManager
 
 	// Local maps used for write-through-cache - start
-	allocIDsForOnu     map[string][]uint32
+	allocIDsForOnu map[string][]uint32
+
+	gemPortIDsForOnu map[string][]uint32
+
+	techProfileIDsForOnu map[string][]uint32
+
+	meterInfoForOnu map[string]*MeterInfo
+
+	onuGemInfo map[string]*OnuGemInfo
+
+	gemPortForPacketInInfo map[string]uint32
+
+	flowIDsForGem map[uint32][]uint64
+
+	mcastQueueForIntf map[uint32][]uint32
+
+	groupInfo          map[string]*GroupInfo
+	DeviceID           string // OLT device id
+	Address            string // Host and port of the kv store to connect to
+	Args               string // args
+	DeviceType         string
 	allocIDsForOnuLock sync.RWMutex
 
-	gemPortIDsForOnu     map[string][]uint32
 	gemPortIDsForOnuLock sync.RWMutex
 
-	techProfileIDsForOnu     map[string][]uint32
 	techProfileIDsForOnuLock sync.RWMutex
 
-	meterInfoForOnu     map[string]*MeterInfo
 	meterInfoForOnuLock sync.RWMutex
 
-	onuGemInfo     map[string]*OnuGemInfo
 	onuGemInfoLock sync.RWMutex
 
-	gemPortForPacketInInfo     map[string]uint32
 	gemPortForPacketInInfoLock sync.RWMutex
 
-	flowIDsForGem     map[uint32][]uint64
 	flowIDsForGemLock sync.RWMutex
 
-	mcastQueueForIntf                  map[uint32][]uint32
-	mcastQueueForIntfLock              sync.RWMutex
-	mcastQueueForIntfLoadedFromKvStore bool
-
-	groupInfo     map[string]*GroupInfo
-	groupInfoLock sync.RWMutex
+	mcastQueueForIntfLock sync.RWMutex
+	groupInfoLock         sync.RWMutex
 	// Local maps used for write-through-cache - end
 
-	TechprofileRef tp.TechProfileIf
+	PonIntfID                          uint32
+	mcastQueueForIntfLoadedFromKvStore bool
 }
 
 func newKVClient(ctx context.Context, storeType string, address string, timeout time.Duration) (kvstore.Client, error) {
@@ -281,8 +288,7 @@
 
 // LoadLocalCacheFromKVStore loads local maps
 func (rsrcMgr *OpenOltResourceMgr) LoadLocalCacheFromKVStore(ctx context.Context) error {
-
-	//List all the keys for OnuGemInfo
+	// List all the keys for OnuGemInfo
 	prefixPath := fmt.Sprintf(OnuGemInfoPathPathPrefix, rsrcMgr.PonIntfID)
 	keys, err := rsrcMgr.KVStore.List(ctx, prefixPath)
 	logger.Debug(ctx, "load-local-cache-from-KV-store-started")
@@ -319,7 +325,6 @@
 		rsrcMgr.onuGemInfoLock.Lock()
 		rsrcMgr.onuGemInfo[path] = &onugem
 		rsrcMgr.onuGemInfoLock.Unlock()
-
 	}
 	logger.Debug(ctx, "load-local-cache-from-KV-store-finished")
 	return nil
@@ -370,7 +375,6 @@
 		GEMPortIDStart, GEMPortIDEnd, GEMPortIDShared,
 		flowIDDummyStart, flowIDDummyEnd, FlowIDShared, uniIDDummyStart, uniIDDummyEnd,
 		devInfo.PonPorts, techRange.IntfIds)
-
 }
 
 // Delete clears used resources for the particular olt device being deleted
@@ -402,7 +406,6 @@
 
 // UpdateAllocIdsForOnu updates alloc ids in kv store for a given pon interface id, onu id and uni id
 func (rsrcMgr *OpenOltResourceMgr) UpdateAllocIdsForOnu(ctx context.Context, onuID uint32, uniID uint32, allocIDs []uint32) error {
-
 	intfOnuIDuniID := fmt.Sprintf("%d,%d,%d", rsrcMgr.PonIntfID, onuID, uniID)
 
 	// Note: in case the write to DB fails there could be inconsistent data between cache and db.
@@ -420,9 +423,7 @@
 }
 
 // GetCurrentGEMPortIDsForOnu returns gem ports for given pon interface , onu id and uni id
-func (rsrcMgr *OpenOltResourceMgr) GetCurrentGEMPortIDsForOnu(ctx context.Context, onuID uint32,
-	uniID uint32) []uint32 {
-
+func (rsrcMgr *OpenOltResourceMgr) GetCurrentGEMPortIDsForOnu(ctx context.Context, onuID uint32, uniID uint32) []uint32 {
 	intfOnuIDuniID := fmt.Sprintf("%d,%d,%d", rsrcMgr.PonIntfID, onuID, uniID)
 
 	// fetch from cache
@@ -445,7 +446,6 @@
 
 // GetCurrentAllocIDsForOnu returns alloc ids for given pon interface and onu id
 func (rsrcMgr *OpenOltResourceMgr) GetCurrentAllocIDsForOnu(ctx context.Context, onuID uint32, uniID uint32) []uint32 {
-
 	intfOnuIDuniID := fmt.Sprintf("%d,%d,%d", rsrcMgr.PonIntfID, onuID, uniID)
 	// fetch from cache
 	rsrcMgr.allocIDsForOnuLock.RLock()
@@ -497,8 +497,7 @@
 }
 
 // UpdateGEMPortIDsForOnu updates gemport ids on to the kv store for a given pon port, onu id and uni id
-func (rsrcMgr *OpenOltResourceMgr) UpdateGEMPortIDsForOnu(ctx context.Context, onuID uint32,
-	uniID uint32, gemIDs []uint32) error {
+func (rsrcMgr *OpenOltResourceMgr) UpdateGEMPortIDsForOnu(ctx context.Context, onuID uint32, uniID uint32, gemIDs []uint32) error {
 	intfOnuIDuniID := fmt.Sprintf("%d,%d,%d", rsrcMgr.PonIntfID, onuID, uniID)
 
 	if err := rsrcMgr.PonRsrMgr.UpdateGEMPortIDsForOnu(ctx, intfOnuIDuniID, gemIDs); err != nil {
@@ -536,9 +535,7 @@
 // the ONU so as not cause resource corruption since there are no mutexes used here.
 // Setting freeFromResourcePool to false will not clear it from the resource pool but only
 // clear it for the given pon/onu/uni
-func (rsrcMgr *OpenOltResourceMgr) FreeAllocID(ctx context.Context, onuID uint32,
-	uniID uint32, allocID uint32, freeFromResourcePool bool) {
-
+func (rsrcMgr *OpenOltResourceMgr) FreeAllocID(ctx context.Context, onuID uint32, uniID uint32, allocID uint32, freeFromResourcePool bool) {
 	rsrcMgr.RemoveAllocIDForOnu(ctx, onuID, uniID, allocID)
 	if freeFromResourcePool {
 		allocIDs := make([]uint32, 0)
@@ -574,7 +571,6 @@
 
 // FreePONResourcesForONU make the pon resources free for a given pon interface and onu id
 func (rsrcMgr *OpenOltResourceMgr) FreePONResourcesForONU(ctx context.Context, onuID uint32, uniID uint32) {
-
 	intfOnuIDuniID := fmt.Sprintf("%d,%d,%d", rsrcMgr.PonIntfID, onuID, uniID)
 
 	if rsrcMgr.PonRsrMgr == nil || rsrcMgr.TechprofileRef == nil {
@@ -594,7 +590,7 @@
 		})
 	}
 
-	//update cache
+	// update cache
 	rsrcMgr.allocIDsForOnuLock.Lock()
 	delete(rsrcMgr.allocIDsForOnu, intfOnuIDuniID)
 	rsrcMgr.allocIDsForOnuLock.Unlock()
@@ -697,7 +693,6 @@
 	rsrcMgr.techProfileIDsForOnuLock.Unlock()
 
 	return tpIDs
-
 }
 
 // RemoveTechProfileIDsForOnu deletes all tech profile ids from the KV-Store for the given onu based on the path
@@ -841,7 +836,6 @@
 		}
 	} else {
 		logger.Errorf(ctx, "Failed to get Meter config from kvstore for path %s", Path)
-
 	}
 	// update cache
 	rsrcMgr.meterInfoForOnuLock.Lock()
@@ -1002,7 +996,6 @@
 
 // AddNewOnuGemInfoToCacheAndKvStore function adds a new  onu gem info to cache and kvstore
 func (rsrcMgr *OpenOltResourceMgr) AddNewOnuGemInfoToCacheAndKvStore(ctx context.Context, onuID uint32, serialNum string) error {
-
 	Path := fmt.Sprintf(OnuGemInfoPath, rsrcMgr.PonIntfID, onuID)
 
 	rsrcMgr.onuGemInfoLock.Lock()
@@ -1032,7 +1025,6 @@
 
 // AddOnuGemInfo adds onu info on to the kvstore per interface
 func (rsrcMgr *OpenOltResourceMgr) AddOnuGemInfo(ctx context.Context, onuID uint32, onuGem OnuGemInfo) error {
-
 	var Value []byte
 	var err error
 	Path := fmt.Sprintf(OnuGemInfoPath, rsrcMgr.PonIntfID, onuID)
@@ -1049,7 +1041,7 @@
 	}
 	logger.Debugw(ctx, "added onu gem info to store", log.Fields{"onuGemInfo": onuGem, "Path": Path})
 
-	//update cache
+	// update cache
 	rsrcMgr.onuGemInfoLock.Lock()
 	rsrcMgr.onuGemInfo[Path] = &onuGem
 	rsrcMgr.onuGemInfoLock.Unlock()
@@ -1065,7 +1057,7 @@
 		return err
 	}
 
-	//update cache
+	// update cache
 	rsrcMgr.onuGemInfoLock.Lock()
 	logger.Debugw(ctx, "removing onu gem info", log.Fields{"onuGemInfo": rsrcMgr.onuGemInfo[path]})
 	delete(rsrcMgr.onuGemInfo, path)
@@ -1075,7 +1067,6 @@
 
 // DeleteAllOnuGemInfoForIntf deletes all the all onu gem info on the given pon interface
 func (rsrcMgr *OpenOltResourceMgr) DeleteAllOnuGemInfoForIntf(ctx context.Context) error {
-
 	path := fmt.Sprintf(OnuGemInfoPathPathPrefix, rsrcMgr.PonIntfID)
 
 	logger.Debugw(ctx, "delete-all-onu-gem-info-for-pon-intf", log.Fields{"intfID": rsrcMgr.PonIntfID})
@@ -1093,7 +1084,6 @@
 
 // AddUniPortToOnuInfo adds uni port to the onuinfo kvstore. check if the uni is already present if not update the kv store.
 func (rsrcMgr *OpenOltResourceMgr) AddUniPortToOnuInfo(ctx context.Context, onuID uint32, portNo uint32) {
-
 	onugem, err := rsrcMgr.GetOnuGemInfo(ctx, onuID)
 	if err != nil || onugem == nil || onugem.SerialNumber == "" {
 		logger.Warnf(ctx, "failed to get onuifo for intfid %d", rsrcMgr.PonIntfID)
@@ -1121,7 +1111,6 @@
 
 // UpdateGemPortForPktIn updates gemport for pkt in path to kvstore, path being intfid, onuid, portno, vlan id, priority bit
 func (rsrcMgr *OpenOltResourceMgr) UpdateGemPortForPktIn(ctx context.Context, pktIn PacketInInfoKey, gemPort uint32) {
-
 	path := fmt.Sprintf(OnuPacketInPath, pktIn.IntfID, pktIn.OnuID, pktIn.LogicalPort, pktIn.VlanID, pktIn.Priority)
 
 	Value, err := json.Marshal(gemPort)
@@ -1143,7 +1132,6 @@
 
 // GetGemPortFromOnuPktIn gets the gem port from onu pkt in path, path being intfid, onuid, portno, vlan id, priority bit
 func (rsrcMgr *OpenOltResourceMgr) GetGemPortFromOnuPktIn(ctx context.Context, packetInInfoKey PacketInInfoKey) (uint32, error) {
-
 	var Val []byte
 
 	path := fmt.Sprintf(OnuPacketInPath, packetInInfoKey.IntfID, packetInInfoKey.OnuID, packetInInfoKey.LogicalPort,
@@ -1198,7 +1186,7 @@
 		return err
 	}
 
-	//remove them one by one
+	// remove them one by one
 	for key := range value {
 		// Remove the PathPrefix from the path on KV key.
 		// gemPortForPacketInInfo cache uses OnuPacketInPath as the key
@@ -1434,7 +1422,7 @@
 	} else {
 		path = fmt.Sprintf(FlowGroup, groupEntry.Desc.GroupId)
 	}
-	//build group info object
+	// build group info object
 	var outPorts []uint32
 	for _, ofBucket := range groupEntry.Desc.Buckets {
 		for _, ofAction := range ofBucket.Actions {
diff --git a/internal/pkg/resourcemanager/resourcemanager_test.go b/internal/pkg/resourcemanager/resourcemanager_test.go
index 9018d4d..c11d2f9 100644
--- a/internal/pkg/resourcemanager/resourcemanager_test.go
+++ b/internal/pkg/resourcemanager/resourcemanager_test.go
@@ -438,7 +438,6 @@
 }
 
 func TestOpenOltResourceMgr_DeleteAllFlowIDsForGemForIntf(t *testing.T) {
-
 	type args struct {
 		PONIntfID uint32
 	}
@@ -464,7 +463,6 @@
 }
 
 func TestOpenOltResourceMgr_DeleteAllOnuGemInfoForIntf(t *testing.T) {
-
 	type args struct {
 		PONIntfID uint32
 	}
@@ -490,7 +488,6 @@
 }
 
 func TestOpenOltResourceMgr_deleteGemPort(t *testing.T) {
-
 	type args struct {
 		intfID                uint32
 		onuID                 uint32
@@ -559,7 +556,6 @@
 }
 
 func TestOpenOltResourceMgr_AddNewOnuGemInfo(t *testing.T) {
-
 	type args struct {
 		PONIntfID uint32
 		OnuCount  uint32
@@ -578,17 +574,16 @@
 			ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
 			defer cancel()
 			for j := 1; j <= int(tt.args.OnuCount); j++ {
-				go func(i uint32, j uint32) {
+				go func(i uint32) {
 					// TODO: actually verify success
 					_ = RsrcMgr.AddNewOnuGemInfoToCacheAndKvStore(ctx, i, fmt.Sprintf("onu-%d", i))
-				}(tt.args.PONIntfID, uint32(j))
+				}(tt.args.PONIntfID)
 			}
 		})
 	}
 }
 
 func TestOpenOltFlowMgr_addGemPortToOnuInfoMap(t *testing.T) {
-
 	type args struct {
 		intfID              uint32
 		onuID               uint32
@@ -731,7 +726,6 @@
 }
 
 func TestOpenOltResourceMgr_GetTechProfileIDForOnu(t *testing.T) {
-
 	type args struct {
 		IntfID uint32
 		OnuID  uint32
@@ -759,7 +753,6 @@
 }
 
 func TestOpenOltResourceMgr_RemoveMeterIDForOnu(t *testing.T) {
-
 	type args struct {
 		Direction string
 		IntfID    uint32
@@ -847,7 +840,6 @@
 }
 
 func TestOpenOltResourceMgr_UpdateGEMPortIDsForOnu(t *testing.T) {
-
 	type args struct {
 		ponPort     uint32
 		onuID       uint32
@@ -982,7 +974,6 @@
 				t.Errorf("newKVClient() error = %v, wantErr %v", err, tt.wantErr)
 				return
 			}
-
 		})
 	}
 }
@@ -1057,11 +1048,11 @@
 		group  *ofp.OfpGroupEntry
 		cached bool
 	}
-	//create group 1
+	// create group 1
 	group1 := newGroup(1, []uint32{1})
-	//create group 2
+	// create group 2
 	group2 := newGroup(2, []uint32{2})
-	//define test set
+	// define test set
 	tests := []struct {
 		name   string
 		args   args
@@ -1070,7 +1061,7 @@
 		{"AddFlowGroupToKVStore-1", args{group1, true}, getResMgr()},
 		{"AddFlowGroupToKVStore-2", args{group2, false}, getResMgr()},
 	}
-	//execute tests
+	// execute tests
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
 			RsrcMgr := testResMgrObject(tt.fields)
@@ -1090,7 +1081,7 @@
 		groupID uint32
 		cached  bool
 	}
-	//define test set
+	// define test set
 	tests := []struct {
 		name   string
 		args   args
@@ -1099,7 +1090,7 @@
 		{"RemoveFlowGroupFromKVStore-1", args{1, true}, getResMgr()},
 		{"RemoveFlowGroupFromKVStore-2", args{2, false}, getResMgr()},
 	}
-	//execute tests
+	// execute tests
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
 			RsrcMgr := testResMgrObject(tt.fields)
@@ -1119,7 +1110,7 @@
 		groupID uint32
 		cached  bool
 	}
-	//define test set
+	// define test set
 	tests := []struct {
 		name   string
 		args   args
@@ -1129,7 +1120,7 @@
 		{"GetFlowGroupFromKVStore-2", args{2, false}, getResMgr()},
 		{"GetFlowGroupFromKVStore-3", args{1000, false}, getResMgr()},
 	}
-	//execute tests
+	// execute tests
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
 			RsrcMgr := testResMgrObject(tt.fields)
