Dan Smith created GEODE-9815:
--------------------------------
Summary: Recovering persistent members can result in extra copies
of a bucket or two copies int the same redundancy zone
Key: GEODE-9815
URL: https://issues.apache.org/jira/browse/GEODE-9815
Project: Geode
Issue Type: Bug
Components: regions
Affects Versions: 1.15.0
Reporter: Dan Smith
The fix in GEODE-9554 is incomplete for some cases, and it also introduces a
new issue when removing buckets that are over redundancy.
GEODE-9554 and these new issues are all related to using redundancy zones and
having persistent members.
With persistence, when we start up a member with persisted buckets, we always
recover the persisted buckets on startup, regardless of whether redundancy is
already met or what zone the existing buckets are on. This is necessary to
ensure that we can recover all colocated buckets that might be persisted on the
member.
Because recovering these persistent buckets may cause us to go over redundancy,
after we recover from disk, we run a "restore redundancy" task that actually
removes copies of buckets that are over redundancy.
GEODE-9554 addressed one case where we end up removing the last copy of a
bucket from one redundancy zone while leaving two copies in another redundancy
zone. It did so by disallowing the removal of a bucket if it is the last copy
in a redundancy zone.
There are a couple of issues with this approach.
*Problem 1:* We may end up with two copies of the bucket in one zone in some
cases
With a slight tweak to the scenario fixed with GEODE-9554 we can end up never
getting out of the situation where we have two copies of a bucket in the same
zone.
Steps:
1. Start two redundancy zones A and B with two members each. Bucket 0 is on
member A1 and B1.
2. Shutdown member A1.
3. Rebalance - this will create bucket 0 on A2.
4. Shutdown B1. Revoke it's disk store and delete the data
5. Startup A1 - it will recover bucket 0.
6. At this point, bucket 0 is on A1 and A2, and nothing will resolve that
situation.
*Problem 2:* We may never delete extra copies of a bucket
The fix for GEODE-9554 introduces a new problem if we have more than 2
redundancy zones
Steps
1. Start three redundancy zones A,B,C with two members each. Bucket 0 is on A1
and B1>
2. Shutdown A1
3. Rebalance - this will create Bucket 0 on C1
4. Startup A1 - this will recreate bucket 0
5. Now we have bucket 0 on A1, B1, and C1. Nothing will remove the extra copy.
I think the overall fix is probably to do something different than prevent
removing the last copy of a bucket from a redundancy zone. Instead, I think we
should do something like this:
1. Change PartitionRegionLoadModel.getOverRedundancyBuckets to return *any*
buckets that have two copies in the same zone, as well as any buckets that are
actually over redundancy.
2. Change PartitionRegionLoadModel.findBestRemove to always remove extra copies
of a bucket in the same zone first>
3. Back out the changes for GEODE-9554 and let the last copy be deleted from a
zone.
--
This message was sent by Atlassian Jira
(v8.20.1#820001)