• Icon: Bug Bug
    • Resolution: Answered
    • Icon: Medium Medium
    • None
    • 5.5
    • None

      I created a new event:

      import com.atlassian.confluence.event.events.ConfluenceEvent;
      import com.atlassian.confluence.event.events.cluster.ClusterEvent;
      import java.io.Serializable;
      
      public class DraftUpdateEvent extends ConfluenceEvent implements ClusterEvent, Serializable {
          public DraftUpdateEvent(Object aSource) {
              super(aSource);
          }
      }
      

      And I publish the event by:

      eventManager.publishEvent(new DraftUpdateEvent(this));
      

      The event is published on the local node, but not on the remote node. Am I creating or publishing the event incorrectly for a clustered environment?

      Thanks for your help!

            [CONFSERVER-33810] Cluster Event Not Spanning Nodes 5.5.1-m5-cluster

            Thank you!

            Brett Faike added a comment - Thank you!

            brett21, I've resolved this issue because I'm pretty certain the problem was that we hadn't properly documented how to handle the cluster events.

            However, if you are still having issues after following these updates instructions please let me know here. And thanks for highlighting this problem!

            Paul Curren added a comment - brett21 , I've resolved this issue because I'm pretty certain the problem was that we hadn't properly documented how to handle the cluster events. However, if you are still having issues after following these updates instructions please let me know here. And thanks for highlighting this problem!

            Paul Curren added a comment - onevalainen , could you document this "quirk" in https://developer.atlassian.com/pages/viewpage.action?pageId=2031761#HowdoIensuremypluginworksproperlyinacluster?-Eventhandling ?

            Oliver Burn added a comment - - edited

            You need to have listeners for both the local and the remote events (it's a quirk of Confluence).

            As an example, here is the event handling code for SiteDarkFeatureEnabledEvent and SiteDarkFeatureDisabledEvent events:

                @EventListener // local events
                public void onSiteDarkFeatureEnabledEvent(SiteDarkFeatureEnabledEvent event)
                {
                    if (DARK_FEATURE_SITE_KEY_FOR_DISABLE_MONITORING.equals(event.getFeatureKey()) && !isMonitoringEnabled())
                    {
                        control.disableMonitoring();
                    }
                    else if (DARK_FEATURE_SITE_KEY_FOR_ENABLE_CPU_TIMING.equals(event.getFeatureKey()) && isCpuMonitoringEnabled())
                    {
                        control.enableCpuTiming();
                    }
                }
            
                @EventListener // local events
                public void onSiteDarkFeatureDisabledEvent(SiteDarkFeatureDisabledEvent event)
                {
                    if (DARK_FEATURE_SITE_KEY_FOR_DISABLE_MONITORING.equals(event.getFeatureKey()) && isMonitoringEnabled())
                    {
                        control.enableMonitoring();
                    }
                    else if (DARK_FEATURE_SITE_KEY_FOR_ENABLE_CPU_TIMING.equals(event.getFeatureKey()) && !isCpuMonitoringEnabled())
                    {
                        control.disableCpuTiming();
                    }
                }
            
                @EventListener // remote events
                public void onRemoteEvent(ClusterEventWrapper wrapper)
                {
                    final Event event = wrapper.getEvent();
                    if (event instanceof SiteDarkFeatureEnabledEvent)
                    {
                        onSiteDarkFeatureEnabledEvent((SiteDarkFeatureEnabledEvent) event);
                    }
                    else if (event instanceof SiteDarkFeatureDisabledEvent)
                    {
                        onSiteDarkFeatureDisabledEvent((SiteDarkFeatureDisabledEvent) event);
                    }
                }
            

            Oliver Burn added a comment - - edited You need to have listeners for both the local and the remote events (it's a quirk of Confluence). As an example, here is the event handling code for SiteDarkFeatureEnabledEvent and SiteDarkFeatureDisabledEvent events: @EventListener // local events public void onSiteDarkFeatureEnabledEvent(SiteDarkFeatureEnabledEvent event) { if (DARK_FEATURE_SITE_KEY_FOR_DISABLE_MONITORING.equals(event.getFeatureKey()) && !isMonitoringEnabled()) { control.disableMonitoring(); } else if (DARK_FEATURE_SITE_KEY_FOR_ENABLE_CPU_TIMING.equals(event.getFeatureKey()) && isCpuMonitoringEnabled()) { control.enableCpuTiming(); } } @EventListener // local events public void onSiteDarkFeatureDisabledEvent(SiteDarkFeatureDisabledEvent event) { if (DARK_FEATURE_SITE_KEY_FOR_DISABLE_MONITORING.equals(event.getFeatureKey()) && isMonitoringEnabled()) { control.enableMonitoring(); } else if (DARK_FEATURE_SITE_KEY_FOR_ENABLE_CPU_TIMING.equals(event.getFeatureKey()) && !isCpuMonitoringEnabled()) { control.disableCpuTiming(); } } @EventListener // remote events public void onRemoteEvent(ClusterEventWrapper wrapper) { final Event event = wrapper.getEvent(); if (event instanceof SiteDarkFeatureEnabledEvent) { onSiteDarkFeatureEnabledEvent((SiteDarkFeatureEnabledEvent) event); } else if (event instanceof SiteDarkFeatureDisabledEvent) { onSiteDarkFeatureDisabledEvent((SiteDarkFeatureDisabledEvent) event); } }

            oburn or onevalainen, could you take a look at this please. Can provide Brett with some advice on publishing cluster events, or confirm that we have a bug?

            Paul Curren added a comment - oburn or onevalainen , could you take a look at this please. Can provide Brett with some advice on publishing cluster events, or confirm that we have a bug?

              Unassigned Unassigned
              10f1f4ac847f Brett Faike
              Affected customers:
              0 This affects my team
              Watchers:
              3 Start watching this issue

                Created:
                Updated:
                Resolved: