[
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)