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

修复一个线上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

 

 

小结:

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

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    安卓热修复,android打补丁,不用发版本就能实时的解决一些线上版本的bug

    在Android开发中,"安卓热修复"是一种高效的技术,它允许开发者在不发布新版本的情况下,迅速修复线上应用存在的bug,提升用户体验。这种技术的核心思想是,在应用运行时动态替换或修复有问题的代码,实现对应用程序...

    《程序人生》记一次敖丙的线上P2事故1

    "《程序人生》记一次敖丙的线上P2事故1" knowledge points: 1. 程序 BUG 的处理:文章中提到 P2 级别的 BUG,是指系统中出现的严重错误,需要立即修复,以避免更大的损失。 2. 线上事故处理:文章中提到线上事故...

    JSPatch热修复一个Demo,简单快速解决上架后bug

    **JSPatch热修复技术详解** 在iOS应用开发过程中,我们常常遇到这样一个问题:...总结来说,JSPatch是一种有效的热修复工具,尤其适用于紧急修复线上bug。但使用时应结合实际情况权衡利弊,确保应用的安全性和稳定性。

    ext BUG修复补丁

    综上所述,这个“ext BUG修复补丁”可能是一个针对EXTJS框架的错误修复集合,包括了修改后的源代码文件和可能的辅助工具。开发者可以通过应用这些补丁到他们的项目中,解决已知的问题,提升应用的稳定性和性能。博客...

    WIN10LTSC2021一键修复输入法BUG.zip

    微软刚出了WIN10LTSC2021,但是输入法有个重大BUG,无选字框,并且此BUG会造成CPU占用极高,CPU温度过高,CPU散热风扇转速过快,噪音很大等。此工具可以修复此问题,且支持离线系统修复。注意,离线修复只能修复未...

    Delphi 12 控件之DevExpress VCL 23.2.6修复的BUG.txt

    DevExpress VCL 23.2.6修复的BUG.txt

    VC++6.0 win10(免安装,修复打开bug,MFC的dll的bug)

    **VC++6.0在Windows 10中的应用与修复** **一、VC++6.0简介** ...对于那些需要在Windows 10环境下使用VC++6.0的开发者来说,这个经过修复的版本是一个宝贵的资源,能够帮助他们顺利地进行开发工作。

    DllErrorsFix4.3破解版(Dll错误修复工具)

    DllErrorsFix4.3破解版(Dll错误修复工具)北方...北方星空 2012.1.6 DllErrorsFix 4.3 破解汉化版——Dll错误修复工具 部分杀软报毒,自行斟酌,我不想解释和回复此类回帖,网络软件,自行查毒,是否病毒,自行判断。

    activiti 5.22流程图连线名称不显示bug修复

    针对这个问题,解决方案是下载一个修复后的jar包来替换原有的文件。在提供的文件列表中,我们看到名为"activiti-5.22"的压缩包,这很可能包含了修复此问题的特定版本或补丁。用户只需解压这个文件,找到包含Activiti...

    食品饮料行业8月线上数据分析专题:大众品类回暖,线上增速修复.pdf

    1. **白酒**: 8月白酒线上销售额因疫情和淡季因素同降16.78%,销售量同降35.76%,但均价同增29.54%。茅台、五粮液、汾酒等品牌中,五粮液表现强劲,销售额同增66.12%,而茅台则同降47.81%。整体来看,白酒线上市场受...

    DevExpressVCL14.2.2补丁包〖修复BUG〗

    修复BUG: 1、cxGridWizard文件损坏造成编译报错; 2、cxPivotGridAdvancedCustomization的BUG; FindPanel - The % and _ wildcards work when the UseExtendedSyntax property is disabled 此BUG说明地址:...

    修复受损的PDF文档

    6. **安全无风险**:在修复过程中,Recovery Toolbox for PDF不会修改原始文件,而是将修复结果保存为新的PDF文件,避免了进一步损坏原有数据的风险。 使用Recovery Toolbox for PDF时,首先需要下载并安装软件,...

    GTASA 修复BUG的瓦良格

    《GTASA 修复BUG的瓦良格》是一个针对游戏《侠盗猎车手:圣安地列斯(Grand Theft Auto: San Andreas,简称GTASA)》的补丁或修改工具,其主要目的是解决游戏中出现的各种错误和问题,提高游戏体验。在游戏开发过程...

    国金证券:主要消费产业行业研究-线上线下全景看消费修复.pdf

    报告标题:“国金证券:主要消费产业行业研究-线上线下全景看消费修复” 这份报告由国金证券研究所发布,主要分析了中国主要消费产业在疫情后的线上线下消费修复情况。报告的作者包括分析师廖馨瑶和许孟婕,以及...

    线上教育商城小程序app模板.rar

    这个“线上教育商城小程序app模板”压缩包文件包含了一个现成的小程序源码,可以作为开发教育类小程序的基础。 首先,我们要了解小程序的基本概念。小程序是腾讯公司推出的一种全新的应用形态,它介于传统APP和网页...

    activiti5.22 流程设计器绘画的流程图条件线上的字不显示

    这可能涉及到检查相关的日志文件,寻找任何可能的错误消息,或者直接查看源代码来找出可能的bug。一旦确定了问题的根源,就可以采取相应的措施。在这个案例中,用户提供了直接的解决方案,即更新jar包。这可能是因为...

    打印机共享0x00000709错误修复.zip

    然而,有时用户在尝试共享打印机时可能会遇到0x00000709错误,这是一种与通信失败相关的错误代码,通常表明系统无法建立到目标设备的有效连接。此外,还可能遇到0x00000040错误,这同样是表示网络通信出现问题的代码...

    disconfig_2.6.36修复bug

    2.6.36内核版本的更新可能涉及了数百甚至数千个bug修复。这些修复可能包括对硬件支持的改进、安全漏洞的修补、内存管理效率的提升,或者是对特定操作系统的兼容性增强。例如,如果一个bug影响到特定的文件系统,...

    修复chunk传输bug的ghttp

    然而,任何软件都可能存在bug,"修复chunk传输bug的ghttp"这个标题暗示了ghttp在处理chunked编码的HTTP传输时存在一个问题,这直接影响到数据的正确传输。 Chunked编码是HTTP协议中一种传输数据的方式,主要用于...

    修复更新补丁后的组策略BUG-右键管理员运行.cmd

    修复更新补丁后的组策略BUG-右键管理员运行,部分diy系统镜像精简后可能出现的组策略bug修复命令

Global site tag (gtag.js) - Google Analytics