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)

Reply via email to