use of org.openkilda.wfm.topology.floodlightrouter.model.RegionMappingRemove in project open-kilda by telstra.
the class SwitchMonitor method swapActiveReadWriteRegion.
private void swapActiveReadWriteRegion(String currentRegion, boolean isRegionOffline) {
Iterator<String> iter = readWriteConnects.listRegions().iterator();
if (iter.hasNext()) {
String targetRegion = iter.next();
log.info("Change {} active region for {} from \"{}\" to \"{}\"", SwitchConnectMode.READ_WRITE, switchId, currentRegion, targetRegion);
SwitchConnect target = readWriteConnects.get(targetRegion);
if (target == null) {
// it must never happen, but if it happen better throw something meaningful
throw new IllegalStateException(String.format("Switch %s availability data for %s corrupted", SwitchConnectMode.READ_WRITE, switchId));
}
readWriteConnects.put(targetRegion, target.buildActiveVariant());
carrier.regionUpdateNotification(new RegionMappingSet(switchId, targetRegion, true));
carrier.sendSwitchAvailabilityUpdateNotification(switchId, makeDump());
} else {
log.info("All {} connection to the switch {} have lost", SwitchConnectMode.READ_WRITE, switchId);
carrier.regionUpdateNotification(new RegionMappingRemove(switchId, currentRegion, true));
carrier.sendSwitchDisconnectNotification(switchId, makeDump(), isRegionOffline);
}
}
use of org.openkilda.wfm.topology.floodlightrouter.model.RegionMappingRemove in project open-kilda by telstra.
the class SwitchMonitorServiceTest method testDisconnectTheOnlyConnection.
@Test
public void testDisconnectTheOnlyConnection() {
SwitchMonitorService subject = makeSubject();
SwitchInfoData swActivate = makeSwitchActivateNotification(SWITCH_ALPHA, 1);
subject.handleStatusUpdateNotification(swActivate, REGION_ALPHA);
verify(carrier).regionUpdateNotification(eq(new RegionMappingSet(swActivate.getSwitchId(), REGION_ALPHA, true)));
verify(carrier).sendSwitchConnectNotification(eq(swActivate.getSwitchId()), eq(swActivate.getSwitchView()), any(SwitchAvailabilityData.class));
verifyNoMoreInteractions(carrier);
reset(carrier);
SwitchInfoData swDeactivate = new SwitchInfoData(swActivate.getSwitchId(), SwitchChangeType.DEACTIVATED);
subject.handleStatusUpdateNotification(swDeactivate, REGION_ALPHA);
verify(carrier).regionUpdateNotification(eq(new RegionMappingRemove(swActivate.getSwitchId(), REGION_ALPHA, true)));
verify(carrier).sendSwitchDisconnectNotification(eq(swDeactivate.getSwitchId()), eq(SwitchAvailabilityData.builder().build()), eq(false));
verifyNoMoreInteractions(carrier);
}
use of org.openkilda.wfm.topology.floodlightrouter.model.RegionMappingRemove in project open-kilda by telstra.
the class SwitchMonitorServiceTest method testTheOnlyRegionLost.
@Test
public void testTheOnlyRegionLost() {
SwitchMonitorService subject = makeSubject();
SwitchInfoData swActivate = makeSwitchActivateNotification(SWITCH_ALPHA, 1);
subject.handleStatusUpdateNotification(swActivate, REGION_ALPHA);
verify(carrier).regionUpdateNotification(eq(new RegionMappingSet(swActivate.getSwitchId(), REGION_ALPHA, true)));
verify(carrier).sendSwitchConnectNotification(eq(swActivate.getSwitchId()), eq(swActivate.getSwitchView()), any(SwitchAvailabilityData.class));
verifyNoMoreInteractions(carrier);
reset(carrier);
clock.adjust(Duration.ofSeconds(1));
subject.handleRegionOfflineNotification(REGION_ALPHA);
verify(carrier).regionUpdateNotification(eq(new RegionMappingRemove(swActivate.getSwitchId(), REGION_ALPHA, true)));
verify(carrier).sendSwitchDisconnectNotification(eq(swActivate.getSwitchId()), eq(SwitchAvailabilityData.builder().build()), eq(true));
verifyNoMoreInteractions(carrier);
}
use of org.openkilda.wfm.topology.floodlightrouter.model.RegionMappingRemove in project open-kilda by telstra.
the class SwitchMonitorServiceTest method testDisconnectActivePassive.
@Test
public void testDisconnectActivePassive() {
SwitchMonitorService subject = makeSubject();
Instant t0 = clock.instant();
SwitchId targetSw = SWITCH_ALPHA;
makeConnectInRegions(subject, targetSw, REGION_ALPHA, REGION_BETA);
clock.adjust(Duration.ofSeconds(1));
SwitchInfoData swDisconnect = new SwitchInfoData(targetSw, SwitchChangeType.DEACTIVATED);
// disconnect active region (so it must be swapped)
subject.handleStatusUpdateNotification(swDisconnect, REGION_ALPHA);
verify(carrier).regionUpdateNotification(eq(new RegionMappingSet(swDisconnect.getSwitchId(), REGION_BETA, true)));
SpeakerSwitchView suggestedSpeakerData = makeSwitchActivateNotification(swDisconnect.getSwitchId(), 2).getSwitchView();
verify(carrier).sendSwitchAvailabilityUpdateNotification(eq(swDisconnect.getSwitchId()), argThat(arg -> matchAvailabilityData(SwitchAvailabilityData.builder().connection(SwitchAvailabilityEntry.builder().regionName(REGION_BETA).connectMode(SwitchConnectMode.READ_WRITE).master(true).connectedAt(t0).switchAddress(suggestedSpeakerData.getSwitchSocketAddress()).speakerAddress(suggestedSpeakerData.getSpeakerSocketAddress()).build()).build(), arg)));
verifyNoMoreInteractions(carrier);
reset(carrier);
// disconnect last (active) region
subject.handleStatusUpdateNotification(swDisconnect, REGION_BETA);
verify(carrier).regionUpdateNotification(eq(new RegionMappingRemove(swDisconnect.getSwitchId(), REGION_BETA, true)));
verify(carrier).sendSwitchDisconnectNotification(eq(swDisconnect.getSwitchId()), eq(SwitchAvailabilityData.builder().build()), eq(false));
verifyNoMoreInteractions(carrier);
}
use of org.openkilda.wfm.topology.floodlightrouter.model.RegionMappingRemove in project open-kilda by telstra.
the class SwitchMonitorServiceTest method testDisconnectPassiveActive.
@Test
public void testDisconnectPassiveActive() {
SwitchMonitorService subject = makeSubject();
Instant t0 = clock.instant();
SwitchId targetSw = SWITCH_ALPHA;
makeConnectInRegions(subject, targetSw, REGION_ALPHA, REGION_BETA);
// disconnect beta
SwitchInfoData swDisconnect = new SwitchInfoData(targetSw, SwitchChangeType.DEACTIVATED);
subject.handleStatusUpdateNotification(swDisconnect, REGION_BETA);
SpeakerSwitchView suggestedSpeakerData = makeSwitchActivateNotification(swDisconnect.getSwitchId(), 1).getSwitchView();
verify(carrier).sendSwitchAvailabilityUpdateNotification(eq(swDisconnect.getSwitchId()), argThat(arg -> matchAvailabilityData(SwitchAvailabilityData.builder().connection(SwitchAvailabilityEntry.builder().regionName(REGION_ALPHA).connectMode(SwitchConnectMode.READ_WRITE).master(true).connectedAt(t0).switchAddress(suggestedSpeakerData.getSwitchSocketAddress()).speakerAddress(suggestedSpeakerData.getSpeakerSocketAddress()).build()).build(), arg)));
verifyNoMoreInteractions(carrier);
reset(carrier);
// disconnect alpha (the only RW region)
subject.handleStatusUpdateNotification(swDisconnect, REGION_ALPHA);
verify(carrier).regionUpdateNotification(eq(new RegionMappingRemove(swDisconnect.getSwitchId(), REGION_ALPHA, true)));
verify(carrier).sendSwitchDisconnectNotification(eq(swDisconnect.getSwitchId()), eq(SwitchAvailabilityData.builder().build()), eq(false));
verifyNoMoreInteractions(carrier);
}
Aggregations