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

Mirza Aliev updated IGNITE-20199:
---------------------------------
    Description: 
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.

  was:
After IGNITE-19506 was merged, it added the regression. 

Previously we haven't returned future, that updates rebalance pending keys, in 
{{{}DistributionZoneRebalanceEngine#onUpdateReplicas{}}}. It was done because 
otherwise we would block configuration notification thread until all partitions 
would updates theirs rebalance assignments keys in metastorage. 

 

Unfortunately, IGNITE-19506 has brought this blockage

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


> Do not chain updating rebalance assignments future 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