VOL-1512: Set device Active ownership per Core in a Core pair
- Changed NB & SB APIs to seize requests based on device ownership
- Added queue support for change-events
- Need to make prefix & timeout for the device ownership key configurable,
currently hard-coded
- Need to make KV Transaction Monitor timeout configurable,
currently hard-coded
- Need to clean up AdapterRequestHandlerProxy & LogicalDeviceManager
constructors
Change-Id: Ieeb3df6d70baa529b87c8253cb9f0f5b2a94382a
diff --git a/rw_core/core/device_manager.go b/rw_core/core/device_manager.go
index 09eca3b..06d3bd4 100644
--- a/rw_core/core/device_manager.go
+++ b/rw_core/core/device_manager.go
@@ -33,6 +33,7 @@
type DeviceManager struct {
deviceAgents map[string]*DeviceAgent
+ core *Core
adapterProxy *AdapterProxy
adapterMgr *AdapterManager
logicalDeviceMgr *LogicalDeviceManager
@@ -44,15 +45,16 @@
lockDeviceAgentsMap sync.RWMutex
}
-func newDeviceManager(kafkaICProxy *kafka.InterContainerProxy, cdProxy *model.Proxy, adapterMgr *AdapterManager, coreInstanceId string) *DeviceManager {
+func newDeviceManager(core *Core) *DeviceManager {
var deviceMgr DeviceManager
+ deviceMgr.core = core
deviceMgr.exitChannel = make(chan int, 1)
deviceMgr.deviceAgents = make(map[string]*DeviceAgent)
- deviceMgr.adapterProxy = NewAdapterProxy(kafkaICProxy)
- deviceMgr.kafkaICProxy = kafkaICProxy
- deviceMgr.coreInstanceId = coreInstanceId
- deviceMgr.clusterDataProxy = cdProxy
- deviceMgr.adapterMgr = adapterMgr
+ deviceMgr.kafkaICProxy = core.kmp
+ deviceMgr.adapterProxy = NewAdapterProxy(core.kmp)
+ deviceMgr.coreInstanceId = core.instanceId
+ deviceMgr.clusterDataProxy = core.clusterDataProxy
+ deviceMgr.adapterMgr = core.adapterMgr
deviceMgr.lockDeviceAgentsMap = sync.RWMutex{}
return &deviceMgr
}
@@ -184,6 +186,7 @@
if res == nil { //Success
agent.stop(ctx)
dMgr.deleteDeviceAgentToMap(agent)
+ dMgr.core.deviceOwnership.AbandonDevice(id.Id)
}
log.Debugw("deleteDevice-result", log.Fields{"result": res})
} else {
@@ -624,6 +627,9 @@
dMgr.addDeviceAgentToMap(agent)
agent.start(nil, false)
+ // Set device ownership
+ dMgr.core.deviceOwnership.OwnedByMe(agent.deviceId)
+
// Activate the child device
if agent := dMgr.getDeviceAgent(agent.deviceId); agent != nil {
go agent.enableDevice(nil)