----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/50715/ -----------------------------------------------------------
Review request for geode. Repository: geode Description ------- Test for missing parent regions on child region creates and throw IllegalStateException Log warnings about missing colocated child regions. Create Unit and DUnit tests for new exceptions and warnings There are two cases of missing colocated regions, 1) The 'parent' region hasn't been created when a region specifies it in the 'colocated-with' attribute 2) A persistent child region does not exist. For (1), this condition can be determined in ColocationHelper.getColocatedRegion(). The core product currently does not test for this which results in an NPE being thrown without any logging to indicate the reason. There are two variations of this state. 1a) When starting a region with non-null 'colocated'with', a reference to the parent region configuration is obtained through the configuration root. When the reference obtained is null (the region doesn't exist in the root configuration) the NPE ends up getting thrown. The fix for this is to immediately throw an IllegalStateException with a message to note the missing colocated-with region. 1b) The parent region configuration may exist in the root configuration (the parent PR has been created on another member) but does not exist on the local member. In this case the null comes about when obtaining the local region (PartitionedRegion.getPRFromId()). The fix here is the same as (1a) - throw an IllegalStateException. For (2), missing child regions: This state will always exist for an indeterminate period because the parent is always created before the child region. There currently isn't any indication in the logs of this condition, even it if persists indefinitely, other than a failure to recover the PR's persistent data. The fix for this is starting a logging thread (similar to the RedundancyLogger) when a child region is found missing. The condition will be periodically logged (set initially to 30 secs) until the region is created. There is a delay before the first log message to allow time for the normal sequencing of region creations. Diffs ----- geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ColocationHelper.java 012a77f3eeaaa5d1c782c6f868ced017a9a26163 geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ColocationLogger.java PRE-CREATION geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionRegionConfig.java 6d7c1ca6c1588bf5f36a021a5d6e9c9a97cd7487 geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegion.java 9ac95a1f9c0ab880d6cab8a350bd9c4842797d5d geode-core/src/main/java/com/gemstone/gemfire/internal/i18n/LocalizedStrings.java 2254a895f2cfdb189727fe8cdce3f770c9c48364 geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ColocationHelperTest.java PRE-CREATION geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistentColocatedPartitionedRegionDUnitTest.java d8b351417575c3e164e634a91f3ff0e7218860ed geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistentPartitionedRegionTestBase.java 692378c6dacf5ea4def4f1dbfec7744beb2bc9c6 Diff: https://reviews.apache.org/r/50715/diff/ Testing ------- precheckin in progress Thanks, Ken Howe