DonalEvans commented on a change in pull request #6296:
URL: https://github.com/apache/geode/pull/6296#discussion_r629632274
##########
File path:
geode-apis-compatible-with-redis/src/main/java/org/apache/geode/redis/internal/data/RedisSet.java
##########
@@ -214,23 +239,43 @@ public int getDSFID() {
}
private synchronized boolean membersAdd(ByteArrayWrapper memberToAdd) {
- return members.add(memberToAdd);
+ boolean isAdded = members.add(memberToAdd);
+ if (isAdded) {
+ sizeInBytes += PER_MEMBER_OVERHEAD + memberToAdd.length();
+ if (members.size() == 1) {
+ sizeInBytes += INTERNAL_HASH_SET_STORAGE_OVERHEAD;
+ }
+ }
+ return isAdded;
}
private boolean membersRemove(ByteArrayWrapper memberToRemove) {
- return members.remove(memberToRemove);
+ boolean isRemoved = members.remove(memberToRemove);
+ if (isRemoved) {
+ sizeInBytes -= PER_MEMBER_OVERHEAD + memberToRemove.length();
+ if (members.isEmpty()) {
+ sizeInBytes = BASE_REDIS_SET_OVERHEAD;
+ }
+ }
+ return isRemoved;
}
- private synchronized boolean membersAddAll(AddsDeltaInfo addsDeltaInfo) {
- return members.addAll(addsDeltaInfo.getAdds());
+ private synchronized void membersAddAll(AddsDeltaInfo addsDeltaInfo) {
+ ArrayList<ByteArrayWrapper> adds = addsDeltaInfo.getAdds();
+ sizeInBytes += adds.stream().mapToInt(a -> a.length() +
PER_MEMBER_OVERHEAD).sum();
+ members.addAll(adds);
}
- private synchronized boolean membersRemoveAll(RemsDeltaInfo remsDeltaInfo) {
- return members.removeAll(remsDeltaInfo.getRemoves());
+ private synchronized void membersRemoveAll(RemsDeltaInfo remsDeltaInfo) {
+ ArrayList<ByteArrayWrapper> removes = remsDeltaInfo.getRemoves();
+ if (members.size() == removes.size()) {
+ sizeInBytes = BASE_REDIS_SET_OVERHEAD;
+ } else {
+ sizeInBytes -= removes.stream().mapToInt(a -> a.length() +
PER_MEMBER_OVERHEAD).sum();
+ }
+ members.removeAll(removes);
}
Review comment:
I've added a test that checks this
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]