type
status
date
slug
summary
tags
category
icon
password
一、问题描述
[iOS] [Platform] User is getting "The system is busy please try again later" error message when using Portfolio
用户反馈使用iOS时,打开portfolio时会报 system busy
system busy图片
二、问题分析过程
1、定位用户身份,根据用户邮箱定位到用户uid
用户邮箱为 ***@gmail.com
db.users.find({"email": "***@gmail.com"})
2、查询用户的portfolio情况,确认下portfolio状态
db.getCollection("portfolios_multi").find({"userId":ObjectId("642d7fb8c8684649c49978c4")})
当时查询了发现用户仅有一个portfolio 且 isMain字段为False
pic
3、根据portfolio状态反推什么情况下才能造成这个情况
3.1 梳理历史改动,找出可能造成这个情况的接口逻辑
3.2 根据接口逻辑尝试复现
正常情况下用户一定会存在一个main portfolio的情况,现在用户没有main portfolio,梳理了下 发现仅有update接口会讲portfolio更新为非main,那最有可能的操作就是在更新时,所以尝试频繁做切换portfolio和更新操作,果不其然 在快速修改main portfolio和修改portfolio name时复现了问题
图片
4、 复现后分析问题原因
经过多次的测试及分析,发现服务请求存在一个后发先至情况
即前一个请求是置portfolio的isMain字段为fasle,后一个请求置为True,但是后一个请求先被服务端处理了,portfolio 先被置为True,然后前一个请求此时才被服务端处理,portfolio就被置为了false,导致了上述的情况
截图
5、思考修复方案
修复方案为当用户无main portfolio时,app请求default时,服务端做兜底返回,返回用户创建的第一个portfolio
6、修复方案测试验证并上线
验证case
1、当用户仅有一个非main portfolio时,首次启动app
2、当用户拥有多个非main portfolio时,首次请求app
回归case
1、当用户main portfolio=manual时,首次启动app
2、当用户main portfolio=wallet时,首次启动app
验证通过后进行服务端上线
三、问题复盘
- 测试app时需要多关注app的请求,但其实在测试app中已经发现flutter请求中存在过多请求,在当时并未引起重视也并未考虑到并发请求会对服务端造成影响。
- 后续改进:1、关注app的请求 2、考虑并发请求对服务端造成的影响,建议服务端对并发写加锁
- 测试设计时多考虑极端情况,如用户是否存在没有main portfolio情况以及一些极端场景