Fix: resolve thread blocking issue caused by querying dist store

Change-Id: Ifddf7eb07a4430af11ca64e8eb2098369fc7db6c
This commit is contained in:
Jian Li 2018-11-06 12:30:08 +09:00
parent 6a2d95e329
commit cab4176def

View File

@ -642,20 +642,23 @@ public class DefaultOpenstackNodeHandler implements OpenstackNodeHandler {
public boolean isRelevant(DeviceEvent event) {
NodeId leader = leadershipService.getLeader(appId.name());
return Objects.equals(localNode, leader) &&
event.subject().type() == Device.Type.CONTROLLER &&
osNodeService.node(event.subject().id()) != null &&
osNodeService.node(event.subject().id()).type() != CONTROLLER;
event.subject().type() == Device.Type.CONTROLLER;
}
@Override
public void event(DeviceEvent event) {
Device device = event.subject();
OpenstackNode osNode = osNodeService.node(device.id());
switch (event.type()) {
case DEVICE_AVAILABILITY_CHANGED:
case DEVICE_ADDED:
eventExecutor.execute(() -> {
OpenstackNode osNode = osNodeService.node(device.id());
if (osNode == null || osNode.type() == CONTROLLER) {
return;
}
if (deviceService.isAvailable(device.id())) {
log.debug("OVSDB {} detected", device.id());
bootstrapNode(osNode);
@ -684,20 +687,23 @@ public class DefaultOpenstackNodeHandler implements OpenstackNodeHandler {
public boolean isRelevant(DeviceEvent event) {
NodeId leader = leadershipService.getLeader(appId.name());
return Objects.equals(localNode, leader) &&
event.subject().type() == Device.Type.SWITCH &&
osNodeService.node(event.subject().id()) != null &&
osNodeService.node(event.subject().id()).type() != CONTROLLER;
event.subject().type() == Device.Type.SWITCH;
}
@Override
public void event(DeviceEvent event) {
Device device = event.subject();
OpenstackNode osNode = osNodeService.node(device.id());
switch (event.type()) {
case DEVICE_AVAILABILITY_CHANGED:
case DEVICE_ADDED:
eventExecutor.execute(() -> {
OpenstackNode osNode = osNodeService.node(device.id());
if (osNode == null || osNode.type() == CONTROLLER) {
return;
}
if (deviceService.isAvailable(device.id())) {
log.debug("Integration bridge created on {}", osNode.hostname());
bootstrapNode(osNode);
@ -719,6 +725,12 @@ public class DefaultOpenstackNodeHandler implements OpenstackNodeHandler {
case PORT_UPDATED:
case PORT_ADDED:
eventExecutor.execute(() -> {
OpenstackNode osNode = osNodeService.node(device.id());
if (osNode == null || osNode.type() == CONTROLLER) {
return;
}
Port port = event.port();
String portName = port.annotations().value(PORT_NAME);
if (osNode.state() == DEVICE_CREATED && (
@ -735,6 +747,12 @@ public class DefaultOpenstackNodeHandler implements OpenstackNodeHandler {
break;
case PORT_REMOVED:
eventExecutor.execute(() -> {
OpenstackNode osNode = osNodeService.node(device.id());
if (osNode == null || osNode.type() == CONTROLLER) {
return;
}
Port port = event.port();
String portName = port.annotations().value(PORT_NAME);
if (osNode.state() == COMPLETE && (