librelist archives

« back to archive

近期解决的一系列相关bug的总结

近期解决的一系列相关bug的总结

From:
Tang Daogang
Date:
2012-06-14 @ 09:32
关于这个bug,我们找得有点辛苦。从最开始讲起。

1. 西哥在做一个分析工具的时候,发现,lglib中的setProto有问题,会造成函数嵌套层数过多,当进程持续运行一段时间后,会产生stack
overflow的错误,导致进程崩溃。即使没崩溃,系统也会越来越慢。好了,当天解决了这个问题的;
2. 柯南在更新了lglib后,发现,以前的代码用不起来了,提示找不到sortBy这个函数。很明显,前面那个不是QuerySet了,只是一个list。

于是,客户服务器上的lglib不敢更新。所以,昨天出现了网站越来越慢(最后导致崩溃)的问题(不是CDN同步频率提高的话,现象还不会那么明显)。


好了,今天的结论指出,在发现这个问题之前,lglib中有两个bug。这两个bug合在一起,反而表面上能给出正确的结果(隐含深沉的性能问题),正所谓负负得正。改了一个后,反而表现为不对了。


于是去分析setProto的设计,这个有点困难的。最后发现没问题。QuerySet的定义也没有问题。最后是发现List.slice函数,不管是传入List,还是QuerySet,切出来都是List。问题就在这里。找到问题,修改很容易,先把将要做slice的对象的元表取出来,再赋给新的空table做元表。

初步测试,应该是解决问题了。还在等待检阅。


PS: QuerySet的元表设计相当绕,轻易不要去碰吧。



-- 
Nothing is impossible.

Re: [bamboo] 近期解决的一系列相关b

From:
fengxq
Date:
2012-06-15 @ 01:10
bamboo应该积累更多的测试用例,每次修改之后,都把这些测试用例跑一遍,对于 
不能通过的测试,分析原因并修改,
这样才能够在修改之后少出问题

On 06/14/2012 05:32 PM, Tang Daogang wrote:
> 关于这个bug,我们找得有点辛苦。从最开始讲起。
> 1. 西哥在做一个分析工具的时候,发现,lglib中的setProto有问题,会造成函 
> 数嵌套层数过多,当进程持续运行一段时间后,会产生stack overflow的错误, 
> 导致进程崩溃。即使没崩溃,系统也会越来越慢。好了,当天解决了这个问题的;
> 2. 柯南在更新了lglib后,发现,以前的代码用不起来了,提示找不到sortBy这 
> 个函数。很明显,前面那个不是QuerySet了,只是一个list。
> 于是,客户服务器上的lglib不敢更新。所以,昨天出现了网站越来越慢(最后 
> 导致崩溃)的问题(不是CDN同步频率提高的话,现 象还不会那么明显)。
> 好了,今天的结论指出,在发现这个问题之前,lglib中有两个bug。这两个bug 
> 合在一起,反而表面上能给出正确的结果(隐含 深沉的性能问题),正所谓负 
> 负得正。改了一个后,反而表现为不对了。
> 于是去分析setProto的设计,这个有点困难的。最后发现没问题。QuerySet的定 
> 义也没有问题。最后是发现 List.slice函数,不管是传入List,还是 
> QuerySet,切出来都是List。问题就在这里。找到问题,修改很容易,先把 将 
> 要做slice的对象的元表取出来,再赋给新的空table做元表。
> 初步测试,应该是解决问题了。还在等待检阅。
> PS: QuerySet的元表设计相当绕,轻易不要去碰吧。
>
>
> -- 
> Nothing is impossible.
>

Re: Re: [bamboo] 近期解决的一系列相关b

From:
道哥
Date:
2012-06-15 @ 03:37
是的。


--
Nothing is impossible.




在 2012-06-15 09:10:01,fengxq <fengxq@legerobot.com> 写道:
>bamboo应该积累更多的测试用例,每次修改之后,都把这些测试用例跑一遍,对于 
>不能通过的测试,分析原因并修改,
>这样才能够在修改之后少出问题
>
>On 06/14/2012 05:32 PM, Tang Daogang wrote:
>> 关于这个bug,我们找得有点辛苦。从最开始讲起。
>> 1. 西哥在做一个分析工具的时候,发现,lglib中的setProto有问题,会造成函 
>> 数嵌套层数过多,当进程持续运行一段时间后,会产生stack overflow的错误, 
>> 导致进程崩溃。即使没崩溃,系统也会越来越慢。好了,当天解决了这个问题的;
>> 2. 柯南在更新了lglib后,发现,以前的代码用不起来了,提示找不到sortBy这 
>> 个函数。很明显,前面那个不是QuerySet了,只是一个list。
>> 于是,客户服务器上的lglib不敢更新。所以,昨天出现了网站越来越慢(最后 
>> 导致崩溃)的问题(不是CDN同步频率提高的话,现 象还不会那么明显)。
>> 好了,今天的结论指出,在发现这个问题之前,lglib中有两个bug。这两个bug 
>> 合在一起,反而表面上能给出正确的结果(隐含 深沉的性能问题),正所谓负 
>> 负得正。改了一个后,反而表现为不对了。
>> 于是去分析setProto的设计,这个有点困难的。最后发现没问题。QuerySet的定 
>> 义也没有问题。最后是发现 List.slice函数,不管是传入List,还是 
>> QuerySet,切出来都是List。问题就在这里。找到问题,修改很容易,先把 将 
>> 要做slice的对象的元表取出来,再赋给新的空table做元表。
>> 初步测试,应该是解决问题了。还在等待检阅。
>> PS: QuerySet的元表设计相当绕,轻易不要去碰吧。
>>
>>
>> -- 
>> Nothing is impossible.
>>
>