441 (serial, numa_index) |
441 (serial, numa_index) |
442 }).nextOption.getOrElse(error("No build state instance " + instance + " in database " + db)) |
442 }).nextOption.getOrElse(error("No build state instance " + instance + " in database " + db)) |
443 } |
443 } |
444 |
444 |
445 def write_state(db: SQL.Database, instance: String, serial: Long, numa_index: Int): Unit = { |
445 def write_state(db: SQL.Database, instance: String, serial: Long, numa_index: Int): Unit = { |
446 db.using_statement( |
|
447 State.table.delete() + SQL.where(Generic.sql_equal(instance = instance)))(_.execute()) |
|
448 db.using_statement(State.table.insert()) { stmt => |
446 db.using_statement(State.table.insert()) { stmt => |
449 stmt.string(1) = instance |
447 stmt.string(1) = instance |
450 stmt.long(2) = serial |
448 stmt.long(2) = serial |
451 stmt.int(3) = numa_index |
449 stmt.int(3) = numa_index |
452 stmt.execute() |
450 stmt.execute() |
453 } |
451 } |
454 } |
452 } |
455 |
453 |
|
454 def reset_state(db: SQL.Database, instance: String): Unit = |
|
455 db.using_statement( |
|
456 State.table.delete() + SQL.where(Generic.sql_equal(instance = instance)))(_.execute()) |
|
457 |
456 def init_database(db: SQL.Database, build_context: Build_Process.Context): Unit = { |
458 def init_database(db: SQL.Database, build_context: Build_Process.Context): Unit = { |
457 val tables = |
459 val tables = |
458 List(Config.table, State.table, Pending.table, Running.table, Results.table) |
460 List(Config.table, State.table, Pending.table, Running.table, Results.table) |
459 |
461 |
460 for (table <- tables) db.create_table(table) |
462 for (table <- tables) db.create_table(table) |
476 val ch2 = update_running(db, state.running) |
478 val ch2 = update_running(db, state.running) |
477 val ch3 = update_results(db, state.results) |
479 val ch3 = update_results(db, state.results) |
478 |
480 |
479 val (serial0, numa_index0) = read_state(db, instance) |
481 val (serial0, numa_index0) = read_state(db, instance) |
480 val serial = if (ch1 || ch2 || ch3) serial0 + 1 else serial0 |
482 val serial = if (ch1 || ch2 || ch3) serial0 + 1 else serial0 |
481 if (serial != serial0) write_state(db, instance, serial, state.numa_index) |
483 if (serial != serial0) { |
|
484 reset_state(db, instance) |
|
485 write_state(db, instance, serial, state.numa_index) |
|
486 } |
482 |
487 |
483 state.copy(serial = serial) |
488 state.copy(serial = serial) |
484 } |
489 } |
485 } |
490 } |
486 |
491 |