You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@curator.apache.org by "Ryan Ruel (Jira)" <ji...@apache.org> on 2021/08/05 15:36:00 UTC
[jira] [Created] (CURATOR-609) ModeledCache attempts to deserialize
empty ZNodes on deletion, resulting in exceptions
Ryan Ruel created CURATOR-609:
---------------------------------
Summary: ModeledCache attempts to deserialize empty ZNodes on deletion, resulting in exceptions
Key: CURATOR-609
URL: https://issues.apache.org/jira/browse/CURATOR-609
Project: Apache Curator
Issue Type: Bug
Components: Framework
Affects Versions: 5.1.0
Reporter: Ryan Ruel
Fix For: 5.2.1
When using the ModeledCache implementation, if a ZPath deleted the implementation assumes that all ZNodes in the path contain a instance of the Model.
If intermediary paths have been created that do not contain a Model, the implementation is calling the Jackson deserialize method with null data, resulting in an exception.
Instead, the code should ensure there is valid data present prior to attempting to deserialize and call the "accept()" (callback) method.
Example:
TestModel child1 = new TestModel("d", "e", "f", 1, BigInteger.ONE);
ZPath path1 = path.child("foo").child("bar").child("child1");
try (CachedModeledFramework<TestModel> client = ModeledFramework.wrap(async, modelSpec).cached())
{
CountDownLatch latch = new CountDownLatch(1);
client.listenable().addListener((t, p, s, m) -> latch.countDown());
client.start();
complete(client.withPath(path1).set(child1));
assertTrue(timing.awaitLatch(latch));
assertDoesNotThrow(() -> rawClient.delete().deletingChildrenIfNeeded().forPath(path.toString()));
}
After calling "delete()", an exception is thrown:
ERROR org.apache.curator.x.async.modeled.TestCachedModeledFramework$$Lambda$409/0x0000000800e0c850 Could not process cache message [Curator-SafeNotifyService-0]
java.lang.IllegalArgumentException: argument "src" is null
at com.fasterxml.jackson.databind.ObjectReader._assertNotNull(ObjectReader.java:2120)
--
This message was sent by Atlassian Jira
(v8.3.4#803005)