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

Mirza Aliev resolved IGNITE-20199.
----------------------------------
    Resolution: Won't Fix

We decided that the chaining behaviour is the correct behaviour, because in 
general there is a problem of a reordering of messages when we try to call 
sendWithRetry, what can cause linearisation problems. For example, zone 
creation event and table creation events can be reordered, and if we handle 
this events asynchronously, we could be in a strange situation when table tries 
to use zone, that is not completely ready 

> Do not return updating rebalance assignments futures in 
> DistributionZoneRebalanceEngine#onUpdateReplicas 
> ---------------------------------------------------------------------------------------------------------
>
>                 Key: IGNITE-20199
>                 URL: https://issues.apache.org/jira/browse/IGNITE-20199
>             Project: Ignite
>          Issue Type: Bug
>            Reporter: Mirza Aliev
>            Priority: Major
>              Labels: ignite-3
>
> Seems that the current logic in 
> {{DistributionZoneRebalanceEngine#onUpdateReplicas}} is not correct in terms 
> of futures chaining. Currently we block configuration notification thread 
> until all partitions would updates theirs rebalance assignments keys in 
> metastorage. 
>  
> {code:java}
> private CompletableFuture<?> 
> onUpdateReplicas(ConfigurationNotificationEvent<Integer> replicasCtx) {
> ...
> ...
>         return 
> distributionZoneManager.dataNodes(replicasCtx.storageRevision(), 
> zoneCfg.zoneId())
>                 .thenCompose(dataNodes -> {
> ...
>                     for (TableView tableCfg : tableViews) {
>                        ...
>                         CompletableFuture<?>[] partitionFutures = 
> RebalanceUtil.triggerAllTablePartitionsRebalance(...);
>                         tableFutures.add(allOf(partitionFutures));
>                     }
>                     return 
> allOf(tableFutures.toArray(CompletableFuture[]::new));
>                 });
> ...
> } {code}
> As a solution, we could just return completed future in the 
> {{DistributionZoneRebalanceEngine#onUpdateReplicas}} after we started 
> asynchronous logic of updating rebalance assignmnets.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to