这个错误信息在RDS上第一次碰到,隐隐感到这是一个“可遇不可求”的bug导致,开始捉虫。
每个表(索引)文件被打开后,TokuDB都会为这个文件赋予一个唯一id,即filenum。
filenum在什么时候被分配? 表(索引)文件被打开的时候会被分配。
filenum如何分配? 为了保证唯一性,TokuDB维护了一个filenum数据结构(类似binary tree) : m_active_filenum,分配算法:
当一些表(索引)文件被close后,这些filenum可以被回收再利用,所以当filenum递增到UINT_MAX后,重置到0即可:
RDS版本已修复此问题,官方patch戳。