Note: This bug is displayed in read-only format because
the product is no longer active in Red Hat Bugzilla.
Red Hat Satellite engineering is moving the tracking of its product development work on Satellite to Red Hat Jira (issues.redhat.com). If you're a Red Hat customer, please continue to file support cases via the Red Hat customer portal. If you're not, please head to the "Satellite project" in Red Hat Jira and file new tickets here. Individual Bugzilla bugs will be migrated starting at the end of May. If you cannot log in to RH Jira, please consult article #7032570. That failing, please send an e-mail to the RH Jira admins at rh-issues@redhat.com to troubleshoot your issue as a user management inquiry. The email creates a ServiceNow ticket with Red Hat. Individual Bugzilla bugs that are migrated will be moved to status "CLOSED", resolution "MIGRATED", and set with "MigratedToJIRA" in "Keywords". The link to the successor Jira issue will be found under "Links", have a little "two-footprint" icon next to it, and direct you to the "Satellite project" in Red Hat Jira (issue links are of type "https://issues.redhat.com/browse/SAT-XXXX", where "X" is a digit). This same link will be available in a blue banner at the top of the page informing you that that bug has been migrated.
Description of problem:
Composite Content View is failing to promote. The only error logged:
2020-05-05T08:21:19 [W|app|] Failed to calculate obsolete and new
2020-05-05T08:21:19 [E|bac|] PG::InFailedSqlTransaction: ERROR: current transaction is aborted, commands ignored until end of transaction block: SELECT "taxonomies".* FROM "taxonomies" WHERE "taxonomies"."type" IN ('Organization') AND "taxonomies"."id" = $1 LIMIT $2 (ActiveRecord::StatementInvalid)
Looking at /usr/share/foreman/app/services/puppet_class_importer.rb, we see the exception that hides the error, so we comment the rescue statement (lines 81..83 below) to get the actual exception on production.log:
67 def obsolete_and_new(changes = { })
68 return if changes.empty?
69 changes.values.map(&:keys).flatten.uniq.each do |env_name|
70 if changes['new'] && changes['new'][env_name].try(:>, '') # we got new classes
71 add_classes_to_foreman(env_name, JSON.parse(changes['new'][env_name]))
72 end
73 if changes['obsolete'] && changes['obsolete'][env_name].try(:>, '') # we need to remove classes
74 remove_classes_from_foreman(env_name, JSON.parse(changes['obsolete'][env_name]))
75 end
76 if changes['updated'] && changes['updated'][env_name].try(:>, '') # we need to update classes
77 update_classes_in_foreman(env_name, JSON.parse(changes['updated'][env_name]))
78 end
79 end
80 []
81 #rescue => e
82 # Foreman::Logging.exception('Failed to calculate obsolete and new', e)
83 # [e.to_s]
84 end
Result in /var/log/foreman/production.log:
2020-05-05T15:56:03 [E|bac|] PG::ProtocolViolation: ERROR: invalid message format
: SELECT "taxonomies".* FROM "taxonomies" WHERE "taxonomies"."id" IN ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, ...
NOTE: the list goes on to $69801. The taxonomies table in this specific case has ~30 entries only. There are certainly many duplicates in this ID lookup list.
After applying the patch below to do a .uniq on the list of IDs being passed to this lookup:
diff --git a/app/models/concerns/audit_extensions.rb b/app/models/concerns/audit_extensions.rb
index 32690be48..432b490ea 100644
--- a/app/models/concerns/audit_extensions.rb
+++ b/app/models/concerns/audit_extensions.rb
@@ -241,6 +241,7 @@ module AuditExtensions
elsif associated.respond_to?(:"#{key_name}_ids")
ids_arr = associated.send("#{key_name}_ids")
end
- self.send("#{key_name}_ids=", ids_arr)
+ Rails.logger.error("IDs: #{ids_arr}")
+ self.send("#{key_name}_ids=", ids_arr.uniq)
end
end
...the CCV promote works successfully.
And this logs to production.log a very long list of IDs that are being uniq'd:
2020-05-05T16:31:47 [E|app|] IDs: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ...
Each taxonomy ID appears _thousands_ of times on this list.
Version-Release number of selected component (if applicable):
foreman-1.22.0.39-2.el7sat.noarch
How reproducible:
Every time for certain individual Composite Content Views.
Steps to Reproduce:
1. Publish or promote one of a couple individual Composite Content Views
Actual results:
It fails and enters paused-error state with a not-so-evident error saying:
~~~
2020-05-05T08:21:19 [E|bac|] PG::InFailedSqlTransaction: ERROR: current transaction is aborted, commands ignored until end of transaction block: SELECT "taxonomies".* FROM "taxonomies" WHERE "taxonomies"."type" IN ('Organization') AND "taxonomies"."id" = $1 LIMIT $2 (ActiveRecord::StatementInvalid)
~~~
Expected results:
Success.
Additional info:
Thank you jsherrill in particular for the invaluable assistance in getting this issued sorted out.
Description of problem: Composite Content View is failing to promote. The only error logged: 2020-05-05T08:21:19 [W|app|] Failed to calculate obsolete and new 2020-05-05T08:21:19 [E|bac|] PG::InFailedSqlTransaction: ERROR: current transaction is aborted, commands ignored until end of transaction block: SELECT "taxonomies".* FROM "taxonomies" WHERE "taxonomies"."type" IN ('Organization') AND "taxonomies"."id" = $1 LIMIT $2 (ActiveRecord::StatementInvalid) Looking at /usr/share/foreman/app/services/puppet_class_importer.rb, we see the exception that hides the error, so we comment the rescue statement (lines 81..83 below) to get the actual exception on production.log: 67 def obsolete_and_new(changes = { }) 68 return if changes.empty? 69 changes.values.map(&:keys).flatten.uniq.each do |env_name| 70 if changes['new'] && changes['new'][env_name].try(:>, '') # we got new classes 71 add_classes_to_foreman(env_name, JSON.parse(changes['new'][env_name])) 72 end 73 if changes['obsolete'] && changes['obsolete'][env_name].try(:>, '') # we need to remove classes 74 remove_classes_from_foreman(env_name, JSON.parse(changes['obsolete'][env_name])) 75 end 76 if changes['updated'] && changes['updated'][env_name].try(:>, '') # we need to update classes 77 update_classes_in_foreman(env_name, JSON.parse(changes['updated'][env_name])) 78 end 79 end 80 [] 81 #rescue => e 82 # Foreman::Logging.exception('Failed to calculate obsolete and new', e) 83 # [e.to_s] 84 end Result in /var/log/foreman/production.log: 2020-05-05T15:56:03 [E|bac|] PG::ProtocolViolation: ERROR: invalid message format : SELECT "taxonomies".* FROM "taxonomies" WHERE "taxonomies"."id" IN ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, ... NOTE: the list goes on to $69801. The taxonomies table in this specific case has ~30 entries only. There are certainly many duplicates in this ID lookup list. After applying the patch below to do a .uniq on the list of IDs being passed to this lookup: diff --git a/app/models/concerns/audit_extensions.rb b/app/models/concerns/audit_extensions.rb index 32690be48..432b490ea 100644 --- a/app/models/concerns/audit_extensions.rb +++ b/app/models/concerns/audit_extensions.rb @@ -241,6 +241,7 @@ module AuditExtensions elsif associated.respond_to?(:"#{key_name}_ids") ids_arr = associated.send("#{key_name}_ids") end - self.send("#{key_name}_ids=", ids_arr) + Rails.logger.error("IDs: #{ids_arr}") + self.send("#{key_name}_ids=", ids_arr.uniq) end end ...the CCV promote works successfully. And this logs to production.log a very long list of IDs that are being uniq'd: 2020-05-05T16:31:47 [E|app|] IDs: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ... Each taxonomy ID appears _thousands_ of times on this list. Version-Release number of selected component (if applicable): foreman-1.22.0.39-2.el7sat.noarch How reproducible: Every time for certain individual Composite Content Views. Steps to Reproduce: 1. Publish or promote one of a couple individual Composite Content Views Actual results: It fails and enters paused-error state with a not-so-evident error saying: ~~~ 2020-05-05T08:21:19 [E|bac|] PG::InFailedSqlTransaction: ERROR: current transaction is aborted, commands ignored until end of transaction block: SELECT "taxonomies".* FROM "taxonomies" WHERE "taxonomies"."type" IN ('Organization') AND "taxonomies"."id" = $1 LIMIT $2 (ActiveRecord::StatementInvalid) ~~~ Expected results: Success. Additional info: Thank you jsherrill in particular for the invaluable assistance in getting this issued sorted out.