Bug #9225
Stored configs db hits integer limit
| Status: | Accepted | Start date: | 08/26/2011 | |
|---|---|---|---|---|
| Priority: | High | Due date: | ||
| Assignee: | - | % Done: | 0% |
|
| Category: | stored configuration | |||
| Target version: | 2.7.x | |||
| Affected Puppet version: | 2.6.9 | Branch: | ||
| Keywords: | bigint database schema | |||
| Votes: | 4 |
Description
It looks like the default schema for puppet’s stored configs (lib/puppet/rails/database/schema.rb) sets id columns as int(11) vs using bigint.
In my largest puppet environment, I noticed this:
Thu Aug 25 15:32:40 -0400 2011 Puppet (err): Mysql::Error: Duplicate entry ‘2147483647’ for key 1: INSERT INTO fact_values (created_at, updated_at, value, fact_name_id, host_id) VALUES(‘2011-08-25 15:32:40’, ‘2011-08-25 15:32:40’, ‘10.6.0.111’, 67, 1716)
2147483647=231 which is the 32bit integer limit.
Which resulted in these logs on all of my clients in that environment:
Aug 26 13:47:26 kickstart-001 puppet-agent[27506]: Could not retrieve catalog from remote server: Error 400 on SERVER: Mysql::Error: Duplicate entry ‘2147483647’ for key 1: INSERT INTO fact_values (created_at, updated_at, value, fact_name_id, host_id) VALUES(‘2011-08-26 13:47:26’, ‘2011-08-26 13:47:26’, ‘10.6.0.104’, 67, 1183)
Updating the database schema for stored configs to use bigint for the id fields vs int, will help auto increment avoid the issue.
I checked the code for 2.7 (since I am running 2.6.9) and it seems to be the same there as well, this could potentially affect the dashboard as well.
My immediate work around was to truncate fact_values and set AUTO_INCREMENT=1; But this only will band-aid it until it reaches that point again.
History
Updated by Jason Rojas 9 months ago
Damn formatting:
2147483647=2 ^ 31 which is the 32bit integer limit.
Updated by James Turnbull 9 months ago
- Status changed from Unreviewed to Needs Decision
- Assignee set to Nigel Kersten
Jason – any chance of a patch BTW?
Updated by Nigel Kersten 9 months ago
- Status changed from Needs Decision to Accepted
- Assignee deleted (
Nigel Kersten) - Priority changed from Normal to High
- Target version set to 2.7.x
Updated by Jason Rojas 9 months ago
James, I do not have a patch, from my readings, the closest I can find to patches are from google:
http://moeffju.net/blog/using-bigint-columns-in-rails-migrations
It looks like one other option would be to create a migration instead of modifying the schema.rb.
Updated by Steven Seed 3 months ago
I am having this problem currently in dashboard. It started a couple of days ago and now all of my client reports are failing with errors similar to this:
Importing report report-3524-4646.yaml at 2012-02-13 00:40 PST
Mysql::Error: Duplicate entry '2147483647' for key 'PRIMARY': INSERT INTO `resource_statuses` (`failed`, `resource_type`, `title`, `line`, `change_count`, `time`, `out_of_sync_count`, `evaluation_time`, `tags`, `report_id`, `file`, `skipped`, `status`) VALUES(0, 'Exec', 'line_absent_remove_orig_prelink_disable_exec-sheild', NULL, 0, '2012-02-13 08:39:58', 0, 0.066588, '--- \n- exec\n- line_absent_remove_orig_prelink_disable_exec-sheild\n- line\n- remove_orig_prelink_disable_exec-sheild\n- class\n- basebuild::config\n- basebuild\n- config\n- baseclass\n- node\n- default\n- nopopups\n', 14163833, NULL, 0, 'unchanged')
I tried to run the optimize on my database, but this doesn’t seem to have helped.
Updated by Jacob McCann about 1 month ago
This started occurring for me this morning. :(
Apr 5 08:24:28 puppetmaster puppet-master[30094]: Mysql::Error: Duplicate entry '2147483647' for key 1: INSERT INTO `fact_values` (`value`, `fact_name_id`, `host_id`, `updated_at`, `created_at`) VALUES ('Linux', 24, 219, '2012-04-05 08:24:28', '2012-04-05 08:24:28')
Apr 5 08:24:35 puppetmaster puppet-master[30094]: Mysql::Error: Duplicate entry '2147483647' for key 1: INSERT INTO `fact_values` (`value`, `fact_name_id`, `host_id`, `updated_at`, `created_at`) VALUES ('Linux', 24, 239, '2012-04-05 08:24:35', '2012-04-05 08:24:35')
Updated by Jacob McCann about 1 month ago
So I followed the advice of the bug creator to band-aid this. Here is what I did for others who are not mysql literate (not that I am):
use puppet; truncate table fact_values; alter table fact_values AUTO_INCREMENT=1;
The alter query to modify the AUTO_INCREMENT timed out for me though, however it seems the table did start back at 1. So basically not sure if the alter query is needed or not.
Thanks!