Hello Dan, Thanks, you're right... instead of making the parameters mandatory, the command should be changed to generate a valid XML to persist in the cluster configuration service instead. I'll change GEODE-4794 and work on the fix, thanks again. Best regards.
On Wed, Mar 7, 2018 at 7:44 PM, Dan Smith <[email protected]> wrote: > I think the configure pdx command also lets you configure persistence or > read-serialized for pdx, right? So some people might not be using either of > those auto-serializable-classes options. > > -Dan > > On Wed, Mar 7, 2018 at 4:13 AM, Ju@N <[email protected]> wrote: > > > Hello all, > > > > While working on a fix for GEODE-4771 > > <https://issues.apache.org/jira/browse/GEODE-4771> I've came across a > > non-reported bug: the configure pdx command fails when no parameters are > > specified, even when we state in the User Guide > > <http://geode.apache.org/docs/guide/14/tools_modules/gfsh/ > > command-pages/configure.html> > > that > > no parameters are mandatory to execute the command. The source code > doesn't > > enforce any of the parameters and, as such, the resulting XmlEntity ends > up > > being empty, so a NullPointerException is thrown when the command tries > to > > persist the changes to the cluster configuration service: > > > > [error 2018/03/07 11:07:48.242 GMT locator1 <RMI TCP > > Connection(2)-127.0.0.1> tid=0x55] error updating cluster > > configuration for group cluster > > java.lang.NullPointerException > > at java.io.StringReader.<init>(StringReader.java:50) > > at org.apache.geode.management.internal.configuration.utils. > > XmlUtils.createNode(XmlUtils.java:242) > > at org.apache.geode.management.internal.configuration.utils. > > XmlUtils.addNewNode(XmlUtils.java:133) > > at org.apache.geode.distributed.internal. > > ClusterConfigurationService.addXmlEntity(ClusterConfigurationService. > > java:204) > > at org.apache.geode.management.internal.cli.commands. > > ConfigurePDXCommand.lambda$configurePDX$0(ConfigurePDXCommand.java:131) > > at org.apache.geode.management.internal.cli.commands. > GfshCommand. > > persistClusterConfiguration(GfshCommand.java:72) > > at org.apache.geode.management.internal.cli.commands. > > ConfigurePDXCommand.configurePDX(ConfigurePDXCommand.java:130) > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > at sun.reflect.NativeMethodAccessorImpl.invoke( > > NativeMethodAccessorImpl.java:62) > > at sun.reflect.DelegatingMethodAccessorImpl.invoke( > > DelegatingMethodAccessorImpl.java:43) > > at java.lang.reflect.Method.invoke(Method.java:498) > > at org.springframework.util.ReflectionUtils.invokeMethod( > > ReflectionUtils.java:216) > > at org.apache.geode.management.internal.cli.remote. > > CommandExecutor.invokeCommand(CommandExecutor.java:97) > > at org.apache.geode.management.internal.cli.remote. > > CommandExecutor.execute(CommandExecutor.java:45) > > at org.apache.geode.management.internal.cli.remote. > > CommandExecutor.execute(CommandExecutor.java:39) > > at org.apache.geode.management.internal.cli.remote. > > OnlineCommandProcessor.executeCommand(OnlineCommandProcessor.java:133) > > at org.apache.geode.management.internal.beans.MemberMBeanBridge. > > processCommand(MemberMBeanBridge.java:1579) > > at org.apache.geode.management.internal.beans.MemberMBean. > > processCommand(MemberMBean.java:412) > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > at sun.reflect.NativeMethodAccessorImpl.invoke( > > NativeMethodAccessorImpl.java:62) > > at sun.reflect.DelegatingMethodAccessorImpl.invoke( > > DelegatingMethodAccessorImpl.java:43) > > at java.lang.reflect.Method.invoke(Method.java:498) > > at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71) > > at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source) > > at sun.reflect.DelegatingMethodAccessorImpl.invoke( > > DelegatingMethodAccessorImpl.java:43) > > at java.lang.reflect.Method.invoke(Method.java:498) > > at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275) > > at com.sun.jmx.mbeanserver.ConvertingMethod. > invokeWithOpenReturn( > > ConvertingMethod.java:193) > > at com.sun.jmx.mbeanserver.ConvertingMethod. > invokeWithOpenReturn( > > ConvertingMethod.java:175) > > at com.sun.jmx.mbeanserver.MXBeanIntrospector.invokeM2( > > MXBeanIntrospector.java:117) > > at com.sun.jmx.mbeanserver.MXBeanIntrospector.invokeM2( > > MXBeanIntrospector.java:54) > > at com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM( > > MBeanIntrospector.java:237) > > at com.sun.jmx.mbeanserver.PerInterface.invoke( > > PerInterface.java:138) > > at com.sun.jmx.mbeanserver.MBeanSupport.invoke( > > MBeanSupport.java:252) > > at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke( > > DefaultMBeanServerInterceptor.java:819) > > at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke( > > JmxMBeanServer.java:801) > > at javax.management.remote.rmi.RMIConnectionImpl.doOperation( > > RMIConnectionImpl.java:1468) > > at javax.management.remote.rmi.RMIConnectionImpl.access$300( > > RMIConnectionImpl.java:76) > > at javax.management.remote.rmi.RMIConnectionImpl$ > > PrivilegedOperation.run(RMIConnectionImpl.java:1309) > > at javax.management.remote.rmi.RMIConnectionImpl. > > doPrivilegedOperation(RMIConnectionImpl.java:1401) > > at javax.management.remote.rmi.RMIConnectionImpl.invoke( > > RMIConnectionImpl.java:829) > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > at sun.reflect.NativeMethodAccessorImpl.invoke( > > NativeMethodAccessorImpl.java:62) > > at sun.reflect.DelegatingMethodAccessorImpl.invoke( > > DelegatingMethodAccessorImpl.java:43) > > at java.lang.reflect.Method.invoke(Method.java:498) > > at sun.rmi.server.UnicastServerRef.dispatch( > > UnicastServerRef.java:357) > > at sun.rmi.transport.Transport$1.run(Transport.java:200) > > at sun.rmi.transport.Transport$1.run(Transport.java:197) > > at java.security.AccessController.doPrivileged(Native Method) > > at sun.rmi.transport.Transport.serviceCall(Transport.java:196) > > at sun.rmi.transport.tcp.TCPTransport.handleMessages( > > TCPTransport.java:568) > > at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0( > > TCPTransport.java:826) > > at sun.rmi.transport.tcp.TCPTransport$ > > ConnectionHandler.lambda$run$0(TCPTransport.java:683) > > at java.security.AccessController.doPrivileged(Native Method) > > at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run( > > TCPTransport.java:682) > > at java.util.concurrent.ThreadPoolExecutor.runWorker( > > ThreadPoolExecutor.java:1149) > > at java.util.concurrent.ThreadPoolExecutor$Worker.run( > > ThreadPoolExecutor.java:624) > > at java.lang.Thread.run(Thread.java:748) > > > > Currently the configure pdx command only allows the user to configure the > > ReflectionBasedAutoSerializer class, which requires a decision on whether > > the check-portability flag is set as true or false. This, in turn, > enforces > > the usage of either the > > portable-auto-serializable-classes(check-portability=true) or > > auto-serializable-classes(check-portability=false) so that the command > > knows exactly which of ReflectionBasedAutoSerializer should create. > Within > > the command we could easily create an empty > ReflectionBasedAutoSerializer, > > but it won't match any classes so it doesn't make any sense at all... > > > > The proposal is to make the flags portable-auto-serializable-classes and > > auto-serializable-classes mandatory, mutually exclusive. > > > > Please let me know your thoughts. > > > > Best regards. > > > > -- > > Ju@N > > > -- Juan José Ramos Cassella Senior Technical Support Engineer Email: [email protected] Office#: +353 21 4238611 Mobile#: +353 87 2074066 After Hours Contact#: +1 877 477 2269 Office Hours: Mon - Thu 08:30 - 17:00 GMT. Fri 08:30 - 16:00 GMT How to upload artifacts: https://support.pivotal.io/hc/en-us/articles/204369073 How to escalate a ticket: https://support.pivotal.io/hc/en-us/articles/203809556 [image: support] <https://support.pivotal.io/> [image: twitter] <https://twitter.com/pivotal> [image: linkedin] <https://www.linkedin.com/company/3048967> [image: facebook] <https://www.facebook.com/pivotalsoftware> [image: google plus] <https://plus.google.com/+Pivotal> [image: youtube] <https://www.youtube.com/playlist?list=PLAdzTan_eSPScpj2J50ErtzR9ANSzv3kl>
