Committed by
Gerrit Code Review
Fixed STC logic when skipping steps and groups of steps. Doh!
Change-Id: I6a1f690133bc0a5d1efbdf1333fe80a983e7dda8
Showing
2 changed files
with
25 additions
and
11 deletions
| ... | @@ -26,5 +26,5 @@ | ... | @@ -26,5 +26,5 @@ |
| 26 | <dependency name="Archetypes" requires="Setup"/> | 26 | <dependency name="Archetypes" requires="Setup"/> |
| 27 | 27 | ||
| 28 | <import file="${ONOS_SCENARIOS}/wrapup.xml"/> | 28 | <import file="${ONOS_SCENARIOS}/wrapup.xml"/> |
| 29 | - <dependency name="Wrapup" requires="~Archetypes,~Setup,~Net-Fast"/> | 29 | + <dependency name="Wrapup" requires="Prerequisites,~Archetypes,~Setup,~Net-Fast"/> |
| 30 | </scenario> | 30 | </scenario> | ... | ... |
| ... | @@ -25,6 +25,7 @@ import java.util.Map; | ... | @@ -25,6 +25,7 @@ import java.util.Map; |
| 25 | import java.util.Set; | 25 | import java.util.Set; |
| 26 | import java.util.concurrent.CountDownLatch; | 26 | import java.util.concurrent.CountDownLatch; |
| 27 | import java.util.concurrent.ExecutorService; | 27 | import java.util.concurrent.ExecutorService; |
| 28 | +import java.util.concurrent.TimeUnit; | ||
| 28 | import java.util.regex.Matcher; | 29 | import java.util.regex.Matcher; |
| 29 | import java.util.regex.Pattern; | 30 | import java.util.regex.Pattern; |
| 30 | 31 | ||
| ... | @@ -41,7 +42,7 @@ import static org.onlab.stc.Coordinator.Status.*; | ... | @@ -41,7 +42,7 @@ import static org.onlab.stc.Coordinator.Status.*; |
| 41 | */ | 42 | */ |
| 42 | public class Coordinator { | 43 | public class Coordinator { |
| 43 | 44 | ||
| 44 | - private static final int MAX_THREADS = 16; | 45 | + private static final int MAX_THREADS = 64; |
| 45 | 46 | ||
| 46 | private final ExecutorService executor = newFixedThreadPool(MAX_THREADS); | 47 | private final ExecutorService executor = newFixedThreadPool(MAX_THREADS); |
| 47 | 48 | ||
| ... | @@ -143,13 +144,15 @@ public class Coordinator { | ... | @@ -143,13 +144,15 @@ public class Coordinator { |
| 143 | } | 144 | } |
| 144 | 145 | ||
| 145 | /** | 146 | /** |
| 146 | - * Wants for completion of the entire process flow. | 147 | + * Waits for completion of the entire process flow. |
| 147 | * | 148 | * |
| 148 | * @return exit code to use | 149 | * @return exit code to use |
| 149 | * @throws InterruptedException if interrupted while waiting for completion | 150 | * @throws InterruptedException if interrupted while waiting for completion |
| 150 | */ | 151 | */ |
| 151 | public int waitFor() throws InterruptedException { | 152 | public int waitFor() throws InterruptedException { |
| 152 | - latch.await(); | 153 | + while (!store.isComplete()) { |
| 154 | + latch.await(1, TimeUnit.SECONDS); | ||
| 155 | + } | ||
| 153 | return store.hasFailures() ? 1 : 0; | 156 | return store.hasFailures() ? 1 : 0; |
| 154 | } | 157 | } |
| 155 | 158 | ||
| ... | @@ -234,15 +237,26 @@ public class Coordinator { | ... | @@ -234,15 +237,26 @@ public class Coordinator { |
| 234 | substitute(step.command()))); | 237 | substitute(step.command()))); |
| 235 | } | 238 | } |
| 236 | } else if (directive == SKIP) { | 239 | } else if (directive == SKIP) { |
| 237 | - if (step instanceof Group) { | 240 | + skipStep(step); |
| 238 | - Group group = (Group) step; | ||
| 239 | - group.children().forEach(child -> delegate.onCompletion(child, SKIPPED)); | ||
| 240 | - } | ||
| 241 | - delegate.onCompletion(step, SKIPPED); | ||
| 242 | } | 241 | } |
| 243 | } | 242 | } |
| 244 | 243 | ||
| 245 | /** | 244 | /** |
| 245 | + * Recursively skips the specified step or group and any steps/groups within. | ||
| 246 | + * | ||
| 247 | + * @param step step or group | ||
| 248 | + */ | ||
| 249 | + private void skipStep(Step step) { | ||
| 250 | + if (step instanceof Group) { | ||
| 251 | + Group group = (Group) step; | ||
| 252 | + store.markComplete(step, SKIPPED); | ||
| 253 | + group.children().forEach(this::skipStep); | ||
| 254 | + } | ||
| 255 | + delegate.onCompletion(step, SKIPPED); | ||
| 256 | + | ||
| 257 | + } | ||
| 258 | + | ||
| 259 | + /** | ||
| 246 | * Determines the state of the specified step. | 260 | * Determines the state of the specified step. |
| 247 | * | 261 | * |
| 248 | * @param step test step | 262 | * @param step test step |
| ... | @@ -258,8 +272,8 @@ public class Coordinator { | ... | @@ -258,8 +272,8 @@ public class Coordinator { |
| 258 | Status depStatus = store.getStatus(dependency.dst()); | 272 | Status depStatus = store.getStatus(dependency.dst()); |
| 259 | if (depStatus == WAITING || depStatus == IN_PROGRESS) { | 273 | if (depStatus == WAITING || depStatus == IN_PROGRESS) { |
| 260 | return NOOP; | 274 | return NOOP; |
| 261 | - } else if ((depStatus == FAILED || depStatus == SKIPPED) && | 275 | + } else if (((depStatus == FAILED || depStatus == SKIPPED) && !dependency.isSoft()) || |
| 262 | - !dependency.isSoft()) { | 276 | + (step.group() != null && store.getStatus(step.group()) == SKIPPED)) { |
| 263 | return SKIP; | 277 | return SKIP; |
| 264 | } | 278 | } |
| 265 | } | 279 | } | ... | ... |
-
Please register or login to post a comment