[ 
https://issues.apache.org/jira/browse/SLING-10077?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Timothee Maret updated SLING-10077:
-----------------------------------
    Description: 
Currently the {{o/a/s/d/a/p/queued}} and {{o/a/s/d/a/p/distributed}} events are 
raised as local events in each author instance of a cluster. Handling those 
events in each author instance makes sense for use cases that require 
maintaining a distributed data structure like a cache. However, some use cases 
like content invalidation, would need to handle the events only once.

Currently, event handlers can support the later category of use cases by 
deduplicating the events using the Apache Discovery API. This works but it adds 
complexity in the event handlers and in some edge case, some events may be lost.

To solve both use cases better, we should move from raising local events in 
each author instance to raising the events only on the author leader instance 
and [distribute the 
events|https://sling.apache.org/documentation/bundles/apache-sling-eventing-and-job-handling.html#distributed-events]
 across the cluster. Use cases that need to de-duplicate will be able to do 
that by filtering the events with 

{code}
if (org.apache.sling.event.EventUtil.isLocal(event)) {
        // Process the event on the instance that sent it and thus once per 
cluster
}
{code}

The PackageDistributedNotifier would be run only on the cluster leader 
instance. The leader instance can be detected using the [Discovery 
API|https://sling.apache.org/documentation/bundles/discovery-api-and-impl.html#topology-changes].
 We'd need to introduce a new component that listen to topology change and in 
case it runs on the leader, register the PackageDistributedNotifier service 
using

{code}
org.osgi.framework.BundleContext.registerService(PackageDistributedNotifier.class.getName(),
 packageDistributedNotifier, props)
{code}

  was:
Currently the `o/a/s/d/a/p/queued` and `o/a/s/d/a/p/distributed` events are 
raised as local events in each instance of a cluster. Raising the events in the 
cluster make sense for use cases that require maintaining a distributed data 
structure like a cache.

Some use case trigger logic on the cluster (not individual instances) and would 
benefit from raising a single event.

As an improvement, we could add a mode to distribute or not distribute all 
journal distribution events. Distribution would be enabled by default.


> Mode to raise events only locally
> ---------------------------------
>
>                 Key: SLING-10077
>                 URL: https://issues.apache.org/jira/browse/SLING-10077
>             Project: Sling
>          Issue Type: Improvement
>    Affects Versions: Content Distribution Journal Core 0.1.18
>            Reporter: Timothee Maret
>            Assignee: Timothee Maret
>            Priority: Major
>
> Currently the {{o/a/s/d/a/p/queued}} and {{o/a/s/d/a/p/distributed}} events 
> are raised as local events in each author instance of a cluster. Handling 
> those events in each author instance makes sense for use cases that require 
> maintaining a distributed data structure like a cache. However, some use 
> cases like content invalidation, would need to handle the events only once.
> Currently, event handlers can support the later category of use cases by 
> deduplicating the events using the Apache Discovery API. This works but it 
> adds complexity in the event handlers and in some edge case, some events may 
> be lost.
> To solve both use cases better, we should move from raising local events in 
> each author instance to raising the events only on the author leader instance 
> and [distribute the 
> events|https://sling.apache.org/documentation/bundles/apache-sling-eventing-and-job-handling.html#distributed-events]
>  across the cluster. Use cases that need to de-duplicate will be able to do 
> that by filtering the events with 
> {code}
> if (org.apache.sling.event.EventUtil.isLocal(event)) {
>       // Process the event on the instance that sent it and thus once per 
> cluster
> }
> {code}
> The PackageDistributedNotifier would be run only on the cluster leader 
> instance. The leader instance can be detected using the [Discovery 
> API|https://sling.apache.org/documentation/bundles/discovery-api-and-impl.html#topology-changes].
>  We'd need to introduce a new component that listen to topology change and in 
> case it runs on the leader, register the PackageDistributedNotifier service 
> using
> {code}
> org.osgi.framework.BundleContext.registerService(PackageDistributedNotifier.class.getName(),
>  packageDistributedNotifier, props)
> {code}



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to