changeset 71601 | 97ccf48c2f0c |
parent 71598 | 269dc4bf1f40 |
child 71604 | c6fa217c9d5e |
71600:64aad1e46f98 | 71601:97ccf48c2f0c |
---|---|
334 |
334 |
335 def join: (Process_Result, Option[String]) = |
335 def join: (Process_Result, Option[String]) = |
336 { |
336 { |
337 val result0 = future_result.join |
337 val result0 = future_result.join |
338 val result1 = |
338 val result1 = |
339 export_consumer.shutdown(close = true).map(Output.error_message_text(_)) match { |
339 export_consumer.shutdown(close = true).map(Output.error_message_text) match { |
340 case Nil => result0 |
340 case Nil => result0 |
341 case errs => result0.errors(errs).error_rc |
341 case errs => result0.errors(errs).error_rc |
342 } |
342 } |
343 |
343 |
344 Isabelle_System.rm_tree(export_tmp_dir) |
344 Isabelle_System.rm_tree(export_tmp_dir) |
378 { |
378 { |
379 def sessions: Set[String] = results.keySet |
379 def sessions: Set[String] = results.keySet |
380 def cancelled(name: String): Boolean = results(name)._1.isEmpty |
380 def cancelled(name: String): Boolean = results(name)._1.isEmpty |
381 def apply(name: String): Process_Result = results(name)._1.getOrElse(Process_Result(1)) |
381 def apply(name: String): Process_Result = results(name)._1.getOrElse(Process_Result(1)) |
382 def info(name: String): Sessions.Info = results(name)._2 |
382 def info(name: String): Sessions.Info = results(name)._2 |
383 val rc = |
383 val rc: Int = |
384 (0 /: results.iterator.map( |
384 (0 /: results.iterator.map( |
385 { case (_, (Some(r), _)) => r.rc case (_, (None, _)) => 1 }))(_ max _) |
385 { case (_, (Some(r), _)) => r.rc case (_, (None, _)) => 1 }))(_ max _) |
386 def ok: Boolean = rc == 0 |
386 def ok: Boolean = rc == 0 |
387 |
387 |
388 override def toString: String = rc.toString |
388 override def toString: String = rc.toString |
578 Session_Info(sources_stamp(deps, name), input_heaps, heap_digest, |
578 Session_Info(sources_stamp(deps, name), input_heaps, heap_digest, |
579 process_result.rc))) |
579 process_result.rc))) |
580 } |
580 } |
581 |
581 |
582 // messages |
582 // messages |
583 process_result.err_lines.foreach(progress.echo(_)) |
583 process_result.err_lines.foreach(progress.echo) |
584 |
584 |
585 if (process_result.ok) |
585 if (process_result.ok) |
586 progress.echo("Finished " + name + " (" + process_result.timing.message_resources + ")") |
586 progress.echo("Finished " + name + " (" + process_result.timing.message_resources + ")") |
587 else { |
587 else { |
588 progress.echo(name + " FAILED") |
588 progress.echo(name + " FAILED") |
592 loop(pending - name, running - name, |
592 loop(pending - name, running - name, |
593 results + (name -> Result(false, heap_digest, Some(process_result_tail), job.info))) |
593 results + (name -> Result(false, heap_digest, Some(process_result_tail), job.info))) |
594 //}}} |
594 //}}} |
595 case None if running.size < (max_jobs max 1) => |
595 case None if running.size < (max_jobs max 1) => |
596 //{{{ check/start next job |
596 //{{{ check/start next job |
597 pending.dequeue(running.isDefinedAt(_)) match { |
597 pending.dequeue(running.isDefinedAt) match { |
598 case Some((name, info)) => |
598 case Some((name, info)) => |
599 val ancestor_results = |
599 val ancestor_results = |
600 deps.sessions_structure.build_requirements(List(name)).filterNot(_ == name). |
600 deps.sessions_structure.build_requirements(List(name)).filterNot(_ == name). |
601 map(results(_)) |
601 map(results(_)) |
602 val ancestor_heaps = ancestor_results.flatMap(_.heap_digest) |
602 val ancestor_heaps = ancestor_results.flatMap(_.heap_digest) |
637 progress.echo((if (do_output) "Building " else "Running ") + name + " ...") |
637 progress.echo((if (do_output) "Building " else "Running ") + name + " ...") |
638 |
638 |
639 store.clean_output(name) |
639 store.clean_output(name) |
640 using(store.open_database(name, output = true))(store.init_session_info(_, name)) |
640 using(store.open_database(name, output = true))(store.init_session_info(_, name)) |
641 |
641 |
642 val numa_node = numa_nodes.next(used_node(_)) |
642 val numa_node = numa_nodes.next(used_node) |
643 val job = |
643 val job = |
644 new Job(progress, name, info, deps, store, do_output, verbose, pide = pide, |
644 new Job(progress, name, info, deps, store, do_output, verbose, pide = pide, |
645 numa_node, queue.command_timings(name)) |
645 numa_node, queue.command_timings(name)) |
646 loop(pending, running + (name -> (ancestor_heaps, job)), results) |
646 loop(pending, running + (name -> (ancestor_heaps, job)), results) |
647 } |
647 } |