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)

Reply via email to