Add state updating to periodic save

pull/81/head
trivernis 4 years ago
parent 24e2d99d85
commit dbc394ee77

@ -53,6 +53,6 @@ class CmdList(private val chunkmaster: Chunkmaster): Subcommand {
else
""
return "\n" + chunkmaster.langManager.getLocalized("TASKS_ENTRY",
task.id, genTask.world.name, genTask.count, percentage)
task.id, genTask.world.name, genTask.state.toString(), genTask.count, percentage)
}
}

@ -74,14 +74,14 @@ class GenerationTasks(private val sqliteManager: SqliteManager) {
return completableFuture
}
fun updateLastChunk(id: Int, last: ChunkCoordinates): CompletableFuture<Void> {
fun updateGenerationTask(id: Int, last: ChunkCoordinates, state: TaskState): CompletableFuture<Void> {
val completableFuture = CompletableFuture<Void>()
sqliteManager.executeStatement(
"""
UPDATE generation_tasks SET last_x = ?, last_z = ?
UPDATE generation_tasks SET last_x = ?, last_z = ?, state = ?
WHERE id = ?
""".trimIndent(),
hashMapOf(1 to last.x, 2 to last.z, 3 to id)
hashMapOf(1 to last.x, 2 to last.z, 3 to id, 4 to state.toString())
) {
completableFuture.complete(null)
}
@ -97,6 +97,7 @@ class GenerationTasks(private val sqliteManager: SqliteManager) {
"GENERATING" -> TaskState.GENERATING
"VALIDATING" -> TaskState.VALIDATING
"PAUSING" -> TaskState.PAUSING
"SEEKING" -> TaskState.SEEKING
else -> TaskState.GENERATING
}
}
@ -109,6 +110,7 @@ class GenerationTasks(private val sqliteManager: SqliteManager) {
TaskState.GENERATING -> "GENERATING"
TaskState.VALIDATING -> "VALIDATING"
TaskState.PAUSING -> "PAUSING"
TaskState.SEEKING -> "SEEKING"
}
}
}

