src/Pure/Tools/build_cluster.scala
changeset 78413 6f3066a9b609
parent 78408 092f1e435b3a
child 78416 f26eba6281b1
equal deleted inserted replaced
78412:eda362f85cbf 78413:6f3066a9b609
     7 
     7 
     8 package isabelle
     8 package isabelle
     9 
     9 
    10 
    10 
    11 object Build_Cluster {
    11 object Build_Cluster {
       
    12   /* host specifications */
       
    13 
    12   object Host {
    14   object Host {
    13     private val rfc822_specials = """()<>@,;:\"[]"""
    15     private val rfc822_specials = """()<>@,;:\"[]"""
    14 
    16 
    15     private val USER = "user"
    17     private val USER = "user"
    16     private val PORT = "port"
    18     private val PORT = "port"
    73     port: Int,
    75     port: Int,
    74     jobs: Int,
    76     jobs: Int,
    75     numa: Boolean,
    77     numa: Boolean,
    76     options: List[Options.Spec]
    78     options: List[Options.Spec]
    77   ) {
    79   ) {
       
    80     def is_remote: Boolean = host.nonEmpty
       
    81 
    78     override def toString: String = print
    82     override def toString: String = print
    79 
    83 
    80     def print: String = {
    84     def print: String = {
    81       val params =
    85       val params =
    82         List(
    86         List(
    93     }
    97     }
    94 
    98 
    95     def open_ssh_session(options: Options): SSH.Session =
    99     def open_ssh_session(options: Options): SSH.Session =
    96       SSH.open_session(options, host, port = port, user = user)
   100       SSH.open_session(options, host, port = port, user = user)
    97   }
   101   }
       
   102 
       
   103 
       
   104   /* remote sessions */
       
   105 
       
   106   class Session(host: Host) extends AutoCloseable {
       
   107     override def close(): Unit = ()
       
   108   }
    98 }
   109 }
       
   110 
       
   111 // class extensible via Build.Engine.build_process() and Build_Process.init_cluster()
       
   112 class Build_Cluster(
       
   113   build_context: Build_Process.Context,
       
   114   remote_hosts: List[Build_Cluster.Host],
       
   115   progress: Progress = new Progress
       
   116 ) extends AutoCloseable {
       
   117   require(remote_hosts.nonEmpty && remote_hosts.forall(_.is_remote), "remote hosts required")
       
   118 
       
   119   override def toString: String = remote_hosts.mkString("Build_Cluster(", ", ", ")")
       
   120 
       
   121   progress.echo("Remote hosts:\n" + cat_lines(remote_hosts.map("  " + _)))
       
   122 
       
   123   def start(): Unit = ()
       
   124   def stop(): Unit = ()
       
   125 
       
   126   override def close(): Unit = ()
       
   127 }