[MGNLEESOLR-148] CLONE - Version events fired in all workspaces Created: 21/Sep/20  Updated: 24/Sep/20  Resolved: 23/Sep/20

Status: Closed
Project: Solr Search Provider
Component/s: None
Affects Version/s: None
Fix Version/s: 5.2.4, 5.5.1

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

Issue Links:
Cloners
clones MAGNOLIA-7858 Version events fired in all workspaces 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
Date of First Response:
Epic Link: Support
Sprint: Maintenance 25, Maintenance 26
Story Points: 0

 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 11:00:35 CET 2024 using Jira 9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b.