MySQL 源码|30 - 执行的过程的抽象基类 BasicProcessor

MySQL 源码|30 - 执行的过程的抽象基类 BasicProcessor

源码位置:(版本 = MySQL 8.0.37)

抽象基类 BasicProcessorrouter/src/routing/src/processor.h 中被定义,具体逻辑如下:

// router/src/routing/src/processor.h
class BasicProcessor {
 public:
  enum class Result {
    Again,           // will invoke the process() of the top-most-processor
    RecvFromClient,  // wait for recv from client and invoke ...
    SendToClient,    // wait for send-to-client and invoke ...
    RecvFromServer,  // wait for recv from server and invoke ...
    RecvFromBoth,    // wait for recv from client and server and invoke ..
    SendToServer,    // wait for send-to-server and invoke ...
    SendableToServer,

    Suspend,  // wait for explicit resume
    Done,  // pop this processor and invoke the top-most-processor's process()

    Void,
  };

  BasicProcessor(MysqlRoutingClassicConnectionBase *conn) : conn_(conn) {}

  virtual ~BasicProcessor() = default;

  const MysqlRoutingClassicConnectionBase *connection() const { return conn_; }

  MysqlRoutingClassicConnectionBase *connection() { return conn_; }

  virtual stdx::expected<Result, std::error_code> process() = 0;

 private:
  MysqlRoutingClassicConnectionBase *conn_;
};

定义类公有的枚举类 Result,其中状态如下:

  • Again:将会调用 top-most-processorprocess() 函数(推测是启动期待队列中的进程)
  • RecvFromClient:等待从客户端消息后唤起
  • SendToClient:在发送到客户端后唤起
  • RecvFromServer:等待从服务端消息后唤起
  • RecvFromBoth:等待从客户端和服务端均收到消息后唤起
  • SendableToServer
  • Suspend:等待明确的 resume(推测是摘要)
  • Done:弹出当前进程,并调用 top-most-processorprocess() 函数(推测是启动期待队列中的进程)
  • Void

在构造时,接收一个 MysqlRoutingClassicConnectionBase 类型指针的连接对象作为参数,存储私有属性 conn_ 中,并提供了 connection 成员函数用于获取私有属性 conn_ 中的连接对象。

此外,还定义了一个纯虚函数 process(),它的返回值类型为 stdx::expected 类型的,当操作成功时返回 Result 枚举值,失败时返回 std::error_code 类型的错误码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值