Repo sync error: Cannot create repository version. More than one rpm.package content with the duplicate values for name, epoch, version, release, arch, location_href

Problem: This started a couple of weeks ago with an nVidia repository (that’s worked well for a long time.) I provisioned a new product (new major version,) and it’s also occuring with the new repo.

Expected outcome: A successful repo sync

Foreman and Proxy versions:
foreman-3.16.0-1.el9.noarch
katello-4.18.0-1.el9.noarch

Foreman and Proxy plugin versions:
foreman-proxy-3.16.0-1.el9.noarch

Distribution and version:
RockyLinux 9.6

I’m rather confused. Don’t hate me, this is for the nVidia proprietary video drivers for openSuSE Leap 15.6 and 16.0. 15.6 has been working since release until a couple of weeks back. I’m not experiencing this with any other repository.

The post title is the error returned in both the GUI console as well as a hammer command line repo sync.

Errors from the Errors tab in the Task display:

Action:
Actions::Pulp3::Repository::Sync
Input:
{“repo_id”=>16696,
“smart_proxy_id”=>1,
“options”=>{},
“remote_user”=>“admin”,
“remote_cp_user”=>“admin”,
“current_request_id”=>“149e4fa9-20e1-4d4e-ba7c-d9d2c604e669”,
“current_timezone”=>“UTC”,
“current_organization_id”=>nil,
“current_location_id”=>nil,
“current_user_id”=>4}
Output:
{“pulp_tasks”=>
[{“pulp_href”=>“/pulp/api/v3/tasks/0199a70f-8478-7cfb-865c-26d887bcbfa9/”,
“prn”=>“prn:core.task:0199a70f-8478-7cfb-865c-26d887bcbfa9”,
“pulp_created”=>“2025-10-02T22:33:56.089Z”,
“pulp_last_updated”=>“2025-10-02T22:33:56.089Z”,
“state”=>“failed”,
“name”=>“pulp_rpm.app.tasks.synchronizing.synchronize”,
“logging_cid”=>“149e4fa9-20e1-4d4e-ba7c-d9d2c604e669”,
“created_by”=>“/pulp/api/v3/users/1/”,
“unblocked_at”=>“2025-10-02T22:33:56.139Z”,
“started_at”=>“2025-10-02T22:36:06.436Z”,
“finished_at”=>“2025-10-02T22:36:33.357Z”,
“error”=>
{“traceback”=>
" File "/usr/lib/python3.12/site-packages/pulpcore/tasking/tasks.py", line 71, in _execute_task\n" +
" result = func(*args, **kwargs)\n" +
" ^^^^^^^^^^^^^^^^^^^^^\n" +
" File "/usr/lib/python3.12/site-packages/pulp_rpm/app/tasks/synchronizing.py", line 569, in synchronize\n" +
" repo_version = dv.create() or repo.latest_version()\n" +
" ^^^^^^^^^^^\n" +
" File "/usr/lib/python3.12/site-packages/pulpcore/plugin/stages/declarative_version.py", line 157, in create\n" +
" with self.repository.new_version() as new_version:\n" +
" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" +
" File "/usr/lib/python3.12/site-packages/pulpcore/app/models/repository.py", line 1257, in exit\n" +
" repository.finalize_new_version(self)\n" +
" File "/usr/lib/python3.12/site-packages/pulp_rpm/app/models/repository.py", line 423, in finalize_new_version\n" +
" validate_duplicate_content(new_version)\n" +
" File "/usr/lib/python3.12/site-packages/pulpcore/plugin/repo_version_utils.py", line 107, in validate_duplicate_content\n" +
" raise ValueError(\n",
“description”=>
“Cannot create repository version. More than one rpm.package content with the duplicate values for name, epoch, version, release, arch, location_href.”},
“worker”=>“/pulp/api/v3/workers/0199a69d-834a-771e-b621-97c2b4188471/”,
“child_tasks”=>,
“progress_reports”=>
[{“message”=>“Downloading Metadata Files”,
“code”=>“sync.downloading.metadata”,
“state”=>“completed”,
“done”=>4,
“suffix”=>nil},
{“message”=>“Downloading Artifacts”,
“code”=>“sync.downloading.artifacts”,
“state”=>“completed”,
“done”=>0,
“suffix”=>nil},
{“message”=>“Associating Content”,
“code”=>“associating.content”,
“state”=>“completed”,
“done”=>272,
“suffix”=>nil},
{“message”=>“Skipping Packages”,
“code”=>“sync.skipped.packages”,
“state”=>“completed”,
“total”=>24,
“done”=>24,
“suffix”=>nil},
{“message”=>“Parsed Packages”,
“code”=>“sync.parsing.packages”,
“state”=>“completed”,
“total”=>271,
“done”=>271,
“suffix”=>nil},
{“message”=>“Un-Associating Content”,
“code”=>“unassociating.content”,
“state”=>“completed”,
“done”=>0,
“suffix”=>nil}],
“created_resources”=>,
“reserved_resources_record”=>
[“prn:rpm.rpmrepository:0199a6c0-a729-73a3-ba8d-812ffe05e49f”,
“shared:prn:rpm.rpmremote:0199a6c0-a57b-737a-9336-e9e4f6be9cfc”,
“shared:prn:core.domain:018bc963-8b09-7b2d-973f-fbfca0dae29a”]}],
“create_version”=>true,
“task_groups”=>,
“poll_attempts”=>{“total”=>29, “failed”=>1}}
Exception:
Katello::Errors::Pulp3Error: Cannot create repository version. More than one rpm.package content with the duplicate values for name, epoch, version, release, arch, location_href.
Backtrace:
/usr/share/gems/gems/katello-4.18.0/app/lib/actions/pulp3/abstract_async_task.rb:107:in block in check_for_errors' /usr/share/gems/gems/katello-4.18.0/app/lib/actions/pulp3/abstract_async_task.rb:105:in each’
/usr/share/gems/gems/katello-4.18.0/app/lib/actions/pulp3/abstract_async_task.rb:105:in check_for_errors' /usr/share/gems/gems/katello-4.18.0/app/lib/actions/pulp3/abstract_async_task.rb:161:in poll_external_task’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/action/polling.rb:100:in poll_external_task_with_rescue' /usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/action/polling.rb:22:in run’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/action/cancellable.rb:15:in run' /usr/share/gems/gems/katello-4.18.0/app/lib/actions/pulp3/abstract_async_task.rb:10:in run’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/action.rb:590:in block (3 levels) in execute_run' /usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware/stack.rb:28:in pass’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware.rb:20:in pass' /usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware.rb:33:in run’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware/stack.rb:24:in call' /usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware/stack.rb:28:in pass’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware.rb:20:in pass' /usr/share/gems/gems/katello-4.18.0/app/lib/actions/middleware/remote_action.rb:16:in block in run’
/usr/share/gems/gems/katello-4.18.0/app/lib/actions/middleware/remote_action.rb:40:in block in as_remote_user' /usr/share/gems/gems/katello-4.18.0/app/models/katello/concerns/user_extensions.rb:21:in cp_config’
/usr/share/gems/gems/katello-4.18.0/app/lib/actions/middleware/remote_action.rb:27:in as_cp_user' /usr/share/gems/gems/katello-4.18.0/app/lib/actions/middleware/remote_action.rb:39:in as_remote_user’
/usr/share/gems/gems/katello-4.18.0/app/lib/actions/middleware/remote_action.rb:16:in run' /usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware/stack.rb:24:in call’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware/stack.rb:28:in pass' /usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware.rb:20:in pass’
/usr/share/gems/gems/foreman-tasks-11.0.4/app/lib/actions/middleware/rails_executor_wrap.rb:14:in block in run' /usr/share/gems/gems/activesupport-7.0.8.7/lib/active_support/execution_wrapper.rb:92:in wrap’
/usr/share/gems/gems/foreman-tasks-11.0.4/app/lib/actions/middleware/rails_executor_wrap.rb:13:in run' /usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware/stack.rb:24:in call’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware/stack.rb:28:in pass' /usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware.rb:20:in pass’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/action/progress.rb:29:in with_progress_calculation' /usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/action/progress.rb:15:in run’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware/stack.rb:24:in call' /usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware/stack.rb:28:in pass’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware.rb:20:in pass' /usr/share/gems/gems/foreman-tasks-11.0.4/app/lib/actions/middleware/load_setting_values.rb:20:in run’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware/stack.rb:24:in call' /usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware/stack.rb:28:in pass’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware.rb:20:in pass' /usr/share/gems/gems/foreman-tasks-11.0.4/app/lib/actions/middleware/keep_current_request_id.rb:15:in block in run’
/usr/share/gems/gems/foreman-tasks-11.0.4/app/lib/actions/middleware/keep_current_request_id.rb:52:in restore_current_request_id' /usr/share/gems/gems/foreman-tasks-11.0.4/app/lib/actions/middleware/keep_current_request_id.rb:15:in run’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware/stack.rb:24:in call' /usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware/stack.rb:28:in pass’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware.rb:20:in pass' /usr/share/gems/gems/foreman-tasks-11.0.4/app/lib/actions/middleware/keep_current_timezone.rb:15:in block in run’
/usr/share/gems/gems/foreman-tasks-11.0.4/app/lib/actions/middleware/keep_current_timezone.rb:44:in restore_curent_timezone' /usr/share/gems/gems/foreman-tasks-11.0.4/app/lib/actions/middleware/keep_current_timezone.rb:15:in run’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware/stack.rb:24:in call' /usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware/stack.rb:28:in pass’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware.rb:20:in pass' /usr/share/gems/gems/foreman-tasks-11.0.4/app/lib/actions/middleware/keep_current_taxonomies.rb:15:in block in run’
/usr/share/gems/gems/foreman-tasks-11.0.4/app/lib/actions/middleware/keep_current_taxonomies.rb:45:in restore_current_taxonomies' /usr/share/gems/gems/foreman-tasks-11.0.4/app/lib/actions/middleware/keep_current_taxonomies.rb:15:in run’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware/stack.rb:24:in call' /usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware/stack.rb:28:in pass’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware.rb:20:in pass' /usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware.rb:33:in run’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware/stack.rb:24:in call' /usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware/stack.rb:28:in pass’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware.rb:20:in pass' /usr/share/gems/gems/foreman-tasks-11.0.4/app/lib/actions/middleware/keep_current_user.rb:15:in block in run’
/usr/share/gems/gems/foreman-tasks-11.0.4/app/lib/actions/middleware/keep_current_user.rb:54:in restore_curent_user' /usr/share/gems/gems/foreman-tasks-11.0.4/app/lib/actions/middleware/keep_current_user.rb:15:in run’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware/stack.rb:24:in call' /usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/middleware/world.rb:31:in execute’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/action.rb:589:in block (2 levels) in execute_run' /usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/action.rb:588:in catch’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/action.rb:588:in block in execute_run' /usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/action.rb:491:in block in with_error_handling’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/action.rb:491:in catch' /usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/action.rb:491:in with_error_handling’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/action.rb:583:in execute_run' /usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/action.rb:304:in execute’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/execution_plan/steps/abstract_flow_step.rb:18:in block (2 levels) in execute' /usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/execution_plan/steps/abstract.rb:168:in with_meta_calculation’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/execution_plan/steps/abstract_flow_step.rb:17:in block in execute' /usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/execution_plan/steps/abstract_flow_step.rb:32:in open_action’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/execution_plan/steps/abstract_flow_step.rb:16:in execute' /usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/director.rb:95:in execute’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/executors/sidekiq/worker_jobs.rb:12:in block (2 levels) in perform' /usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/executors.rb:18:in run_user_code’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/executors/sidekiq/worker_jobs.rb:10:in block in perform' /usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/executors/sidekiq/worker_jobs.rb:26:in with_telemetry’
/usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/executors/sidekiq/worker_jobs.rb:9:in perform' /usr/share/gems/gems/dynflow-1.9.2/lib/dynflow/executors/sidekiq/serialization.rb:28:in perform’
/usr/share/gems/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:202:in execute_job' /usr/share/gems/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:170:in block (2 levels) in process’
/usr/share/gems/gems/sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:172:in invoke' /usr/share/gems/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:169:in block in process’
/usr/share/gems/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:136:in block (6 levels) in dispatch' /usr/share/gems/gems/sidekiq-6.5.12/lib/sidekiq/job_retry.rb:113:in local’
/usr/share/gems/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:135:in block (5 levels) in dispatch' /usr/share/gems/gems/sidekiq-6.5.12/lib/sidekiq.rb:44:in block in module:Sidekiq
/usr/share/gems/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:131:in block (4 levels) in dispatch' /usr/share/gems/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:263:in stats’
/usr/share/gems/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:126:in block (3 levels) in dispatch' /usr/share/gems/gems/sidekiq-6.5.12/lib/sidekiq/job_logger.rb:13:in call’
/usr/share/gems/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:125:in block (2 levels) in dispatch' /usr/share/gems/gems/sidekiq-6.5.12/lib/sidekiq/job_retry.rb:80:in global’
/usr/share/gems/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:124:in block in dispatch' /usr/share/gems/gems/sidekiq-6.5.12/lib/sidekiq/job_logger.rb:39:in prepare’
/usr/share/gems/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:123:in dispatch' /usr/share/gems/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:168:in process’
/usr/share/gems/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:78:in process_one' /usr/share/gems/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:68:in run’
/usr/share/gems/gems/sidekiq-6.5.12/lib/sidekiq/component.rb:8:in watchdog' /usr/share/gems/gems/sidekiq-6.5.12/lib/sidekiq/component.rb:17:in block in safe_thread’
/usr/share/gems/gems/logging-2.4.0/lib/logging/diagnostic_context.rb:474:in `block in create_with_logging_context’
Action:
Actions::Pulp3::Repository::Sync
Input:
{“repo_id”=>16696,
“smart_proxy_id”=>1,
“options”=>{},
“remote_user”=>“admin”,
“remote_cp_user”=>“admin”,
“current_request_id”=>“149e4fa9-20e1-4d4e-ba7c-d9d2c604e669”,
“current_timezone”=>“UTC”,
“current_organization_id”=>nil,
“current_location_id”=>nil,
“current_user_id”=>4}
Output:
{“pulp_tasks”=>
[{“pulp_href”=>“/pulp/api/v3/tasks/0199a70f-8478-7cfb-865c-26d887bcbfa9/”,
“prn”=>“prn:core.task:0199a70f-8478-7cfb-865c-26d887bcbfa9”,
“pulp_created”=>“2025-10-02T22:33:56.089Z”,
“pulp_last_updated”=>“2025-10-02T22:33:56.089Z”,
“state”=>“failed”,
“name”=>“pulp_rpm.app.tasks.synchronizing.synchronize”,
“logging_cid”=>“149e4fa9-20e1-4d4e-ba7c-d9d2c604e669”,
“created_by”=>“/pulp/api/v3/users/1/”,
“unblocked_at”=>“2025-10-02T22:33:56.139Z”,
“started_at”=>“2025-10-02T22:36:06.436Z”,
“finished_at”=>“2025-10-02T22:36:33.357Z”,
“error”=>
{“traceback”=>
" File "/usr/lib/python3.12/site-packages/pulpcore/tasking/tasks.py", line 71, in _execute_task\n" +
" result = func(*args, **kwargs)\n" +
" ^^^^^^^^^^^^^^^^^^^^^\n" +
" File "/usr/lib/python3.12/site-packages/pulp_rpm/app/tasks/synchronizing.py", line 569, in synchronize\n" +
" repo_version = dv.create() or repo.latest_version()\n" +
" ^^^^^^^^^^^\n" +
" File "/usr/lib/python3.12/site-packages/pulpcore/plugin/stages/declarative_version.py", line 157, in create\n" +
" with self.repository.new_version() as new_version:\n" +
" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" +
" File "/usr/lib/python3.12/site-packages/pulpcore/app/models/repository.py", line 1257, in exit\n" +
" repository.finalize_new_version(self)\n" +
" File "/usr/lib/python3.12/site-packages/pulp_rpm/app/models/repository.py", line 423, in finalize_new_version\n" +
" validate_duplicate_content(new_version)\n" +
" File "/usr/lib/python3.12/site-packages/pulpcore/plugin/repo_version_utils.py", line 107, in validate_duplicate_content\n" +
" raise ValueError(\n",
“description”=>
“Cannot create repository version. More than one rpm.package content with the duplicate values for name, epoch, version, release, arch, location_href.”},
“worker”=>“/pulp/api/v3/workers/0199a69d-834a-771e-b621-97c2b4188471/”,
“child_tasks”=>,
“progress_reports”=>
[{“message”=>“Downloading Metadata Files”,
“code”=>“sync.downloading.metadata”,
“state”=>“completed”,
“done”=>4,
“suffix”=>nil},
{“message”=>“Downloading Artifacts”,
“code”=>“sync.downloading.artifacts”,
“state”=>“completed”,
“done”=>0,
“suffix”=>nil},
{“message”=>“Associating Content”,
“code”=>“associating.content”,
“state”=>“completed”,
“done”=>272,
“suffix”=>nil},
{“message”=>“Skipping Packages”,
“code”=>“sync.skipped.packages”,
“state”=>“completed”,
“total”=>24,
“done”=>24,
“suffix”=>nil},
{“message”=>“Parsed Packages”,
“code”=>“sync.parsing.packages”,
“state”=>“completed”,
“total”=>271,
“done”=>271,
“suffix”=>nil},
{“message”=>“Un-Associating Content”,
“code”=>“unassociating.content”,
“state”=>“completed”,
“done”=>0,
“suffix”=>nil}],
“created_resources”=>,
“reserved_resources_record”=>
[“prn:rpm.rpmrepository:0199a6c0-a729-73a3-ba8d-812ffe05e49f”,
“shared:prn:rpm.rpmremote:0199a6c0-a57b-737a-9336-e9e4f6be9cfc”,
“shared:prn:core.domain:018bc963-8b09-7b2d-973f-fbfca0dae29a”]}],
“create_version”=>true,
“task_groups”=>,
“poll_attempts”=>{“total”=>29, “failed”=>1}}
Action:
Actions::Pulp3::Repository::SaveVersion
Input:
{“repository_id”=>16696,
“tasks”=>Step(6).output[:pulp_tasks],
“repository_details”=>nil,
“force_fetch_version”=>nil,
“remote_user”=>“admin”,
“remote_cp_user”=>“admin”,
“current_request_id”=>“149e4fa9-20e1-4d4e-ba7c-d9d2c604e669”,
“current_timezone”=>“UTC”,
“current_organization_id”=>nil,
“current_location_id”=>nil,
“current_user_id”=>4}
Output:
{}
Action:
Actions::Pulp3::Repository::CreatePublication
Input:
{“repository_id”=>16696,
“smart_proxy_id”=>1,
“contents_changed”=>Step(9).output[:contents_changed],
“skip_publication_creation”=>Step(9).output[:publication_provided],
“remote_user”=>“admin”,
“remote_cp_user”=>“admin”,
“current_request_id”=>“149e4fa9-20e1-4d4e-ba7c-d9d2c604e669”,
“current_timezone”=>“UTC”,
“current_organization_id”=>nil,
“current_location_id”=>nil,
“current_user_id”=>4}
Output:
{}
Action:
Actions::Pulp3::Repository::SavePublication
Input:
{“repository_id”=>16696,
“tasks”=>Step(12).output,
“contents_changed”=>Step(9).output[:contents_changed],
“remote_user”=>“admin”,
“remote_cp_user”=>“admin”,
“current_request_id”=>“149e4fa9-20e1-4d4e-ba7c-d9d2c604e669”,
“current_timezone”=>“UTC”,
“current_organization_id”=>nil,
“current_location_id”=>nil,
“current_user_id”=>4}
Output:
{}
Action:
Actions::Pulp3::Orchestration::Repository::Sync
Input:
{“subaction_output”=>Step(9).output,
“remote_user”=>“admin”,
“remote_cp_user”=>“admin”,
“current_request_id”=>“149e4fa9-20e1-4d4e-ba7c-d9d2c604e669”,
“current_timezone”=>“UTC”,
“current_organization_id”=>nil,
“current_location_id”=>nil,
“current_user_id”=>4}
Output:
{}
Action:
Actions::Katello::Repository::Sync
Input:
{“repository”=>
{“id”=>16696,
“name”=>“NVIDIA”,
“label”=>“Home_openSuSE_16_0_Home_openSuSE_16_0_NVIDIA”},
“product”=>
{“id”=>7,
“name”=>“openSuSE 16.0”,
“label”=>“openSuSE_16_0”,
“cp_id”=>“387300413810”},
“provider”=>{“id”=>1, “name”=>“Anonymous”},
“organization”=>{“id”=>1, “name”=>“Home”, “label”=>“Home”},
“services_checked”=>[“pulp3”],
“id”=>16696,
“sync_result”=>Step(19).output,
“skip_metadata_check”=>false,
“validate_contents”=>false,
“contents_changed”=>Step(19).output[:contents_changed],
“current_request_id”=>“149e4fa9-20e1-4d4e-ba7c-d9d2c604e669”,
“current_timezone”=>“UTC”,
“current_organization_id”=>nil,
“current_location_id”=>nil,
“current_user_id”=>4}
Output:
{}
Action:
Actions::Katello::Repository::Sync
Input:
{“repository”=>
{“id”=>16696,
“name”=>“NVIDIA”,
“label”=>“Home_openSuSE_16_0_Home_openSuSE_16_0_NVIDIA”},
“product”=>
{“id”=>7,
“name”=>“openSuSE 16.0”,
“label”=>“openSuSE_16_0”,
“cp_id”=>“387300413810”},
“provider”=>{“id”=>1, “name”=>“Anonymous”},
“organization”=>{“id”=>1, “name”=>“Home”, “label”=>“Home”},
“services_checked”=>[“pulp3”],
“id”=>16696,
“sync_result”=>Step(19).output,
“skip_metadata_check”=>false,
“validate_contents”=>false,
“contents_changed”=>Step(19).output[:contents_changed],
“current_request_id”=>“149e4fa9-20e1-4d4e-ba7c-d9d2c604e669”,
“current_timezone”=>“UTC”,
“current_organization_id”=>nil,
“current_location_id”=>nil,
“current_user_id”=>4}
Output:
{}

The repositories are configured for x86_64 architectures only, and I have manually retrieved the entire contents of the 15.6 x86_64 directory. A quick run through with rpm and a custom queryformat for name, epoch, etc. doesn’t seem to return any duplicates at all.

What am I missing? Is this an issue within Katello/Foreman, or is this a malformed upstream repository?

And I remembered after dinner tonight that I never posted the upstream URLs…

https://download.nvidia.com/opensuse/leap/15.6
https://download.nvidia.com/opensuse/leap/16.0

I was able to sync these 2 repos without any issue.

Do you have enough disk spaces and memory in your environment?

Interesting. I’m on the road right now, and found a hole in my access. I’ll be back on it on Tuesday.

I don’t think I’m short on either disk space or memory, I’ll certainly confirm.

Now that I’m back into it… it’s a 4 vCPU/24gb VM. Granted, /var/lib/pulp only has 62gb of free space, it’s also a 3.2tb volume, but that’s the only volume that’s running anywhere close to the edge. The physical host does have a boatload of memory, unfortunately, doubling that up to 48gb yields exactly the same results.

Oh, WAIT A SEC… from /var/log/messages:

Oct 14 11:11:03 katello pulpcore-worker-2[2724]: pulp [d5a455c4-00e6-4eed-92c8-164a93e14297]: pulpcore.tasking.tasks:INFO: Task[pulp_rpm.app.tasks.synchronizing.synchronize] 0199e37c-5fd0-7e75-af4b-e0b8388e201e failed (ValueError: Cannot create repository version. More than one rpm.package content with the duplicate values for name, epoch, version, release, arch, location_href.) in domain: default
Oct 14 11:11:03 katello pulpcore-worker-2[2724]: pulp [d5a455c4-00e6-4eed-92c8-164a93e14297]: pulpcore.tasking.tasks:INFO: File “/usr/lib/python3.12/site-packages/pulpcore/tasking/tasks.py”, line 71, in _execute_task
Oct 14 11:11:03 katello pulpcore-worker-2[2724]: result = func(*args, **kwargs)
Oct 14 11:11:03 katello pulpcore-worker-2[2724]: ^^^^^^^^^^^^^^^^^^^^^
Oct 14 11:11:03 katello pulpcore-worker-2[2724]: File “/usr/lib/python3.12/site-packages/pulp_rpm/app/tasks/synchronizing.py”, line 569, in synchronize
Oct 14 11:11:03 katello pulpcore-worker-2[2724]: repo_version = dv.create() or repo.latest_version()
Oct 14 11:11:03 katello pulpcore-worker-2[2724]: ^^^^^^^^^^^
Oct 14 11:11:03 katello pulpcore-worker-2[2724]: File “/usr/lib/python3.12/site-packages/pulpcore/plugin/stages/declarative_version.py”, line 157, in create
Oct 14 11:11:03 katello pulpcore-worker-2[2724]: with self.repository.new_version() as new_version:
Oct 14 11:11:03 katello pulpcore-worker-2[2724]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Oct 14 11:11:03 katello pulpcore-worker-2[2724]: File “/usr/lib/python3.12/site-packages/pulpcore/app/models/repository.py”, line 1257, in exit
Oct 14 11:11:03 katello pulpcore-worker-2[2724]: repository.finalize_new_version(self)
Oct 14 11:11:03 katello pulpcore-worker-2[2724]: File “/usr/lib/python3.12/site-packages/pulp_rpm/app/models/repository.py”, line 423, in finalize_new_version
Oct 14 11:11:03 katello pulpcore-worker-2[2724]: validate_duplicate_content(new_version)
Oct 14 11:11:03 katello pulpcore-worker-2[2724]: File “/usr/lib/python3.12/site-packages/pulpcore/plugin/repo_version_utils.py”, line 107, in validate_duplicate_content
Oct 14 11:11:03 katello pulpcore-worker-2[2724]: raise ValueError(
Oct 14 11:11:09 katello pulpcore-api[2105]: pulp [d5a455c4-00e6-4eed-92c8-164a93e14297]: - - [14/Oct/2025:16:11:09 +0000] “GET /pulp/api/v3/tasks/0199e37c-5fd0-7e75-af4b-e0b8388e201e/ HTTP/1.1” 200 2744 “-” “OpenAPI-Generator/3.73.14/ruby”
Oct 14 11:11:10 katello pulpcore-api[2105]: pulp [d5a455c4-00e6-4eed-92c8-164a93e14297]: - - [14/Oct/2025:16:11:10 +0000] “GET /pulp/api/v3/distributions/rpm/rpm/?base_path=Home%2FLibrary%2Fcustom%2FopenSuSE_15_6%2FHome_openSuSE_15_6_Home_openSuSE_15_6_NVIDIA HTTP/1.1” 200 852 “-” “OpenAPI-Generator/3.29.5/ruby”
Oct 14 11:11:10 katello pulpcore-api[2105]: pulp [d5a455c4-00e6-4eed-92c8-164a93e14297]: - - [14/Oct/2025:16:11:10 +0000] “GET /pulp/api/v3/publications/rpm/rpm/01999ff2-ebbe-7172-96c6-74ec0f7284f2/ HTTP/1.1” 200 671 “-” “OpenAPI-Generator/3.29.5/ruby”
Oct 14 11:11:10 katello pulpcore-api[2105]: pulp [d5a455c4-00e6-4eed-92c8-164a93e14297]: pulpcore.tasking.tasks:INFO: Starting task 0199e37d-674d-71ac-8d87-03901ff91717 in domain: default
Oct 14 11:11:10 katello pulpcore-api[2105]: pulp [d5a455c4-00e6-4eed-92c8-164a93e14297]: pulpcore.tasking.tasks:INFO: Task completed 0199e37d-674d-71ac-8d87-03901ff91717 in domain: default
Oct 14 11:11:10 katello pulpcore-api[2105]: pulp [d5a455c4-00e6-4eed-92c8-164a93e14297]: - - [14/Oct/2025:16:11:10 +0000] “PATCH /pulp/api/v3/distributions/rpm/rpm/01943252-5e19-7a72-af3c-18a382ef3238/ HTTP/1.1” 202 67 “-” “OpenAPI-Generator/3.29.5/ruby”
Oct 14 11:11:10 katello pulpcore-api[2102]: pulp [d5a455c4-00e6-4eed-92c8-164a93e14297]: - - [14/Oct/2025:16:11:10 +0000] “GET /pulp/api/v3/tasks/0199e37d-674d-71ac-8d87-03901ff91717/ HTTP/1.1” 200 792 “-” “OpenAPI-Generator/3.73.14/ruby”
Oct 14 11:11:10 katello pulpcore-api[2093]: pulp [d5a455c4-00e6-4eed-92c8-164a93e14297]: - - [14/Oct/2025:16:11:10 +0000] “GET /pulp/api/v3/publications/rpm/rpm/01999ff2-ebbe-7172-96c6-74ec0f7284f2/ HTTP/1.1” 200 671 “-” “OpenAPI-Generator/3.29.5/ruby”
Oct 14 11:11:11 katello pulpcore-api[2110]: pulp [d5a455c4-00e6-4eed-92c8-164a93e14297]: pulpcore.tasking.tasks:INFO: Starting task 0199e37d-6979-7e72-acd6-40f8819a60d9 in domain: default
Oct 14 11:11:11 katello pulpcore-api[2110]: pulp [d5a455c4-00e6-4eed-92c8-164a93e14297]: pulpcore.tasking.tasks:INFO: Task completed 0199e37d-6979-7e72-acd6-40f8819a60d9 in domain: default
Oct 14 11:11:11 katello pulpcore-api[2110]: pulp [d5a455c4-00e6-4eed-92c8-164a93e14297]: - - [14/Oct/2025:16:11:11 +0000] “PATCH /pulp/api/v3/distributions/rpm/rpm/01943252-5e19-7a72-af3c-18a382ef3238/ HTTP/1.1” 202 67 “-” “OpenAPI-Generator/3.29.5/ruby”

I have no idea what to make of that, but that smells rather bad.

I think, in the absence of anything else, and that I’m in a home environment, I’m going to do the following: Probably take a couple of days at least.

  1. Remove all affected content views, including published.
  2. Remove these 2 repositories.
  3. Remove all orphaned content.
  4. Probably do a service restart on general principles.
  5. Add the 2 repositories back in.
  6. Create the content views again, and publish.

Thoughts? Comments?

Well, nuts. Still getting the same error after the remove/add/sync process.

@lfu what mirroring policy did you use?

Do you by chance have “Solve Dependencies” turned on? I know that was causing issues for me.

Unless I’m missing something, that’s a Content Views attribute. This error occurs during a repository sync, well before a content view is created & published.

Sorry for the noise, you’re right.

I decided to start down the Genghis Khan road of scorched earth. And am left even more confused.

I ran a foreman-installer with the reset-data option to completely drop and recreate the backend databases. I recreated the productions, added the repositories and tried a sync on an nVidia repository. Same exact error.

I haven’t been able to figure out via an rpm analysis of what RPM files are at issue. Guess that I’m going to need to learn some new tricks and dig into the underlying code that’s returning the error.

Next step……

I set up a completely new VM (RockyLinux 9,) with a completely new Foreman & Katello install, fully patched to today. Created a product, created a repository for nVidia’s openSuSE 15.6 distro, and synced. Exactly the same error.

I’ll be dipped in lukewarm (BEEEEEEEEEEEP). Documenting what I’ve done as a possible workaround just in case somebody else runs into this.

As I noted before, I can download (via a recursive wget) the entire repository. An analysis of the various RPM files doesn’t show any [obvious] duplicates. In an attempt to figure out where the conflict might lie, I ran a ‘hammer repository upload-content’ to stuff all of the downloaded RPMs up into the repository. Much to my surprise, it completed completely successfully. A repository sync then ran to a successful completion. And a content view generation and publish ran successfully.

I do rather suspect an RPM content problem is down at the root of this, but I really can’t prove it, nor can I determine what the issue is. At least I have a workaround.

I’m seeing this really late, but whenever you see a stack trace in Pulp, it may be worthwhile to file something at GitHub - pulp/pulp_rpm: RPM support for Pulp Platform (or another plugin / core).

There’s a decent chance that the metadata for your repo in question contained something strange that ‘infected’ the DB, for lack of a better term.

That’s a good idea, thanks.

If you’re looking for an argument about a “poisoned” repo, you came to the wrong place. :grinning_face: Something had to be flipped that was cleared by a fresh repository and a local load of the RPMs.