[ https://issues.apache.org/jira/browse/GEODE-10123?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Owen Nichols closed GEODE-10123. -------------------------------- > Multiple execution of Create region command results with duplicated region in > cluster configuration > --------------------------------------------------------------------------------------------------- > > Key: GEODE-10123 > URL: https://issues.apache.org/jira/browse/GEODE-10123 > Project: Geode > Issue Type: Bug > Reporter: Jakov Varenina > Assignee: Jakov Varenina > Priority: Major > Labels: needsTriage, pull-request-available > Fix For: 1.15.0 > > > We have observed that sometimes the "create region" command executes > successfully during period when servers restart even though region is already > available in the cluster configuration. When this happens, cluster > configuration contains a duplicated region and servers throw the exception > *org.apache.geode.cache.RegionExistsException* when restarted again: > {code:java} > Exception in thread "main" org.apache.geode.cache.CacheXmlException: While > parsing XML, caused by org.xml.sax.SAXException: A CacheException was thrown > while parsing XML. > org.apache.geode.cache.RegionExistsException: /regionTest > at > org.apache.geode.internal.cache.xmlcache.CacheXmlParser.parse(CacheXmlParser.java:267) > at > org.apache.geode.internal.cache.GemFireCacheImpl.loadCacheXml(GemFireCacheImpl.java:4119) > at > org.apache.geode.internal.cache.ClusterConfigurationLoader.applyClusterXmlConfiguration(ClusterConfigurationLoader.java:208) > at > org.apache.geode.internal.cache.GemFireCacheImpl.applyJarAndXmlFromClusterConfig(GemFireCacheImpl.java:1426) > at > org.apache.geode.internal.cache.GemFireCacheImpl.initialize(GemFireCacheImpl.java:1391) > at > org.apache.geode.internal.cache.InternalCacheBuilder.create(InternalCacheBuilder.java:191) > at > org.apache.geode.internal.cache.InternalCacheBuilder.create(InternalCacheBuilder.java:158) > at > org.apache.geode.cache.CacheFactory.create(CacheFactory.java:142) > at > org.apache.geode.distributed.internal.DefaultServerLauncherCacheProvider.createCache(DefaultServerLauncherCacheProvider.java:52) > at > org.apache.geode.distributed.ServerLauncher.createCache(ServerLauncher.java:892) > at > org.apache.geode.distributed.ServerLauncher.start(ServerLauncher.java:807) > at > org.apache.geode.distributed.ServerLauncher.run(ServerLauncher.java:737) > at > org.apache.geode.distributed.ServerLauncher.main(ServerLauncher.java:256) > Caused by: org.xml.sax.SAXException: A CacheException was thrown while > parsing XML. > {code} > CreateRegionCommand checks whether there is already an existing region using > the DistributedRegionMXBean service. This service is unreliable during > restarts, as it takes some time for the locator to accumulate this > information. So during the startup of the servers locator will send > CreateRegionFunction to servers since it couldn't detect that region already > exists using the DistributedRegionMXBean service. In most scenarios, the > server will reject that function. The only case the server will execute the > function is when using the local cache.xml configuration in addition to the > cluster configuration. It seems that processing local cache.xml creates a > time gap on the server that will accept CreateRegionFunction, although the > region is already available in the cluster configuration. > Solution: > In addition to checks done against the DistributedRegionMXBean information, > do the same checks against cluster configuration (if used) stored in > locators. This way, the "create region" command is rejected immediately by > the locator instead of later by the servers. -- This message was sent by Atlassian Jira (v8.20.7#820007)