Reconstruction for evicted objects (#181)

* First pass at reconstruction in the worker

Modify reconstruction stress testing to start Plasma service before rest of Ray cluster

TODO about reconstructing ray.puts

Fix ray.put error for double creates

Distinguish between empty entry and no entry in object table

Fix test case

Fix Python test

Fix tests

* Only call reconstruct on objects we have not yet received

* Address review comments

* Fix reconstruction for Python3

* remove unused code

* Address Robert's comments, stress tests are crashing

* Test and update the task's scheduling state to suppress duplicate
reconstruction requests.

* Split result table into two lookups, one for task ID and the other as a
test-and-set for the task state

* Fix object table tests

* Fix redis module result_table_lookup test case

* Multinode reconstruction tests

* Fix python3 test case

* rename

* Use new start_redis

* Remove unused code

* lint

* indent

* Address Robert's comments

* Use start_redis from ray.services in state table tests

* Remove unnecessary memset
This commit is contained in:
Stephanie Wang
2017-02-01 19:18:46 -08:00
committed by Robert Nishihara
parent f69d4aaaa7
commit 241b539ff8
26 changed files with 670 additions and 184 deletions
+8 -4
View File
@@ -193,6 +193,7 @@ static PyObject* register_callbacks(PyObject* self, PyObject* args) {
#ifdef HAS_PLASMA
#include "common_extension.h"
#include "plasma_extension.h"
/**
@@ -297,9 +298,12 @@ static PyObject* store_list(PyObject* self, PyObject* args) {
* Python objects from the plasma data according to the schema and
* returns the object.
*
* @param args The first argument is a list of object IDs of the lists to be
* retrieved and the second argument is the connection to the plasma
* store.
* @param args The arguments are, in order:
* 1) A list of object IDs of the lists to be retrieved.
* 2) The connection to the plasma store.
* 3) A timeout in milliseconds that the call should return by. This is
* -1 if the call should block forever, or 0 if the call should
* return immediately.
* @return A list of tuples, where the first element in the tuple is the object
* ID (appearing in the same order as in the argument to the method),
* and the second element in the tuple is the retrieved list (or None)
@@ -436,7 +440,7 @@ MOD_INIT(libnumbuf) {
PyErr_NewException(numbuf_plasma_object_exists_error, NULL, NULL);
Py_INCREF(NumbufPlasmaObjectExistsError);
PyModule_AddObject(
m, "pnumbuf_lasma_object_exists_error", NumbufPlasmaObjectExistsError);
m, "numbuf_plasma_object_exists_error", NumbufPlasmaObjectExistsError);
/* Create a custom exception for when the plasma store is out of memory. */
char numbuf_plasma_out_of_memory_error[] = "numbuf_plasma_out_of_memory.error";
NumbufPlasmaOutOfMemoryError =