Fix actor bug arising from overwriting task specifications in the local scheduler (#513)

* copy task specifications put into the actor task cache so it won't get overwritten when the scheduler receives the next task

* cleanup

* cleanup and fix

* linting

* fix jenkins test

* fix linting
This commit is contained in:
Philipp Moritz
2017-05-06 17:39:35 -07:00
committed by Robert Nishihara
parent 8532ba4272
commit 1dddd5336a
6 changed files with 25 additions and 9 deletions
+1 -2
View File
@@ -99,8 +99,7 @@ PyObject *PyTask_from_string(PyObject *self, PyObject *args) {
PyTask *result = PyObject_New(PyTask, &PyTaskType);
result = (PyTask *) PyObject_Init((PyObject *) result, &PyTaskType);
result->size = size;
result->spec = (TaskSpec *) malloc(size);
memcpy(result->spec, data, size);
result->spec = TaskSpec_copy((TaskSpec *) data, size);
/* TODO(pcm): Use flatbuffers validation here. */
return (PyObject *) result;
}
+6
View File
@@ -288,6 +288,12 @@ bool TaskSpec_is_dependent_on(TaskSpec *spec, ObjectID object_id) {
return false;
}
TaskSpec *TaskSpec_copy(TaskSpec *spec, int64_t task_spec_size) {
TaskSpec *copy = (TaskSpec *) malloc(task_spec_size);
memcpy(copy, spec, task_spec_size);
return copy;
}
void TaskSpec_free(TaskSpec *spec) {
free(spec);
}
+10 -1
View File
@@ -291,6 +291,15 @@ ObjectID task_compute_put_id(TaskID task_id, int64_t put_index);
*/
void TaskSpec_print(TaskSpec *spec, UT_string *output);
/**
* Create a copy of the task spec. Must be freed with TaskSpec_free after use.
*
* @param spec The task specification that will be copied.
* @param task_spec_size The size of the task specification in bytes.
* @returns Pointer to the copy of the task specification.
*/
TaskSpec *TaskSpec_copy(TaskSpec *spec, int64_t task_spec_size);
/**
* Free a task_spec.
*
@@ -355,7 +364,7 @@ Task *Task_alloc(TaskSpec *spec,
DBClientID local_scheduler_id);
/**
* Create a copy of the task. Must be freed with free_task after use.
* Create a copy of the task. Must be freed with Task_free after use.
*
* @param other The task that will be copied.
* @returns Pointer to the copy of the task.