2024-11-01 stan
在初步分析并运行了viabtc的matchengine代码后,我发现代码中的部分实现与目前的技术发展不再兼容。尤其是在mysql连接和日志表管理方面,存在一些需要更新的地方。下面记录了我对matchengine的主要改进内容,包括mysql连接选项、操作日志表结构以及启动脚本的优化。
matchengine的mysql连接代码中使用了MYSQL_OPT_RECONNECT选项。由于MYSQL_OPT_RECONNECT已被废弃,直接使用该选项会导致运行不兼容性问题。为了解决该问题,需要更改连接代码,并手动实现重连逻辑以确保连接稳定性。
MYSQL_OPT_RECONNECT选项的使用。在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;
}
CLIENT_REMEMBER_OPTIONS标志,将连接配置保存下来,以便在手动重连时能够保持一致。mysql_connect完成重连。matchengine系统之前使用按天创建的operlog日志表来记录操作日志,但这种设计在实际应用中并不必要,且会增加表管理的复杂性。因此,我将其简化为使用单一的operlog表记录所有操作日志。