记录一次使用录像查bug

前言

skynet_fly_demo 项目被开着5千机器人跑了一晚上之后,我第二天查下一下有没有啥异常日志,结果发现有一个机器人邮件插入失败,是因为主键冲突,插入的邮件是全服邮件,因为使用的批量插入并没有触发断言,并不能第一时间发现调用来源。只有错误日志。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[:0000001a][20250123 05:30:33 84][error][orm_table_m][...fly/lualib/skynet-fly/db/ormadapter/ormadapter_mysql.lua:591]"_insert err " "email" {
["errno"] = 1062,
["sqlstate"] = "23000",
["badresult"] = true,
["err"] = "Duplicate entry '1999900010000001-1581044515209216' for key 'email.PRIMARY'",
}
{
[1] = {
["from_id"] = 0,
["del_flag"] = 0,
["content"] = "欢迎来到中国象棋!!!!!!!!!!!!!!",
["create_time"] = 1737581433,
["guid"] = 1581044515209216,
["item_flag"] = 0,
["item_list"] = {
[1] = {
["id"] = 10000002,
["count"] = 100,
}
}
["read_flag"] = 0,
["title"] = "欢迎来到中国象棋",
["email_type"] = 1,
["player_id"] = 1999900010000001,
["vaild_time"] = 0,
}
}

[:0000003a][20250123 05:30:33 84][error][room_game_hall_m][./hall/email/email_logic.lua:122]change_global_email add email err guid[1581044515209216]

因为插入全服邮件的触发点有两个地方,一个是用户登录时候的检查,一个是全服邮件同步时的差异处理。有2个位置,这时候并不能立马想到是哪里出的问题,不过通过观察时间,5.30正是room_hall_room触发自动热更滚服的时候,我猜想大概率是全服邮件同步的逻辑导致的,因为同步后会对比之前的邮件,因为是刚刚启动服务,之前的全服邮件列表是空的,这时候认定同步过来的全服邮件全部是新的,就给在线的玩家全部添加了一遍,可能刚好这个机器人的号已经从旧服切换过来了,就只给它调用了插入。虽然发现了问题,但是我还是想用一下录像。我在触发全服邮件同步的逻辑中加上了日志之后启动录像。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
run hallserver load_mods_1.lua 0 ../../records/hallserver_1/room_game_hall_m-2-4-20250123-053030.record
make ./make/hallserver_config.lua
read strseed -1464976427 from recordfile ../../records/hallserver_1/room_game_hall_m-2-4-20250123-053030.record
[:00000000][20250123 05:30:32 33]Version:1.2.0
[:00000000][20250123 05:30:32 33]start play record >>> ../../records/hallserver_1/room_game_hall_m-2-4-20250123-053030.record
[:00000000][20250123 05:30:32 33]skynet_record_parse_open starttime[1737542297] currenttime[3913511] strseed[-1464976427]

[:0000003a][20250123 05:30:32 33]LAUNCH snlua hot_container room_game_hall_m 4 2025-01-23[05:30:30] 1737581430 2 1
[:0000003a][20250123 05:30:33 84][info][room_game_hall_m][./hall/email/email_logic.lua:114]"on_recv_global_emails >>>" {
[1] = 1999900010000001,
}
{
[1] = {
["title"] = "欢迎来到中国象棋",
["item_list"] = {
[1] = {
["id"] = 10000002,
["count"] = 100,
}
}
["content"] = "欢迎来到中国象棋!!!!!!!!!!!!!!",
["guid"] = 1581044515209216,
["vaild_time"] = 0,
}
}

[:0000003a][20250123 05:30:33 84][error][room_game_hall_m][./hall/email/email_logic.lua:127]change_global_email add email err guid[1581044515209216]
[:00000000][20250123 05:33:20 78]record speed of progress[1%] curindex[634915] total_len[63490533]
[:00000000][20250123 05:35:47 59]record speed of progress[2%] curindex[1269858] total_len[63490533]

果然和我的判断一致。不过使用过程中发现了一个不够便利的地方,我无法快速定位到我需要播放哪一个录像。
总共有2天的录像:

1
2
3
4
5
6
7
8
9
10
11
12
room_game_hall_m-1-1-20250122-183822.record
room_game_hall_m-1-2-20250122-183822.record
room_game_hall_m-1-3-20250122-183822.record
room_game_hall_m-1-4-20250122-183822.record
room_game_hall_m-1-5-20250122-183822.record
room_game_hall_m-1-6-20250122-183822.record
room_game_hall_m-2-1-20250123-053030.record
room_game_hall_m-2-2-20250123-053030.record
room_game_hall_m-2-3-20250123-053030.record
room_game_hall_m-2-4-20250123-053030.record
room_game_hall_m-2-5-20250123-053030.record
room_game_hall_m-2-6-20250123-053030.record

能快速确定的是日期20250123,至于1-6启动索引是哪个,没法快速确定,还需要借助服务地址0000003a来确定,因为文件名并没有写服务地址,我是逐个打开录像文件查看写在头部位置的服务地址来确定的0000003a。后续需要把服务地址也写到录像文件名中。


记录一次使用录像查bug
https://huahua132.github.io/2025/01/23/skynet_fly_ss/record/
作者
huahua132
发布于
2025年1月23日
许可协议