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

Kirill Gusakov updated IGNITE-16063:
------------------------------------
    Description: 
According to an algorithm from 
https://issues.apache.org/jira/browse/IGNITE-16020, we need to support 
partition assignments updates when:
- baseline changed
- number of partition replicas changed

This update needs metastore multi-invoke feature and can be described as:

{code}
onBaselineEvent:
    for table in tableCfg.tables():
        for partition in table.partitions:
            <inline metastoreInvoke>
            
onReplicaNumberChange:
    with table as event.table:
        for partitoin in table.partitions:
            <inline metastoreInvoke>

metastoreInvoke: // atomic metastore call through multi-invoke api
    if empty(partition.change.trigger.revision) || 
partition.change.trigger.revision < event.revision:
        if empty(partition.assignments.pending) && partition.assignments.stable 
!= calcPartAssighments():
            partition.assignments.pending = calcPartAssignments() 
            partition.change.trigger.revision = event.revision
        else:
            if partition.assignments.pending != calcPartAssignments
                partition.assignments.planned = calcPartAssignments()
                partition.change.trigger.revision = event.revision
            else
                remove(partition.assignments.planned)
    else:
        skip
{code}

(Phase 1)


  was:
According to an algorithm from 
https://issues.apache.org/jira/browse/IGNITE-16020, we need to support 
partition assignments updates when:
- baseline changed
- number of partition replicas changed

This update needs metastore multi-invoke feature and can be described as:

{code}
onBaselineEvent:
    for table in tableCfg.tables():
        for partition in table.partitions:
            <inline metastoreInvoke>
            
onReplicaNumberChange:
    with table as event.table:
        for partitoin in table.partitions:
            <inline metastoreInvoke>

metastoreInvoke: // atomic metastore call through multi-invoke api
    if empty(partition.change.trigger.revision) || 
partition.change.trigger.revision < event.revision:
        if empty(partition.assignments.pending) && partition.assignments.stable 
!= calcPartAssighments():
            partition.assignments.pending = calcPartAssignments() 
            partition.change.trigger.revision = event.revision
        else:
            if partition.assignments.pending != calcPartAssignments
                partition.assignments.planned = calcPartAssignments()
                partition.change.trigger.revision = event.revision
            else
                remove(partition.assignments.planned)
    else:
        skip
{code}



> Update partition assignments on rebalance triggers
> --------------------------------------------------
>
>                 Key: IGNITE-16063
>                 URL: https://issues.apache.org/jira/browse/IGNITE-16063
>             Project: Ignite
>          Issue Type: Task
>            Reporter: Kirill Gusakov
>            Priority: Major
>
> According to an algorithm from 
> https://issues.apache.org/jira/browse/IGNITE-16020, we need to support 
> partition assignments updates when:
> - baseline changed
> - number of partition replicas changed
> This update needs metastore multi-invoke feature and can be described as:
> {code}
> onBaselineEvent:
>     for table in tableCfg.tables():
>         for partition in table.partitions:
>             <inline metastoreInvoke>
>             
> onReplicaNumberChange:
>     with table as event.table:
>         for partitoin in table.partitions:
>             <inline metastoreInvoke>
> metastoreInvoke: // atomic metastore call through multi-invoke api
>     if empty(partition.change.trigger.revision) || 
> partition.change.trigger.revision < event.revision:
>         if empty(partition.assignments.pending) && 
> partition.assignments.stable != calcPartAssighments():
>             partition.assignments.pending = calcPartAssignments() 
>             partition.change.trigger.revision = event.revision
>         else:
>             if partition.assignments.pending != calcPartAssignments
>                 partition.assignments.planned = calcPartAssignments()
>                 partition.change.trigger.revision = event.revision
>             else
>                 remove(partition.assignments.planned)
>     else:
>         skip
> {code}
> (Phase 1)



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

Reply via email to