Great just isn't good enough
项目:https://github.com/datafuselabs/datafuse 新一代开源云原生数仓,使用上完全兼容 MySQL,ClikcHouse 。欢迎大家 Star | Fork | Watch.
上周 Datafuse 项目有一个测试脚本的 issue: https://github.com/datafuselabs/datafuse/issues/1676 其中涉及到的脚本 datafuse-test 是从 clickhouse repo 中借来的。
issue 作者提到的报错:
Starting datafuse-test
Traceback (most recent call last):
File "/Users/kous/myProjects/rustproject/datafuse/tests/./datafuse-test", line 481, in <module>
main(args)
File "/Users/kous/myProjects/rustproject/datafuse/tests/./datafuse-test", line 345, in main
for suite in sorted(os.listdir(base_dir), key=sute_key_func):
TypeError: '<' not supported between instances of 'tuple' and 'int'
make: *** [stateless-test] Error 1
这个报错很难复现,我把各个的环境升级到作者的环境一样,各种测试也没复现。后来还是重看代码,发现是key_func 函数中因为测试脚本不符合规则,引起返回出错代码造成的。
第一种方案:程序员给的修复方案
def sute_key_func(item):
if -1 == item.find('_'):
return 99998
prefix, suffix = item.split('_', 1)
try:
return int(prefix), suffix
except ValueError:
return 99997
These two return value must be all tuple: (int, string). 99997 is only an int, which causes this issue.
return (99997, "") should fix this issue
第二种方案:运维人员给的方案
我看到这个 issue 我也是首先想着在个人的环境复现一下,但各种运行也没看复现,最后看这个代码,也就是文件名中如果没有 “_" 这个附号,就会 return 一个整数。于是我给在测试目录,随意创建了一个 SQL 文件,复现了 issue 报错。再一看这个脚本的 Readme 要求,随便创建一个名字明显不附合规范呀。如果命名格式按着规范来是不会遇到报错的。
https://github.com/datafuselabs/datafuse/blob/master/tests/suites/0_stateless/README.md
于是我给的修复提示:May be your test file was named in the wrong format, so it went to an error logic.
Please revise your file naming format. refer to: cat suites/0_stateless/README.md
Test Name xx_yyyy_[test_name]
到此作者把 issue 关掉了。
datafuse-test 这个脚本现在支持不按规则的命名: https://github.com/datafuselabs/datafuse/pull/1684/commits/782f67205fe6907510ac24d7a3bd00877b88450c
待优化: main 函数中引入文件名校验函数,对于不符合规则的命名,直接退出,不是在执行中报错。
从这个 issue 修复中可以看到两个思路:
更加详细的描述,可以参考:https://github.com/datafuselabs/datafuse/issues/1676
对于这个问题的修复我找 Sunndy 交流一下,是不是应该做修复。 我的观点: 保持报错,可以考虑把提示做的更友好一点。而不是报一个python内部的报错。可以换成 print 打印出来报错提示,然后就 exit ,不用 return 。Sunndy 观点:程序应该是健状的。这个程序设计上不合理。主要有两个原因:
哈,忽然感觉运维人员的思维和开发人员,想的还是不太一样。从运维的人员思维就是遇到不能处理的,就报错停下来就行;开发人员可能追求的更加完美。你对这个问题修复是什么建议,如果有兴趣了,也可以留言中交流一下。
测试脚本 datafuse-test :https://github.com/datafuselabs/datafuse/blob/master/tests/datafuse-test 这个脚本还可以完善,如果你兴趣,可以在来帮我们完善一下。
本文分享自 MySQLBeginner 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!