@ -109,6 +109,7 @@ class SqliteManager(private val chunkmaster: Chunkmaster) {
activeTasks++
if (connection != null) {
try {
//println("'$sql' with values $values")
val statement = connection.prepareStatement(sql)
for (parameterValue in values) {
statement.setObject(parameterValue.key, parameterValue.value)

@ -249,6 +249,7 @@ class GenerationManager(private val chunkmaster: Chunkmaster, private val server
"TASK_PERIODIC_REPORT",
task.id,
genTask.world.name,
genTask.state.toString(),
genTask.count,
percentage,
eta,
@ -266,7 +267,7 @@ class GenerationManager(private val chunkmaster: Chunkmaster, private val server
* Saves the generation progress to the database
*/
private fun saveProgressToDatabase(generationTask: GenerationTask, id: Int) {
generationTasks.updateLastChunk(id, generationTask.lastChunkCoords).thenAccept{
generationTasks.updateGenerationTask(id, generationTask.lastChunkCoords, generationTask.state).thenAccept{
if (generationTask is GenerationTaskPaper) {
if (generationTask.pendingChunks.size > 0) {
pendingChunksTable.clearPendingChunks(id).thenAccept {

@ -10,7 +10,7 @@ import java.util.concurrent.Semaphore
* Interface for generation tasks.
*/
abstract class GenerationTask(
private val plugin: Chunkmaster,
plugin: Chunkmaster,
protected val unloader: ChunkUnloader,
startChunk: ChunkCoordinates,
val shape: Shape,

@ -1,7 +1,24 @@
package net.trivernis.chunkmaster.lib.generation
enum class TaskState {
GENERATING,
VALIDATING,
PAUSING,
SEEKING {
override fun toString(): String {
return "SEEKING"
}
},
GENERATING {
override fun toString(): String {
return "GENERATING"
}
},
VALIDATING {
override fun toString(): String {
return "VALIDATING"
}
},
PAUSING {
override fun toString(): String {
return "PAUSING"
}
},
}

@ -42,7 +42,9 @@ class GenerationTaskPaper(
this.requestGeneration(pending)
}
this.state = TaskState.SEEKING
seekGenerated()
this.state = TaskState.GENERATING
generateUntilBorder()
} catch (_: InterruptedException){}
}
@ -53,6 +55,7 @@ class GenerationTaskPaper(
* Generate missing chunks later
*/
override fun validate() {
this.state = TaskState.VALIDATING
generateUntilBorder()
}
@ -67,6 +70,9 @@ class GenerationTaskPaper(
lastChunkCoords = chunkCoordinates
}
/**
* Generates the world until it encounters the worlds border
*/
private fun generateUntilBorder() {
var chunkCoordinates: ChunkCoordinates
while (!cancelRun && !borderReachedCheck()) {

@ -5,7 +5,7 @@ TASK_LOAD_FAILED = §cFailed to load task #%d.
TASK_LOAD_SUCCESS = %d saved tasks loaded.
TASK_NOT_FOUND = §cTask %s not found!
CREATE_DELAYED_LOAD = Creating task to load chunk generation Tasks later...
TASK_PERIODIC_REPORT = Task #%d running for '%s'. Progress: %d chunks %s %s, Speed: %.1f ch/s, Last Chunk: %d, %d
TASK_PERIODIC_REPORT = Task #%d running for '%s'. State: %s. Progress: %d chunks %s %s, Speed: %.1f ch/s, Last Chunk: %d, %d
TASK_SAVE_FAILED = §cException when saving tasks: %s
WORLD_NAME_REQUIRED = §cYou need to provide a world name!
@ -18,7 +18,7 @@ TASK_ID_REQUIRED = §cYou need to provide a task id!
INVALID_ARGUMENT = §cInvalid argument at %s: %s!
PAUSED_TASKS_HEADER = Currently Paused Generation Tasks
TASKS_ENTRY = - §9#%d§r - §2%s§r - §2%d chunks %s§r
TASKS_ENTRY = - §9#%d§r - §2%s§r - §2%s§r - §2%d chunks %s§r
RUNNING_TASKS_HEADER = Currently Running Generation Tasks
NO_GENERATION_TASKS = There are no generation tasks.

@ -5,7 +5,7 @@ TASK_LOAD_FAILED = §cAufgabe #%d konnte nicht geladen werden.
TASK_LOAD_SUCCESS = %d gespeicherte Aufgaben wurden geladen.
TASK_NOT_FOUND = §cAufgabe %s konnte nicht gefunden werden!
CREATE_DELAYED_LOAD = Erstelle einen Bukkit-Task zum verzögerten Laden von Aufgaben...
TASK_PERIODIC_REPORT = Aufgabe #%d für Welt '%s'. Fortschritt: %d chunks %s %s, Geschwindigkeit: %.1f ch/s, Letzer Chunk: %d, %d
TASK_PERIODIC_REPORT = Aufgabe #%d für Welt '%s'. Status: %s. Fortschritt: %d chunks %s %s, Geschwindigkeit: %.1f ch/s, Letzer Chunk: %d, %d
TASK_SAVE_FAILED = §cFehler beim Speichern der Aufgaben: %s
WORLD_NAME_REQUIRED = §cDu musst einen Weltennamen angeben!

@ -5,7 +5,7 @@ TASK_LOAD_FAILED = §cFailed to load task #%d.
TASK_LOAD_SUCCESS = %d saved tasks loaded.
TASK_NOT_FOUND = §cTask %s not found!
CREATE_DELAYED_LOAD = Creating task to load chunk generation Tasks later...
TASK_PERIODIC_REPORT = Task #%d running for '%s'. Progress: %d chunks %s %s, Speed: %.1f ch/s, Last Chunk: %d, %d
TASK_PERIODIC_REPORT = Task #%d running for '%s'. State: %s. Progress: %d chunks %s %s, Speed: %.1f ch/s, Last Chunk: %d, %d
TASK_SAVE_FAILED = §cException when saving tasks: %s
WORLD_NAME_REQUIRED = §cYou need to provide a world name!
@ -18,7 +18,6 @@ TASK_ID_REQUIRED = §cYou need to provide a task id!
INVALID_ARGUMENT = §cInvalid argument at %s: %s!
PAUSED_TASKS_HEADER = Currently Paused Generation Tasks
TASKS_ENTRY = - §9#%d§r - §2%s§r - §2%d chunks %s§r
RUNNING_TASKS_HEADER = Currently Running Generation Tasks
NO_GENERATION_TASKS = There are no generation tasks.

Loading…
Cancel
Save