uyuni-project / uyuni

Source code for Uyuni
https://www.uyuni-project.org/
GNU General Public License v2.0
428 stars 179 forks source link

WEB TRACEBACK exception com.redhat.rhn.domain.channel.ChannelSyncFlag #8693

Closed StefanSa closed 4 months ago

StefanSa commented 4 months ago

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.

The following exception occurred while executing this request:
GET /rhn/software/packages/Details.do

Date:5/3/24 3:08:37 PM CEST
Headers:
  host: test.local
  connection: keep-alive
  sec-ch-ua: "Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"
  sec-ch-ua-mobile: ?0
  sec-ch-ua-platform: "Windows"
  Upgrade-Insecure-Requests: 1
  user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36
  accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
  Sec-Fetch-Site: same-origin
  Sec-Fetch-Mode: navigate
  Sec-Fetch-User: ?1
  Sec-Fetch-Dest: document
  referer: https://test.local/rhn/channels/ChannelPackages.do?cid=226
  accept-encoding: gzip, deflate, br, zstd
  accept-language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7
  cookie: JSESSIONID=63D0F3D6AA607D713248C42BD7231293; pxt-session-cookie=2715352x0a2d5fa75cbf0d51d03f42756b882638af3df52da7f247e93e3c19aad09788f0

Request:
Local Name = test.local
Server Name = test.local
Requested Session Id came from Cookie
Requested Session Valid = true
Session = [org.apache.catalina.session.StandardSessionFacade@7852a19c[session=StandardSession[63D0F3D6AA607D713248C42BD7231293](mailto:org.apache.catalina.session.StandardSessionFacade@7852a19c[session=StandardSession[63D0F3D6AA607D713248C42BD7231293)]]
Protocol = https
Request Locale = en_US
Request Character Encoding = UTF-8
Attribute Names = rhnActiveLang, org.apache.struts.action.MESSAGE, org.apache.struts.action.mapping.instance, org.apache.tomcat.util.net.secure_protocol_version, requestedUri, isDebugPackage, session, javax.servlet.request.key_size, org.apache.struts.action.MODULE, javax.servlet.request.cipher_suite, url, javax.servlet.request.ssl_session_id, __sitemesh__filterapplied, package_key, javax.servlet.jsp.jstl.fmt.timeZone.request, package_name, 

User Information:
User StefanS (id 2, org_id 1)

Exception:
javax.servlet.ServletException: javax.persistence.PersistenceException: org.hibernate.HibernateException: More than one row with the given identifier was found: 228, for class: com.redhat.rhn.domain.channel.ChannelSyncFlag
    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: javax.persistence.PersistenceException: org.hibernate.HibernateException: More than one row with the given identifier was found: 228, for class: com.redhat.rhn.domain.channel.ChannelSyncFlag
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)
    at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1575)
    at com.redhat.rhn.common.hibernate.HibernateFactory.listObjectsByNamedQuery(HibernateFactory.java:275)
    at com.redhat.rhn.common.hibernate.HibernateFactory.listObjectsByNamedQuery(HibernateFactory.java:219)
    at com.redhat.rhn.domain.channel.ChannelFactory.getAccessibleChannelsByOrg(ChannelFactory.java:386)
    at com.redhat.rhn.frontend.action.rhnpackage.PackageDetailsAction.execute(PackageDetailsAction.java:120)
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
    ... 47 more
Caused by: org.hibernate.HibernateException: More than one row with the given identifier was found: 228, for class: com.redhat.rhn.domain.channel.ChannelSyncFlag
    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.internalLoad(SessionImpl.java:1149)
    at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:682)
    at org.hibernate.type.EntityType.resolve(EntityType.java:464)
    at org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:205)
    at org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:160)
    at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:1172)
    at org.hibernate.loader.Loader.processResultSet(Loader.java:1022)
    at org.hibernate.loader.Loader.doQuery(Loader.java:960)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:351)
    at org.hibernate.loader.Loader.doList(Loader.java:2787)
    at org.hibernate.loader.Loader.doList(Loader.java:2770)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2604)
    at org.hibernate.loader.Loader.list(Loader.java:2599)
    at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:338)
    at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:2243)
    at org.hibernate.internal.AbstractSharedSessionContract.list(AbstractSharedSessionContract.java:1069)
    at org.hibernate.query.internal.NativeQueryImpl.doList(NativeQueryImpl.java:173)
    at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1566)
    ... 52 more

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

Informationen zu Paket Uyuni-Server-release:
--------------------------------------------
Repository         : Uyuni Server Stable
Name               : Uyuni-Server-release
Version            : 2024.03-230900.214.6.uyuni3
Arch               : x86_64
Anbieter           : obs://build.opensuse.org/systemsmanagement:Uyuni
Support Level      : Stufe 3
Installierte Größe : 1,4 KiB
Installiert        : Ja
Status             : aktuell
Quellpaket         : Uyuni-Server-release-2024.03-230900.214.6.uyuni3.src
Zusammenfassung    : Uyuni Server
Beschreibung       :
    Uyuni lets you efficiently manage physical, virtual,
    and cloud-based Linux systems. It provides automated and cost-effective
    configuration and software management, asset management, and system
    provisioning.

Uyuni proxy version (if used)

No response

Useful logs

No response

Additional information

No response

rjmateus commented 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

StefanSa commented 4 months ago

Hi Ricardo, the Selecect / Query gives no information, empty output.

rjmateus commented 4 months ago

then run it again, but without the where clause, and check if any duplicated id is present

StefanSa commented 4 months ago

Ricardo, You mean this one? spacewalk-sql --select-mode - <<< "select * from rhnChannelSyncFlag ;" > query.out

If so, no output either.

rjmateus commented 4 months ago

did you check inside the file "query.out"? Not even the column names?

StefanSa commented 4 months ago

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)
gabjef commented 4 months ago

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
mcalmer commented 4 months ago

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.

mcalmer commented 4 months ago

@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?

StefanSa commented 4 months ago

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 commented 4 months ago

@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.

StefanSa commented 4 months ago

The automatic synchronization of the repo is now also working again.

gabjef commented 4 months ago

@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.

mcalmer commented 4 months ago

fix merged. Will be part of 2024.06

srbarrios commented 3 months ago

FYI, I think I fall into the same issue, when I tested ISSv2 import. I though then it was related to it, but I guess no?

Here the card and the bug.