Kevin Duling created GEODE-2236:
-----------------------------------

             Summary: Attempting to remove all CacheListeners from a Region 
using gfsh throws NullPointerException
                 Key: GEODE-2236
                 URL: https://issues.apache.org/jira/browse/GEODE-2236
             Project: Geode
          Issue Type: Bug
          Components: gfsh
            Reporter: Kevin Duling

The --cache-listener option to the alter region command replaces the existing 
CacheListeners with the ones set in the option.

What happens in RegionAlterFunction is that the existing CacheListeners not 
included in the new list are removed, then the new ones are added.

So, in theory, to remove all CacheListeners, an empty string could be passed 
into the --cache-listener option like:
{noformat}
alter region --name=data --cache-listener=''

Executing - alter region --name=data --cache-listener=""

Member  | Status
------- | ----------------------------------------------------------------------
server2 | ERROR: java.lang.NullPointerException
        at com.gemstone.gemfire.manag..
server1 | ERROR: java.lang.NullPointerException
        at com.gemstone.gemfire.manag..
{noformat}
This actually works but it throws the NPE below.
{noformat}
[error 2016/09/13 09:48:59.943 PDT server1 <Function Execution Processor1> 
tid=0x40] 
java.lang.NullPointerException
        at 
com.gemstone.gemfire.management.internal.cli.functions.RegionAlterFunction.newInstance(RegionAlterFunction.java:320)
        at 
com.gemstone.gemfire.management.internal.cli.functions.RegionAlterFunction.alterRegion(RegionAlterFunction.java:228)
        at 
com.gemstone.gemfire.management.internal.cli.functions.RegionAlterFunction.execute(RegionAlterFunction.java:64)
        at 
com.gemstone.gemfire.internal.cache.MemberFunctionStreamingMessage.process(MemberFunctionStreamingMessage.java:185)
        at 
com.gemstone.gemfire.distributed.internal.DistributionMessage.scheduleAction(DistributionMessage.java:386)
        at 
com.gemstone.gemfire.distributed.internal.DistributionMessage$1.run(DistributionMessage.java:457)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at 
com.gemstone.gemfire.distributed.internal.DistributionManager.runUntilShutdown(DistributionManager.java:692)
        at 
com.gemstone.gemfire.distributed.internal.DistributionManager$9$1.run(DistributionManager.java:1149)
        at java.lang.Thread.run(Thread.java:745)
{noformat}
A work-around to this issue is to set a non-existent CacheListener in the 
--cache-listener option like:
{noformat}
alter region --name=data --cache-listener=Fred

Executing - alter region --name=data --cache-listener=Fred

Member  | Status
------- | ------------------------------------------------------------------
server1 | ERROR: Could not find class "Fred" specified for "cache-listener".
server2 | ERROR: Could not find class "Fred" specified for "cache-listener".
{noformat}
This correctly throws the ClassNotFoundException below and also removes all the 
existing CacheListeners.
{noformat}
[error 2016/09/13 09:46:40.537 PDT server1 <Function Execution Processor1> 
tid=0x40] Could not find class "Fred" specified for "cache-listener".
java.lang.RuntimeException: Could not find class "Fred" specified for 
"cache-listener".
        at 
com.gemstone.gemfire.management.internal.cli.functions.RegionAlterFunction.forName(RegionAlterFunction.java:306)
        at 
com.gemstone.gemfire.management.internal.cli.functions.RegionAlterFunction.alterRegion(RegionAlterFunction.java:227)
        at 
com.gemstone.gemfire.management.internal.cli.functions.RegionAlterFunction.execute(RegionAlterFunction.java:64)
        at 
com.gemstone.gemfire.internal.cache.MemberFunctionStreamingMessage.process(MemberFunctionStreamingMessage.java:185)
        at 
com.gemstone.gemfire.distributed.internal.DistributionMessage.scheduleAction(DistributionMessage.java:386)
        at 
com.gemstone.gemfire.distributed.internal.DistributionMessage$1.run(DistributionMessage.java:457)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at 
com.gemstone.gemfire.distributed.internal.DistributionManager.runUntilShutdown(DistributionManager.java:692)
        at 
com.gemstone.gemfire.distributed.internal.DistributionManager$9$1.run(DistributionManager.java:1149)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: Fred
        at 
com.gemstone.gemfire.internal.ClassPathLoader.forName(ClassPathLoader.java:422)
        at 
com.gemstone.gemfire.management.internal.cli.functions.RegionAlterFunction.forName(RegionAlterFunction.java:303)
        ... 10 more
{noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to