程序犯了好些小错误,出事了,现在坐立不安

2015-02-13 20:59:36 +08:00
 kankana

有个feature是要求用户suspended 30天后,将此用户的所有数据给删掉. 30天内是可以恢复的。

我直接队列,将该任务延迟到一个月后。

现在才发现用户提前被删除了。

原来,延迟参数,我传递的是30*24*60, 实际上,时间单位是秒。。。

现在用户要恢复,结果数据全没了。。。

很对不起老板。。。搞砸了。。。


lessons learned:

1, 加强测试。

2, 定时备份数据库。

7082 次点击
所在节点    程序员
55 条回复
sumhat
2015-02-13 21:03:23 +08:00
其实标记成已删即可,不用真的删掉的
weisoo
2015-02-13 21:08:20 +08:00
楼上正解,我们老板不会看数据库,老板要求删除东西,我都是打个标记,不是真的删除
chinafeng
2015-02-13 21:08:31 +08:00
老板没有怪你或者做出相应的处罚措施?

人无完人,谁能保证不出Bug,谁敢说自己程序Perfect

尽到自己能力做到最好即可
lsmgeb89
2015-02-13 21:10:56 +08:00
单位是秒,相当悲剧。。。
blacktulip
2015-02-13 21:15:01 +08:00
if suspended_time < 1.month.ago
shiny
2015-02-13 21:16:01 +08:00
没有单元测试?
kankana
2015-02-13 21:17:00 +08:00
@chinafeng

每当我犯错了,我向他表达我的歉意。他总是这样回复我

I knew there would be a few hiccups to work through - these are just bumps in the road and we'l get them resolved - its all good.

像你所说,人无完人。不过,我还是感觉很不好意思。 发个帖子吐口气。
kankana
2015-02-13 21:18:05 +08:00
@shiny

队列是外部的库,我直接mock了,判断有接到相关参数就没了。。。。。。。。
roychan
2015-02-13 21:18:28 +08:00
加油,马上就要过年了
br00k
2015-02-13 21:19:16 +08:00
多测试吧。做这种我一般都会改系统时间来测试。
Dongdong36
2015-02-13 21:37:03 +08:00
添加标记删除是个好办法。尽量不要直接进行数据删除操作
Vedar
2015-02-13 21:40:09 +08:00
一般不是都是设置失效位 或者将记录移到历史表么。。。
kankana
2015-02-13 21:43:46 +08:00
@Dongdong36

你们说的标记删除,应该就是soft delete吧。

suspend的实现就是soft delete.

只是,有些敏感数据,是属于我们的,不希望用户退款后,能够再利用到这些数据.

所以就有了这个30天的决策
lincanbin
2015-02-13 21:45:39 +08:00
添加个删除时间的时间戳标记,默认为4294967296。
定时任务运行个脚本,先检测硬盘剩余,剩余不足10%了,再把到了永久删除时间的数据删除。
ETiV
2015-02-13 21:49:39 +08:00
只是,有些敏感数据,是属于我们的,不希望用户退款后,能够再利用到这些数据.

那也别删, 移动到别的表里, 然后再删用户用到的那个表~
abelyao
2015-02-13 21:54:54 +08:00
正式运行的项目,99% 的情况都不能物理删,这个不是什么退款不退款、敏感不敏感到问题
hst001
2015-02-13 21:55:54 +08:00
数据库里面的数据,无论出于什么需求,都是不会真正删除的
gamexg
2015-02-13 21:56:19 +08:00
>>我直接队列,将该任务延迟到一个月后。

仔细检查下逻辑,别用户30天内恢复了,队列里面还有,到时候数据又空了...
Dongdong36
2015-02-13 21:59:09 +08:00
标记删除应该是比如一个用户,他的一个字段表示他的状态,0 - 正常,1 - 封禁,2 - 删除
在程序处理时根据这个字段的状态判断这个用户是否存在,如果标记为2,则表示用户已经被删除,不提供给前端数据,但是数据库中是存在的,如果信息比较多,实在磁盘空间没有了,那么用脚本跑一遍,删除即可,这样出错的概率还是蛮小的
kankana
2015-02-13 22:38:48 +08:00
我没接触过复杂的项目. 所以,非常感谢各位的经验和建议.

当前方案:

1, 删除时, 再加了一条验证是否超过30天. 之前就是验证状态是否suspended

2, 只删除属于我们的数据.用户的其他数据保留.

接下来, 我会再研究下,最好做到不删除数据. 因为需要与其他平台的一些协作, 一时半会也搞不定.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/170815

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX