Committed by
Gerrit Code Review
Fixed STC logic when skipping steps and groups of steps. Doh!
Change-Id: I6a1f690133bc0a5d1efbdf1333fe80a983e7dda8
Showing
2 changed files
with
22 additions
and
8 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,12 +237,23 @@ public class Coordinator { | ... | @@ -234,12 +237,23 @@ public class Coordinator { |
234 | substitute(step.command()))); | 237 | substitute(step.command()))); |
235 | } | 238 | } |
236 | } else if (directive == SKIP) { | 239 | } else if (directive == SKIP) { |
240 | + skipStep(step); | ||
241 | + } | ||
242 | + } | ||
243 | + | ||
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) { | ||
237 | if (step instanceof Group) { | 250 | if (step instanceof Group) { |
238 | Group group = (Group) step; | 251 | Group group = (Group) step; |
239 | - group.children().forEach(child -> delegate.onCompletion(child, SKIPPED)); | 252 | + store.markComplete(step, SKIPPED); |
253 | + group.children().forEach(this::skipStep); | ||
240 | } | 254 | } |
241 | delegate.onCompletion(step, SKIPPED); | 255 | delegate.onCompletion(step, SKIPPED); |
242 | - } | 256 | + |
243 | } | 257 | } |
244 | 258 | ||
245 | /** | 259 | /** |
... | @@ -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