Change TaskSpec to allow multiple object IDs per argument. (#1204)

* Implement object ID bags

* linting

* fix tests

* fix linting

* fix comments
This commit is contained in:
Philipp Moritz
2017-11-10 16:33:34 -08:00
committed by Robert Nishihara
parent 07f0532b9b
commit e798a652bc
11 changed files with 120 additions and 84 deletions
+6 -4
View File
@@ -315,7 +315,8 @@ static int PyTask_init(PyTask *self, PyObject *args, PyObject *kwds) {
for (Py_ssize_t i = 0; i < size; ++i) {
PyObject *arg = PyList_GetItem(arguments, i);
if (PyObject_IsInstance(arg, (PyObject *) &PyObjectIDType)) {
TaskSpec_args_add_ref(g_task_builder, ((PyObjectID *) arg)->object_id);
TaskSpec_args_add_ref(g_task_builder, &((PyObjectID *) arg)->object_id,
1);
} else {
/* We do this check because we cast a signed int to an unsigned int. */
PyObject *data = PyObject_CallMethodObjArgs(pickle_module, pickle_dumps,
@@ -391,9 +392,10 @@ static PyObject *PyTask_arguments(PyObject *self) {
int64_t num_args = TaskSpec_num_args(task);
PyObject *arg_list = PyList_New((Py_ssize_t) num_args);
for (int i = 0; i < num_args; ++i) {
if (TaskSpec_arg_by_ref(task, i)) {
ObjectID object_id = TaskSpec_arg_id(task, i);
PyList_SetItem(arg_list, i, PyObjectID_make(object_id));
int count = TaskSpec_arg_id_count(task, i);
if (count > 0) {
assert(count == 1);
PyList_SetItem(arg_list, i, PyObjectID_make(TaskSpec_arg_id(task, i, 0)));
} else {
CHECK(pickle_module != NULL);
CHECK(pickle_loads != NULL);