Bug 582085

Summary: Satellite 5.3: Modifying certain Errata Advisory names results in ISE (internal server error) due to org.hibernate.NonUniqueObjectException
Product: Red Hat Satellite 5 Reporter: Xixi <xdmoon>
Component: ServerAssignee: Justin Sherrill <jsherril>
Status: CLOSED CURRENTRELEASE QA Contact: Tomas Lestach <tlestach>
Severity: medium Docs Contact:
Priority: medium    
Version: 530CC: cperry, jhutar, mmraka, psklenar, tao, tlestach, xdmoon
Target Milestone: ---   
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2010-10-28 14:52:41 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 487678    

Description Xixi 2010-04-14 04:08:34 UTC
Description of problem:
Trying to update Advisory Name of a few cloned errata (e.g., from CLA-xxxx to CLEA-xxxx) results in Internal Server Error. This issue is so far only seen with certain Enhancement Erratas.

Sample stacktraces:
2010-04-06 12:56:14,925 [TP-Processor3] ERROR org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/rhn].[org.apache.jsp.WEB_002dINF.pages.errata.edit_jsp] - Servlet.service() for servlet org.apache.jsp.WEB_002dINF.pages.errata.edit_jsp threw exception
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.redhat.rhn.domain.errata.impl.PublishedKeyword#aspeed]
        at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:168)
        at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
        at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
        at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
        at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218)
        at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
        at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
        at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
        at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296)
        at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242)
        at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219)
        at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
        at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
        at org.hibernate.event.def.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:131)
        at org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:122)        at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:65)
        at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)
        at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
        at com.redhat.rhn.common.db.datasource.CachedStatement.stealConnection(CachedStatement.java:853)
        at com.redhat.rhn.common.db.datasource.CachedStatement.execute(CachedStatement.java:441)
        at com.redhat.rhn.common.db.datasource.CachedStatement.execute(CachedStatement.java:431)
        at com.redhat.rhn.common.db.datasource.CachedStatement.execute(CachedStatement.java:335)
        at com.redhat.rhn.common.db.datasource.CachedStatement.execute(CachedStatement.java:340)
        at com.redhat.rhn.common.db.datasource.CachedStatement.execute(CachedStatement.java:280)
        at com.redhat.rhn.common.db.datasource.SelectMode.execute(SelectMode.java:105)
        at com.redhat.rhn.manager.errata.ErrataManager.lookupErrata(ErrataManager.java:652)
        at com.redhat.rhn.common.security.acl.ErrataAclHandler.aclErrataIsPublished(ErrataAclHandler.java:51)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
        at java.lang.reflect.Method.invoke(Method.java:600)
        at com.redhat.rhn.common.security.acl.Acl.evalAcl(Acl.java:469)
        at com.redhat.rhn.frontend.nav.AclGuard.canRender(AclGuard.java:69)
        at com.redhat.rhn.frontend.nav.RenderGuardComposite.canRender(RenderGuardComposite.java:49)
        at com.redhat.rhn.frontend.nav.Renderable.canRender(Renderable.java:126)
        at com.redhat.rhn.frontend.nav.DialognavRenderer.navNodeInactive(DialognavRenderer.java:100)
        at com.redhat.rhn.frontend.nav.RenderEngine.renderLevel(RenderEngine.java:96)
        at com.redhat.rhn.frontend.nav.RenderEngine.render(RenderEngine.java:58)
        at com.redhat.rhn.frontend.taglibs.NavMenuTag.renderNav(NavMenuTag.java:150)
        at com.redhat.rhn.frontend.taglibs.NavDialogMenuTag.renderNav(NavDialogMenuTag.java:48)
        at com.redhat.rhn.frontend.taglibs.NavMenuTag.doStartTag(NavMenuTag.java:134)
        at org.apache.jsp.WEB_002dINF.pages.errata.edit_jsp._jspx_meth_rhn_005fdialogmenu_005f0(Unknown Source)
        at org.apache.jsp.WEB_002dINF.pages.errata.edit_jsp._jspService(Unknown Source)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
...

or

