![]() | 2 bjshdq OP 可是为什么我的头像又没了~~~ |
![]() | 3 Danny 2011-12-19 12:02:14 +08:00 头像一样? |
![]() | 4 Livid MOD PRO |
![]() | 5 bjshdq OP 为什么我又变成 bjshdq 了。 啊啊~~ |
![]() | 7 bjshdq OP 又变回来了~~ |
![]() | 10 Livid MOD PRO 这简直可以启发我去写一部科幻电影的脚本了。 在一个类似 Matrix 的世界里,由于程序上的一个错误,两个不同的人具有了同一个 ID,然后…… |
![]() | 12 bjshdq OP |
![]() | 13 c 2011-12-19 12:08:29 +08:00 这样也蛮好啊。。 |
![]() | 15 Livid MOD PRO |
![]() | 16 JTR 2011-12-19 12:50:40 +08:00 我就是你 sounds cool |
![]() | 17 badec 2011-12-19 13:01:25 +08:00 笑点低,看到这个我笑了 |
![]() | 21 Los 2011-12-19 14:11:42 +08:00 @Livid 为什么不直接说明是 PB2 的代码问题呢?这个跟 GAE 的 datastore 问题不大吧?好吧,我曾经看过 PB2 的代码。。。 |
![]() | 23 Los 2011-12-19 14:37:53 +08:00 @willerce 主要的问题在于以下这段代码,自生成ID,但自生成 id 时却没有任何的安全机制,比如用事务保证自生成 id 的唯一性 https://github.com/livid/v2ex/blob/master/main.py#L520 member = Member() q = db.GqlQuery('SELECT * FROM Counter WHERE name = :1', 'member.max') if (q.count() == 1): counter = q[0] counter.value = counter.value + 1 else: counter = Counter() counter.name = 'member.max' counter.value = 1 q2 = db.GqlQuery('SELECT * FROM Counter WHERE name = :1', 'member.total') if (q2.count() == 1): counter2 = q2[0] counter2.value = counter2.value + 1 else: counter2 = Counter() counter2.name = 'member.total' counter2.value = 1 member.num = counter.value |
![]() | 24 Los 2011-12-19 14:38:33 +08:00 |
![]() | 25 soulhacker 2011-12-19 14:51:51 +08:00 @Livid will be a epic story! |