Skip to content

Commit db61dfd

Browse files
authored
Improve test logs about locked jobs (#193)
* debug msg displaying pending jobs * improve waitForJobs * show blocking rule * timeout if really too long * show conflicting rules of jobs * try to force cancel periodic jobs to unlock workspace ... * decrease wait time on workspace start Signed-off-by: Didier Vojtisek <[email protected]>
1 parent 62b99fd commit db61dfd

File tree

1 file changed

+39
-3
lines changed
  • framework/xdsml_framework/tests/org.eclipse.gemoc.xdsmlframework.test.lib/src/org/eclipse/gemoc/xdsmlframework/test/lib

1 file changed

+39
-3
lines changed

framework/xdsml_framework/tests/org.eclipse.gemoc.xdsmlframework.test.lib/src/org/eclipse/gemoc/xdsmlframework/test/lib/WorkspaceTestHelper.xtend

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ class WorkspaceTestHelper {
9494
println("[WorkspaceTestHelper] waiting for Workbench availability")
9595
Thread.sleep(1000);
9696
}
97-
WorkspaceTestHelper.reallyWaitForJobs(100)
97+
WorkspaceTestHelper.reallyWaitForJobs(50)
9898
println("[WorkspaceTestHelper] Workbench is available")
9999
}
100100

@@ -422,8 +422,44 @@ class WorkspaceTestHelper {
422422
}
423423

424424
static def void waitForJobs() {
425-
while (!Job.getJobManager().isIdle())
426-
delay(100);
425+
val delay = 500;
426+
var retry = 600
427+
if(!Job.getJobManager().isIdle()) {
428+
delay(delay);
429+
}
430+
while (!Job.getJobManager().isIdle()) {
431+
val Job currentJob = Job.getJobManager().currentJob
432+
if(retry % 10 == 0 ) {
433+
val jobs = Job.getJobManager().find(null)
434+
for (job : jobs) {
435+
if(job === currentJob) {
436+
println("[waitForJobs](current) "+job.name+ " (rule="+job.rule+")")
437+
} else {
438+
println("[waitForJobs] "+job.name+ " (rule="+job.rule+")")
439+
}
440+
// cancel these jobs that tends to crash the tests
441+
if(retry <= 300 && (job.name.contains("Git Repository Change Scanner") ||
442+
job.name.contains("Periodic workspace save") ||
443+
job.name.contains("Workbench Auto-Save Job") ||
444+
job.name.contains("Compacting resource model")
445+
)) {
446+
println("[waitForJobs] CANCELLING job "+job.name+ " (rule="+job.rule+")")
447+
448+
}
449+
}
450+
val rules = jobs.filter[j | j.rule !== null].map[j | j.rule]
451+
rules.forEach[r1 | rules.forEach[r2 |
452+
if(r1 != r2 && r1.isConflicting(r2)) {
453+
println("[waitForJobs] conflicting rules: "+r1+ " / "+r2)
454+
}
455+
]]
456+
}
457+
delay(delay);
458+
retry = retry - 1
459+
if(retry <= 0) {
460+
throw new InterruptedException("waitForJobs timed out after " + delay * 600 + "ms")
461+
}
462+
}
427463
}
428464
static var closed = false;
429465
static def void delay(long waitTimeMillis) {

0 commit comments

Comments
 (0)