Bug #24633
Duplicate puppet classes are created when publishing content views in parallel
Description
Description of problem:
Puppet class is created multiple times when content views with the same class
are published in parallel.
Steps to Reproduce:
1. On a clean instance, prepare 2 content views with the same puppet class:
hammer --output csv organization create --name clash_a hammer --output csv organization create --name clash_b hammer --output csv product create --description description --label clash_product_a_label --name clash_product_a --organization-id 3 hammer --output csv product create --description description --label clash_product_b_label --name clash_product_b --organization-id 4 hammer --output csv repository create --content-type puppet --name puppet_clash_repo_a --product-id 245 --publish-via-http true --url="http://puppetmodules.example.com/bagoftricks" hammer --output csv repository create --content-type puppet --name puppet_clash_repo_b --product-id 246 --publish-via-http true --url="http://puppetmodules.example.com/bagoftricks" hammer --output csv repository synchronize --id 10 hammer --output csv repository synchronize --id 11 hammer --output csv content-view create --name clash_cv_a --organization-id 3 hammer --output csv content-view create --name clash_cv_b --organization-id 4 hammer --output csv content-view puppet-module add --author robottelo --name generic_1 --content-view-id 5 hammer --output csv content-view puppet-module add --author robottelo --name generic_1 --content-view-id 6
2. publish content views in parallel, I used hammer from 2 different terminals
3. go to Configure -> Puppet Classes, you should see duplicate entries, each in different environment
Actual results
Publishing in parallel bypasses the Rails validations and creates duplicates. Puppet classes with the same name break 'hammer puppet-class info --name' command.
Expected results:
No duplicates should exist.
Related issues
Associated revisions
History
#1
Updated by Ondřej Pražák over 1 year ago
- Category changed from Puppet to Content Views
- Subject changed from Duplicate puppet classes are created when publishing content views in parallel to Duplicate puppet classes are created when publishing content views in parallel
- File puppetclasses_actual.png added
- File puppetclasses_expected.png added
#2
Updated by Ondřej Pražák over 1 year ago
- File deleted (
puppetclasses_expected.png)
#3
Updated by Ondřej Pražák over 1 year ago
- File deleted (
puppetclasses_actual.png)
#4
Updated by Ondřej Pražák over 1 year ago
- File puppetclasses_expected.png puppetclasses_expected.png added
- File puppetclasses_actual.png puppetclasses_actual.png added
#5
Updated by Andrew Kofink over 1 year ago
- Category deleted (
Content Views) - Project changed from Katello to Foreman
Puppet classes need to be uniquely validated by name in the database. Rails validations won't handle this race condition.
This should be able to be reproduced by importing two environments at the same time.
#6
Updated by The Foreman Bot over 1 year ago
- Assignee set to Ondřej Pražák
- Status changed from New to Ready For Testing
- Pull request https://github.com/theforeman/foreman/pull/6019 added
#7
Updated by Ondřej Pražák over 1 year ago
- Related to Feature #24923: Add check for puppet class duplicates added
#8
Updated by Marek Hulán about 1 year ago
- Pull request https://github.com/theforeman/foreman_maintain/pull/212 added
#9
Updated by Marek Hulán about 1 year ago
- Fixed in Releases 1.20.0 added
#10
Updated by Ondřej Pražák about 1 year ago
- Status changed from Ready For Testing to Closed
Applied in changeset ed2b4d1d62ef99fb1aaea04c840d8aa66abbe8f2.
#11
Updated by Tomer Brisker about 1 year ago
- Category set to Puppet integration
Fixes #24633 - Add uniqueness to puppet class name (#6019)