You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Sergey Uttsel (Jira)" <ji...@apache.org> on 2023/05/31 07:49:00 UTC

[jira] [Assigned] (IGNITE-19602) API and tests for causality data nodes in DistributionZoneManager

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

Sergey Uttsel reassigned IGNITE-19602:
--------------------------------------

    Assignee: Sergey Uttsel

> API and tests for causality data nodes in DistributionZoneManager
> -----------------------------------------------------------------
>
>                 Key: IGNITE-19602
>                 URL: https://issues.apache.org/jira/browse/IGNITE-19602
>             Project: Ignite
>          Issue Type: Bug
>            Reporter: Sergey Uttsel
>            Assignee: Sergey Uttsel
>            Priority: Major
>              Labels: ignite-3
>
> h3. *Motivation*
> In https://issues.apache.org/jira/browse/IGNITE-19506 we will create implementation for getting data nodes from zone manager with causality token. In this ticket we need to create API, test plan and implement tests with test infrastructure.
> h3. *Definition of Done*
> API and tests for causality data nodes in DistributionZoneManager are implemented.
>  
> *Test plan*
> *Test1*
> Prerequisite:
> 1. zonesByRevision contains [revision=5, zoneId==1 -> [nodeA, nodeB]]
> Test steps:
> 1. Get versionedDataNodes future with zoneId=1, revision 6.
> 2. Check this future is not completed.
> 3. Create a metastorage event with revision==6 which is not related to a logical topology changing.
> 4. Check that the future is completed with [nodeA, nodeB].
> 5. Get versionedDataNodes future with zoneId=1, revision 6 another time.
> 6. Check that the future is completed.
> Check the same test but with a configuration event.
> Check this test case for a zone with immediate and not immediate timers, default and custom zones.
> *Test2* topologyLeapUpdate
> Prerequisite:
> 1. zonesByRevision contains [revision=5, zoneId==1 -> [nodeA, nodeB]]
> 2. zonesByRevision contains [revision=5, zoneId==2 -> [nodeA, nodeB]]
> 3. A zone1 with immediate scaleUp and immediate scaleDown.
> 4. A zone2 with scaleUp=1 and scaleDown=1 timers.
> Test steps:
> 1. Invoke `fut1=versionedDataNodes(zoneId=1, revision=6)`
> 2. Invoke `fut2=versionedDataNodes(zoneId=2, revision=6)`
> 3. Check that `!fut1.isDone()`.
> 4. Check that `!fut2.isDone()`.
> 5. Change topology to [nodeA, nodeC]. Topology revision is 6.
> 6. assertThat(fut1, willSucceedFast())
> 7. assertThat(fut2, willSucceedFast())
> 8. Check that fut1 is completed with [nodeA, nodeC]
> 9. Check that fut2 is completed with [nodeA, nodeB].
> 10. Wait when data nodes for zone2 is updated in the metastorage (with revision x).
> 11. Invoke `fut3=versionedDataNodes(zoneId=2, revision=x)`
> 12. Check that fut3 is completed with [nodeA, nodeC].
> Check this test case for a zone with default and custom zones.
> *Test3*
> Prerequisite:
> 1. zonesByRevision contains [revision=5, zoneId==1 -> [nodeA, nodeB]]
> 4. A zone1 with scaleUp=1 and scaleDown=immediate timers.
> Test steps:
> 1. Invoke `fut1=versionedDataNodes(zoneId=1, revision=6)`
> 2. Check that `!fut1.isDone()`.
> 3. Change topology to [nodeA, nodeC]. Topology revision is 6.
> 4. assertThat(fut1, willSucceedFast())
> 5. Check that fut1 is completed with [nodeA, nodeB, nodeC].
> 6. Wait when data nodes for zone2 is updated in the metastorage (with revision x).
> 7. Invoke `fut2=versionedDataNodes(zoneId=1, revision=x)`
> 8. Check that fut2 is completed with [nodeA, nodeC].
> Check this test case for a zone with default and custom zone.
> *Test4*
> Prerequisite:
> 1. zonesByRevision contains [revision=5, zoneId==1 -> [nodeA, nodeB]]
> 2. A zone1 with scaleUp=immediate and scaleDown=1 timers.
> Test steps:
> 1. Invoke `fut1=versionedDataNodes(zoneId=1, revision=6)`
> 2. Check that `!fut1.isDone()`.
> 3. Change topology to [nodeA, nodeC]. Topology revision is 6.
> 4. assertThat(fut1, willSucceedFast())
> 5. Check that fut1 is completed with [nodeA].
> 6. Wait when data nodes for zone2 is updated in the metastorage (with revision x).
> 7. Invoke `fut2=versionedDataNodes(zoneId=1, revision=x)`
> 8. Check that fut2 is completed with [nodeA, nodeC].
> Check this test case for a zone with default and custom zone.
> *Test5* (Change scaleUp to immediate) dataNodesUpdatedAfterScaleUpChanged
> Prerequisite:
> 1. zonesByRevision contains [revision=5, zoneId==1 -> [nodeA]]
> 2. A zone1 with scaleUp=10000 timer and immediate scaleDown timer.
> Test steps:
> 1. Invoke `fut1=versionedDataNodes(zoneId=1, revision=6)`
> 2. Check that `!fut1.isDone()`.
> 3. Change topology to [nodeA, nodeB]. Topology revision is 6.
> 4. assertThat(fut1, willSucceedFast()) with [nodeA].
> 5. Change scaleUp to immediate. The configuration change revision is 7.
> 6. Invoke `fut2=versionedDataNodes(zoneId=1, revision=6)`. Check that fut2 is completed with [nodeA].
> 7. Invoke `fut3=versionedDataNodes(zoneId=1, revision=7)`. Check that fut3 is completed with [nodeA, nodeB].
> Check this test case for a zone with default and custom zone.
> *Test6* (Change scaleDown to immediate) dataNodesUpdatedAfterScaleDownChanged
> Prerequisite:
> 1. zonesByRevision contains [revision=5, zoneId==1 -> [nodeA, nodeB]]
> 2. A zone1 with immediate scaleUp timer and scaleDown=10000.
> Test steps:
> 1. Invoke `fut1=versionedDataNodes(zoneId=1, revision=6)`
> 2. Check that `!fut1.isDone()`.
> 3. Change topology to [nodeA]. Topology revision is 6.
> 4. assertThat(fut1, willSucceedFast()) with [nodeA, nodeB].
> 5. Change scaleDown to immediate. The configuration change revision is 7.
> 6. Invoke `fut2=versionedDataNodes(zoneId=1, revision=6)`. Check that fut2 is completed with [nodeA, nodeB].
> 7. Invoke `fut3=versionedDataNodes(zoneId=1, revision=7)`. Check that fut3 is completed with [nodeA].
> Check this test case for a zone with default and custom zone.
> *Test7* (drop zone)
> Prerequisite:
> 1. zonesByRevision contains [revision=5, zoneId==1 -> [nodeA]]
> 2. A zone1 with scaleUp=10000 timer and immediate scaleDown timer.
> Test steps:
> 1. Invoke `fut1=versionedDataNodes(zoneId=1, revision=6)`
> 2. Check that `!fut1.isDone()`.
> 3. Change topology to [nodeA, nodeB]. Topology revision is 6.
> 4. assertThat(fut1, willSucceedFast()) with [nodeA].
> 5. Drop the zone. The drop event revision is 7.
> 6. Invoke `fut2=versionedDataNodes(zoneId=1, revision=6)`. Check that fut2 is completed with [nodeA].
> 7. Invoke `fut3=versionedDataNodes(zoneId=1, revision=7)`. Check that fut3 is completed with exception DistributionZoneNotFoundException.
> Check this test case for a zone with default and custom zone.
> *Test8* (drop zone)
> Prerequisite:
> 1. zonesByRevision contains [revision=5, zoneId==1 -> [nodeA, nodeB]]
> 2. A zone1 with immediate scaleUp timer and scaleDown=10000 timer.
> Test steps:
> 1. Invoke `fut1=versionedDataNodes(zoneId=1, revision=6)`
> 2. Check that `!fut1.isDone()`.
> 3. Change topology to [nodeA]. Topology revision is 6.
> 4. assertThat(fut1, willSucceedFast()) with [nodeA, nodeB].
> 5. Drop the zone. The drop event revision is 7.
> 6. Invoke `fut2=versionedDataNodes(zoneId=1, revision=6)`. Check that fut2 is completed with [nodeA, nodeB].
> 7. Invoke `fut3=versionedDataNodes(zoneId=1, revision=7)`. Check that fut3 is completed with exception DistributionZoneNotFoundException.
> Check this test case for a zone with default and custom zone.
> *Test 9* createThenDropZone
> Prerequisite:
> 1. The last applied revision is 6.
> 2. The zone with zoneId=1 is not created.
> 3. Current topology: [nodeA, nodeB].
> Test steps:
> 1. Invoke `fut1=versionedDataNodes(zoneId=1, revision=6)`
> 2. Check that fut1 is completed exceptionally with DistributionZoneNotFoundException.
> 3. Create zone with zoneId=1. A create zone revision is 7.
> 4. Invoke `fut2=versionedDataNodes(zoneId=1, revision=7)`
> 5. Check that fut2 is completed with current topology data nodes.
> 6. Drop zone with zoneId=1. A drop zone revision is 8.
> 7. Invoke `fut3=versionedDataNodes(zoneId=1, revision=8)`
> 8. Check that fut3 is completed exceptionally with DistributionZoneNotFoundException.
> Check this test case for a zone with immediate and not immediate timers, default and custom zones.
> *Test 10*
> Test steps:
> 1. Invoke `fut1=versionedDataNodes(zoneId=0, revision=0)`
> 2. Check that fut1 is completed exceptionally with IllegalArgumentException (or AssertionError).
> 3. Invoke `fut1=versionedDataNodes(zoneId=0, revision=-1)`
> 4. Check that fut1 is completed exceptionally with Exception (or AssertionError).
> *Test 11*
> Prerequisite:
> 1. Default zone with immediate timers.
> Test steps:
> 1. Do topology changes:
> revision 1 - [nodeA],
> revision 5 - [nodeA, nodeB]
> 2. Check value of futures:
> `versionedDataNodes(zoneId=DEFAULT_ZONE_ID, revision=1)` - [nodeA]
> `versionedDataNodes(zoneId=DEFAULT_ZONE_ID, revision=2)` - [nodeA],
> `versionedDataNodes(zoneId=DEFAULT_ZONE_ID, revision=5)` - [nodeA, nodeB],
> 4. Get futures:
> Invoke `versionedDataNodes(zoneId=DEFAULT_ZONE_ID, revision=7)`,
> Invoke `versionedDataNodes(zoneId=DEFAULT_ZONE_ID, revision=10)`,
> Invoke `versionedDataNodes(zoneId=DEFAULT_ZONE_ID, revision=15)`.
> 5. Check that futures are not completed.
> 3. Do topology changes:
> revision 10 - [nodeA, nodeB, nodeC],
> revision 15 - [nodeA, nodeC].
> 5. Check that futures are completed with corresponds values:
> revision 7 - [nodeA, nodeB],
> revision 10 - [nodeA, nodeB, nodeC],
> revision 15 - [nodeA, nodeC].
> *Test 12*
> Test steps:
> 1. Do topology changes:
> revision 1 - [nodeA],
> revision 5 - [nodeA, nodeB]
> 2. Create zone1 with zoneId=1 and immediate timers. Create event revision is 7.
> 4. Get futures:
> Invoke `versionedDataNodes(zoneId=1, revision=7)`,
> Invoke `versionedDataNodes(zoneId=1, revision=10)`,
> Invoke `versionedDataNodes(zoneId=1, revision=15)`.
> 5. Check that futures are not completed.
> 3. Do topology changes:
> revision 10 - [nodeA, nodeB, nodeC],
> revision 15 - [nodeA, nodeC].
> 5. Check that futures are completed with corresponds values:
> revision 7 - [nodeA, nodeB],
> revision 10 - [nodeA, nodeB, nodeC],
> revision 15 - [nodeA, nodeC].
>  



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