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