mirror of
https://github.com/wassname/ray.git
synced 2026-08-05 13:21:03 +08:00
Added handles for python to access buffers in objstore (#282)
This commit is contained in:
@@ -207,6 +207,47 @@ PyObject* Worker::put_arrow(ObjRef objref, PyObject* value) {
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
const char* Worker::allocate_buffer(ObjRef objref, int64_t size, SegmentId& segmentid) {
|
||||
RAY_CHECK(connected_, "Attempted to perform put_arrow but failed.");
|
||||
ObjRequest request;
|
||||
request.workerid = workerid_;
|
||||
request.type = ObjRequestType::ALLOC;
|
||||
request.objref = objref;
|
||||
request.size = size;
|
||||
RAY_CHECK(request_obj_queue_.send(&request), "error sending over IPC");
|
||||
ObjHandle result;
|
||||
RAY_CHECK(receive_obj_queue_.receive(&result), "error receiving over IPC");
|
||||
const char* address = reinterpret_cast<const char*>(segmentpool_->get_address(result));
|
||||
segmentid = result.segmentid();
|
||||
return address;
|
||||
}
|
||||
|
||||
PyObject* Worker::finish_buffer(ObjRef objref, SegmentId segmentid, int64_t metadata_offset) {
|
||||
segmentpool_->unmap_segment(segmentid);
|
||||
ObjRequest request;
|
||||
request.workerid = workerid_;
|
||||
request.objref = objref;
|
||||
request.type = ObjRequestType::WORKER_DONE;
|
||||
request.metadata_offset = metadata_offset;
|
||||
RAY_CHECK(request_obj_queue_.send(&request), "error sending over IPC");
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
const char* Worker::get_buffer(ObjRef objref, int64_t &size, SegmentId& segmentid) {
|
||||
RAY_CHECK(connected_, "Attempted to perform get_arrow but failed.");
|
||||
ObjRequest request;
|
||||
request.workerid = workerid_;
|
||||
request.type = ObjRequestType::GET;
|
||||
request.objref = objref;
|
||||
RAY_CHECK(request_obj_queue_.send(&request), "error sending over IPC");
|
||||
ObjHandle result;
|
||||
RAY_CHECK(receive_obj_queue_.receive(&result), "error receiving over IPC");
|
||||
const char* address = reinterpret_cast<const char*>(segmentpool_->get_address(result));
|
||||
size = result.size();
|
||||
segmentid = result.segmentid();
|
||||
return address;
|
||||
}
|
||||
|
||||
// returns python list containing the value represented by objref and the
|
||||
// segmentid in which the object is stored
|
||||
PyObject* Worker::get_arrow(ObjRef objref, SegmentId& segmentid) {
|
||||
|
||||
Reference in New Issue
Block a user