Bug 1444072 - cannot delete organization which contains same repository as org1: ERROR: update or delete on table "rhncontentsource" violates foreign key constraint "rhn_csf_source_fk" on table "rhncontentsourcefilter"
Summary: cannot delete organization which contains same repository as org1: ERROR: upd...
Keywords:
Status: CLOSED CURRENTRELEASE
Alias: None
Product: Red Hat Satellite 5
Classification: Red Hat
Component: Server
Version: 570
Hardware: Unspecified
OS: Unspecified
unspecified
medium
Target Milestone: ---
Assignee: Tomáš Kašpárek
QA Contact: Lukáš Hellebrandt
URL:
Whiteboard:
Depends On:
Blocks: 1340444
TreeView+ depends on / blocked
 
Reported: 2017-04-20 13:51 UTC by Jan Hutař
Modified: 2017-06-21 12:15 UTC (History)
5 users (show)

Fixed In Version: spacewalk-schema-2.5.1-44-sat satellite-schema-5.8.0.28-1-sat
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed: 2017-06-21 12:15:18 UTC
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)

Description Jan Hutař 2017-04-20 13:51:54 UTC
Description of problem:
Cannot delete organization which contains same repository as org1: ERROR: update or delete on table "rhncontentsource" violates foreign key constraint "rhn_csf_source_fk" on table "rhncontentsourcefilter"


Version-Release number of selected component (if applicable):
spacewalk-java-2.3.8-96.el6sat.noarch
satellite-schema-5.7.0.27-1.el6sat.noarch
spacewalk-backend-2.3.3-23.el6sat.noarch


How reproducible:
always


Steps to Reproduce:
1. Create channel A and repo http://dl.fedoraproject.org/pub/epel/6Server/x86_64/ (with filter set to "+freealut*" to make sync faster)
2. Create channel B and sync if from repo with same url&filter but in different organization now
3. Sync channel A in org 1 and channel B in org 2
4. Login as satellite admin in org 1 and attempt to delete org 2
   Admin -> Organizations -> <org2> -> delete organization -> Delete Organization


Actual results:
ISE


Expected results:
Should work


Additional info:
==> /var/log/tomcat6/catalina.out <==
2017-04-20 09:46:50,973 [TP-Processor3] WARN  org.apache.struts.action.RequestProcessor - Unhandled Exception thrown: class com.redhat.rhn.common.db.WrappedSQLException
2017-04-20 09:46:50,974 [TP-Processor3] ERROR com.redhat.rhn.frontend.servlets.SessionFilter - Error during transaction. Rolling back
javax.servlet.ServletException: com.redhat.rhn.common.db.WrappedSQLException: ERROR: update or delete on table "rhncontentsource" violates foreign key constraint "rhn_csf_source_fk" on table "rhncontentsourcefilter"
  Detail: Key (id)=(548) is still referenced from table "rhncontentsourcefilter".
  Where: SQL statement "delete from rhnContentSource where org_id = org_id_in"
PL/pgSQL function rhn_org.delete_org(numeric) line 79 at SQL statement
	at org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:520)
	at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:427)
	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228)
	at com.redhat.rhn.frontend.struts.RhnRequestProcessor.process(RhnRequestProcessor.java:105)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:643)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at com.redhat.rhn.frontend.servlets.AuthFilter.doFilter(AuthFilter.java:127)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
	at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at com.redhat.rhn.frontend.servlets.LocalizedEnvironmentFilter.doFilter(LocalizedEnvironmentFilter.java:67)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at com.redhat.rhn.frontend.servlets.EnvironmentFilter.doFilter(EnvironmentFilter.java:100)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at com.redhat.rhn.frontend.servlets.SessionFilter.doFilter(SessionFilter.java:57)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at com.redhat.rhn.frontend.servlets.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:97)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:299)
	at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
	at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
	at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:769)
	at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:698)
	at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:891)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
	at java.lang.Thread.run(Thread.java:809)
