[MAGNOLIA-7858] Version events fired in all workspaces Created: 03/Aug/20  Updated: 13/Apr/21  Resolved: 23/Sep/20

Status: Closed
Project: Magnolia
Component/s: None
Affects Version/s: 5.7.8, 6.2.3
Fix Version/s: 5.7.9, 6.2.4

Type: Bug Priority: Critical
Reporter: Richard Gange Assignee: Federico Grilli
Resolution: Fixed Votes: 0
Labels: maintenance, versioning
Remaining Estimate: 0d
Time Spent: 0.25d
Original Estimate: Not Specified

Attachments: PNG File jcr-browser-messages-wksp-asset-version.png     PNG File jcr-browser-messages-wksp-page-version.png     Text File page-node-creation-and-publish.log     XML File scripts.info.xml    
Issue Links:
Cloners
is cloned by BLOSSOM-278 CLONE - Version events fired in all w... Closed
is cloned by MGNLCACHE-235 CLONE - Version events fired in all w... Closed
is cloned by MGNLEESOLR-148 CLONE - Version events fired in all w... Closed
is cloned by MGNLSLOCK-53 CLONE - Version events fired in all w... Closed
relation
is related to MGNLBACKUP-141 ObservationAwareBackupExecutor observ... Open
is related to LIVECOPY-229 Observation of website root node can ... Closed
Template:
Acceptance criteria:
Empty
Task DoD:
[ ]* Doc/release notes changes? Comment present?
[ ]* Downstream builds green?
[ ]* Solution information and context easily available?
[ ]* Tests
[ ]* FixVersion filled and not yet released
[ ]  Architecture Decision Record (ADR)
Bug DoR:
[ ]* Steps to reproduce, expected, and actual results filled
[ ]* Affected version filled
Release notes required:
Yes
Date of First Response:
Epic Link: Support
Sprint: Maintenance 24, Maintenance 25, Maintenance 26
Story Points: 13

 Description   

When a page or asset is versioned a node added event occurs in all workspaces. The versions can be visually inspected from the JCR Browser:

Set true: /modules/jcr-browser-app/apps/jcr-browser/subApps/browser/contentConnector@includeSystemNodes

This screenshots one example of a page version and one example of an asset version:
Page in messages wksp

Asset in messages wksp

Expected
New versions should not effect the observation mechanism of every workspace.

Actual Result
A node added event is fired in every workspace.

To see the issue create this groovy script in the package structure info.magnolia.test:
import: scripts.info.xml

package info.magnolia.test;

import javax.jcr.observation.*;
import javax.jcr.RepositoryException;
import javax.jcr.observation.Event;

import info.magnolia.observation.*;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class NodeAddedEvent implements EventListener {

    private static final Logger log = LoggerFactory.getLogger(NodeAddedEvent.class);
    
    private String workspace = "";
    public NodeAddedEvent(String workspace) {
        log.info("Worksapce listener registered: {}", workspace);
        this.workspace = workspace;
    }
    
    @Override
    public void onEvent(EventIterator events) {
        
        while (events.hasNext()) {
            Event event = events.nextEvent();
            
        if (event.getType() == Event.NODE_ADDED)
            try {
                log.info("Node added to {}: {}", workspace, event.getPath());
            } catch (RepositoryException e) {
                e.printStackTrace();
            }
        
        }
    }
}

workspaces = [
    "advancedCache", "campaigns", "category",
    "config", "dam", "imaging", "keystore",
    "marketing-tags", "messages", "magnolia-mgnlSystem",
    "magnolia-mgnlVersion", "personas", "profiles", "rankings", "resources",
    "rss", "scripts", "segments", "stories", "tags", "tasks",
    "usergroups", "userroles", "users", "visitors", "website", "workflow"
];

for (workspace : workspaces) {
    println workspace;
    (WorkspaceEventListenerRegistration
        .observe(workspace, "/", new NodeAddedEvent(workspace))
        .withSubNodes(true)).register();
}

Create a page and publish it. The NodeAddedEvent will log every new node created. page-node-creation-and-publish.log

Conclusions

  • Each time you add a new workspace to the system you are creating additional drag on the versioning system.
  • Since the versions can be seen from every workspace you must be careful when iterating the nodes of a workspace. Most likely you do not want to iterate the system level nodes.

Generated at Mon Feb 12 04:27:28 CET 2024 using Jira 9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b.