离线数据上传线程:添加保护机制策略
prune_index_from_head 索引文件裁剪,删除第一个索引
/*
attention:
1.当只有1个数据和1个索引头时,数据上传失败,此时不应该删除索引头,故加入(0 == buf)的判断。此时(0 != buf)
2.(0 == buf)时,此时只有索引没有数据,一定要删除索引,否则会导致不采集数据。
3.如果文件删除失败,尝试保护
*/
if ((0 == file_len) && (0 == buf)) {
if (true == unlink(file)) {
goto end;
}
g_exist_unlink_file = true;
}
end:
if (ppath != NULL) {
rt_free(ppath);
ppath = NULL;
}
return iret;
遇到unlink删除文件失败,此时系统会卡死在离线线程当中,用户定义的线程处于挂起状态,原因就是离线线程未让出使用权!

添加保护,让出使用权
static void offline_manager_entry(void *parameter)
{
.....
while (1) {
...
if (true == g_exist_unlink_file ) {
g_exist_unlink_file = false;
/* bad data, sleep */
rt_thread_delay(RT_TICK_PER_SECOND);
}
}
}
本文探讨了离线数据上传线程中保护机制的重要性,特别是在文件删除失败导致线程卡死的情况。通过添加策略如prune_index_from_head裁剪索引文件,确保即使在数据上传失败时也能正确处理索引,避免系统卡死。同时,引入让出使用权的机制,防止用户定义的线程因离线线程未释放资源而挂起。
5326

被折叠的 条评论
为什么被折叠?



