Juan José Ramos Cassella created GEODE-3987: -----------------------------------------------
Summary: Enforce the uniqueness of a single gateway-receiver per member Key: GEODE-3987 URL: https://issues.apache.org/jira/browse/GEODE-3987 Project: Geode Issue Type: Bug Reporter: Juan José Ramos Cassella Within the documentation, both in [Configure Gateway Receivers|http://geode.apache.org/docs/guide/13/topologies_and_comm/multi_site_configuration/setting_up_a_multisite_system.html#setting_up_a_multisite_system__section_E3A44F85359046C7ADD12861D261637B] and [gfsh create gateway-receiver|http://geode.apache.org/docs/guide/13/tools_modules/gfsh/command-pages/create.html#topic_a4x_pb1_dk], we state that only one {{gateway-receiver}} is allowed per member. However, there is no enforcement of this rule within the code nor within the schema for the {{cache.xml}} file, so the user might end up having more than one {{gateway-receiver}} per host. It's unknown which {{gateway-receiver}} is going to be used after a restart, making it hard to configure firewall rules between clusters, if any. The following exception is also printed in the logs whenever we try to register (only the first one is succesfull) the MBean for the {{gateway-receiver}}: {noformat} [warning 2017/11/16 15:27:46.156 PST host1-server1 <Function Execution Processor1> tid=0x44] javax.management.InstanceAlreadyExistsException: GemFire:service=GatewayReceiver,type=Member,member=host1-server1 org.apache.geode.management.ManagementException: javax.management.InstanceAlreadyExistsException: GemFire:service=GatewayReceiver,type=Member,member=host1-server1 at org.apache.geode.management.internal.MBeanJMXAdapter.registerMBean(MBeanJMXAdapter.java:110) at org.apache.geode.management.internal.SystemManagementService.registerInternalMBean(SystemManagementService.java:368) at org.apache.geode.management.internal.beans.ManagementAdapter.createGatewayReceiverMBean(ManagementAdapter.java:471) at org.apache.geode.management.internal.beans.ManagementAdapter.handleGatewayReceiverStart(ManagementAdapter.java:493) at org.apache.geode.management.internal.beans.ManagementListener.handleEvent(ManagementListener.java:134) at org.apache.geode.distributed.internal.InternalDistributedSystem.notifyResourceEventListeners(InternalDistributedSystem.java:2175) at org.apache.geode.distributed.internal.InternalDistributedSystem.handleResourceEvent(InternalDistributedSystem.java:562) at org.apache.geode.internal.cache.wan.GatewayReceiverImpl.start(GatewayReceiverImpl.java:194) at org.apache.geode.internal.cache.wan.GatewayReceiverFactoryImpl.create(GatewayReceiverFactoryImpl.java:141) at org.apache.geode.management.internal.cli.functions.GatewayReceiverCreateFunction.createGatewayReceiver(GatewayReceiverCreateFunction.java:164) at org.apache.geode.management.internal.cli.functions.GatewayReceiverCreateFunction.execute(GatewayReceiverCreateFunction.java:63) at org.apache.geode.internal.cache.MemberFunctionStreamingMessage.process(MemberFunctionStreamingMessage.java:186) at org.apache.geode.distributed.internal.DistributionMessage.scheduleAction(DistributionMessage.java:374) at org.apache.geode.distributed.internal.DistributionMessage$1.run(DistributionMessage.java:440) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.geode.distributed.internal.DistributionManager.runUntilShutdown(DistributionManager.java:668) at org.apache.geode.distributed.internal.DistributionManager$9$1.run(DistributionManager.java:1114) at java.lang.Thread.run(Thread.java:745) Caused by: javax.management.InstanceAlreadyExistsException: GemFire:service=GatewayReceiver,type=Member,member=host1-server1 at com.sun.jmx.mbeanserver.Repository.addMBean(Repository.java:437) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerWithRepository(DefaultMBeanServerInterceptor.java:1898) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:966) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:900) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:324) at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:522) at org.apache.geode.management.internal.MBeanJMXAdapter.registerMBean(MBeanJMXAdapter.java:105) ... 18 more {noformat} The fix implies: . Change the {{maxOccurs}} attribute from {{unbounded}} to {{1}} in the {{cache-1.0.xsd}} file. . Add the validation to the {{GatewayReceiverFactoryImpl.create()}} method, as this is the single entry point for {{GatewayReceiver}} instance creations. -- This message was sent by Atlassian JIRA (v6.4.14#64029)