免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6426 | 回复: 8

[FastDFS] 好像发现一个bug : my_fdfs_client使用时遇到一个错误,不知道有人遇到过没有 [复制链接]

论坛徽章:
0
发表于 2013-02-25 10:14 |显示全部楼层
本帖最后由 guguozhifeng 于 2013-02-25 11:52 编辑

(gdb) bt
#0  0x0000003ac6c6f261 in _IO_str_overflow_internal () from /lib64/libc.so.6
#1  0x0000003ac6c6e404 in _IO_default_xsputn_internal () from /lib64/libc.so.6
#2  0x0000003ac6c429f0 in vfprintf () from /lib64/libc.so.6
#3  0x0000003ac6c63cb9 in vsprintf () from /lib64/libc.so.6
#4  0x0000003ac6c4d698 in sprintf () from /lib64/libc.so.6
#5  0x00002aaaad0662e5 in doLogEx (pContext=0x2aaaad272800, tv=<value optimized out>, caption=0x2aaaad06e423 "ERROR",
    text=0x41258d30 "file: ../common/fdht_proto.c, line: 38, server: 192.168.32.162:11411, recv data fail, errno: 107, error info: Transport endpoint is not connected", text_len=145, bNeedSync=0 '\0') at ../common/logger.c:372
#6  0x00002aaaad066530 in doLog (pContext=0x2aaaad272800, caption=0x2aaaad06e423 "ERROR",
    text=0x41258d30 "file: ../common/fdht_proto.c, line: 38, server: 192.168.32.162:11411, recv data fail, errno: 107, error info: Transport endpoint is not connected", text_len=145, bNeedSync=0 '\0') at ../common/logger.c:417
#7  0x00002aaaad0669ae in logError (format=<value optimized out>) at ../common/logger.c:617
#8  0x00002aaaace53ea1 in fdht_recv_header (pServer=0x15745a8, in_bytes=0x4125968c) at ../common/fdht_proto.c:35
#9  0x00002aaaace576c5 in fdht_get_ex1 (pGroupArray=<value optimized out>, bKeepAlive=1 '\001', pKeyInfo=0x412599b0, expires=-1, ppValue=0x412599a8,
    value_len=0x412599a4, malloc_func=0x3ac6c74de0 <malloc>) at fdht_client.c:415
#10 0x00002aaaad274843 in my_fdfs_get_file_id (pContext=<value optimized out>, my_file_id=<value optimized out>, fdfs_file_id=0x41259b30 "\200\235%A",
    file_id_size=144) at my_fdfs_client.c:350
#11 0x00002aaaad2749d4 in my_fdfs_file_exist (pContext=0x41258a20, my_file_id=0x5b <Address 0x5b out of bounds>) at my_fdfs_client.c:612


我是将这个代码写入一个服务,在服务运行一段时间后就会重启一次,gdb调试后,发现my_fdfs_file_exist报错,而my_fdfs_file_exist 输入的参数是没有问题的,my_fdfs_file_exist 这个函数被调用了很多次,但是偶尔会报错。不知道怎么回事,有人遇到过没有,请教一下?

我跟踪了一下代码,发现fastdht 中logger.c 中doLogEx函数 中有一个sprintf执行出错。
我初步估计是LogContext中的pcurrent_buff 和 log_buff 处理有问题。


报错的地方的代码:
        if ((pContext->pcurrent_buff - pContext->log_buff) + text_len + 64 \
                        > LOG_BUFF_SIZE)
        {
                log_fsync(pContext, false);
        }

        if (pContext->time_precision == LOG_TIME_PRECISION_SECOND)
        {
                buff_len = sprintf(pContext->pcurrent_buff, \
                        "[%04d-%02d-%02d %02d:%02d:%02d] ", \
                        tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday, \
                        tm.tm_hour, tm.tm_min, tm.tm_sec);
        }
        else
        {
                buff_len = sprintf(pContext->pcurrent_buff, \
                        "[%04d-%02d-%02d %02d:%02d:%02d.%03d] ", \
                        tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday, \
                        tm.tm_hour, tm.tm_min, tm.tm_sec, time_fragment);
        }
会不会是因为多线程使用,没有加锁(判断缓冲区大小时和使用sprintf时),导致sprintf 使用时,缓冲区大小不够了。

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT运维版块每日发帖之星
日期:2016-08-11 06:20:00IT运维版块每日发帖之星
日期:2016-08-15 06:20:00
发表于 2013-02-25 13:11 |显示全部楼层
FastDHT和FastDFS的版本要匹配啊!

论坛徽章:
0
发表于 2013-02-25 14:19 |显示全部楼层
版本匹配?我现在用的FastDFS_v4.01和FastDHT_v1.21。当时都是最新版啊,而且我也没有看到哪里说什么版本和什么版本配合使用啊。
而且我觉得这个不像版本问题啊。

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT运维版块每日发帖之星
日期:2016-08-11 06:20:00IT运维版块每日发帖之星
日期:2016-08-15 06:20:00
发表于 2013-02-25 15:52 |显示全部楼层
FastDFS和FastDHT都升级到最新版本,然后试试

论坛徽章:
0
发表于 2013-02-27 10:38 |显示全部楼层
本帖最后由 guguozhifeng 于 2013-02-27 10:39 编辑

我觉得不是版本问题啊,因为要跑了一段时间以后才会出错(如果是版本问题,不会执行很多次才会出错 吧),而且这个错误( recv data fail, errno: 107, error info: Transport endpoint is not connected)是socket recv返回的,这个可能是网络问题,或者什么问题。而且我觉得出错应该可以接受,但是为什么后来错误处理会出现程序崩溃的事情呢,我觉得是后来的日志输出那里有问题,如果这个问题解决了,程序可以继续运行,对实际的应用没有影响,因为返回执行不成功可以重复执行。回复 4# happy_fish100


   

论坛徽章:
0
发表于 2014-01-22 18:09 |显示全部楼层
你的问题解决了没?我也遇到了这样类似的问题,真的需要两个版本都是最新的么?

论坛徽章:
0
发表于 2014-10-20 17:13 |显示全部楼层
本帖最后由 wufx007 于 2014-10-20 17:14 编辑

应该是多线程的情况下,你错误使用api的问题,我也遇到类似的堆栈。

论坛徽章:
0
发表于 2015-06-19 15:48 |显示全部楼层
遇到在客户端加载配置文件时候报这个错误。原因是配置文件中制定的客户端目录不存在

论坛徽章:
0
发表于 2016-01-28 12:21 |显示全部楼层
你这个问题我也遇到了,我出现这个问题的原因是在使用fdfs客户端时没有调用log_init()方法对log context进行全局初始化。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP