Issue 1152: Database error while pushing
Status:  New
Owner: ----
Reported by gbouge...@gmail.com, Oct 18, 2011
I had a crash on my whole network (electric issue).
Since everything is back to normal, I cannot push to gerrit.

Do you have any tip to figure it out?
Thx

Gerrit 2.2.1

git push origin HEAD:refs/for/develop
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 940 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://gerrit.it.int/ota
 ! [remote rejected] HEAD -> refs/for/develop (database error)
error: failed to push some refs to 'ssh://gerrit.it.int/ota'


Gerrit error_log :
[2011-10-18 18:46:48,212] ERROR com.google.gerrit.server.git.ReceiveCommits : Error creating change for commit b9553977594702b3897d59f85661749012d06292
com.google.gwtorm.client.OrmException: insert failure on patch_set_ancestors
	at com.google.gwtorm.schema.sql.SqlDialect.convertError(SqlDialect.java:122)
	at com.google.gwtorm.jdbc.JdbcAccess.convertError(JdbcAccess.java:331)
	at com.google.gwtorm.jdbc.JdbcAccess.doInsert(JdbcAccess.java:178)
	at com.google.gwtorm.jdbc.JdbcAccess.doInsert(JdbcAccess.java:35)
	at com.google.gwtorm.client.impl.AbstractAccess.insert(AbstractAccess.java:56)
	at com.google.gerrit.server.git.ReceiveCommits.insertAncestors(ReceiveCommits.java:1972)
	at com.google.gerrit.server.git.ReceiveCommits.createChange(ReceiveCommits.java:1095)
	at com.google.gerrit.server.git.ReceiveCommits.createNewChanges(ReceiveCommits.java:1038)
	at com.google.gerrit.server.git.ReceiveCommits.onPreReceive(ReceiveCommits.java:367)
	at org.eclipse.jgit.transport.ReceivePack.executeCommands(ReceivePack.java:1027)
	at org.eclipse.jgit.transport.ReceivePack.service(ReceivePack.java:680)
	at org.eclipse.jgit.transport.ReceivePack.receive(ReceivePack.java:600)
	at com.google.gerrit.sshd.commands.Receive.runImpl(Receive.java:90)
	at com.google.gerrit.sshd.AbstractGitCommand.service(AbstractGitCommand.java:103)
	at com.google.gerrit.sshd.AbstractGitCommand.access$000(AbstractGitCommand.java:34)
	at com.google.gerrit.sshd.AbstractGitCommand$1.run(AbstractGitCommand.java:69)
	at com.google.gerrit.sshd.BaseCommand$TaskThunk.run(BaseCommand.java:399)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
	at java.util.concurrent.FutureTask.run(FutureTask.java:166)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:165)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:266)
	at com.google.gerrit.server.git.WorkQueue$Task.run(WorkQueue.java:324)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
	at java.lang.Thread.run(Thread.java:636)
Caused by: java.sql.BatchUpdateException: Duplicate entry '7-1-1' for key 1
	at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:2007)
	at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1443)
	at com.google.gwtorm.jdbc.JdbcAccess.execute(JdbcAccess.java:293)
	at com.google.gwtorm.jdbc.JdbcAccess.doInsert(JdbcAccess.java:171)
	... 23 more
Oct 18, 2011
#1 gbouge...@gmail.com
I found that it will be fixed in 2.2.2.
The workaround is :
ALTER TABLE `reviewdb`.`change_id` AUTO_INCREMENT = 20000;
(if you already have less than 20000 changes in your gerrit)
Jul 5, 2012
#2 bkolenichev
This issue was observed on gerrit 2.4, caused by invalid formed e-mail address.
After fixing the e-mail, there are no problems.
Oct 9, 2012
#3 Joel.DuB...@gmail.com
This has happened to my team once in a while as well. This is our exception trace:

[2012-10-09 21:59:44,993] ERROR com.google.gerrit.server.git.ReceiveCommits : Error storing replacement patch for change 1069, commit 09ff73daab0dfb66b51ac9a30cca1aa969e4a8a4
com.google.gwtorm.server.OrmException: insert failure on change_messages
	at com.google.gwtorm.schema.sql.SqlDialect.convertError(SqlDialect.java:151)
	at com.google.gwtorm.jdbc.JdbcAccess.convertError(JdbcAccess.java:448)
	at com.google.gwtorm.jdbc.JdbcAccess.insert(JdbcAccess.java:160)
	at com.google.gerrit.server.git.ReceiveCommits.doReplace(ReceiveCommits.java:1403)
	at com.google.gerrit.server.git.ReceiveCommits.doReplaces(ReceiveCommits.java:1149)
	at com.google.gerrit.server.git.ReceiveCommits.processCommands(ReceiveCommits.java:436)
	at com.google.gerrit.server.git.AsyncReceiveCommits$Worker.run(AsyncReceiveCommits.java:90)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
	at com.google.gerrit.server.util.RequestScopePropagator$1.call(RequestScopePropagator.java:86)
	at com.google.gerrit.server.util.ThreadLocalRequestScopePropagator$1.call(ThreadLocalRequestScopePropagator.java:58)
	at com.google.gerrit.server.util.RequestScopePropagator$2.call(RequestScopePropagator.java:96)
	at com.google.gerrit.server.util.RequestScopePropagator$3.run(RequestScopePropagator.java:128)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
	at java.util.concurrent.FutureTask.run(FutureTask.java:166)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)
	at com.google.gerrit.server.git.WorkQueue$Task.run(WorkQueue.java:333)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
	at java.lang.Thread.run(Thread.java:722)
Caused by: java.sql.BatchUpdateException: Duplicate entry '1069-AAAAJn//+SM=' for key 'PRIMARY'
	at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:2007)
	at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1443)
	at com.google.gwtorm.schema.sql.SqlDialect.executeBatch(SqlDialect.java:370)
	at com.google.gwtorm.jdbc.JdbcAccess.execute(JdbcAccess.java:438)
	at com.google.gwtorm.jdbc.JdbcAccess.insertAsBatch(JdbcAccess.java:202)
	at com.google.gwtorm.jdbc.JdbcAccess.insert(JdbcAccess.java:155)
	... 18 more

Turns out it was because of case-insensitive charset! There was already a uuid:  AAAAJn//+sM=, so it was conflicting. 

CHARSET=latin1, what should I convert the table to using to prevent this?
Oct 9, 2012
#4 Joel.DuB...@gmail.com
Also, I'm using mysql. 
Oct 9, 2012
#5 Joel.DuB...@gmail.com
I think this fixes the change_messages table:

alter table change_messages modify uuid varchar(40) character set latin1 collate latin1_bin NOT NULL DEFAULT '';

Are there other tables that need this type of fix?