@Override
public void changePortState(DeviceId deviceId, PortNumber portNumber,
boolean enable) {
checkNotNull(deviceId, DEVICE_ID_NULL);
checkNotNull(deviceId, PORT_NUMBER_NULL);
NodeId masterId = mastershipService.getMasterFor(deviceId);
if (masterId == null) {
log.info("No master found for port state change for {}", deviceId);
return;
}
if (!masterId.equals(localNodeId)) {
log.info("Device {} is managed by {}, forwarding the request to the MASTER",
deviceId, masterId);
communicationService.unicast(
new InternalPortUpDownEvent(deviceId, portNumber, enable),
PORT_UPDOWN_SUBJECT,
SERIALIZER::encode,
masterId).whenComplete((r, error) -> {
if (error != null) {
log.warn("Failed to send packet-updown-req to {}", masterId, error);
}
});
} else {
changePortStateAtMaster(deviceId, portNumber, enable);
}
}