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

Alexander Murmann updated GEODE-10171:
--------------------------------------
    Labels: needsTriage  (was: )

> AbstractRedisData version being incremented for no-op operations can lead to 
> delta not being applied on secondary
> -----------------------------------------------------------------------------------------------------------------
>
>                 Key: GEODE-10171
>                 URL: https://issues.apache.org/jira/browse/GEODE-10171
>             Project: Geode
>          Issue Type: Bug
>          Components: redis
>    Affects Versions: 1.15.0
>            Reporter: Donal Evans
>            Priority: Major
>              Labels: needsTriage
>
> For SADD, which may or may not modify the data in the region depending on 
> whether the member being added is already present in the set, the version in 
> AbstractRedisData is updated regardless of whether a Delta is sent to the 
> secondary. This can lead to the version on the primary wrapping around to be 
> equal to the version on the secondary, which means that if a delta is sent, 
> it will not be applied on the secondary, leading to potential data loss.
> Below is a test to show this behaviour:
> {code:java}
> @Test
> public void deltaVersionOnPrimary_shouldNotUpdate_ifNoDeltaSent() {
>   String originalMember = "fixedMemberName";
>   String key = clusterStartUp.getKeyOnServer("lrem", 1);
>   
>   // Version of primary = 0
>   // Version of secondary = 0
>   jedis.sadd(key, originalMember);
>   // No changes are made to the set, since adding an already existing member 
> doesn't modify it
>   // Version of primary wraps around back to -1
>   // Version of secondary doesn't change because we don't send a delta
>   for (int i = 0; i < 255; ++i) {
>     jedis.sadd(key, originalMember);
>   }
>   String newMember = "aNewMemberName";
>   // Version of primary = 0
>   // Version of secondary = 0, delta is not applied
>   jedis.sadd(key, newMember);
>   assertThat(jedis.smembers(key)).containsExactlyInAnyOrder(originalMember, 
> newMember);
>   clusterStartUp.crashVM(1); // kill primary server
>   assertThat(jedis.smembers(key)).containsExactlyInAnyOrder(originalMember, 
> newMember);
> } {code}



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to