今天游戏批量更新时少数区服出现失败的情况,通过查看日志发现期间发生了mnesia coredump:
错误报告==== 2013-09-25 09:43:17 ===Mnesia(‘game_360_1030@127.0.0.1′): ** ERROR ** (core dumped to file: “******************************************
Mnesia 发生coredump之后会产生一个dump文件,使用mnesia_lib:vcore/1方法可以查看具体的报错:
错误是ets操作时出错:
{badarg, [{ets, safe_fixtable, [db_not_active_role_bag_p, true], []}
db_not_active_role_bag_p 这个表在我们的项目是用来保存非活跃玩家的背包数据,正常情况下是disc_only_copy表,在需要时则会临时修改为disc_copy表。这样的话,如果在这张表变化期间(disc_only_copy->disc_copy->disc_only_copy)进行备份或者checkpoint相关操作就有几率发生上述问题了(disc_copy或者ram_copy才有ets表作为内存缓冲),简单解决方案则是在进行表类型变化期间禁止掉备份相关操作。