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

Maksim Davydov updated IGNITE-28952:
------------------------------------
    Summary: [ducktests] MDC tests for majority based topology validation  
(was: [ducktests] Generalize the MDC test fixture: optional cache level 
validator, three data center scenarios)

> [ducktests] MDC tests for majority based topology validation
> ------------------------------------------------------------
>
>                 Key: IGNITE-28952
>                 URL: https://issues.apache.org/jira/browse/IGNITE-28952
>             Project: Ignite
>          Issue Type: Task
>            Reporter: Maksim Davydov
>            Assignee: Maksim Davydov
>            Priority: Minor
>              Labels: IEP-140, ducktests, ise
>          Time Spent: 0.5h
>  Remaining Estimate: 0h
>
> The MDC test fixture hardcodes two things the MDC feature itself does not 
> require: that every cache carries an MdcTopologyValidator, and that the 
> cluster spans exactly two data centers.
> 1. Cache level topology validator
>   The MDC test applications always configure the cache with 
> MdcTopologyValidator
>   (MdcCacheAwareApplication), so the scenarios only run against a validator 
> configured per
>   cache.
> 2. Number of data centers
>   MdcTopologyValidator has two modes, and the number of data centers selects 
> which one
>   applies: an even set is validated against a main datacenter, an odd set 
> against a majority
>   of the set. The fixture only ever exercised the even one - DCS = (DC1, DC2) 
> is a module
>   level constant threaded through the whole of MdcCluster, 
> verify_split_brain() assumes
>   exactly two half-rings, and cross_dc_network() impairs a single DC pair.
> Changes:
>   - MdcCacheAwareApplication: new 'topologyValidator' parameter, default 
> true. When false,
>     the cache is created without the cache level validator and the 
> mainDc/datacenters
>     parameters are not required.
>   - MdcCluster: new 'mdc_cache_topology_validator' global (default true) 
> applied to every
>     cache the fixture creates.
>   - MdcCluster takes a 'dcs' sequence (DCS_2 by default, DCS_3 provided). 
> mdc_topology_params()
>     derives the validator mode from the DC count and emits exactly one of 
> mainDc/datacenters
>     - MdcTopologyValidator.checkConfiguration() rejects a main datacenter 
> alongside an odd DC
>     set - plus the dcsNum MdcAffinityBackupFilter needs. min_backups() 
> derives the smallest
>     backup count giving every DC one copy of every partition, which is 2 for 
> three DCs.
>   - verify_split_brain() generalizes into verify_segments() over an arbitrary 
> segmentation;
>     verify_half_ring_healthy() becomes verify_segment_healthy(). 
> cross_dc_network() impairs
>     the whole cross-DC mesh and takes per-pair overrides for asymmetric links.
>   - NetworkGroupManager: new 
> enable_network_partitions()/disable_network_partitions() cut
>     several links at once. Every chain a node takes part in is installed by 
> the same SSH
>     round-trip, because rolling a multi-way split out link by link would 
> briefly present the
>     cluster with a different, valid segmentation it would legitimately react 
> to. The pairwise
>     methods delegate to them.
>   - New scenarios in mdc/majority_partition_test.py (9 nodes each): a 
> minority DC isolated
>     from the two others, parametrized over which DC is isolated; a three way 
> split in which
>     every segment goes read-only; and data centers lost one by one, writable 
> while a majority
>     survives and read-only below it. Every partition owns one copy per DC, so 
> every segment
>     still serves every read - that is what separates the read assertions from 
> the write ones.
>   - Framework unit checks for the DC-count dependent parts: validator mode 
> selection, backup
>     arithmetic, the impairment mesh and its per-pair overrides, and the 
> per-node command
>     compilation of single and multi-link partitions.



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

Reply via email to