Partition awareness и affinity routing thin client
Эта страница — публичная реконструкция продуктовой спецификации по исходникам тестов Apache Ignite 2 на ревизии 486a6367610c4c891b729e89373695ef83165345.
Тесты partition awareness описывают, как thin client использует topology и affinity metadata, чтобы направлять поддержанные операции к наиболее подходящему известному server connection.
Пользовательские гарантии
- Partition-aware thin client маршрутизирует поддержанные single-key cache operations с использованием server topology и affinity metadata.
- Клиент обновляет или освобождает affinity mappings при изменениях topology, cache mappings или жизненного цикла клиента.
- Metrics показывают affinity hits/misses для cache-key и query routing сценариев.
Трассируемые требования
После имени теста указывается только негативный или неоднозначный статус, например status=failed, status=flaky, status=ignored или status=mixed.
THIN-PA-STABLE-01 — single-key cache operations route by affinity on стабильный topology
Требование: Для стабильных топологий, partition-aware routing должен обрабатывать primitive keys, complex keys, affinity-key annotations/configuration, replicated caches, backup counts, node filters, и custom affinity mapper cases.
Зачем это нужно: Приложения get lower-latency routing без manually selecting server endpoints.
Граница: В основном свидетельство: routing/protocol behavior является asserted more directly than operation result semantics.
Тесты-доказательства:
org.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessStableTopologyTest.testPartitionedCustomAffinityCacheWithMapperorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessStableTopologyTest.testPartitionedCachePrimitiveKeyorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessStableTopologyTest.testPartitionedCacheComplexKeyorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessStableTopologyTest.testPartitionedCacheAnnotatedAffinityKeyorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessStableTopologyTest.testPartitionedCacheNotAnnotatedAffinityKeyorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessStableTopologyTest.testPartitionedCache0Backupsorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessStableTopologyTest.testPartitionedCache1Backupsorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessStableTopologyTest.testPartitionedCache3Backupsorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessStableTopologyTest.testPartitionedWithNodeFilterorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessStableTopologyTest.testReplicatedCacheorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessStableTopologyTest.testPartitionedCustomAffinityCacheorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessStableTopologyTest.testPartitionedCacheUnknownNodeorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessStableTopologyTest.testPartitionedWithNodeFilter1
THIN-PA-GROUPING-01 — affinity mappings являются reused only когда compatible
Требование: The client должен группировать caches с equivalent affinity mappings и request separate mappings когда effective affinity differs.
Зачем это нужно: This limits metadata traffic без routing requests через an incompatible mapping.
Граница: Свидетельство из protocol/request-count assertions; не доказывает все custom affinity combinations.
Тесты-доказательства:
org.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessStableTopologyTest.testCacheGroupWithNodeFilterorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessStableTopologyTest.testGroupingOfVariousAffinitiesorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessStableTopologyTest.testGroupingOfEqualAffinitiesorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessStableTopologyTest.testMultipleCacheGroupAffinityMappingRequest
THIN-PA-AUX-OPS-01 — scan query, set и atomic-long operations participate где supported
Требование: Partition-bound scan queries, IgniteSet operations, collocated sets, и AtomicLong reads должен use affinity-aware routing in проверенные cases.
Зачем это нужно: Non-cache-key APIs должен benefit из affinity metadata когда their data placement является known.
Граница: Свидетельство: доказывает routing participation, не full semantic correctness of каждый operation.
Тесты-доказательства:
org.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessStableTopologyTest.testScanQueryorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessStableTopologyTest.testIgniteSetorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessStableTopologyTest.testIgniteSetCollocatedorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessStableTopologyTest.testAtomicLong
THIN-PA-TOPOLOGY-01 — routing refreshes после topology/session changes
Требование: The client должен обновлять or recreate routing state после connection loss, node join/leave, cluster restart с lower/same topology version, session close-before-handshake, и create-session-after-close.
Зачем это нужно: Long-running clients должен continue routing correctly после operational topology changes.
Граница: Weaker где tests exercise timing/session races и fallback paths; точные fallback target является не always established.
Тесты-доказательства:
org.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessUnstableTopologyTest.testConnectionLossorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessUnstableTopologyTest.testPartitionAwarenessOnNodeJoinorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessUnstableTopologyTest.testPartitionAwarenessOnNodeLeftorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessUnstableTopologyTest.testPartitionAwarenessOnClusterRestartWithLowerTopologyVersionorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessUnstableTopologyTest.testPartitionAwarenessOnClusterRestartWithSameTopologyVersionorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessUnstableTopologyTest.testSessionCloseBeforeHandshakeorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessUnstableTopologyTest.testCreateSessionAfterCloseorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessDiscoveryTest.testClientDiscoveryNodesJoinorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessDiscoveryTest.testClientDiscoveryNodesLeaveorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessDiscoveryTest.testClientDiscoveryFilterNodeJoin
THIN-PA-MULTIDC-01 — data-center aware routing выбирает configured local endpoints
Требование: With multi-DC settings, partition-aware и non-partition-aware requests должен prefer allowed/local endpoint sets и обрабатывают no-node-in-DC cases as проверенные.
Зачем это нужно: Операторы can bias thin-client traffic toward the intended data center.
Граница: Более слабое свидетельство для configured examples only; не outage-handling or fairness guarantee.
Тесты-доказательства:
org.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessMultiDcTest.testPartitionAwarenessRequestsorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessMultiDcTest.testPartitionAwarenessRequestsNoNodesInDcorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessMultiDcTest.testNonPartitionAwarenessRequestsorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessMultiDcTest.testNonPartitionAwarenessRequestsNoNodesInDc
THIN-PA-RES-METRICS-01 — resources и metrics reflect partition-awareness lifecycle
Требование: Partition-awareness resources должны освобождаться после client close/cache destroy, metrics должны считать affinity hits/misses, и balancing должен распределять connections in the проверенные setup.
Зачем это нужно: Пользователям нужны observable routing quality и без retained routing state после lifecycle cleanup.
Граница: Свидетельство: balancing является scenario-bound и не general fairness proof.
Тесты-доказательства:
org.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessResourceReleaseTest.testResourcesReleasedAfterClientClosedorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessResourceReleaseTest.testResourcesReleasedAfterCacheDestroyedorg.apache.ignite.internal.client.thin.AffinityMetricsTest.testCacheKeyAffinityMetricsPartitionedorg.apache.ignite.internal.client.thin.AffinityMetricsTest.testCacheKeyAffinityMetricsReplicatedorg.apache.ignite.internal.client.thin.AffinityMetricsTest.testCacheKeyAffinityMetricsTxorg.apache.ignite.internal.client.thin.AffinityMetricsTest.testQueryAffinityMetricsPartitionedorg.apache.ignite.internal.client.thin.AffinityMetricsTest.testQueryAffinityMetricsReplicatedorg.apache.ignite.internal.client.thin.ThinClientPartitionAwarenessBalancingTest.testConnectionDistribution
Важные границы
- Эти тесты в основном доказывают routing/protocol behavior, не returned data correctness для каждый operation.
- Fallback routing является intentionally слабые in several tests: когда the expected channel является unknown, completion является stronger доказательства than точные fallback target.
- Multi-DC доказательства covers configured examples, не outage handling or fairness.