[
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)