Project

General

Profile

Actions

Bug #23096

closed

Indexing subscription facet pools generates sql query per consumer

Added by Partha Aji over 6 years ago. Updated over 6 years ago.

Status:
Closed
Priority:
Normal
Assignee:
Category:
Subscriptions
Target version:
Difficulty:
Triaged:
Fixed in Releases:
Found in Releases:

Description

When a system registers/unregisters the import_hosts method in https://github.com/Katello/katello/blob/master/app/models/katello/glue/candlepin/pool.rb#L146-L155 does the following
  1. get consumer ids belonging to this pool from candlepin (around 15s)
  2. loop through the consumer ids and create an entry in SubscriptionFacetPool if it does not exist
  3. delete bad entries in SubscriptionFacetPool (i.e. delete where facet ids no longer exists)

step 2 generates a query for every consumer id in the pool to verify it exists. In some high volume customer cases that could mean 50K sql queries (all doing a where clause to verify the existence of a subscription facet pool) on every registration. This could also result in edge cases and pain points related errors like

PG::Error: ERROR:  insert or update on table \"katello_subscription_facet_pools\" violates foreign key constraint \"katello_sub_facet_pools_sf_id_fk\"\nDETAIL:  Key (subscription_facet_id)=(1000) is not present in table \"katello_subscription_facets\".\n: INSERT INTO \"katello_subscription_facet_pools\" (\"pool_id\", \"subscription_facet_id\") VALUES ($1, $2) RETURNING \"id\" 

where the slow response causes the registering client to time out and retry with --force causing race conditions.

Actions

Also available in: Atom PDF