`
san_yun
  • 浏览: 2663759 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

修复一个线上1万6千次错误的bug

 
阅读更多

16.1k mblog.views.getMBlogListByTag

 

MultipleObjectsReturned: get() returned more than one Message -- it returned 2! Lookup parameters were {'photo__id': 2077439L, 'category__in': [1, 9]}

 

这个方法在线上出现16.1k错误,今天终于把这个bug修复了,记录一下处理过程。错误信息显示:

get() returned more than one Message -- it returned 3! Lookup parameters were { 'photo__id': 3288L, 'category__in': [1, 9]}
 

这个错误的意思是说系统认为 category是1,9, photo_id3288的数据 应该是唯一的,但数据库出现了多条记录。数据库查询了一下 select  count(photo_id) from message  group photo_id having count(photo_id) >1 and category in (1,9),发现了1000多条记录。不知道什么原因产生了这种脏数据。现在也无法分析原因了,只能想解决办法。

 

处理过程:

通过代码搜索发现原来这message的getRoot()方法:

  def get_root(self):
        try:
            self.photo
        except:
            return

        key = "photo:root:%s:" % self.photo.id
        root = cache.get(key)
        if root is None:
            try:
                root = self.category in [1, 9] and \
                    self or Message.objects.get(photo__id=self.photo_id, category__in=[1, 9], status__in=[0, 6])[0]
            except Message.DoesNotExist:
                pass
            if root:
                cache.set(key, root, 3600 * 2)

        return root and root.status != 5 and root or None

 里面的get其实存在大于1这种情况的。修改为:

 

   if root is None:
            try:
                root = self.category in [1, 9] and \
                    self or Message.objects.filter(photo__id=self.photo_id, category__in=[1, 9], status__in=[0, 6])[0]
            except Message.DoesNotExist:
                pass
            except IndexError:
                pass

 

 

小结:

    对于这种业务上的唯一性,一定要通过数据库保证唯一性约束

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Spark . 无缝升级到 . 在唯品会的实践.docx

    Spark 3.0.1 是一次重要的版本更新,其中包含了大量的新特性、性能改进以及 Bug 修复。尤其值得关注的是: 1. **Spark SQL 的改进**:46% 的 Issue 集中在 Spark SQL 上,这反映了社区对该组件的关注度非常高。这些...

    网站开发设计流程图-好资料免费分享

    网站上线后,维护工作将持续进行,包括修复线上问题、添加新功能、更新内容以及根据用户反馈进行优化。 以上流程可能因项目规模、团队结构和开发方法的不同而有所变化,但其核心步骤是通用的。在实际操作中,敏捷...

    大规模检索系统的DevOps实践.pptx

    2. 优化bug修复:修改主干代码即可修复多个地方的问题,便于比较不同实验的影响。 3. 强化需求管理和质量控制:包括代码提交准入、构建系统、灰度发布、静态代码检查等。 4. 需求全流程管理:规范化需求提出、评审、...

    (完整版)小程序百问百答话术.docx

    - 三年是一个基本的运营周期,有利于长期发展和收益增长。 - 对于合作商而言,短期内难以实现平台的快速发展,需要时间积累用户和经验。 - 对于合作方而言,更长的合作周期有助于获取更多后期分红收益。 #### 4....

    基于Spark的大数据即席检索与分析.pptx

    对开源Spark进行大量bug修复,优化性能和响应时间。 - **分布式索引**:在HDFS之上构建分布式索引,这是技术的关键,经过阿里Mdrill和腾讯Hermes的验证,支撑超大规模数据库。 - **全栈数据库设计**:同一份数据,...

    《超级农夫 - Super Farmer》手机游戏策划文档by董鹏_2006_7_27.pdf

    - 发布体验版,仅含一个关卡,后续关卡通过付费下载方式解锁,增加收入来源。 ### 预计开发进度 - **前期准备**:关卡设计和美工工作预计耗时15天。 - **同步开发**:程序员和美工的同步工作预计需10天。 - **...

    工作周报(运营)(1).docx

    - **内容**:可以包括新功能上线、bug修复、用户反馈处理等。 - **意义**: - 反映产品团队的工作效率和技术能力。 - 帮助管理者了解产品开发进度,以便于做出更合理的决策。 #### 3. **活动运营** - **定义**:...

Global site tag (gtag.js) - Google Analytics