You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@curator.apache.org by "Enrico Olivelli (Jira)" <ji...@apache.org> on 2022/10/21 07:08:00 UTC

[jira] [Updated] (CURATOR-609) ModeledCache attempts to deserialize empty ZNodes on deletion, resulting in exceptions

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

Enrico Olivelli updated CURATOR-609:
------------------------------------
    Fix Version/s: 5.4.1
                       (was: 5.4.0)

> 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
>            Priority: Major
>             Fix For: 5.4.1
>
>          Time Spent: 1h 40m
>  Remaining Estimate: 0h
>
> When using the ModeledCache implementation, when a ZPath is deleted the implementation assumes that all ZNodes in the path contain a valid 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 on action NODE_REMOVED.
> 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.20.10#820010)