[ https://issues.apache.org/jira/browse/CURATOR-712?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Kevin Wikant updated CURATOR-712: --------------------------------- Description: 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.setData().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 was: 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 > 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 > Priority: Major > > 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.setData().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)