GWT ORM OrmConcurrencyException:检测到并发修改 - 查找原因
GWT ORM OrmConcurrencyException: Concurrent modification detected - find the cause
在基于 GWT 的应用程序(特别是 Google Gerrit)中,我遇到异常(在执行 gerrit review
命令时):
com.google.gwtorm.server.OrmConcurrencyException: Concurrent modification detected
at com.google.gwtorm.jdbc.JdbcAccess.execute(JdbcAccess.java:449)
at com.google.gwtorm.jdbc.JdbcAccess.updateAsBatch(JdbcAccess.java:270)
at com.google.gwtorm.jdbc.JdbcAccess.update(JdbcAccess.java:223)
有没有办法确定具体是哪些数据导致了并发错误?
查看 GWT ORM 的源代码,我假设 UPDATE
准备好的语句与要更新的数据不匹配,因此没有更新任何内容。最后抛出OrmConcurrencyException
通知调用者
并行执行 gerrit review
时可能会发生这种情况。
例如,如 https://code.google.com/p/gerrit/issues/detail?id=3730&thanks=3730&ts=1450711628 所报告,更新两个不同标签的 --label
会导致此错误:
bash-3.2$ ssh robot@gerrit.foo.int gerrit review --label Verified=-1 \
--message '"Verified .. -1."' 2463,9 & \
ssh robot@gerrit.foo.int gerrit review --label Tested=+1 \
--message '"Tested .. +1."' 2463,9 &
[3] 29329
[4] 29330
bash-3.2$
bash-3.2$ error: Cannot post review
one or more reviews failed; review output above
[3] Done ssh robot@gerrit.foo.int gerrit review --label Verified=-1 --message '"Verified .. -1."' 2463,9
[4] Exit 1 ssh robot@gerrit.foo.int gerrit review --label Tested=+1 --message '"Tested .. +1."' 2463,9
再次重新触发其中一个命令应该就可以了(或修复报告的问题)。
在基于 GWT 的应用程序(特别是 Google Gerrit)中,我遇到异常(在执行 gerrit review
命令时):
com.google.gwtorm.server.OrmConcurrencyException: Concurrent modification detected
at com.google.gwtorm.jdbc.JdbcAccess.execute(JdbcAccess.java:449)
at com.google.gwtorm.jdbc.JdbcAccess.updateAsBatch(JdbcAccess.java:270)
at com.google.gwtorm.jdbc.JdbcAccess.update(JdbcAccess.java:223)
有没有办法确定具体是哪些数据导致了并发错误?
查看 GWT ORM 的源代码,我假设 UPDATE
准备好的语句与要更新的数据不匹配,因此没有更新任何内容。最后抛出OrmConcurrencyException
通知调用者
并行执行 gerrit review
时可能会发生这种情况。
例如,如 https://code.google.com/p/gerrit/issues/detail?id=3730&thanks=3730&ts=1450711628 所报告,更新两个不同标签的 --label
会导致此错误:
bash-3.2$ ssh robot@gerrit.foo.int gerrit review --label Verified=-1 \
--message '"Verified .. -1."' 2463,9 & \
ssh robot@gerrit.foo.int gerrit review --label Tested=+1 \
--message '"Tested .. +1."' 2463,9 &
[3] 29329
[4] 29330
bash-3.2$
bash-3.2$ error: Cannot post review
one or more reviews failed; review output above
[3] Done ssh robot@gerrit.foo.int gerrit review --label Verified=-1 --message '"Verified .. -1."' 2463,9
[4] Exit 1 ssh robot@gerrit.foo.int gerrit review --label Tested=+1 --message '"Tested .. +1."' 2463,9
再次重新触发其中一个命令应该就可以了(或修复报告的问题)。