Skip to content

Commit

Permalink
Merge pull request #5627 from telstra/fix/5626-switch-sync-is-failing
Browse files Browse the repository at this point in the history
fix switch synchronization when discrepancy doesn't include cookie
  • Loading branch information
pablomuri committed Apr 11, 2024
2 parents a997bf5 + 926f5bc commit 918d747
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 4 deletions.
Expand Up @@ -290,7 +290,8 @@ protected void computeMisconfiguredRules(SwitchSyncState from, SwitchSyncState t
SwitchSyncEvent event, Object context) {
reinstalledRulesCookies = new ArrayList<>(validationResult.getValidateRulesResult().getMisconfiguredRules());
if (!reinstalledRulesCookies.isEmpty()) {
log.info("Compute reinstall rules (switch={}, key={})", switchId, key);
log.info("Compute reinstall rules (switch={}, key={}), reinstalledRulesCookies={}", switchId, key,
reinstalledRulesCookies);
try {
List<FlowSpeakerData> misconfiguredRulesToRemove = reinstalledRulesCookies.stream()
.flatMap(this::findActualFlowsByCookie)
Expand Down
Expand Up @@ -159,7 +159,8 @@ public ValidateRulesResult map(ValidateRulesResultV2 report) {
.map(RuleInfoEntryV2::getCookie)
.collect(Collectors.toSet());
Set<Long> misconfigured = report.getMisconfiguredRules().stream()
.map(m -> m.getDiscrepancies().getCookie())
.map(m -> Optional.ofNullable(m.getDiscrepancies().getCookie())
.orElse(m.getExpected().getCookie()))
.collect(Collectors.toSet());

return new ValidateRulesResult(missing, proper, excess, misconfigured);
Expand Down
Expand Up @@ -54,6 +54,7 @@
import org.openkilda.rulemanager.group.WatchPort;
import org.openkilda.rulemanager.match.FieldMatch;
import org.openkilda.wfm.topology.switchmanager.model.SwitchValidationContext;
import org.openkilda.wfm.topology.switchmanager.model.ValidateRulesResult;
import org.openkilda.wfm.topology.switchmanager.model.v2.ValidateGroupsResultV2;
import org.openkilda.wfm.topology.switchmanager.model.v2.ValidateLogicalPortsResultV2;
import org.openkilda.wfm.topology.switchmanager.model.v2.ValidateMetersResultV2;
Expand Down Expand Up @@ -161,7 +162,7 @@ private static GroupSpeakerData initializeGroupSpeakerData(SwitchId uniqueSwitch
public static Set<FieldMatch> matches = new HashSet<>();
public static Instructions instructions;

private static FlowSpeakerData initializeFlowSpeakerData(int uniquePriorityField) {
private static FlowSpeakerData initializeFlowSpeakerData(int uniquePriorityField, Cookie cookie) {

applyActions.add(SET_FIELD_ACTION);
for (Field field : Field.values()) {
Expand All @@ -173,7 +174,7 @@ private static FlowSpeakerData initializeFlowSpeakerData(int uniquePriorityField
OF_METADATA);

return FlowSpeakerData.builder()
.cookie(COOKIE)
.cookie(cookie)
.durationSeconds(DURATION_SECONDS)
.durationNanoSeconds(DURATION_NANOSECONDS)
.table(OF_TABLE_FIELD)
Expand All @@ -189,6 +190,10 @@ private static FlowSpeakerData initializeFlowSpeakerData(int uniquePriorityField
.build();
}

private static FlowSpeakerData initializeFlowSpeakerData(int uniquePriorityField) {
return initializeFlowSpeakerData(uniquePriorityField, COOKIE);
}

public static Set<MeterFlag> meterFlags = new HashSet<>();

private static MeterSpeakerData initializeMeterSpeakerData(MeterId uniqueMeterIdValue) {
Expand Down Expand Up @@ -253,6 +258,12 @@ public static void initializeData() {
.discrepancies(RuleEntryConverter.INSTANCE.toRuleEntry(initializeFlowSpeakerData(5)))
.build());

misconfiguredRules.add(MisconfiguredInfo.<RuleInfoEntryV2>builder()
.id("15")
.expected(RuleEntryConverter.INSTANCE.toRuleEntry(initializeFlowSpeakerData(6, new Cookie(1))))
.discrepancies(RuleEntryConverter.INSTANCE.toRuleEntry(initializeFlowSpeakerData(7, null)))
.build());

missingMeters.add(MeterEntryConverter.INSTANCE.toMeterEntry(initializeMeterSpeakerData(new MeterId(1))));
properMeters.add(MeterEntryConverter.INSTANCE.toMeterEntry(initializeMeterSpeakerData(
new MeterId(2))));
Expand Down Expand Up @@ -320,4 +331,16 @@ public void mapValidationTest() {
Assertions.assertEquals(excessMeters, metersEntry.getExcess());
Assertions.assertEquals(misconfiguredMeters, metersEntry.getMisconfigured());
}

@Test
public void mapValidateRulesResultV2ToValidateRulesResultIncludingNullCookieInDiscrepancy() {
ValidateRulesResultV2 validateRulesResultV2 = new ValidateRulesResultV2(false, missingRules, properRules,
excessRules, misconfiguredRules);

ValidateRulesResult validateRulesResult =
ValidationMapper.INSTANCE.map(validateRulesResultV2);

Assertions.assertEquals(2, validateRulesResult.getMisconfiguredRules().size());
validateRulesResult.getMisconfiguredRules().forEach(Assertions::assertNotNull);
}
}

0 comments on commit 918d747

Please sign in to comment.