Uploaded image for project: 'XWiki Platform'
  1. XWiki Platform
  2. XWIKI-22421

XWikiHibernateBaseStore related error when editing in realtime

    XMLWordPrintable

Details

    • Bug
    • Resolution: Unresolved
    • Major
    • None
    • 16.6.0
    • Realtime
    • None
    • Windows 11 Pro, Chrome 127, using a local instance of XWiki 16.6.0 on MySQL 8.4, Tomcat 9.0.91
    • Unknown

    Description

      Steps to reproduce

      Note that is a difficult issue to reproduce, since I didn't find exactly what triggers it (what step). Nevertheless, these are the steps after which the error occurred:

      1. Login as Admin and enable Realtime editing from Administration
      2. Edit a page in-place
      3. Click on 'Source' button
      4. Insert some text (e.g. 'Admin's Source')
      5. Click again on 'Source' button to re-join the realtime session
      6. Open the same page in an Incognito window or another browser
      7. Login with an user (e.g. U1)
      8. Edit the page and insert some text with the user U1
      9. Wait for the automatic save to occur
      10. Click "Cancel" for both users

      Expected results

      No errors are displayed in the logs.

      Actual results

      In XWiki console there is the following stacktrace:

      2024-08-06 14:49:52,589 [http-nio-8080-exec-4 - http://localhost:1113/bin/cancel/P1/?ajax=1&action=view&] ERROR .x.x.s.XWikiHibernateBaseStore - Exception while close transaction
      javax.persistence.OptimisticLockException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; statement executed: delete from xwikilock where XWL_DOC_ID=?
              at org.hibernate.internal.ExceptionConverterImpl.wrapStaleStateException(ExceptionConverterImpl.java:238)
              at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:93)
              at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181)
              at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188)
              at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1411)
              at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:489)
              at org.hibernate.internal.SessionImpl.flushBeforeTransactionCompletion(SessionImpl.java:3303)
              at org.hibernate.internal.SessionImpl.beforeTransactionCompletion(SessionImpl.java:2438)
              at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.beforeTransactionCompletion(JdbcCoordinatorImpl.java:449)
              at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.beforeCompletionCallback(JdbcResourceLocalTransactionCoordinatorImpl.java:183)
              at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.access$300(JdbcResourceLocalTransactionCoordinatorImpl.java:40)
              at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.commit(JdbcResourceLocalTransactionCoordinatorImpl.java:281)
              at org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:101)
              at com.xpn.xwiki.internal.store.hibernate.HibernateStore.endTransaction(HibernateStore.java:940)
              at com.xpn.xwiki.store.XWikiHibernateBaseStore.execute(XWikiHibernateBaseStore.java:840)
              at com.xpn.xwiki.store.XWikiHibernateBaseStore.executeWrite(XWikiHibernateBaseStore.java:948)
              at com.xpn.xwiki.store.XWikiHibernateStore.deleteLock(XWikiHibernateStore.java:2042)
              at com.xpn.xwiki.store.XWikiCacheStore.deleteLock(XWikiCacheStore.java:651)
              at com.xpn.xwiki.doc.XWikiDocument.removeLock(XWikiDocument.java:7359)
              at com.xpn.xwiki.web.CancelAction.action(CancelAction.java:70)
              at com.xpn.xwiki.web.XWikiAction.execute(XWikiAction.java:636)
              at com.xpn.xwiki.web.XWikiAction.execute(XWikiAction.java:339)
              at com.xpn.xwiki.web.LegacyActionServlet.service(LegacyActionServlet.java:108)
              at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
              at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:199)
              at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
              at com.xpn.xwiki.web.ActionFilter.doFilter(ActionFilter.java:122)
              at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
              at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
              at org.xwiki.wysiwyg.filter.ConversionFilter.doFilter(ConversionFilter.java:61)
              at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
              at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
              at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
              at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
              at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
              at org.xwiki.container.servlet.filters.internal.SetHTTPHeaderFilter.doFilter(SetHTTPHeaderFilter.java:63)
              at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
              at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
              at org.xwiki.resource.servlet.RoutingFilter.doFilter(RoutingFilter.java:132)
              at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
              at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
              at org.xwiki.container.servlet.filters.internal.SavedRequestRestorerFilter.doFilter(SavedRequestRestorerFilter.java:208)
              at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
              at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
              at org.xwiki.container.servlet.filters.internal.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:117)
              at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
              at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
              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:482)
              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:660)
              at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
              at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)
              at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:388)
              at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
              at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:936)
              at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791)
              at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
              at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)
              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(Unknown Source)
      Caused by: org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; statement executed: delete from xwikilock where XWL_DOC_ID=?
              at org.hibernate.jdbc.Expectations$BasicExpectation.checkBatched(Expectations.java:67)
              at org.hibernate.jdbc.Expectations$BasicExpectation.verifyOutcome(Expectations.java:54)
              at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:47)
              at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:3698)
              at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:3987)
              at org.hibernate.action.internal.EntityDeleteAction.execute(EntityDeleteAction.java:123)
              at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:604)
              at org.hibernate.engine.spi.ActionQueue.lambda$executeActions$1(ActionQueue.java:478)
              at java.base/java.util.LinkedHashMap.forEach(Unknown Source)
              at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:475)
              at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:344)
              at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:40)
              at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:107)
              at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1407)
              ... 59 common frames omitted

      The issue was reproduced basically after testing XWIKI-22401, but I didn't manage to reproduce it consistently.

      I've tested also on XWiki 16.5.0, 16.4.1 and 15.10.11 and I couldn't reproduce it (but maybe because the specific conditions for triggering were not met).

      Attachments

        Activity

          People

            Unassigned Unassigned
            iandriuta Ilie Andriuta
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated: