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

        1. 1_Abusive_rename_17_2_0.png
          101 kB
          Ilie Andriuta
        2. 2_Abusive_rename_17_2_0.png
          89 kB
          Ilie Andriuta
        3. XWiki_17_2_1_Abusive_rename_1_child.png
          105 kB
          Ilie Andriuta

        Activity

          People

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

            Dates

              Created:
              Updated:
              Resolved: