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

Migrate WatchListClass objects to the new Notifications filter storage

    XMLWordPrintable

Details

    • Improvement
    • Resolution: Fixed
    • Critical
    • 16.0.0-rc-1
    • 10.11.9
    • Notifications
    • None
    • Unknown

    Description

      After we've moved to Notifications and fixed the storage problems, we're still left in a situation where old filters are stored in (and read from) WatchListClass objects in the user's profile instead of migrating them to the new filters storage that Notifications improved.

      We've seen in practice that this combination could still lead to StackOverflowError even if this has been specifically fixed on the Notifications side with the new storage. E.g.:

      2020-04-23 13:01:56,363 [Notification event executor: count : 4true/28xwiki:XWiki.UserX///////21//////5xwiki/true : 13] ERROR .r.i.NotificationEventExecutor - Failed to retrieve notifications for cache key [4true/28xwiki:XWiki.DanielCarrascosa///////21//////5xwiki/true] 
      java.lang.StackOverflowError: null
              at org.hibernate.hql.antlr.HqlBaseParser.additiveExpression(HqlBaseParser.java:2987)
              at org.hibernate.hql.antlr.HqlBaseParser.concatenation(HqlBaseParser.java:632)
              at org.hibernate.hql.antlr.HqlBaseParser.relationalExpression(HqlBaseParser.java:2757)
              at org.hibernate.hql.antlr.HqlBaseParser.equalityExpression(HqlBaseParser.java:2613)
              at org.hibernate.hql.antlr.HqlBaseParser.negatedExpression(HqlBaseParser.java:2572)
              at org.hibernate.hql.antlr.HqlBaseParser.logicalAndExpression(HqlBaseParser.java:2483)
              at org.hibernate.hql.antlr.HqlBaseParser.logicalOrExpression(HqlBaseParser.java:2443)
              at org.hibernate.hql.antlr.HqlBaseParser.expression(HqlBaseParser.java:2204)
              at org.hibernate.hql.antlr.HqlBaseParser.expressionOrVector(HqlBaseParser.java:4625)
              at org.hibernate.hql.antlr.HqlBaseParser.primaryExpression(HqlBaseParser.java:1032)
              at org.hibernate.hql.antlr.HqlBaseParser.atom(HqlBaseParser.java:3679)
              at org.hibernate.hql.antlr.HqlBaseParser.unaryExpression(HqlBaseParser.java:3442)
      ...
      

      or

      2020-04-23 11:54:54,372 [Notification event executor: count : 4true/28xwiki:XWiki.UserX///////21//////5xwiki/true : 3] ERROR .r.i.NotificationEventExecutor - Failed to retrieve notifications for cache key [4true/28xwiki:XWiki.DanielCarrascosa///////21//////5xwiki/true] 
      java.lang.StackOverflowError: null
              at org.xwiki.notifications.sources.internal.ExpressionNodeToHQLConverter.parseBinaryOperator(ExpressionNodeToHQLConverter.java:251)
              at org.xwiki.notifications.sources.internal.ExpressionNodeToHQLConverter.parseBlock(ExpressionNodeToHQLConverter.java:117)
              at org.xwiki.notifications.sources.internal.ExpressionNodeToHQLConverter.parseBinaryOperator(ExpressionNodeToHQLConverter.java:251)
              at org.xwiki.notifications.sources.internal.ExpressionNodeToHQLConverter.parseBlock(ExpressionNodeToHQLConverter.java:117)
              at org.xwiki.notifications.sources.internal.ExpressionNodeToHQLConverter.parseBinaryOperator(ExpressionNodeToHQLConverter.java:251)
              at org.xwiki.notifications.sources.internal.ExpressionNodeToHQLConverter.parseBlock(ExpressionNodeToHQLConverter.java:117)
              at org.xwiki.notifications.sources.internal.ExpressionNodeToHQLConverter.parseBinaryOperator(ExpressionNodeToHQLConverter.java:251)
              at org.xwiki.notifications.sources.internal.ExpressionNodeToHQLConverter.parseBlock(ExpressionNodeToHQLConverter.java:117)
              at org.xwiki.notifications.sources.internal.ExpressionNodeToHQLConverter.parseBinaryOperator(ExpressionNodeToHQLConverter.java:251)
              at org.xwiki.notifications.sources.internal.ExpressionNodeToHQLConverter.parseBlock(ExpressionNodeToHQLConverter.java:117)
              at org.xwiki.notifications.sources.internal.ExpressionNodeToHQLConverter.parseBinaryOperator(ExpressionNodeToHQLConverter.java:251)
      

      I observed the above on an 10.11.9 XWiki and that particular user had a ton of pages watched and stored in the WatchListClass object under his profile.

      What we would need are 2 things:
      1. Automated migration to be executed when upgrading to a new version of XWiki
      2. Manual migration script (published snippet) to be executed by users that are suffering from this problem and can't upgrade right away (once the automated option would become available in a new version)

      Attachments

        Issue Links

          Activity

            People

              surli Simon Urli
              enygma Eduard Moraru
              Votes:
              1 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: