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

Owen Nichols closed GEODE-9345.
-------------------------------

> Refactor RedisSet set operations to not do so much set copying
> --------------------------------------------------------------
>
>                 Key: GEODE-9345
>                 URL: https://issues.apache.org/jira/browse/GEODE-9345
>             Project: Geode
>          Issue Type: Improvement
>          Components: redis
>    Affects Versions: 1.15.0
>            Reporter: Donal Evans
>            Priority: Major
>              Labels: redis
>             Fix For: 1.15.0
>
>
> The implementation of the (unsupported at time of ticket creation) sunion, 
> sunionstore, sdiff, sdiffstore, sinter and sinterstore commands includes 
> potentially expensive set copying as part of the calls to {{smembers()}} and 
> {{internalsmembers()}}:
>  
> {code:java}
> @Override
> public Set<byte[]> smembers(RedisKey key) {
>   return stripedExecute(key, () -> new HashSet<>(getRedisSet(key, 
> true).smembers()));
> }
> @Override
> public Set<byte[]> internalsmembers(RedisKey key) {
>   return stripedExecute(key, () -> new HashSet<>(getRedisSet(key, 
> false).smembers()));
> }{code}
> and in {{computeSetOp()}}:
>  
> {code:java}
> if (result == null) {
>   result = new ObjectOpenCustomHashSet<>(set, ByteArrays.HASH_STRATEGY);
> } else {
>   switch (setOp) {
>     case UNION:
>       result.addAll(set);
>       break;
>     case INTERSECTION:
>       set = new ObjectOpenCustomHashSet<>(set, ByteArrays.HASH_STRATEGY);
>       result.retainAll(set);
>       break;
>     case DIFF:
>       set = new ObjectOpenCustomHashSet<>(set, ByteArrays.HASH_STRATEGY);
>       result.removeAll(set);
>       break;
>   }
> }{code}
>  
> due to the need to use a custom hash set implementation to properly handle 
> equality comparisons between byte arrays, but the current implementation 
> used, ObjectOpenCustomHashSet, causes serialization errors when returned from 
> {{smembers()}} and {{internalsmembers()}}.
> To avoid unnecessary set copying, a way should be found to allow an 
> {{ObjectOpenCustomHashSet}} to be returned from {{smembers()}} and 
> {{internalsmembers()}} without causing serialization errors. The best 
> approach would probably be to have the implementation of 
> {{ObjectOpenCustomHashSet}} also implement {{DataSerializableFixedID}}, which 
> would allow it to be efficiently serialized in a backwards-compatible way.



--
This message was sent by Atlassian Jira
(v8.20.7#820007)

Reply via email to