Uploaded image for project: 'Cache Modules'
  1. Cache Modules
  2. MGNLCACHE-235

CLONE - Version events fired in all workspaces

XMLWordPrintable

      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.

        Acceptance criteria

              fgrilli Federico Grilli
              rgange Richard Gange
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Created:
                Updated:
                Resolved:

                  Bug DoR
                  Task DoD