Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4230320
  • 博文数量: 447
  • 博客积分: 1241
  • 博客等级: 中尉
  • 技术积分: 5786
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-27 06:48
个人简介

读好书,交益友

文章分类

全部博文(447)

文章存档

2024年(1)

2023年(5)

2022年(29)

2021年(49)

2020年(16)

2019年(15)

2018年(23)

2017年(67)

2016年(42)

2015年(51)

2014年(57)

2013年(52)

2012年(35)

2011年(5)

分类: IT业界

2014-09-10 19:28:36

中秋前给用户升级了一次程序,中秋后回来发现邮件发不出去了。
因为程序不是我写的,流程也不熟悉,走了很多弯路。
因为用户在生产环境中,无法进行调试,只好通过代码分析,考虑程序员编程水平的时候到了,因为debug是下等程序员用的武器
我看了一下升级后的程序,几乎所有模块都做了修改。只好从源头开始,我们程序要把用户的数据同步到本地,发现数据没有同步过来。
同步程序肯定有问题,通过svn的比较,很快发现了问题,
String[] receivers=null;
     try {
      SendParam sp = new SendParam();
      contentId = entry.getKey();
      MailContent mc = entry.getValue();
      Map list = mailSendService.queryMailTarget(contentId);
      if(list!=null){
       receivers[0] = list.get("contactno").toString();
 receivers[0] 肯定为null,这里肯定不正确。
修改了这个bug,已经是晚上了,让用户继续发送数据,发现邮件还是发不出去。
同步程序调用webservice接口,然后由channelsend把邮件发出去。
同时看了一下webservice接口返回100,程序调用ok。
初步认定是channelsend有问题,因为channelsend 修改很多,经过一晚上和一个上午的排查,认为channelsend一切正常。
同时发现channelsend有个同步队列是生产者和消费者模式。生产者从数据库查到大量的数据,放入队列,但是在消费的时候,发现数据库中缺少收件人的信息,消费者又删除了这个数据。
因为这个数据由webservice负责填充,下午认定肯定是webservice程序出了问题。
经过反复的排查,因为webservice需要处理多次数据,webservice在插入数据时,出现了问题。
sqls[i] = "INSERT INTO "+tables[i]+"(ID,INVITATION_ID,EMAIL,NAME,SEX,TAG1,TAG2,targetid) VALUES(SEQ_CH_CUSTOMER.NEXTVAL,"+invitationId+",?,?,?,?,?,"+targetid+")";
values中的targetid应该放在 ?的前面。
修改了这个bug后,邮件可以正常发送。
通过这个升级发现这样几个问题。
1 产品的问题绝大多数是管理的问题,如果升级前测试充分的话,测试阶段就可以解决了。
2 还是产品管理的问题,节假日前匆忙升级,程序员忙于过节,代码质量难以保证,匆忙升级,容易出错。这个问题 joel on software说过,而且这样事情在启明星辰 sohu blog 网御星云上演过多次。
3 这个是研发管理的问题,出了错误就不要报告正常,这样容易让程序员产生错误的判断,这样的问题,自己写的单元测试不难发现。
阅读(1872) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~