ilogtail
ilogtail copied to clipboard
fix: read wrong disk buffer cause high memory
核心问题是这一段
SenderQueueItem是被DiskBuffer从发送队列clone保存的,但其中的flusher是一个指针。当force stop DiskBuffer的时候,flusher可能已经被释放了,但C++访问一个被释放的类的属性是未定义的,通常是可以获取的。但也没办法判断flusher是否已释放,所以只能在读取时拦截。
修复方案
问题一:超大,导致内存暴涨
通过protobuf流式读取。当size超大时,预读取前16KB,判断其中的元信息的几个字段是否超长,排除数据本身超大导致的错判。
问题二:aliuid长度合法,但内容错误
aliuid一定为纯数字组成。校验其每位是否为数字。
请确保flusher指针有效,请修复写入时的问题
我也是担心这种处理并不解决根本问题,比如可能修复了80%的可能,但是仍然不是最优方案