|
24 | 24 | import java.util.Iterator; |
25 | 25 | import java.util.LinkedList; |
26 | 26 | import java.util.List; |
27 | | -import java.util.HashMap; |
28 | | -import java.util.HashSet; |
29 | 27 |
|
30 | 28 | import org.apache.commons.logging.Log; |
31 | 29 | import org.apache.commons.logging.LogFactory; |
@@ -217,10 +215,6 @@ public void run() { |
217 | 215 | } |
218 | 216 |
|
219 | 217 | synchronized(this) { |
220 | | - if (isCircular(jobsInProgress)) { |
221 | | - throw new IllegalArgumentException( |
222 | | - "job control has circular dependency"); |
223 | | - } |
224 | 218 | Iterator<ControlledJob> it = jobsInProgress.iterator(); |
225 | 219 | while(it.hasNext()) { |
226 | 220 | ControlledJob j = it.next(); |
@@ -287,64 +281,4 @@ synchronized private void failAllJobs(Throwable t) { |
287 | 281 | } |
288 | 282 | } |
289 | 283 | } |
290 | | - |
291 | | - /** |
292 | | - * Uses topological sorting algorithm for finding circular dependency |
293 | | - */ |
294 | | - private boolean isCircular(final List<ControlledJob> jobList) { |
295 | | - boolean cyclePresent = false; |
296 | | - HashSet<ControlledJob> SourceSet = new HashSet<ControlledJob>(); |
297 | | - HashMap<ControlledJob, List<ControlledJob>> processedMap = |
298 | | - new HashMap<ControlledJob, List<ControlledJob>>(); |
299 | | - for (ControlledJob n : jobList) { |
300 | | - processedMap.put(n, new ArrayList<ControlledJob>()); |
301 | | - } |
302 | | - for (ControlledJob n : jobList) { |
303 | | - if (!hasInComingEdge(n, jobList, processedMap)) { |
304 | | - SourceSet.add(n); |
305 | | - } |
306 | | - } |
307 | | - while (!SourceSet.isEmpty()) { |
308 | | - ControlledJob controlledJob = SourceSet.iterator().next(); |
309 | | - SourceSet.remove(controlledJob); |
310 | | - if (controlledJob.getDependentJobs() != null) { |
311 | | - for (int i = 0; i < controlledJob.getDependentJobs().size(); i++) { |
312 | | - ControlledJob depenControlledJob = |
313 | | - controlledJob.getDependentJobs().get(i); |
314 | | - processedMap.get(controlledJob).add(depenControlledJob); |
315 | | - if (!hasInComingEdge(controlledJob, jobList, processedMap)) { |
316 | | - SourceSet.add(depenControlledJob); |
317 | | - } |
318 | | - } |
319 | | - } |
320 | | - } |
321 | | - |
322 | | - for (ControlledJob controlledJob : jobList) { |
323 | | - if (controlledJob.getDependentJobs() != null |
324 | | - && controlledJob.getDependentJobs().size() != processedMap.get( |
325 | | - controlledJob).size()) { |
326 | | - cyclePresent = true; |
327 | | - LOG.error("Job control has circular dependency for the job " |
328 | | - + controlledJob.getJobName()); |
329 | | - break; |
330 | | - } |
331 | | - } |
332 | | - return cyclePresent; |
333 | | - } |
334 | | - |
335 | | - private boolean hasInComingEdge(ControlledJob controlledJob, |
336 | | - List<ControlledJob> controlledJobList, |
337 | | - HashMap<ControlledJob, List<ControlledJob>> processedMap) { |
338 | | - boolean hasIncomingEdge = false; |
339 | | - for (ControlledJob k : controlledJobList) { |
340 | | - if (k != controlledJob && k.getDependentJobs() != null |
341 | | - && !processedMap.get(k).contains(controlledJob) |
342 | | - && k.getDependentJobs().contains(controlledJob)) { |
343 | | - hasIncomingEdge = true; |
344 | | - break; |
345 | | - } |
346 | | - } |
347 | | - return hasIncomingEdge; |
348 | | - |
349 | | - } |
350 | 284 | } |
0 commit comments