2010-04-14 03:04:19,830 [TP-Processor3] ERROR org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/rhn].[org.apache.jsp.WEB_002dINF.pages.errata.edit_jsp] - Servlet.service() for servlet org.apache.jsp.WEB_002dINF.pages.errata.edit_jsp threw exception
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.redhat.rhn.domain.errata.impl.PublishedKeyword#tzdata]
        at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:168)
        at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
        at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
        at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
        at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218)
        at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
        at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
        at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
        at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296)
        at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242)
        at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219)
        at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
        at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
        at org.hibernate.event.def.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:131)
        at org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:122)        at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:65)
        at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)
        at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
        at com.redhat.rhn.common.db.datasource.CachedStatement.stealConnection(CachedStatement.java:853)
        at com.redhat.rhn.common.db.datasource.CachedStatement.execute(CachedStatement.java:441)
        at com.redhat.rhn.common.db.datasource.CachedStatement.execute(CachedStatement.java:431)
        at com.redhat.rhn.common.db.datasource.CachedStatement.execute(CachedStatement.java:335)
        at com.redhat.rhn.common.db.datasource.CachedStatement.execute(CachedStatement.java:340)
        at com.redhat.rhn.common.db.datasource.CachedStatement.execute(CachedStatement.java:280)
        at com.redhat.rhn.common.db.datasource.SelectMode.execute(SelectMode.java)
        at com.redhat.rhn.manager.errata.ErrataManager.lookupErrata(ErrataManager.java:652)
        at com.redhat.rhn.common.security.acl.ErrataAclHandler.aclErrataIsPublished(ErrataAclHandler.java:51)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
        at java.lang.reflect.Method.invoke(Method.java:600)
        at com.redhat.rhn.common.security.acl.Acl.evalAcl(Acl.java:469)
        at com.redhat.rhn.frontend.nav.AclGuard.canRender(AclGuard.java:69)
        at com.redhat.rhn.frontend.nav.RenderGuardComposite.canRender(RenderGuardComposite.java:49)
        at com.redhat.rhn.frontend.nav.Renderable.canRender(Renderable.java:126)
        at com.redhat.rhn.frontend.nav.DialognavRenderer.navNodeInactive(DialognavRenderer.java:100)
        at com.redhat.rhn.frontend.nav.RenderEngine.renderLevel(RenderEngine.java:96)
        at com.redhat.rhn.frontend.nav.RenderEngine.render(RenderEngine.java:58)
        at com.redhat.rhn.frontend.taglibs.NavMenuTag.renderNav(NavMenuTag.java:150)
        at com.redhat.rhn.frontend.taglibs.NavDialogMenuTag.renderNav(NavDialogMenuTag.java:48)
        at com.redhat.rhn.frontend.taglibs.NavMenuTag.doStartTag(NavMenuTag.java:134)
        at org.apache.jsp.WEB_002dINF.pages.errata.edit_jsp._jspx_meth_rhn_005fdialogmenu_005f0(Unknown Source)
        at org.apache.jsp.WEB_002dINF.pages.errata.edit_jsp._jspService(Unknown Source)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
...


Version-Release number of selected component (if applicable):
Red Hat Network (RHN) Satellite 5.3.0

System architecture(s):
RHEL 5 U3 i386

How reproducible:
Always.

Steps to Reproduce:
1. On 5.3 Satellite, clone a channel (such as Red Hat Enterprise Linux v. 5 for 32-bit x86) with all errata;
2. Go to Errata -> Manage Errata (see internal reproducer information)
3. Click on cloned errata - for example "CLA-2009:1691"
4. Try to update advisory name from CLA-2009:1691 to CLEA-2009:1691

Actual results:
Internal Server Error, exception in catalina.out & traceback email (see above)

Expected results:
Errata updates successfully, no error/trackback.

Additional info:

Comment 3 Justin Sherrill 2010-07-27 16:58:26 UTC
Fixed in spacewalk master

45de5b68bea4460e05463cc22005c64e84a9d24b


to QA:  in order to reproduce simply:

1.  create an errata 
2.  publish it
3.  add a few keywords to it (and update the errata)
4.  try to rename the errata

Comment 4 Tomas Lestach 2010-10-07 14:02:09 UTC
I followed the reproducer from Comment#4 (thanks Justin!).

When having an erratum with defined keywords (must not be published) on sat530, any attempt to modify any erratum attribute (synopsis, advisory, product, topic, description, solution, ...) ends up with an ISE on sat530.
Erratum attribute modification on sat540 is successful.

VERIFIED with spacewalk-java-1.2.39-26.el5sat on Satellite-5.4.0-RHEL5-re20101001.1.

Comment 5 Petr Sklenar 2010-10-22 12:42:37 UTC
my test:
1.  create an errata 
2.  publish it
3.  add a few keywords to it (and update the errata)
4.  try to rename the errata
--
re verified with Satellite-5.4.0-RHEL5-re20101019.0-x86_64.iso
--
found during testing Bug 645765  - ISE when adding wrong release into errata

Comment 6 Clifford Perry 2010-10-28 14:47:51 UTC
The 5.4.0 RHN Satellite and RHN Proxy release has occurred. This issue has been resolved with this release. 


RHEA-2010:0801 - RHN Satellite Server 5.4.0 Upgrade
https://rhn.redhat.com/rhn/errata/details/Details.do?eid=10332

RHEA-2010:0803 - RHN Tools enhancement update
https://rhn.redhat.com/rhn/errata/details/Details.do?eid=10333

RHEA-2010:0802 - RHN Proxy Server 5.4.0 bug fix update
https://rhn.redhat.com/rhn/errata/details/Details.do?eid=10334

RHEA-2010:0800 - RHN Satellite Server 5.4.0
https://rhn.redhat.com/rhn/errata/details/Details.do?eid=10335

Docs are available:

http://docs.redhat.com/docs/en-US/Red_Hat_Network_Satellite/index.html 

Regards,
Clifford