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/logical_device_manager.go b/rw_core/core/logical_device_manager.go
index a3a29f0..47249f6 100644
--- a/rw_core/core/logical_device_manager.go
+++ b/rw_core/core/logical_device_manager.go
@@ -31,6 +31,7 @@
type LogicalDeviceManager struct {
logicalDeviceAgents map[string]*LogicalDeviceAgent
+ core *Core
deviceMgr *DeviceManager
grpcNbiHdlr *APIHandler
adapterProxy *AdapterProxy
@@ -40,8 +41,9 @@
lockLogicalDeviceAgentsMap sync.RWMutex
}
-func newLogicalDeviceManager(deviceMgr *DeviceManager, kafkaICProxy *kafka.InterContainerProxy, cdProxy *model.Proxy) *LogicalDeviceManager {
+func newLogicalDeviceManager(core *Core, deviceMgr *DeviceManager, kafkaICProxy *kafka.InterContainerProxy, cdProxy *model.Proxy) *LogicalDeviceManager {
var logicalDeviceMgr LogicalDeviceManager
+ logicalDeviceMgr.core = core
logicalDeviceMgr.exitChannel = make(chan int, 1)
logicalDeviceMgr.logicalDeviceAgents = make(map[string]*LogicalDeviceAgent)
logicalDeviceMgr.deviceMgr = deviceMgr
@@ -182,6 +184,9 @@
ldMgr.addLogicalDeviceAgentToMap(agent)
go agent.start(ctx, false)
+ // Set device ownership
+ ldMgr.core.deviceOwnership.OwnedByMe(id)
+
log.Debug("creating-logical-device-ends")
return &id, nil
}
@@ -219,6 +224,7 @@
agent.stop(ctx)
//Remove the logical device agent from the Map
ldMgr.deleteLogicalDeviceAgent(logDeviceId)
+ ldMgr.core.deviceOwnership.AbandonDevice(logDeviceId)
}
log.Debug("deleting-logical-device-ends")