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

Abusive modification of the cached document when moving or renaming a page with children under another page with children

    XMLWordPrintable

Details

    • Bug
    • Resolution: Fixed
    • Major
    • 16.10.6, 17.3.0-rc-1
    • 17.2.0
    • Refactoring
    • None
    • Windows 11 Pro, Edge 135, using an instance of XWiki 17.2.1 on Oracle 19c, Tomcat 11.0.5, reproducible also on Jetty/HSQL demo
    • Unknown
    • N/A
    • N/A

    Description

      Steps to reproduce

      1. Create 2 distinct pages with at least a child, like <server>/xwiki/bin/view/aa/bb/ and <server>/xwiki/bin/view/cc/dd/
      2. Go to page cc and rename/ move it to page bb, with children, so the page structure will become <server>/xwiki/bin/view/aa/bb/cc/dd/
      3. Observe the rename log

      Expected results

      No warnings are displayed.

      Actual results

      The following warning is displayed:

      Abusive modification of the cached document
      class java.lang.IllegalStateException: Abusive modification of the cached document
          at com.xpn.xwiki.doc.XWikiDocument.setMetaDataDirty(XWikiDocument.java:2457)
          at com.xpn.xwiki.doc.XWikiDocument.setParentReference(XWikiDocument.java:1289)
          at org.xwiki.refactoring.internal.DefaultModelBridge.updateParentField(DefaultModelBridge.java:359)
          at org.xwiki.refactoring.internal.listener.LegacyParentFieldUpdaterListener.processLocalEvent(LegacyParentFieldUpdaterListener.java:76)
          at org.xwiki.observation.event.AbstractLocalEventListener.onEvent(AbstractLocalEventListener.java:85)
          at org.xwiki.observation.internal.DefaultObservationManager.notify(DefaultObservationManager.java:338)
          at org.xwiki.observation.internal.DefaultObservationManager.notify(DefaultObservationManager.java:303)
          at org.xwiki.refactoring.internal.job.AbstractCopyOrMoveJob.copyOrMove(AbstractCopyOrMoveJob.java:398)
          at org.xwiki.refactoring.internal.job.MoveJob.performRefactoring(MoveJob.java:108)
          at org.xwiki.refactoring.internal.job.AbstractCopyOrMoveJob.maybePerformRefactoring(AbstractCopyOrMoveJob.java:351)
          at org.xwiki.refactoring.internal.job.AbstractCopyOrMoveJob.lambda$visitSpace$0(AbstractCopyOrMoveJob.java:298)
          at org.xwiki.refactoring.internal.job.AbstractEntityJob.visitDocumentNodes(AbstractEntityJob.java:295)
          at org.xwiki.refactoring.internal.job.AbstractEntityJob.visitDocumentAncestorStep(AbstractEntityJob.java:328)
          at org.xwiki.refactoring.internal.job.AbstractEntityJob.visitDocumentAncestor(AbstractEntityJob.java:313)
          at org.xwiki.refactoring.internal.job.AbstractEntityJob.visitDocumentNodes(AbstractEntityJob.java:293)
          at org.xwiki.refactoring.internal.job.AbstractEntityJob.visitDocuments(AbstractEntityJob.java:278)
          at org.xwiki.refactoring.internal.job.AbstractCopyOrMoveJob.visitSpace(AbstractCopyOrMoveJob.java:296)
          at org.xwiki.refactoring.internal.job.AbstractCopyOrMoveJob.process(AbstractCopyOrMoveJob.java:305)
          at org.xwiki.refactoring.internal.job.AbstractCopyOrMoveJob.process(AbstractCopyOrMoveJob.java:267)
          at org.xwiki.refactoring.internal.job.AbstractCopyOrMoveJob.process(AbstractCopyOrMoveJob.java:245)
          at org.xwiki.refactoring.internal.job.AbstractCopyOrMoveJob.process(AbstractCopyOrMoveJob.java:125)
          at org.xwiki.refactoring.internal.job.RenameJob.process(RenameJob.java:50)
          at org.xwiki.refactoring.internal.job.AbstractEntityJobWithChecks.runInternal(AbstractEntityJobWithChecks.java:69)
          at org.xwiki.refactoring.internal.job.AbstractCopyOrMoveJob.runInternal(AbstractCopyOrMoveJob.java:73)
          at org.xwiki.job.AbstractJob.runInContext(AbstractJob.java:246)
          at org.xwiki.job.AbstractJob.run(AbstractJob.java:223)
          at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
          at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
          at java.base/java.lang.Thread.run(Thread.java:1583)

      This is quite a tricky one, since I couldn't reproduce it every time.

      Tested and reproduced also on XWiki 17.2.0 where the warning occurred twice on the same rename action (screenshot attached).
       

      Attachments

        Activity

          People

            tmortagne Thomas Mortagne
            iandriuta Ilie Andriuta
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: