+++ This bug was initially created as a clone of Bug #1518670 +++ Description of problem: Add a new kickstart script (specifying a snippet), try to change order, get an internal server error. catalina.out shows the following: 2017-11-21 08:50:35,755 [TP-Processor12] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: 23505 2017-11-21 08:50:35,756 [TP-Processor12] ERROR org.hibernate.util.JDBCExceptionReporter - ERROR: duplicate key value violates unique constraint "rhn_ksscript_ksid_pos_uq" 2017-11-21 08:50:35,760 [TP-Processor12] ERROR com.redhat.rhn.frontend.servlets.SessionFilter - Error during transaction. Rolling back org.hibernate.exception.ConstraintViolationException: could not update: [com.redhat.rhn.domain.kickstart.KickstartScript#50] Version-Release number of selected component (if applicable): 2.7 How reproducible: Michael Mráka reproduced it and asked me to open this bug. Steps to Reproduce: See the following thread for more details: https://www.redhat.com/archives/spacewalk-list/2017-November/msg00048.html Actual results: Internal Server Error Expected results: Script re-ordering should work like it did on Spacewalk 2.6 and prior releases. Additional info: ~~~~~~~~ (end of cloned info) ~~~~~~~~~~~ This is also showing up in Satellite 5.8. Here are the relevant entries from catalina.out and localhost.log, respectively: ~~~ 2017-12-04 11:47:50,519 [TP-Processor20] ERROR com.redhat.rhn.frontend.servlets.SessionFilter - Error during transaction. Rolling back org.hibernate.exception.ConstraintViolationException: could not update: [com.redhat.rhn.domain.kickstart.KickstartScript#2] at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:94) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2443) at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2325) at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2625) at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:115) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:278) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:262) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167) at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1030) at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:367) at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137) at com.redhat.rhn.common.hibernate.ConnectionManager.commitTransaction(ConnectionManager.java:233) at com.redhat.rhn.common.hibernate.HibernateFactory.commitTransaction(HibernateFactory.java:331) at com.redhat.rhn.frontend.servlets.SessionFilter.doFilter(SessionFilter.java:58) 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:785) Caused by: org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "rhn_ksscript_ksid_pos_uq" Detail: Key (kickstart_id, "position")=(1, 2) already exists. 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.executeUpdate(AbstractJdbc2Statement.java:330) at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:79) at org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:46) at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2421) ... 32 more ~~~ ~~~ Dec 04, 2017 11:46:18 AM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet action threw exception com.redhat.rhn.common.hibernate.HibernateRuntimeException: Error during transaction. Rolling back at com.redhat.rhn.frontend.servlets.SessionFilter.doFilter(SessionFilter.java:72) 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:785) Caused by: org.hibernate.exception.ConstraintViolationException: could not update: [com.redhat.rhn.domain.kickstart.KickstartScript#2] at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:94) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2443) at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2325) at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2625) at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:115) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:278) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:262) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167) at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1030) at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:367) at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137) at com.redhat.rhn.common.hibernate.ConnectionManager.commitTransaction(ConnectionManager.java:233) at com.redhat.rhn.common.hibernate.HibernateFactory.commitTransaction(HibernateFactory.java:331) at com.redhat.rhn.frontend.servlets.SessionFilter.doFilter(SessionFilter.java:58) ... 18 more Caused by: org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "rhn_ksscript_ksid_pos_uq" Detail: Key (kickstart_id, "position")=(1, 2) already exists. 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.executeUpdate(AbstractJdbc2Statement.java:330) at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:79) at org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:46) at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2421) ... 32 more ~~~
This issue is introduced by hibernate not storing changes to database immediately. In order to update objects in database "manually" it's required to flush session. This behavior is different from 5.7.
spacewalk 517e9fd1ab8cb6ec749c8876cb87d1c82bdbd620
Any chance you could backport this fix to Spacewalk 2.7 and publish the package? Thanks.
Until it's a security vulnerability, we do not backport fixes to 2.7.
I tried applying this patch to the SPACEWALK-2.7 branch. It was successful. The resulting file, java/code/src/com/redhat/rhn/frontend/action/kickstart/KickstartScriptOrderAction.java, is identical to the tip of the the master branch. However, even with the patch, the same internal server error gets triggered from script reordering. Is there something on the master branch that I am missing with regards to patching the SPACEWALK-2.7 branch or maybe this patch is incomplete? Thank you
VERIFIED on spacewalk-java-2.5.14-108.el6sat Reproducer via comment 0
Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://access.redhat.com/errata/RHBA-2018:0274