ActiveRecord::RecordNotUnique for git repository
I've installed Redmine and linked it to a git repository that's been running development for a very long time (heavy, active development for about a year). Upon trying to load the Repository tab for the project I get an error. Here's the relevant section of the log:
Started GET "/redmine/projects/<project_name>/repository" for 188.8.131.52 at 2013-03-25 16:22:29 -0600
Processing by RepositoriesController#show as HTML
Current user: admin (id=1)
Completed 500 Internal Server Error in 912ms
ActiveRecord::RecordNotUnique (Mysql2::Error: Duplicate entry '1-2a5b30caa8969dded7f57c9cda5f914ea88ea29f' for key 'changesets_repos_rev': INSERT INTO `changesets` (`comments`, `commit_date`, `committed_on`, `committer`, `repository_id`, `revision`, `scmid`, `user_id`) VALUES ('Merge branch \'autoupdate\' of <info_removed> into autoupdate', '2012-09-14 12:08:21', '2012-09-14 12:08:21', 'My Name <email@example.com>', 1, '2a5b30caa8969dded7f57c9cda5f914ea88ea29f', '2a5b30caa8969dded7f57c9cda5f914ea88ea29f', 4)):
app/models/repository/git.rb:211:in `block (2 levels) in save_revisions'
app/models/repository/git.rb:208:in `block in save_revisions'
#6 Updated by Toshi MARUYAMA over 8 years ago
- Priority changed from Normal to Low
Are these really the same hash values?
It is very rare case on Mercurial valid repository.
Redmine checks hash before inserting database.
So, "Not Unique" error does not happen on single process.
But, it happens on multi processe.
In this case, you can ignore it.
#7 Updated by Chris Routh about 8 years ago
I just ran into this issue. I fixed it by truncating the three 'changesets' tables in the redmine DB.
It can be caused by refreshing or making two requests to a new repository from redmine at once. The two requests run in parallel and cause each other to collide. Any attempt made after this occurs to access the repo fails as Redmine tries to insert everything anew rather than update the data in the database, causing more collisions.
Definately something that needs to be dealt with in the redmine code. I've learnt my lesson, but this could cause major issues with a busy redmine server.