mirror of
https://github.com/wassname/ray.git
synced 2026-08-18 12:20:14 +08:00
Nondeterministic reconstruction for actors (#1344)
* Add failing unit test for nondeterministic reconstruction * Retry scheduling actor tasks if reassigned to local scheduler * Update execution edges asynchronously upon dispatch for nondeterministic reconstruction * Fix bug for updating checkpoint task execution dependencies * Update comments for deterministic reconstruction * cleanup * Add (and skip) failing test case for nondeterministic reconstruction * Suppress test output
This commit is contained in:
+11
-11
@@ -245,17 +245,12 @@ bool TaskSpec_is_actor_checkpoint_method(TaskSpec *spec) {
|
||||
return message->is_actor_checkpoint_method();
|
||||
}
|
||||
|
||||
bool TaskSpec_arg_is_actor_dummy_object(TaskSpec *spec, int64_t arg_index) {
|
||||
if (TaskSpec_actor_counter(spec) == 0) {
|
||||
/* The first task does not have any dependencies. */
|
||||
return false;
|
||||
} else if (TaskSpec_is_actor_checkpoint_method(spec)) {
|
||||
/* Checkpoint tasks do not have any dependencies. */
|
||||
return false;
|
||||
} else {
|
||||
/* For all other tasks, the last argument is the dummy object. */
|
||||
return arg_index == (TaskSpec_num_args(spec) - 1);
|
||||
}
|
||||
ObjectID TaskSpec_actor_dummy_object(TaskSpec *spec) {
|
||||
CHECK(TaskSpec_is_actor_task(spec));
|
||||
/* The last return value for actor tasks is the dummy object that
|
||||
* represents that this task has completed execution. */
|
||||
int64_t num_returns = TaskSpec_num_returns(spec);
|
||||
return TaskSpec_return(spec, num_returns - 1);
|
||||
}
|
||||
|
||||
UniqueID TaskSpec_driver_id(const TaskSpec *spec) {
|
||||
@@ -392,6 +387,11 @@ std::vector<ObjectID> TaskExecutionSpec::ExecutionDependencies() {
|
||||
return execution_dependencies_;
|
||||
}
|
||||
|
||||
void TaskExecutionSpec::SetExecutionDependencies(
|
||||
const std::vector<ObjectID> &dependencies) {
|
||||
execution_dependencies_ = dependencies;
|
||||
}
|
||||
|
||||
int64_t TaskExecutionSpec::SpecSize() {
|
||||
return task_spec_size_;
|
||||
}
|
||||
|
||||
+12
-5
@@ -28,6 +28,12 @@ class TaskExecutionSpec {
|
||||
/// dependencies.
|
||||
std::vector<ObjectID> ExecutionDependencies();
|
||||
|
||||
/// Set the task's execution dependencies.
|
||||
///
|
||||
/// @param dependencies The value to set the execution dependencies to.
|
||||
/// @return Void.
|
||||
void SetExecutionDependencies(const std::vector<ObjectID> &dependencies);
|
||||
|
||||
/// Get the task spec size.
|
||||
///
|
||||
/// @return The size of the immutable task spec.
|
||||
@@ -239,14 +245,15 @@ int64_t TaskSpec_actor_counter(TaskSpec *spec);
|
||||
bool TaskSpec_is_actor_checkpoint_method(TaskSpec *spec);
|
||||
|
||||
/**
|
||||
* Return whether the task's argument is a dummy object. Dummy objects are used
|
||||
* to encode an actor's state dependencies in the task graph.
|
||||
* Return an actor task's dummy return value. Dummy objects are used to
|
||||
* encode an actor's state dependencies in the task graph. The dummy object
|
||||
* is local if and only if the task that returned it has completed
|
||||
* execution.
|
||||
*
|
||||
* @param spec The task_spec in question.
|
||||
* @param arg_index The index of the argument in question.
|
||||
* @return Whether the argument at arg_index is a dummy object.
|
||||
* @return The dummy object ID that the actor task will return.
|
||||
*/
|
||||
bool TaskSpec_arg_is_actor_dummy_object(TaskSpec *spec, int64_t arg_index);
|
||||
ObjectID TaskSpec_actor_dummy_object(TaskSpec *spec);
|
||||
|
||||
/**
|
||||
* Return the driver ID of the task.
|
||||
|
||||
Reference in New Issue
Block a user