[ 
https://issues.apache.org/jira/browse/GEODE-8130?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17110677#comment-17110677
 ] 

ASF subversion and git services commented on GEODE-8130:
--------------------------------------------------------

Commit e084aa4bdaed4d626e559fec4e7e64e1fbf93755 in geode's branch 
refs/heads/feature/GEODE-8067 from Darrel Schneider
[ https://gitbox.apache.org/repos/asf?p=geode.git;h=e084aa4 ]

GEODE-8130: use a single region for redis Sets and Hashes  (#5120)

* Replaced replicated metaRegion with a partitioned dataRegion.
Currently the dataRegion is used the same way as the metaRegion
except for sets and hashes which store their actual data in it.
* Exception handling now correctly deals with FunctionException
* Disabled a test until GEODE-8127 if fixed.
* Now uses the ByteArrayWrapper as the key on the meta region
and the locks map instead of using a String.
Since a ByteArrayWrapper is used as the key in the data region
this will end up saving memory.

* Found a problem with redis dynamic region management.
Some of the code was executing when we added a new set or hash to
the metaDataRegion. It was only ignoring STRING and HLL.
This caused some extra memory to be used for every redis set/hash.
Now the dynamic region code is only used for lists and sortedSet.

* This commit has some TODO comments of what looks like a bug in
the dynamic region code when a new server is started. It looks
like the new server will not create already existing dynamic regions.
We could test this by starting one server, create a LIST, then
start another server, and then shutdown the first server. Does
the LIST still exist? If we change them not to use dynamic regions
then this issue will go away.

> Change the way redis uses geode regions to save memory and fix race conditions
> ------------------------------------------------------------------------------
>
>                 Key: GEODE-8130
>                 URL: https://issues.apache.org/jira/browse/GEODE-8130
>             Project: Geode
>          Issue Type: Improvement
>          Components: redis
>            Reporter: Darrel Schneider
>            Assignee: Darrel Schneider
>            Priority: Major
>             Fix For: 1.14.0
>
>
> Currently the geode redis implementation uses a replicate region to hold 
> every redis key as the region key (as a String object) and the region value 
> is an enum describing the type. Another partitioned regioni is used to also 
> store the redis key as the region key (as a ByteArrayWrapper object) and the 
> region value is an object that is basically a Set or HashMap.
> This uses extra memory, the replicate does not scale well, is slower 
> (updating two regions is slower than one region), and trying to update two 
> regions to hold the same logical redis "key" has race conditions which can 
> lead to inconsistent data.
> The solution is to have a single partitioned region that can hold multiple 
> types of data (sets, hashes, strings, lists, etc). 



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

Reply via email to