[
https://issues.apache.org/jira/browse/IGNITE-20692?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Aleksandr Polovtcev updated IGNITE-20692:
-----------------------------------------
Description:
I propose to introduce a mechanism for producing and consuming events related
to the lifecycle of Partitions (a.k.a. Replicas). This mechanism can useful for
other components, such as Index Manager to track which indices should be
created or dropped because the corresponding partition has been moved.
I imagine this mechanism as follows:
{code:java}
interface ReplicaLifecycleListener {
/**
* Called after a replica has been started on the local node.
*/
CompletableFuture<Void> afterReplicaStarted(ReplicationGroupId
replicaGrpId);
/**
* Called before a replica has been stopped on the local node.
*/
CompletableFuture<Void> beforeReplicaStopped(ReplicationGroupId
replicaGrpId);
}
{code}
This listener should be notified of the events by the Replica Manager (I
believe the correct places would be {{ReplicaManager#startReplica}} and
{{ReplicaManager#stopReplica}}). Replica Manager should also provide API to
register/deregister such listeners.
Also note that notification methods return CompletableFutures. These futures
should block the corresponding operation (adding the new Replica to the
ReplicaManager#replicas map or stopping a Replica). This will allow to obtain a
happens-before relationship between the events and their listeners.
was:
I propose to introduce a mechanism for producing and consuming events related
to the lifecycle of Partitions (a.k.a. Replicas). This mechanism can useful for
other components, such as Index Manager to track which indices should be
created or dropped because the corresponding partition has been moved.
I imagine this mechanism as follows:
{code:java}
interface ReplicaLifecycleListener {
/**
* Called after a replica has been started on the local node.
*/
CompletableFuture<Void> afterReplicaStarted(ReplicationGroupId
replicaGrpId);
/**
* Called before a replica has been stopped on the local node.
*/
CompletableFuture<Void> beforeReplicaStopped(ReplicationGroupId
replicaGrpId);
}
{code}
This listener should be notified of the events by the Replica Manager. Replica
Manager should also provide API to register/deregister such listeners.
Also note that notification methods return CompletableFutures. These futures
should block the corresponding operation (adding the new Replica to the
ReplicaManager#replicas map or stopping a Replica). This will allow to obtain a
happens-before relationship between the events and their listneres.
> Introduce Partition lifecycle events
> ------------------------------------
>
> Key: IGNITE-20692
> URL: https://issues.apache.org/jira/browse/IGNITE-20692
> Project: Ignite
> Issue Type: Improvement
> Reporter: Aleksandr Polovtcev
> Priority: Major
> Labels: ignite-3
>
> I propose to introduce a mechanism for producing and consuming events related
> to the lifecycle of Partitions (a.k.a. Replicas). This mechanism can useful
> for other components, such as Index Manager to track which indices should be
> created or dropped because the corresponding partition has been moved.
> I imagine this mechanism as follows:
> {code:java}
> interface ReplicaLifecycleListener {
> /**
> * Called after a replica has been started on the local node.
> */
> CompletableFuture<Void> afterReplicaStarted(ReplicationGroupId
> replicaGrpId);
> /**
> * Called before a replica has been stopped on the local node.
> */
> CompletableFuture<Void> beforeReplicaStopped(ReplicationGroupId
> replicaGrpId);
> }
> {code}
> This listener should be notified of the events by the Replica Manager (I
> believe the correct places would be {{ReplicaManager#startReplica}} and
> {{ReplicaManager#stopReplica}}). Replica Manager should also provide API to
> register/deregister such listeners.
> Also note that notification methods return CompletableFutures. These futures
> should block the corresponding operation (adding the new Replica to the
> ReplicaManager#replicas map or stopping a Replica). This will allow to obtain
> a happens-before relationship between the events and their listeners.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)