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