Kevin Wikant created CURATOR-712: ------------------------------------ Summary: Simplify user experience for enabling compression via CompressionProvider Key: CURATOR-712 URL: https://issues.apache.org/jira/browse/CURATOR-712 Project: Apache Curator Issue Type: Improvement Reporter: Kevin Wikant Assignee: Enrico Olivelli
Curator users may want to leverage recipes such as [SharedValue|https://github.com/apache/curator/blob/eeee4c63be6e2377ab9fa8a70f9406dc410ee7d2/curator-recipes/src/main/java/org/apache/curator/framework/recipes/shared/SharedValue.java#L100] & [PersistentNode|https://github.com/apache/curator/blob/eeee4c63be6e2377ab9fa8a70f9406dc410ee7d2/curator-recipes/src/main/java/org/apache/curator/framework/recipes/nodes/PersistentNode.java#L156] directly to avoid maintaining additional code These recipes take a [CuratorFramework|https://github.com/apache/curator/blob/eeee4c63be6e2377ab9fa8a70f9406dc410ee7d2/curator-framework/src/main/java/org/apache/curator/framework/imps/CuratorFrameworkImpl.java#L95] as an argument It seems that when CuratorFramework is configured with a [CompressionProvider|https://github.com/apache/curator/blob/eeee4c63be6e2377ab9fa8a70f9406dc410ee7d2/curator-framework/src/main/java/org/apache/curator/framework/imps/CuratorFrameworkImpl.java#L110] that compression is not used by default for recipes such as SharedValue & PersistentNode Taking getData & setData as examples, we see that compression is only used based on a boolean flag in the [GetDataBuilderImpl|https://github.com/apache/curator/blob/eeee4c63be6e2377ab9fa8a70f9406dc410ee7d2/curator-framework/src/main/java/org/apache/curator/framework/imps/GetDataBuilderImpl.java#L239] & [SetDataBuilderImpl|https://github.com/apache/curator/blob/eeee4c63be6e2377ab9fa8a70f9406dc410ee7d2/curator-framework/src/main/java/org/apache/curator/framework/imps/SetDataBuilderImpl.java#L72] >From what I am seeing, this flag does not get set by default when using >SharedValue & PersistentNode. For example: * [SharedValue.setData|https://github.com/apache/curator/blob/eeee4c63be6e2377ab9fa8a70f9406dc410ee7d2/curator-recipes/src/main/java/org/apache/curator/framework/recipes/shared/SharedValue.java#L141] * [CuratorFrameworkImpl.setData|https://github.com/apache/curator/blob/eeee4c63be6e2377ab9fa8a70f9406dc410ee7d2/curator-framework/src/main/java/org/apache/curator/framework/imps/CuratorFrameworkImpl.java#L505] * [SetDataBuilderImpl constructor|https://github.com/apache/curator/blob/eeee4c63be6e2377ab9fa8a70f9406dc410ee7d2/curator-framework/src/main/java/org/apache/curator/framework/imps/SetDataBuilderImpl.java#L57] Seems from my testing & code inspection that to enable compression you need to do the following: {quote}CuratorFramework client; // SetData Stat result = client.setData().compressed().... // GetData Stat result = client.getData().decompressed().... {quote} This means that Curator users either need to: 1. Modify the SharedValue, PersistentNode, & other recipes to create customized versions 2. Create an abstraction on-top of the SharedValue, PersistentNode, & other recipes to perform compression/decompression I think a better experience could be to give users the ability to enable compression at the CuratorFramework-level so that any recipes created with that CuratorFramework will automatically use compression For backwards compatibility, you could simply add a new boolean config to the CuratorFrameworkImpl which specifies "compressionEnabled" When this config is enabled, you can [create the GetDataBuilderImpl & SetDataBuilderImpl objects with compression/decompression enabled in the CuratorFrameworkImpl|https://github.com/apache/curator/blob/eeee4c63be6e2377ab9fa8a70f9406dc410ee7d2/curator-framework/src/main/java/org/apache/curator/framework/imps/CuratorFrameworkImpl.java#L496-L506] My initial intuition was that creating the CuratorFramework with a CompressionProvider would have enabled compression by default, but it seems this is not the case currently -- This message was sent by Atlassian Jira (v8.20.10#820010)