arrow::Status Connection::RecvTagData()

in dissociated-ipc/ucx_conn.cc [236:259]


arrow::Status Connection::RecvTagData(ucp_tag_message_h msg, void* buffer,
                                      const size_t count, void* user_data,
                                      ucp_tag_recv_nbx_callback_t cb,
                                      const ucs_memory_type_t memory_type) {
  ARROW_RETURN_NOT_OK(CheckClosed());

  ucp_request_param_t recv_param;
  recv_param.op_attr_mask = UCP_OP_ATTR_FLAG_NO_IMM_CMPL | UCP_OP_ATTR_FIELD_DATATYPE |
                            UCP_OP_ATTR_FIELD_MEMORY_TYPE;
  recv_param.datatype = ucp_dt_make_contig(1);
  recv_param.memory_type = memory_type;
  if (user_data) {
    recv_param.user_data = user_data;
    recv_param.op_attr_mask |= UCP_OP_ATTR_FIELD_USER_DATA;
  }
  if (cb) {
    recv_param.cb.recv = cb;
    recv_param.op_attr_mask |= UCP_OP_ATTR_FIELD_CALLBACK;
  }

  auto request =
      ucp_tag_msg_recv_nbx(ucp_worker_->get(), buffer, count, msg, &recv_param);
  return FromUcsStatus("recvtagdata", wait_for_request(request, *ucp_worker_));
}