[ 
https://issues.apache.org/jira/browse/IGNITE-21387?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17837121#comment-17837121
 ] 

Mikhail Efremov edited comment on IGNITE-21387 at 4/15/24 9:05 AM:
-------------------------------------------------------------------

At the current state, the following changes are done:
 * In {{ItDistributionZonesFiltersTest}} the single 
testFilteredDataNodesPropagatedToStable test was divided on 3 separate tests:
 ** {{testDataNodesByFilterPropagatedToStable}} that tests only by attribute 
filtering by specified region and storage filter;

 ** {{testDataNodesByProfilePropagatedToStable}} that tests only by matching 
profile name;

 ** {{testDataNodesByFilterAndProfilePropagatedToStable}} tests both cases 
together: attribute filters and profile both.

 * In {{TableManager}} was done refactoring:
 ** extracting assignments creation into the separate method 
{{createOrGetLocallyAssignmentsAsync}} along as 
{{{}writeTableAssignmentsToMetastore{}}};
 ** the goal of the previous bullet is to introduce new methods 
{{isLocalNodeInAssignmentList}} and 
{{isLocalNodeMatchAssignment}} that should be used for checking on a node's 
TableManager and IndexManager is the node belongs to current stable assignments 
or not. If the latter, then node shouldn't create storages and indices: 
{{MvTableStorage}} and 
{{TxStateTableStorage}} on table create event in 
{{TableManager#createStorages}} and {{IndexManager#startIndexAsync}} 
correspondingly.
 

Current issue is related to versioned values' race:
 * {{TableManager.java:1395}} on {{tableVv.update(...)}}
 * {{IndexManager.java:270}} on {{handleMetastoreEventVv.update(...)}}

There is {{AssertionError}} with a message like "Causality token is outdated, 
previous token 21, got 21" when the number 21 may vary.

The reason is metastore's colling in {{createOrGetLocallyAssignmentsAsync}} 
along as 
{{{}writeTableAssignmentsToMetastore{}}}:
 * the first one calls metastore to check are stable assignments equals null in 
{{{}TableManager.java:1298{}}};
 * the last one calls metastore to write stable assignments in 
{{TableManager.java:705-706}} on {{.invoke(...)}} method.

There should be a way to call versioned value's update before addressing to 
metastore.


was (Author: JIRAUSER303791):
At the current state, the following changes are done:
 * In {{ItDistributionZonesFiltersTest}} the single 
testFilteredDataNodesPropagatedToStable test was divided on 3 separate 
tests:{color:#6b2fba}
{color}
 ** 
{{testDataNodesByFilterPropagatedToStable}} that tests only by attribute 
filtering by specified region and storage filter;
 ** 
{{testDataNodesByProfilePropagatedToStable}} that tests only by matching 
profile name;
 ** 
{{testDataNodesByFilterAndProfilePropagatedToStable}} tests both cases 
together: attribute filters and profile both.
 * In {{TableManager}} was done refactoring:
 ** exctracting assignments creation into the separate method 
{{createOrGetLocallyAssignmentsAsync}} along as 
{{writeTableAssignmentsToMetastore;
}}

> Recovery is not possible, if node have no needed storage profile
> ----------------------------------------------------------------
>
>                 Key: IGNITE-21387
>                 URL: https://issues.apache.org/jira/browse/IGNITE-21387
>             Project: Ignite
>          Issue Type: Improvement
>            Reporter: Kirill Gusakov
>            Assignee: Mikhail Efremov
>            Priority: Major
>              Labels: ignite-3
>
> Looks like any table try to create storages on the recovery node, even if is 
> shouldn't be here, because of zone storage profile filter.
> The isssue is reproducing by 
> ItDistributionZonesFiltersTest#testFilteredDataNodesPropagatedToStable. So, 
> test must be enabled or reworked by this ticket.



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

Reply via email to