[ 
https://issues.apache.org/jira/browse/CURATOR-663?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Matthias Pohl updated CURATOR-663:
----------------------------------
    Description: 
There might be a {{ClassCastException}} happening when starting the 
{{TestingZooKeeper}} instance. The following test reproduces the issue:

{code}
@Test
public void testTestingZooKeeperServer() throws Exception
{
  final Map<String, Object> customProperties = new HashMap<>();
  customProperties.put("maxSessionTimeout", 60_000);

  final Path tmpDirPath = Files.createTempDirectory("tmp-");
  final InstanceSpec instanceSpec = new InstanceSpec(tmpDirPath.toFile(), 0, 0, 
0, true, 0, 10, 1, customProperties, "host-name");
  final QuorumConfigBuilder quorumConfigBuilder = new 
QuorumConfigBuilder(instanceSpec);
  final TestingZooKeeperServer zkServer = new 
TestingZooKeeperServer(quorumConfigBuilder);

  zkServer.start();
}
{code}

The test above will fail with a {{ClassCastException}} because {{InstantSpec}} 
allows a {{Map<String, Object>}} for custom properties, i.e. a non-String value 
like Integer can be used.

This {{Map}} is then passed over into a {{Properties}} instance in 
[QuorumConfigBuilder:163|https://github.com/apache/curator/blob/master/curator-test/src/main/java/org/apache/curator/test/QuorumConfigBuilder.java#L163].
 These {{Properties}} are then written to a temporary file in ZooKeeper's 
[ZooKeeperServerEmbeddedImpl:58|https://github.com/apache/zookeeper/blob/master/zookeeper-server/src/main/java/org/apache/zookeeper/server/embedded/ZooKeeperServerEmbeddedImpl.java#L58]
 which expects only to have String values. The previously set Integer value 
isn't converted to a String anywhere, though.

  was:
There might be a {{ClassCastException}} happening when starting the 
{{TestingZooKeeper}} instance. The following test reproduces the issue:

{code}
@Test
   public void testTestingZooKeeperServer() throws Exception
   {
      final Map<String, Object> customProperties = new HashMap<>();
      customProperties.put("maxSessionTimeout", 60_000);

      final InstanceSpec instanceSpec = new InstanceSpec(
          zkTmpDir,
          0,
          0,
          0,
          true,
          0,
          10,
          1,
          customProperties,
          "host-name");
      final QuorumConfigBuilder quorumConfigBuilder = new 
QuorumConfigBuilder(instanceSpec);
      final TestingZooKeeperServer zkServer = new 
TestingZooKeeperServer(quorumConfigBuilder);

      zkServer.start();
   }
{code}

The test above will fail with a {{ClassCastException}} because {{InstantSpec}} 
allows a {{Map<String, Object>}} for custom properties, i.e. a non-String value 
like Integer can be used.

This {{Map}} is then passed over into a {{Properties}} instance in 
[QuorumConfigBuilder:163|https://github.com/apache/curator/blob/master/curator-test/src/main/java/org/apache/curator/test/QuorumConfigBuilder.java#L163].
 These {{Properties}} are then written to a temporary file in ZooKeeper's 
[ZooKeeperServerEmbeddedImpl:58|https://github.com/apache/zookeeper/blob/master/zookeeper-server/src/main/java/org/apache/zookeeper/server/embedded/ZooKeeperServerEmbeddedImpl.java#L58]
 which expects only to have String values. The previously set Integer value 
isn't converted to a String anywhere, though.


> ZooKeeperServerEmbeddedAdapter.configure might fail with ClassCastException
> ---------------------------------------------------------------------------
>
>                 Key: CURATOR-663
>                 URL: https://issues.apache.org/jira/browse/CURATOR-663
>             Project: Apache Curator
>          Issue Type: Bug
>          Components: Framework
>    Affects Versions: 5.4.0
>            Reporter: Matthias Pohl
>            Priority: Major
>
> There might be a {{ClassCastException}} happening when starting the 
> {{TestingZooKeeper}} instance. The following test reproduces the issue:
> {code}
> @Test
> public void testTestingZooKeeperServer() throws Exception
> {
>   final Map<String, Object> customProperties = new HashMap<>();
>   customProperties.put("maxSessionTimeout", 60_000);
>   final Path tmpDirPath = Files.createTempDirectory("tmp-");
>   final InstanceSpec instanceSpec = new InstanceSpec(tmpDirPath.toFile(), 0, 
> 0, 0, true, 0, 10, 1, customProperties, "host-name");
>   final QuorumConfigBuilder quorumConfigBuilder = new 
> QuorumConfigBuilder(instanceSpec);
>   final TestingZooKeeperServer zkServer = new 
> TestingZooKeeperServer(quorumConfigBuilder);
>   zkServer.start();
> }
> {code}
> The test above will fail with a {{ClassCastException}} because 
> {{InstantSpec}} allows a {{Map<String, Object>}} for custom properties, i.e. 
> a non-String value like Integer can be used.
> This {{Map}} is then passed over into a {{Properties}} instance in 
> [QuorumConfigBuilder:163|https://github.com/apache/curator/blob/master/curator-test/src/main/java/org/apache/curator/test/QuorumConfigBuilder.java#L163].
>  These {{Properties}} are then written to a temporary file in ZooKeeper's 
> [ZooKeeperServerEmbeddedImpl:58|https://github.com/apache/zookeeper/blob/master/zookeeper-server/src/main/java/org/apache/zookeeper/server/embedded/ZooKeeperServerEmbeddedImpl.java#L58]
>  which expects only to have String values. The previously set Integer value 
> isn't converted to a String anywhere, though.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to