Bug #4641
Deleting user with associated roles triggers PG::NotNullViolation
Description
When deleting a user with associated roles, a PG::NotNullViolation is logged.
Started DELETE "/users/5-manager" for 127.0.0.1 at 2014-03-12 11:14:16 +0000 Processing by UsersController#destroy as HTML Parameters: {"authenticity_token"=>"wzjXWaEKXmEYUJ6ROjqfRjWmyUJzUzbcnppgD9PtJ90=", "id"=>"5-manager"} User Load (1.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 1]] Setting current user thread-local variable to admin User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY firstname LIMIT 1 [["id", "5-manager"]] (0.2ms) BEGIN TaxableTaxonomy Load (0.4ms) SELECT "taxable_taxonomies".* FROM "taxable_taxonomies" WHERE "taxable_taxonomies"."taxable_id" = 5 AND "taxable_taxonomies"."taxable_type" = 'User' CACHE (0.0ms) SELECT "taxable_taxonomies".* FROM "taxable_taxonomies" WHERE "taxable_taxonomies"."taxable_id" = 5 AND "taxable_taxonomies"."taxable_type" = 'User' User Load (0.6ms) SELECT "users".* FROM "users" WHERE "users"."id" = 5 ORDER BY firstname LIMIT 1 (0.5ms) SELECT MAX("audits"."version") AS max_id FROM "audits" WHERE "audits"."auditable_id" = 5 AND "audits"."auditable_type" = 'User' SQL (1.4ms) INSERT INTO "audits" ("action", "associated_id", "associated_name", "associated_type", "auditable_id", "auditable_name", "auditable_type", "audited_changes", "comment", "created_at", "remote_address", "user_id", "user_type", "username", "version") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15) RETURNING "id" [["action", "destroy"], ["associated_id", nil], ["associated_name", nil], ["associated_type", nil], ["auditable_id", 5], ["auditable_name", "Manager "], ["auditable_type", "User"], ["audited_changes", "---\nlogin: manager\nfirstname: Manager\nlastname: ''\nmail: manager@localhost\nadmin: false\nauth_source_id: 1\ndomains_andor: or\nhostgroups_andor: or\nfacts_andor: or\nfilter_on_owner: false\ncompute_resources_andor: or\norganizations_andor: or\nlocations_andor: or\nsubscribe_to_all_hostgroups: \nlocale: \navatar_hash: \n"], ["comment", nil], ["created_at", Wed, 12 Mar 2014 11:14:16 UTC +00:00], ["remote_address", "127.0.0.1"], ["user_id", nil], ["user_type", nil], ["username", "Admin User"], ["version", 2]] Host::Managed Load (1.1ms) SELECT "hosts".* FROM "hosts" WHERE "hosts"."type" IN ('Host::Managed') AND "hosts"."owner_id" = 5 AND "hosts"."owner_type" = 'User' Hostgroup Load (1.4ms) SELECT "hostgroups".* FROM "hostgroups" INNER JOIN "user_hostgroups" ON "hostgroups"."id" = "user_hostgroups"."hostgroup_id" WHERE "user_hostgroups"."user_id" = 5 ORDER BY hostgroups.title UsergroupMember Load (0.3ms) SELECT "usergroup_members".* FROM "usergroup_members" WHERE "usergroup_members"."member_id" = 5 AND "usergroup_members"."member_type" = 'User' UserRole Load (0.2ms) SELECT "user_roles".* FROM "user_roles" WHERE "user_roles"."owner_id" = 5 AND "user_roles"."owner_type" = 'User' CachedUserRole Load (0.3ms) SELECT "cached_user_roles".* FROM "cached_user_roles" WHERE "cached_user_roles"."user_role_id" = 61 SQL (0.6ms) DELETE FROM "cached_user_roles" WHERE "cached_user_roles"."id" = $1 [["id", 21]] SQL (0.4ms) DELETE FROM "user_roles" WHERE "user_roles"."id" = $1 [["id", 61]] CachedUserRole Load (0.3ms) SELECT "cached_user_roles".* FROM "cached_user_roles" WHERE "cached_user_roles"."user_role_id" = 63 SQL (0.2ms) DELETE FROM "cached_user_roles" WHERE "cached_user_roles"."id" = $1 [["id", 22]] SQL (0.2ms) DELETE FROM "user_roles" WHERE "user_roles"."id" = $1 [["id", 63]] CachedUserRole Load (0.3ms) SELECT "cached_user_roles".* FROM "cached_user_roles" WHERE "cached_user_roles"."user_role_id" = 64 SQL (0.2ms) DELETE FROM "cached_user_roles" WHERE "cached_user_roles"."id" = $1 [["id", 23]] SQL (0.2ms) DELETE FROM "user_roles" WHERE "user_roles"."id" = $1 [["id", 64]] Role Load (0.4ms) SELECT "roles".* FROM "roles" INNER JOIN "user_roles" ON "roles"."id" = "user_roles"."role_id" WHERE "user_roles"."owner_id" = 5 AND "user_roles"."owner_type" = 'User' CachedUserRole Load (0.4ms) SELECT "cached_user_roles".* FROM "cached_user_roles" WHERE "cached_user_roles"."user_id" = 5 UserHostgroup Load (0.3ms) SELECT "user_hostgroups".* FROM "user_hostgroups" WHERE "user_hostgroups"."user_id" = 5 UserFact Load (0.3ms) SELECT "user_facts".* FROM "user_facts" WHERE "user_facts"."user_id" = 5 Domain Load (0.4ms) SELECT "domains".* FROM "domains" INNER JOIN "user_domains" ON "domains"."id" = "user_domains"."domain_id" WHERE "user_domains"."user_id" = 5 ORDER BY domains.name ComputeResource Load (0.4ms) SELECT "compute_resources".* FROM "compute_resources" INNER JOIN "user_compute_resources" ON "compute_resources"."id" = "user_compute_resources"."compute_resource_id" WHERE "user_compute_resources"."user_id" = 5 ORDER BY compute_resources.name Notice Load (0.4ms) SELECT "notices".* FROM "notices" INNER JOIN "user_notices" ON "notices"."id" = "user_notices"."notice_id" WHERE "user_notices"."user_id" = 5 SQL (1.2ms) DELETE FROM "users" WHERE "users"."id" = $1 [["id", 5]] (4.4ms) COMMIT Role Load (0.4ms) SELECT "roles".* FROM "roles" WHERE "roles"."name" = 'Anonymous' LIMIT 1 (0.1ms) BEGIN UserRole Exists (0.4ms) SELECT 1 AS one FROM "user_roles" WHERE ("user_roles"."owner_id" = 5 AND "user_roles"."role_id" = 8 AND "user_roles"."owner_type" = 'User') LIMIT 1 SQL (0.8ms) INSERT INTO "user_roles" ("owner_id", "owner_type", "role_id") VALUES ($1, $2, $3) RETURNING "id" [["owner_id", 5], ["owner_type", "User"], ["role_id", 8]] User Load (0.9ms) SELECT "users".* FROM "users" WHERE "users"."id" = 5 ORDER BY firstname LIMIT 1 SQL (1.2ms) INSERT INTO "cached_user_roles" ("created_at", "role_id", "updated_at", "user_id", "user_role_id") VALUES ($1, $2, $3, $4, $5) RETURNING "id" [["created_at", Wed, 12 Mar 2014 11:14:16 UTC +00:00], ["role_id", 8], ["updated_at", Wed, 12 Mar 2014 11:14:16 UTC +00:00], ["user_id", nil], ["user_role_id", 91]] PG::NotNullViolation: ERROR: null value in column "user_id" violates not-null constraint : INSERT INTO "cached_user_roles" ("created_at", "role_id", "updated_at", "user_id", "user_role_id") VALUES ($1, $2, $3, $4, $5) RETURNING "id" (0.1ms) ROLLBACK PG::NotNullViolation: ERROR: null value in column "user_id" violates not-null constraint : INSERT INTO "cached_user_roles" ("created_at", "role_id", "updated_at", "user_id", "user_role_id") VALUES ($1, $2, $3, $4, $5) RETURNING "id" Redirected to http://0.0.0.0:3000/users Completed 302 Found in 354.6ms (ActiveRecord: 38.0ms)
Related issues
Associated revisions
refs #4641 - update to functional test
History
#1
Updated by Dominic Cleal about 9 years ago
- Related to Tracker #4552: New permissions/authorization system issues added
#2
Updated by Dominic Cleal about 9 years ago
- Related to deleted (Tracker #4552: New permissions/authorization system issues)
#3
Updated by Dominic Cleal about 9 years ago
- Blocks Tracker #4552: New permissions/authorization system issues added
#4
Updated by Maria Nita almost 9 years ago
I tried to write a regression test case for this, but no luck.
This is the test https://github.com/marianitadn/foreman/blob/4641-delete-user/test/unit/user_test.rb#L341-L351, but it doesn't fail.
I think I have an idea for the solution, but without a test I can't be convinced.
#5
Updated by Dominic Cleal almost 9 years ago
I think this could be tricky to test, as the deletion and therefore your test are actually successful. The error seems to be coming from the "ensure_default_role" after_commit hook on the User model (thanks to Marek for pointing to this). Errors in here seem to be swallowed and are only hitting the logs. It looks like the test_after_commit gem would enable testing of it, if you want to try it out.
Probably setting the after_commit hook to run on create and update only would fix the issue.
#6
Updated by Dominic Cleal almost 9 years ago
- Status changed from New to Ready For Testing
- Assignee set to Maria Nita
- Target version set to 1.8.4
#7
Updated by Anonymous almost 9 years ago
- Target version changed from 1.8.4 to 1.8.3
#8
Updated by Anonymous almost 9 years ago
- Target version changed from 1.8.3 to 1.8.4
#9
Updated by Anonymous almost 9 years ago
- Target version changed from 1.8.4 to 1.8.3
#10
Updated by Anonymous almost 9 years ago
- Target version changed from 1.8.3 to 1.8.2
#11
Updated by Anonymous almost 9 years ago
- Target version changed from 1.8.2 to 1.8.1
#12
Updated by Anonymous over 8 years ago
- Target version changed from 1.8.1 to 1.8.0
#13
Updated by The Foreman Bot over 8 years ago
- Pull request https://github.com/theforeman/foreman/pull/1371 added
#14
Updated by Dominic Cleal over 8 years ago
- Legacy Backlogs Release (now unused) set to 10
#15
Updated by Dominic Cleal over 8 years ago
- Has duplicate Bug #6361: menu item "Hosts --> All hosts" is visible to normal user from anonymous role by default added
#16
Updated by Maria Nita over 8 years ago
- Status changed from Ready For Testing to Closed
- % Done changed from 0 to 100
Applied in changeset a0bd5bb282c27f72a5e3746a1582b73366c15d21.
fixes #4641 - Ensure default role only after save/update. Change default role permissions