handleTaskJob method
Future<Response>
handleTaskJob(
- Request request
)
Implementation
Future<Response> handleTaskJob(Request request) async {
try {
Map<String, dynamic> body = jsonDecode(await request.readAsString());
String executorId = body["executor"];
Map<String, dynamic> taskData = body["task"];
TaskExecutor? executor = executors.select((t) => t.typeId == executorId);
ExecutableTask task = executor!.deserialize(taskData);
int lastBackoffMS = body["lbms"] ?? 0;
TaskExecutionContext context = TaskExecutionContext(
task: task,
started: DateTime.timestamp(),
timeBlockLimit: executionBlockTime,
stopwatch: PrecisionStopwatch.start(),
);
while (context.running && context.hasTimeRemaining && !context.backing) {
await task.workOnTask(context);
}
if (context.running) {
if (context.backing) {
lastBackoffMS = max(
context.lastBack?.inMilliseconds ?? 0,
lastBackoffMS,
);
} else {
lastBackoffMS = (lastBackoffMS * 0.7).floor();
}
await schedule(
task,
delay: Duration(seconds: 5) + Duration(milliseconds: lastBackoffMS),
);
}
} catch (e, es) {
error(
"Task handle failure! $e $es. Responding OK to not poison retries. If you want your task to retry then catch your errors.",
);
}
return Response.ok("");
}