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

Donal Evans updated GEODE-9446:
-------------------------------
    Description: 
The current implementation of {{RedisSortedSet}} uses an 
{{AbstractOrderedStatisticsEntry}} class containing both {{double}} score and 
{{byte[]}} scoreBytes fields. The {{double}} field is required to allow the 
sorting behaviour required of the data structure, but the {{byte[]}} field is 
not necessary except when returning results to the client.

The class should be refactored to eliminate the {{byte[]}} scoreBytes field 
from {{AbstractOrderedStatisticsEntry}} and reduce the memory overhead of 
operations.

As part of this refactoring, the below call to {{members.put()}} should be 
removed from {{memberAdd()}} as it will no longer be necessary.
{code:java}
protected synchronized byte[] memberAdd(byte[] memberToAdd, byte[] scoreToAdd) {
...
} else {
  scoreSet.remove(existingEntry);
  byte[] oldScore = existingEntry.scoreBytes;
  existingEntry.updateScore(stripTrailingZeroFromDouble(scoreToAdd));
  members.put(memberToAdd, existingEntry); <<< remove this
  scoreSet.add(existingEntry);
  return oldScore;
}
{code}

Also, uses of the {{stripTrailingZeroFromDouble()}} method should be moved to 
just prior to the response being returned to the client, to ensure that the 
format of the returned String representations of double values match native 
Redis.

  was:
The current implementation of {{RedisSortedSet}} uses an 
{{AbstractOrderedStatisticsEntry}} class containing both {{double}} score and 
{{byte[]}} scoreBytes fields. The {{double}} field is required to allow the 
sorting behaviour required of the data structure, but the {{byte[]}} field is 
not necessary except when returning results to the client.

The class should be refactored to eliminate the {{byte[]}} scoreBytes field 
from {{AbstractOrderedStatisticsEntry}} and reduce the memory overhead of 
operations.


> Remove unnecessary uses of byte[] in RedisSortedSet
> ---------------------------------------------------
>
>                 Key: GEODE-9446
>                 URL: https://issues.apache.org/jira/browse/GEODE-9446
>             Project: Geode
>          Issue Type: Improvement
>          Components: redis
>    Affects Versions: 1.15.0
>            Reporter: Donal Evans
>            Priority: Major
>
> The current implementation of {{RedisSortedSet}} uses an 
> {{AbstractOrderedStatisticsEntry}} class containing both {{double}} score and 
> {{byte[]}} scoreBytes fields. The {{double}} field is required to allow the 
> sorting behaviour required of the data structure, but the {{byte[]}} field is 
> not necessary except when returning results to the client.
> The class should be refactored to eliminate the {{byte[]}} scoreBytes field 
> from {{AbstractOrderedStatisticsEntry}} and reduce the memory overhead of 
> operations.
> As part of this refactoring, the below call to {{members.put()}} should be 
> removed from {{memberAdd()}} as it will no longer be necessary.
> {code:java}
> protected synchronized byte[] memberAdd(byte[] memberToAdd, byte[] 
> scoreToAdd) {
> ...
> } else {
>   scoreSet.remove(existingEntry);
>   byte[] oldScore = existingEntry.scoreBytes;
>   existingEntry.updateScore(stripTrailingZeroFromDouble(scoreToAdd));
>   members.put(memberToAdd, existingEntry); <<< remove this
>   scoreSet.add(existingEntry);
>   return oldScore;
> }
> {code}
> Also, uses of the {{stripTrailingZeroFromDouble()}} method should be moved to 
> just prior to the response being returned to the client, to ensure that the 
> format of the returned String representations of double values match native 
> Redis.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to