2024-11-01 stan

引言

在初步分析并运行了viabtc的matchengine代码后,我发现代码中的部分实现与目前的技术发展不再兼容。尤其是在mysql连接和日志表管理方面,存在一些需要更新的地方。下面记录了我对matchengine的主要改进内容,包括mysql连接选项、操作日志表结构以及启动脚本的优化。


1. MySQL连接选项的修改

问题概述

matchenginemysql连接代码中使用了MYSQL_OPT_RECONNECT选项。由于MYSQL_OPT_RECONNECT已被废弃,直接使用该选项会导致运行不兼容性问题。为了解决该问题,需要更改连接代码,并手动实现重连逻辑以确保连接稳定性。

修改建议

  1. 移除过时选项: 删除MYSQL_OPT_RECONNECT选项的使用。
  2. 手动管理重连: 通过检查查询失败时的连接状态,来判断是否需要重新连接,并实现指数退避重试机制来优化连接的重建流程。

代码修改示例

utils/ut_mysql.c文件中,mysql_connect函数经过以下调整:

MYSQL *mysql_connect(mysql_cfg *cfg)
{
    MYSQL *conn = mysql_init(NULL);
    if (conn == NULL)
        return NULL;

    // ... 省略字符集设置和超时设置代码 ...

    // 移除废弃的重连选项,使用更现代的连接方法
    if (mysql_real_connect(conn, cfg->host, cfg->user, cfg->pass, cfg->name, cfg->port, NULL,
        CLIENT_MULTI_STATEMENTS | CLIENT_REMEMBER_OPTIONS) == NULL) {
        mysql_close(conn);
        return NULL;
    }

    // 手动管理重连逻辑,避免依赖已废弃的自动重连选项
    return conn;
}

说明

2. 操作日志表的结构修改

问题概述

matchengine系统之前使用按天创建的operlog日志表来记录操作日志,但这种设计在实际应用中并不必要,且会增加表管理的复杂性。因此,我将其简化为使用单一的operlog表记录所有操作日志。

修改方案