Caused by: 
com.redhat.rhn.common.db.WrappedSQLException: ERROR: update or delete on table "rhncontentsource" violates foreign key constraint "rhn_csf_source_fk" on table "rhncontentsourcefilter"
  Detail: Key (id)=(548) is still referenced from table "rhncontentsourcefilter".
  Where: SQL statement "delete from rhnContentSource where org_id = org_id_in"
PL/pgSQL function rhn_org.delete_org(numeric) line 79 at SQL statement
	at com.redhat.rhn.common.translation.SqlExceptionTranslator.postgreSqlException(SqlExceptionTranslator.java:54)
	at com.redhat.rhn.common.translation.SqlExceptionTranslator.sqlException(SqlExceptionTranslator.java:44)
	at com.redhat.rhn.common.db.datasource.CachedStatement.executeCallable(CachedStatement.java:543)
	at com.redhat.rhn.common.db.datasource.CallableMode.execute(CallableMode.java:35)
	at com.redhat.rhn.domain.org.OrgFactory.deleteOrg(OrgFactory.java:105)
	at com.redhat.rhn.frontend.action.multiorg.OrgDeleteAction.deleteOrg(OrgDeleteAction.java:116)
	at com.redhat.rhn.frontend.action.multiorg.OrgDeleteAction.execute(OrgDeleteAction.java:72)
	at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425)
	... 40 more
Caused by: 
org.postgresql.util.PSQLException: ERROR: update or delete on table "rhncontentsource" violates foreign key constraint "rhn_csf_source_fk" on table "rhncontentsourcefilter"
  Detail: Key (id)=(548) is still referenced from table "rhncontentsourcefilter".
  Where: SQL statement "delete from rhnContentSource where org_id = org_id_in"
PL/pgSQL function rhn_org.delete_org(numeric) line 79 at SQL statement
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2094)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1827)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:508)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:384)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:377)
	at com.mchange.v2.c3p0.impl.NewProxyCallableStatement.execute(NewProxyCallableStatement.java:2706)
	at com.redhat.rhn.common.db.NamedPreparedStatement.execute(NamedPreparedStatement.java:117)
	at com.redhat.rhn.common.db.datasource.CachedStatement.executeCallable(CachedStatement.java:528)
	... 45 more

==> /opt/rh/postgresql92/root/var/lib/pgsql/data/pg_log/postgresql-Thu.log <==
2017-04-20 09:46:50.972 EDT ERROR:  update or delete on table "rhncontentsource" violates foreign key constraint "rhn_csf_source_fk" on table "rhncontentsourcefilter"
2017-04-20 09:46:50.972 EDT DETAIL:  Key (id)=(548) is still referenced from table "rhncontentsourcefilter".
2017-04-20 09:46:50.972 EDT CONTEXT:  SQL statement "delete from rhnContentSource where org_id = org_id_in"
	PL/pgSQL function rhn_org.delete_org(numeric) line 79 at SQL statement
2017-04-20 09:46:50.972 EDT STATEMENT:  select * from rhn_org.delete_org($1) as result
2017-04-20 09:46:50.973 EDT ERROR:  current transaction is aborted, commands ignored until end of transaction block
2017-04-20 09:46:50.973 EDT STATEMENT:  select 'c3p0 ping' from dual

Comment 1 Jan Hutař 2017-04-20 13:53:12 UTC
Related to bug 1444047.

Comment 2 Jan Hutař 2017-04-21 14:01:19 UTC
Related to bug 1444519.

Comment 3 Tomáš Kašpárek 2017-05-03 07:27:56 UTC
spacewalk.git(master): 31c3a53688af7e08c356d3edb19ca4dd639fd85e

Comment 6 Lukáš Hellebrandt 2017-05-23 09:32:57 UTC
Verified with spacewalk-java-2.5.14-84 .

To actually reproduce, it is enough to create a new organization, create a repo within it with a filter, and try to remove the organization. No need to do anything with the first organization or with more than one repos or with any channel:

1) Create testorg
2) In testorg, create testrepo with URL="http://dl.fedoraproject.org/pub/epel/6Server/x86_64/" and filter="+freealut*"
3) From org 1, remove testorg and notice ISE

After the fix, the organization can be removed even if it contains a repository with a filter.


Note You need to log in before you can comment on or make changes to this bug.