rpc_msg.h 1.88 KB
Newer Older
1
/**
2
 *  Copyright (c) 2020 by Contributors
3
4
 * @file rpc/rpc_msg.h
 * @brief Common headers for remote process call (RPC).
5
6
7
8
 */
#ifndef DGL_RPC_RPC_MSG_H_
#define DGL_RPC_RPC_MSG_H_

9
#include <dgl/runtime/ndarray.h>
10
#include <dgl/runtime/object.h>
11
#include <dgl/zerocopy_serializer.h>
12
13
14
15
16
17
18

#include <string>
#include <vector>

namespace dgl {
namespace rpc {

19
/** @brief RPC message data structure
20
21
22
23
24
 *
 * This structure is exposed to Python and can be used as argument or return
 * value in C API.
 */
struct RPCMessage : public runtime::Object {
25
  /** @brief Service ID */
26
27
  int32_t service_id;

28
  /** @brief Sequence number of this message. */
29
30
  int64_t msg_seq;

31
  /** @brief Client ID. */
32
33
  int32_t client_id;

34
  /** @brief Server ID. */
35
36
  int32_t server_id;

37
  /** @brief Payload buffer carried by this request.*/
38
39
  std::string data;

40
  /** @brief Extra payloads in the form of tensors.*/
41
42
  std::vector<runtime::NDArray> tensors;

43
  /** @brief Group ID. */
44
45
  int32_t group_id{0};

46
47
48
49
50
51
52
  bool Load(dmlc::Stream* stream) {
    stream->Read(&service_id);
    stream->Read(&msg_seq);
    stream->Read(&client_id);
    stream->Read(&server_id);
    stream->Read(&data);
    stream->Read(&tensors);
53
    stream->Read(&group_id);
54
55
56
57
58
59
60
61
62
63
    return true;
  }

  void Save(dmlc::Stream* stream) const {
    stream->Write(service_id);
    stream->Write(msg_seq);
    stream->Write(client_id);
    stream->Write(server_id);
    stream->Write(data);
    stream->Write(tensors);
64
    stream->Write(group_id);
65
66
67
68
69
70
71
72
  }

  static constexpr const char* _type_key = "rpc.RPCMessage";
  DGL_DECLARE_OBJECT_TYPE_INFO(RPCMessage, runtime::Object);
};

DGL_DEFINE_OBJECT_REF(RPCMessageRef, RPCMessage);

73
/** @brief RPC status flag */
74
75
76
77
78
enum RPCStatus {
  kRPCSuccess = 0,
  kRPCTimeOut,
};

79
80
}  // namespace rpc
}  // namespace dgl
81
82
83
84
85

namespace dmlc {
DMLC_DECLARE_TRAITS(has_saveload, dgl::rpc::RPCMessage, true);
}  // namespace dmlc

86
#endif  // DGL_RPC_RPC_MSG_H_