src/Pure/Tools/build_process.scala
changeset 77655 136ab737a36d
parent 77654 78913f29fc21
child 77656 fd553b54fce1
equal deleted inserted replaced
77654:78913f29fc21 77655:136ab737a36d
   539       val table = make_table("workers",
   539       val table = make_table("workers",
   540         List(worker_uuid, build_uuid, hostname, java_pid, java_start, start, stamp, stop, serial))
   540         List(worker_uuid, build_uuid, hostname, java_pid, java_start, start, stamp, stop, serial))
   541 
   541 
   542       val serial_max = serial.copy(expr = "MAX(" + serial.ident + ")")
   542       val serial_max = serial.copy(expr = "MAX(" + serial.ident + ")")
   543     }
   543     }
       
   544 
       
   545     def read_serial(db: SQL.Database): Long =
       
   546       db.execute_query_statementO[Long](
       
   547         Workers.table.select(List(Workers.serial_max)),
       
   548         res => res.long(Workers.serial)
       
   549       ).getOrElse(0L)
   544 
   550 
   545     def read_workers(
   551     def read_workers(
   546       db: SQL.Database,
   552       db: SQL.Database,
   547       build_uuid: String = "",
   553       build_uuid: String = "",
   548       worker_uuid: String = ""
   554       worker_uuid: String = ""
   563               stop = res.get_date(Workers.stop),
   569               stop = res.get_date(Workers.stop),
   564               serial = res.long(Workers.serial))
   570               serial = res.long(Workers.serial))
   565           })
   571           })
   566     }
   572     }
   567 
   573 
   568     def serial_max(db: SQL.Database): Long =
       
   569       db.execute_query_statementO[Long](
       
   570         Workers.table.select(List(Workers.serial_max)),
       
   571         res => res.long(Workers.serial)
       
   572       ).getOrElse(0L)
       
   573 
       
   574     def start_worker(
   574     def start_worker(
   575       db: SQL.Database,
   575       db: SQL.Database,
   576       worker_uuid: String,
   576       worker_uuid: String,
   577       build_uuid: String,
   577       build_uuid: String,
   578       hostname: String,
   578       hostname: String,
   830       db: SQL.Database,
   830       db: SQL.Database,
   831       worker_uuid: String,
   831       worker_uuid: String,
   832       hostname: String,
   832       hostname: String,
   833       state: State
   833       state: State
   834     ): State = {
   834     ): State = {
   835       val serial0 = serial_max(db)
   835       val serial_db = read_serial(db)
   836       if (serial0 == state.serial) state
   836       if (serial_db == state.serial) state
   837       else {
   837       else {
   838         val serial = serial0 max state.serial
   838         val serial = serial_db max state.serial
   839         stamp_worker(db, worker_uuid, serial)
   839         stamp_worker(db, worker_uuid, serial)
   840 
   840 
   841         val numa_next = Host.Data.read_numa_next(db, hostname)
   841         val numa_next = Host.Data.read_numa_next(db, hostname)
   842         val sessions = pull1(read_sessions_domain(db), read_sessions(db, _), state.sessions)
   842         val sessions = pull1(read_sessions_domain(db), read_sessions(db, _), state.sessions)
   843         val workers = read_workers(db)
   843         val workers = read_workers(db)