Closed StefanSa closed 4 months ago
what do you have on that table?
run the following command to check:
spacewalk-sql --select-mode - <<< "select * from rhnChannelSyncFlag where channel_id = 228;" > query.out
You should see if more than one entry for that id is present. if yes, delete one of it
Hi Ricardo, the Selecect / Query gives no information, empty output.
then run it again, but without the where clause, and check if any duplicated id is present
Ricardo,
You mean this one?
spacewalk-sql --select-mode - <<< "select * from rhnChannelSyncFlag ;" > query.out
If so, no output either.
did you check inside the file "query.out"? Not even the column names?
Sorry @rjmateus, i was actually looking on the wrong server. Here is the result of the first query.
channel_id | no_strict | no_errata | only_latest | create_tree | quit_on_error
------------+-----------+-----------+-------------+-------------+---------------
228 | f | f | f | f | f
228 | f | f | f | f | f
(2 Lines)
After upgrading to 2024.03 we are having the same issue for channel_id 101:
# spacewalk-sql --select-mode - <<< "select * from rhnChannelSyncFlag where channel_id = 101;"
channel_id | no_strict | no_errata | only_latest | create_tree | quit_on_error
------------+-----------+-----------+-------------+-------------+---------------
101 | f | f | f | f | f
101 | f | f | f | f | f
(2 rows)
What is the magic command to delete the duplicate?
Additional logging info from a traceback:
Exception:
javax.servlet.ServletException: org.hibernate.HibernateException: More than one row with the given identifier was found: 101, for class: com.redhat.rhn.domain.channel.Channel
at org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:237)
at com.redhat.rhn.frontend.struts.RhnRequestProcessor.process(RhnRequestProcessor.java:104)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:529)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:154)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:179)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:154)
at com.redhat.rhn.frontend.servlets.AuthFilter.doFilter(AuthFilter.java:110)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:179)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:154)
at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:142)
at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:58)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:179)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:154)
at com.redhat.rhn.frontend.servlets.LocalizedEnvironmentFilter.doFilter(LocalizedEnvironmentFilter.java:71)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:179)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:154)
at com.redhat.rhn.frontend.servlets.EnvironmentFilter.doFilter(EnvironmentFilter.java:99)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:179)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:154)
at com.redhat.rhn.frontend.servlets.SessionFilter.doFilter(SessionFilter.java:59)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:179)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:154)
at com.redhat.rhn.frontend.servlets.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:98)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:179)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:154)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:670)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)
at org.apache.coyote.ajp.AjpProcessor.service(AjpProcessor.java:424)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:928)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1786)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: org.hibernate.HibernateException: More than one row with the given identifier was found: 101, for class: com.redhat.rhn.domain.channel.Channel
at org.hibernate.loader.entity.plan.AbstractLoadPlanBasedEntityLoader.extractEntityResult(AbstractLoadPlanBasedEntityLoader.java:254)
at org.hibernate.loader.entity.plan.AbstractLoadPlanBasedEntityLoader.load(AbstractLoadPlanBasedEntityLoader.java:198)
at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:4290)
at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:604)
at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:572)
at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:226)
at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:350)
at org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:127)
at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:93)
at org.hibernate.internal.SessionImpl.fireLoadNoChecks(SessionImpl.java:1277)
at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1265)
at org.hibernate.internal.SessionImpl.access$2000(SessionImpl.java:208)
at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.doLoad(SessionImpl.java:2901)
at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2875)
at org.hibernate.internal.SessionImpl.get(SessionImpl.java:1097)
at com.redhat.rhn.domain.channel.ChannelFactory.lookupById(ChannelFactory.java:85)
at com.redhat.rhn.frontend.dto.ChannelTreeNode.compareTo(ChannelTreeNode.java:405)
at com.redhat.rhn.frontend.dto.ChannelTreeNode.compareTo(ChannelTreeNode.java:33)
at java.base/java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:325)
at java.base/java.util.ComparableTimSort.sort(ComparableTimSort.java:202)
at java.base/java.util.Arrays.sort(Arrays.java:1315)
at java.base/java.util.Arrays.sort(Arrays.java:1509)
at java.base/java.util.ArrayList.sort(ArrayList.java:1750)
at java.base/java.util.Collections.sort(Collections.java:145)
at com.redhat.rhn.frontend.filter.TreeFilter.handleOrphans(TreeFilter.java:197)
at com.redhat.rhn.frontend.filter.TreeFilter.filterData(TreeFilter.java:93)
at com.redhat.rhn.frontend.listview.ListControl.filterData(ListControl.java:167)
at com.redhat.rhn.manager.BaseManager.processListControl(BaseManager.java:184)
at com.redhat.rhn.manager.BaseManager.makeDataResult(BaseManager.java:94)
at com.redhat.rhn.manager.channel.ChannelManager.allChannelTree(ChannelManager.java:301)
at com.redhat.rhn.frontend.action.channel.AllChannelTreeAction.getDataResult(AllChannelTreeAction.java:36)
at com.redhat.rhn.frontend.action.channel.BaseChannelTreeAction.execute(BaseChannelTreeAction.java:55)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
... 47 more
Can you try the following statement on the database?
$> spacewalk-sql --select-mode - <<< "
ALTER TABLE rhnChannelSyncFlag DROP CONSTRAINT IF EXISTS rhn_chsf_cid_pk;
ALTER TABLE rhnChannelSyncFlag DROP CONSTRAINT IF EXISTS rhn_chsf_cid_fk;
DELETE FROM rhnChannelSyncFlag T1
USING rhnChannelSyncFlag T2
WHERE T1.ctid < T2.ctid -- delete the "older" ones
AND T1.channel_id = T2.channel_id; -- list columns that define duplicates
ALTER TABLE rhnChannelSyncFlag ADD CONSTRAINT rhn_chsf_cid_pk PRIMARY KEY (channel_id);
ALTER TABLE rhnChannelSyncFlag ADD CONSTRAINT rhn_chsf_cid_fk FOREIGN KEY (channel_id) REFERENCES rhnChannel(id) ON DELETE CASCADE;
"
It will remove the foreign key, remove the duplicates by keeping the row with is "newer" and create a primary key and a foreign key in channel_id.
I expect that you might hit other problem in the UI when you try to change the flags. This would be very interesting for us to know when you hit them.
@StefanSa @gabjef do you remember how you get into this situation? Just by using the Web UI I cannot produce duplicate entries in this table. Are you using API / spacecmd or something else?
Can you try the following statement on the database?
$> spacewalk-sql --select-mode - <<< " ALTER TABLE rhnChannelSyncFlag DROP CONSTRAINT IF EXISTS rhn_chsf_cid_pk; ALTER TABLE rhnChannelSyncFlag DROP CONSTRAINT IF EXISTS rhn_chsf_cid_fk; DELETE FROM rhnChannelSyncFlag T1 USING rhnChannelSyncFlag T2 WHERE T1.ctid < T2.ctid -- delete the "older" ones AND T1.channel_id = T2.channel_id; -- list columns that define duplicates ALTER TABLE rhnChannelSyncFlag ADD CONSTRAINT rhn_chsf_cid_pk PRIMARY KEY (channel_id); ALTER TABLE rhnChannelSyncFlag ADD CONSTRAINT rhn_chsf_cid_fk FOREIGN KEY (channel_id) REFERENCES rhnChannel(id) ON DELETE CASCADE; "
It will remove the foreign key, remove the duplicates by keeping the row with is "newer" and create a primary key and a foreign key in channel_id.
I expect that you might hit other problem in the UI when you try to change the flags. This would be very interesting for us to know when you hit them.
Hallo Michael @mcalmer (SuSe Firewall 2002) :) i can confirm that this has been fixed with this statement.
best regards. Stefan
@StefanSa @gabjef do you remember how you get into this situation? Just by using the Web UI I cannot produce duplicate entries in this table. Are you using API / spacecmd or something else?
@mcalmer Not really. Two major things have happened here, the version upgrade of the uyuni server itself and the addition of the microos repo.
The automatic synchronization of the repo is now also working again.
@StefanSa @gabjef do you remember how you get into this situation? Just by using the Web UI I cannot produce duplicate entries in this table. Are you using API / spacecmd or something else?
@mcalmer
1 - The SQL statement fixed our issue (at least from what I have seen so far). Thanks!
2 - For this server instance we originally used the Web UI to create probably 30% of our channels, but for the rest we started using spacewalk-common-channels. Note that we also have a number of channels created using CLM app stream filter via a recurring job. So our channel creation is a combination of Web UI, spacewalk-common-channels and CLM project.
fix merged. Will be part of 2024.06
Problem description
Hi there, Since the last version v2024.03, when i click on different software channels or their objects in the WebUI, i get this error message.
I don't know if it has anything to do with it, but since a few weeks the automatic synchronization of the repos doesn't work anymore. You have to start this manually, e.g. in the WebUI.
Thanks for any help here. Stefan
Steps to reproduce
1. 2. 3. ...
Uyuni version
Uyuni proxy version (if used)
No response
Useful logs
No response
Additional information
No response