[ 
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 
(deduplicate events).

Deduplicating events will be done by leveraging the Sling Discovery API. When 
deduplicating is set, only the leader instance will sent distributed events.

Prior suggested approach of distributing events through the cluster is not a 
good option because it could overload the repository due to steady and frequent 
commits required to support the distribution of events through the cluster.

  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 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}


> 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 
> (deduplicate events).
> Deduplicating events will be done by leveraging the Sling Discovery API. When 
> deduplicating is set, only the leader instance will sent distributed events.
> Prior suggested approach of distributing events through the cluster is not a 
> good option because it could overload the repository due to steady and 
> frequent commits required to support the distribution of events through the 
> cluster.



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

Reply via email to