-
Notifications
You must be signed in to change notification settings - Fork 262
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(java): zstd meta compressor #2042
Conversation
Could we add a new fury java module named as |
java/fury-core/pom.xml
Outdated
<dependency> | ||
<groupId>com.github.luben</groupId> | ||
<artifactId>zstd-jni</artifactId> | ||
</dependency> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
could we use povided
dependency?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
im quite new to maven. ive made changes in the new commit, is it suffice?
d1a2930
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, d1a2930 is OK. Could you remove zstd-jni
from fury-core module, it's used in fury-extensions
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oops forgot to remove that. Done
import com.github.luben.zstd.Zstd; | ||
import com.github.luben.zstd.ZstdException; | ||
|
||
public class ZstdMetaCompressor implements MetaCompressor { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could we add a test with org.apache.fury.config.FuryBuilder#withMetaCompressor
set to this compressor?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
do you mean this?
java/fury-extensions/src/test/java/org/apache/fury/meta/ClassDefEncoderTest.java
or anything specific in mind?
Zstd.compressByteArray( | ||
compressedData, | ||
0, | ||
(int) maxCompressedSize, | ||
data, | ||
offset, | ||
size, | ||
Zstd.defaultCompressionLevel()); | ||
|
||
return compressedData; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Zstd.compressByteArray( | |
compressedData, | |
0, | |
(int) maxCompressedSize, | |
data, | |
offset, | |
size, | |
Zstd.defaultCompressionLevel()); | |
return compressedData; | |
long size = Zstd.compressByteArray( | |
compressedData, | |
0, | |
(int) maxCompressedSize, | |
data, | |
offset, | |
size, | |
Zstd.defaultCompressionLevel()); | |
return Arrays.copyOf(compressedData, (int) size); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you share why its better to have its copies? @chaokunyang
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am not sure whether maxCompressedSize
is exactly the compressed size fo zstd, or it's a n estimated max size
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
After read zstd code, I got the idea why. Nice catch.
Lgtm
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let me check for the decompress as well
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Updated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
<!-- **Thanks for contributing to Fury.** **If this is your first time opening a PR on fury, you can refer to [CONTRIBUTING.md](https://github.com/apache/fury/blob/main/CONTRIBUTING.md).** Contribution Checklist - The **Apache Fury (incubating)** community has restrictions on the naming of pr titles. You can also find instructions in [CONTRIBUTING.md](https://github.com/apache/fury/blob/main/CONTRIBUTING.md). - Fury has a strong focus on performance. If the PR you submit will have an impact on performance, please benchmark it first and provide the benchmark result here. --> ## What does this PR do? create zstd metacompressor as an option. let zstd access the src arr instead of copy to new array. ## Related issues <!-- Is there any related issue? Please attach here. - #xxxx0 - #xxxx1 - #xxxx2 --> ## Does this PR introduce any user-facing change? <!-- If any user-facing interface changes, please [open an issue](https://github.com/apache/fury/issues/new/choose) describing the need to do so and update the document if necessary. --> - [ ] Does this PR introduce any public API change? - [ ] Does this PR introduce any binary protocol compatibility change? ## Benchmark <!-- When the PR has an impact on performance (if you don't know whether the PR will have an impact on performance, you can submit the PR first, and if it will have impact on performance, the code reviewer will explain it), be sure to attach a benchmark data here. -->
What does this PR do?
create zstd metacompressor as an option. let zstd access the src arr instead of copy to new array.
Related issues
Does this PR introduce any user-facing change?
Benchmark