> On Aug. 11, 2016, 7:23 p.m., Darrel Schneider wrote:
> > geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ColocationLogger.java,
> > line 200
> > <https://reviews.apache.org/r/50715/diff/2/?file=1471107#file1471107line200>
> >
> > I see. This is a bit different than what I expected. But it might be ok.
> >
> > I thought an offline region would list the regions that are causing it
> > to be offline. If a direct child does not exist then it does log that. But
> > if a direct child is offline because a grandchild is missing then this
> > offline region will not list that it is offline bcause of the grandchild.
> >
> > With your way of doing it the offline child will list that it is
> > offline because of its missing child (its parent's grandchild) and it will
> > list that it is keeping its parent offline.
> >
> > This seems a bit indirect.
> > It is possible you will not have any log message that says the parent
> > is offline because...
> > Instead you will have a log message about its child that also says it
> > is causing a problem for its parent. This is better than before.
> >
> > Lets talk about this one.
Here's an alternate way of logging a missing gfrandchild region. With this
format, the focus is on the offline region(s) (parent and/or grandparent) not
the region that's missing. I think is more what you were thinking.
The message looks like this in the current version:
Persistent data recovery is prevented by offline colocated region /region3
Region initialization is incomplete for:
/region2
/region1
This can be reformatted as 2 logs, one on each parent region, both showing the
same offline region as the cause
Persistent data recovery for region /region1 is prevented by offline colocated
region
/region3
Persistent data recovery for region /region2 is prevented by offline colocated
region
/region3
- Ken
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/50715/#review145536
-----------------------------------------------------------
On Aug. 11, 2016, 5:51 p.m., Ken Howe wrote:
>
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/50715/
> -----------------------------------------------------------
>
> (Updated Aug. 11, 2016, 5:51 p.m.)
>
>
> Review request for geode, Darrel Schneider, Eric Shu, Scott Jewell, Kirk
> Lund, and Dan Smith.
>
>
> 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
> 012a77f
>
> 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
> 6d7c1ca
>
> geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegion.java
> 9ac95a1
>
> geode-core/src/main/java/com/gemstone/gemfire/internal/i18n/LocalizedStrings.java
> 2254a89
>
> 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
> d8b3514
>
> geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistentPartitionedRegionTestBase.java
> 692378c
>
> Diff: https://reviews.apache.org/r/50715/diff/
>
>
> Testing
> -------
>
> precheckin in progress
>
>
> Thanks,
>
> Ken Howe
>
>