Skip to content

chore: update releases-0.5.0 to latest main branch#1532

Merged
chaokunyang merged 68 commits intoapache:releases-0.5.0from
chaokunyang:release0.5.0.rc3
Apr 17, 2024
Merged

chore: update releases-0.5.0 to latest main branch#1532
chaokunyang merged 68 commits intoapache:releases-0.5.0from
chaokunyang:release0.5.0.rc3

Conversation

@chaokunyang
Copy link
Collaborator

@chaokunyang chaokunyang commented Apr 17, 2024

What does this PR do?

This PR update releases-0.5.0 branch to lastest main branch and bump version to 0.5.0.

This PR also diabled automatic python release since we don't release python wheel for 0.5.0

Related issues

#1389

Does this PR introduce any user-facing change?

  • Does this PR introduce any public API change?
  • Does this PR introduce any binary protocol compatibility change?

Benchmark

pjfanning and others added 30 commits March 28, 2024 01:55
avoid actions that use node16


https://github.blog/changelog/2023-09-22-github-actions-transitioning-from-node-16-to-node-20/

also - only publish if running on main fork - not on user forks
As a native English speaker, the existing text doesn't read properly for
me.

Blazing is being used as an adverb so should become Blazingly.

https://en.wiktionary.org/wiki/blazingly

For instance, if you wanted to use `incredible` - you would say
`incredibly fast`, not `incredible fast`.
This PR add a `release.py` python script for bump version. In future, we
will add other release related function here.

Related issue: apache#1389
This PR adds DISCLAIMER and NOTICE for built jars to comply with ASF
release policy
The bigdecimal serialization doesn't pass precison, this PR fixed it
This PR closes apache#1404 by:
- Upgrade slf4j to 2.0.12
- Using print instead of slf4j for graalvm
…nt (apache#1434)

N/A

Signed-off-by: LiangliangSui <coolsui.coding@gmail.com>
…tion (apache#1413)

## What does this PR do?

This PR standardizes fury cross-language serialization specification. It
comes with following changes:
- Remove type tag from the protocol since it introduce space and
performance overhead to the implementation. The `type tag` version can
be seen in
https://github.com/apache/incubator-fury/blob/6ea2e0b83d5449d63ca62296ff0dfd67b96c5bc5/docs/protocols/xlang_object_graph_spec.md
.
- Fury preserves `0~63` for internal types, but let users register type
by id from `0`(added by 64 automatically) to setup type mapping between
languages.
- Streamline the type systems, only
`bool/byte/i16/i32/i64/half-float/float/double/string/enum/list/set/map/Duration/Timestamp/decimal/binary/array/tensor/sparse/tensor/arrow/record/batch/arrow/table`
are allowed.
- Formulized the binary format for above types.
- Add type disambiguation: the deserialization are determined by data
type in serialized binary and target type jointly.
- Introduce meta string encoding algorithm for field name to reduce
space cost by 3/8.
- Introduce schema consist mode format for struct.
- Introduce schema envolution mode for struct: 
- this mode can embeed meta in the data or share across multiple
messages,
- it can avoid the cost of type tag comparison in frameworks like
protobuf

This protocol also supports object inheriance for xlang serializaiton.
This is a feature request that users has been discussed for a long time
in protobuf/flatbuffer:
- google/flatbuffers#4006
- protocolbuffers/protobuf#5645

Although there are some languages such as `rust/golang` doesn't support
inheriance, there are many cases only langauges like
`java/c#/python/javascript` are involved, and the support for inheriance
is not complexed in the protocol level, so we added the inheriance
support in the protocol. And in languages such as `rust/golang`, we can
use some annotation to mark composition field as parent class for
serialization layout, or we can disable inheriance foor such languages
at the protocol level.
 
The protocol support polymorphic natively by type id, so I don't include
types such as `OneOf/Union`. With this protocol, you can even serialize
multiple rust `dyn trait` object which implement same trait., and get
exactly the same objects when deserialization.

## Related issue
This PR Closes apache#1418

---------

Co-authored-by: Twice <twice@apache.org>
This PR add openj9 ci, since we have openj9 users, see apache#1433 . Class GC
in linux distribution are not supported in this PR.
ideally all files should have license headers

relates to apache#1441
Since our serialization spec has been formulized, we can publish it to
our website now.

This PR sync specification files to incubator-fury-website

---------

Co-authored-by: LiangliangSui <116876207+LiangliangSui@users.noreply.github.com>
…he#1453)

Signed-off-by: LiangliangSui <coolsui.coding@gmail.com>
Extract public Fury method to the `BaseFury` interface and implement
them in `ThreadPoolFury` and `ThreadLocalFury`, so end users can avoid
using `execute()` and other utility methods.

Off topic: further steps might be changing `BaseFury` interface name to
`Fury` while existing class renaming to something like `FuryImpl`.
`FuryBuilder` should return the new `Fury` interface, so we will hide
system methods like `xwriteRef` and others. WDYT?
apache#1469)

This PR optimizes readVarInt/readInt performance by reduce code size of
readVarInt for better jvm jit
…pache#1470)

This PR reduced code size of read long for jvm jit inline:
- Reduced readVarLong code size by separating little/big endian
- Reduced readLong code size by separating little/big endian
- Reduced unsafeGetLong code size by separating little/big endian and
generate online
- optimize read char jvm jit inline by separate little/big endian
methods
- optimize read short jvm jit inline by separate little/big endian
methods
- generate unsafe get short code online
- generate unsafe get char code online
- optimize read float jvm jit inline by separate little/big endian
methods
- optimize read double jvm jit inline by separate little/big endian
methods
- generate unsafe get float code online
- generate unsafe get double code online
N/A

---------

Signed-off-by: LiangliangSui <coolsui.coding@gmail.com>
When PR has an impact on Fury performance, it is recommended to use perf
type and provide benchmark data in the PR description.

Signed-off-by: LiangliangSui <coolsui.coding@gmail.com>
## What this PR do?
This PR implements streaming mode deserialization, which make the
protocol between `Fury#serialize(buffer, o)` and `Fury#serialize(stream,
o)` consistent, and make the deserialization support real streaming mode
to reduce latency, and facilitate the pipeline between deserialization
and transfer.

The changes inlucde:
- Introduce a `FuryStreamReader` to allow buffered streaming reading.
- Make `MemoryBuffer` support streaming reading without introduce cost
on critical path.
- Implements `InputStream` based `FuryStreamReader` for Fury.

`java.nio.Channel` based zero-copy is not implemented in this PR.

## Related issues
Closes apache#1435

## Media Benchmark
with this PR:
```
Benchmark                                  (bufferType)   (objectType)  (references)   Mode  Cnt        Score       Error  Units
UserTypeDeserializeSuite.fury_deserialize         array  MEDIA_CONTENT         false  thrpt   50  2867721.514 ± 55102.830  ops/s
UserTypeDeserializeSuite.fury_deserialize         array  MEDIA_CONTENT          true  thrpt   50  1841586.657 ± 46192.190  ops/s
UserTypeDeserializeSuite.fury_deserialize  directBuffer  MEDIA_CONTENT         false  thrpt   50  2542987.512 ± 49835.129  ops/s
UserTypeDeserializeSuite.fury_deserialize  directBuffer  MEDIA_CONTENT          true  thrpt   50  1712919.362 ± 26500.068  ops/s
```
Before this PR: 4c60eb9
```
Benchmark                                  (bufferType)   (objectType)  (references)   Mode  Cnt        Score       Error  Units
UserTypeDeserializeSuite.fury_deserialize         array  MEDIA_CONTENT         false  thrpt   50  2971081.559 ± 52348.975  ops/s
UserTypeDeserializeSuite.fury_deserialize         array  MEDIA_CONTENT          true  thrpt   50  1938252.031 ± 25077.333  ops/s
UserTypeDeserializeSuite.fury_deserialize  directBuffer  MEDIA_CONTENT         false  thrpt   50  2511729.964 ± 39278.437  ops/s
UserTypeDeserializeSuite.fury_deserialize  directBuffer  MEDIA_CONTENT          true  thrpt   50  1714610.534 ± 29778.339  ops/s
```

Baseline(7bb21d0):
```
Benchmark                                  (bufferType)   (objectType)  (references)   Mode  Cnt        Score       Error  Units
UserTypeDeserializeSuite.fury_deserialize         array  MEDIA_CONTENT         false  thrpt   50  2928012.663 ± 65849.325  ops/s
UserTypeDeserializeSuite.fury_deserialize         array  MEDIA_CONTENT          true  thrpt   50  1937231.421 ± 24616.628  ops/s
UserTypeDeserializeSuite.fury_deserialize  directBuffer  MEDIA_CONTENT         false  thrpt   50  2539983.720 ± 43379.751  ops/s
UserTypeDeserializeSuite.fury_deserialize  directBuffer  MEDIA_CONTENT          true  thrpt   50  1711973.100 ± 19195.431  ops/s
```

## Struct Benchmark
This PR
```
Benchmark                                  (bufferType)   (objectType)  (references)   Mode  Cnt        Score       Error  Units
UserTypeDeserializeSuite.fury_deserialize         array  STRUCT                false  thrpt   50  2603998.829 ± 35062.683  ops/s
UserTypeDeserializeSuite.fury_deserialize         array  STRUCT                 true  thrpt   50  3438343.670 ± 48911.824  ops/s
UserTypeDeserializeSuite.fury_deserialize  directBuffer  STRUCT                false  thrpt   50  2631586.246 ± 34760.277  ops/s
UserTypeDeserializeSuite.fury_deserialize  directBuffer  STRUCT                 true  thrpt   50  3425883.355 ± 40436.642  ops/s
```

Before This PR:
```
Benchmark                                  (bufferType)   (objectType)  (references)   Mode  Cnt        Score       Error  Units
UserTypeDeserializeSuite.fury_deserialize         array  STRUCT                false  thrpt   50  2589559.872 ± 28062.176  ops/s
UserTypeDeserializeSuite.fury_deserialize         array  STRUCT                 true  thrpt   50  3468978.381 ± 37684.130  ops/s
UserTypeDeserializeSuite.fury_deserialize  directBuffer  STRUCT                false  thrpt   50  2640599.313 ± 36759.090  ops/s
UserTypeDeserializeSuite.fury_deserialize  directBuffer  STRUCT                 true  thrpt   50  3451992.441 ± 51964.331  ops/s
```

Baseline:
```
Benchmark                                  (bufferType)   (objectType)  (references)   Mode  Cnt        Score       Error  Units
UserTypeDeserializeSuite.fury_deserialize         array  STRUCT                false  thrpt   50  1576536.898 ± 54571.741  ops/s
UserTypeDeserializeSuite.fury_deserialize         array  STRUCT                 true  thrpt   50  3194178.195 ± 60680.268  ops/s
UserTypeDeserializeSuite.fury_deserialize  directBuffer  STRUCT                false  thrpt   50  1641797.023 ± 16222.155  ops/s
UserTypeDeserializeSuite.fury_deserialize  directBuffer  STRUCT                 true  thrpt   50  3163612.265 ± 49756.995  ops/s
```
chaokunyang and others added 23 commits April 13, 2024 13:56
<!--
**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/incubator-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/incubator-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?
make slf4j optional
<!-- Describe the purpose of this PR. -->


## Related issues
apache#1485 
<!--
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/incubator-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.
-->
<!--
**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/incubator-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/incubator-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?
This PR reduce endian check code size in MemoryBuffer and fixed some
internal API name.

This PR introduce a 10% performance improvement
<!-- Describe the purpose of this PR. -->


## 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/incubator-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
Serialization:
```
Before:
Benchmark                              (bufferType)   (objectType)  (references)   Mode  Cnt        Score       Error  Units
UserTypeSerializeSuite.fury_serialize         array  MEDIA_CONTENT         false  thrpt   10  3363940.073 ± 86298.538  ops/s

Now
Benchmark                              (bufferType)   (objectType)  (references)   Mode  Cnt        Score       Error  Units
UserTypeSerializeSuite.fury_serialize         array  MEDIA_CONTENT         false  thrpt   10  3645145.088 ± 56496.783  ops/s
```
Deserialization:
```

Before:
Benchmark                                  (bufferType)   (objectType)  (references)   Mode  Cnt        Score        Error  Units
UserTypeDeserializeSuite.fury_deserialize         array  MEDIA_CONTENT         false  thrpt   10  2263144.547 ± 138780.480  ops/s

Now:
Benchmark                                  (bufferType)   (objectType)  (references)   Mode  Cnt        Score       Error  Units
UserTypeDeserializeSuite.fury_deserialize         array  MEDIA_CONTENT         false  thrpt   10  2602900.001 ± 32584.112  ops/s
```
add type mapping for xlang serialization

---------

Co-authored-by: LiangliangSui <116876207+LiangliangSui@users.noreply.github.com>
<!--
**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/incubator-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/incubator-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?
reduce fury caller stack
<!-- Describe the purpose of this PR. -->


## 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/incubator-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.
-->
…ache#1503)

## What does this PR do?
This PR add fastpath for read/write small varint in range `[0,127]`.

This PR also fix wrong log level setting in apache#1492
<!-- Describe the purpose of this PR. -->


## 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/incubator-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
With this PR:

![image](https://github.com/apache/incubator-fury/assets/12445254/7ed6f885-9547-414a-a5c4-fd4e77487248)

Before this PR:

![image](https://github.com/apache/incubator-fury/assets/12445254/08a39519-cb0d-4992-8faf-8957842e8473)


<!--
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.
-->
<!--
**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/incubator-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/incubator-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?

<!-- Describe the purpose of this PR. -->
Improve javadoc for logging module.

## Related issues

<!--
Is there any related issue? Please attach here.

- #xxxx0
- #xxxx1
- #xxxx2
-->
apache#1497

## Does this PR introduce any user-facing change?

<!--
If any user-facing interface changes, please [open an
issue](https://github.com/apache/incubator-fury/issues/new/choose)
describing the need to do so and update the document if necessary.
-->

- [ ] Does this PR introduce any binary protocol compatibility change?

- [ ] Does this PR introduce any public API 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.
-->

---------

Signed-off-by: LiangliangSui <coolsui.coding@gmail.com>
<!--
**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/incubator-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/incubator-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? 
**Reduce the use of closures to enhance code readability.**   
We used closures extensively in the past, which could easily trigger
Inline-Cache in `V8`, but this practice was detrimental to code
readability. Now that the infrastructure is stable, we can replace them
with classes to enhance readability without affecting performance.



## Does this PR introduce any user-facing change?
There are no user-facing change.


## Benchmark
| (index) | serialize | deserialize |
|----------|------------|--------------|
| fury     | 151        | 120          |
| protobuf | 29         | 39           |
| json     | 28         | 35           |

---------

Co-authored-by: wangweipeng <weipeng>
<!--
**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/incubator-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/incubator-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?
THis PR fix fix NilLogger creation introduced in apache#1503 
<!-- Describe the purpose of this PR. -->


## 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/incubator-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?


## Related issues

<!--
Is there any related issue? Please attach here.

- #xxxx0
- #xxxx1
- #xxxx2
-->
Closes apache#1510 


## Does this PR introduce any user-facing change?

<!--
If any user-facing interface changes, please [open an
issue](https://github.com/apache/incubator-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?

This PR fix license and notice issue apache#1498 according to discussion
thread https://lists.apache.org/list.html?general@incubator.apache.org

## Related issues
Closes apache#1498
apache#1389 

## Does this PR introduce any user-facing change?

<!--
If any user-facing interface changes, please [open an
issue](https://github.com/apache/incubator-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?

This PR moved ClassDef from `type` to `meta` package for bettern manage
meta related classes

## 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/incubator-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.
-->
…1513)

## What does this PR do?
This PR  fix special char overflow in meta string encoding. 

The `a-zA-Z._$` are 65 chars, which can't be expressed by 6 bits, which
is range `0~63`

## 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/incubator-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.
-->

---------

Co-authored-by: LiangliangSui <116876207+LiangliangSui@users.noreply.github.com>
## What does this PR do?

This PR renames EnumString to MetaString

## Related issues
apache#1514 


## Does this PR introduce any user-facing change?

<!--
If any user-facing interface changes, please [open an
issue](https://github.com/apache/incubator-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.
-->
<!--
**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/incubator-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/incubator-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?
This PR implements meta string encoding described in [fury java
serialization
spec](https://fury.apache.org/docs/specification/fury_java_serialization_spec#meta-string)
and [xlang serialization
spec](https://fury.apache.org/docs/specification/fury_xlang_serialization_spec#meta-string)

We have `3/8` space saveing for most string:
```java
    // utf8 use 30 bytes, we use only 19 bytes
    assertEquals(encoder.encode("org.apache.fury.benchmark.data").getBytes().length, 19);
    // utf8 use 12 bytes, we use only 9 bytes.
    assertEquals(encoder.encode("MediaContent").getBytes().length, 9);
```


The integration with ClassResolver is left in another PR.

## Related issues
apache#1240 
apache#1413 


## Does this PR introduce any user-facing change?

<!--
If any user-facing interface changes, please [open an
issue](https://github.com/apache/incubator-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?
This PR concats meta string len with flags and use varint encoding to
encode such info, which can reduce 2 bytes for every meta string at most
times.

This PPR reduced serialized size a little: 415 bytes -> 407 bytes when
class is not registered in java
```
Before this PR:
Fury | MEDIA_CONTENT | false | array | 415 |

With this PR:
Fury | MEDIA_CONTENT | false | array | 407 |
```


## Related issues

Closes apache#1518 
Closes apache#1519 
Closes apache#1520
Closes apache#1521

## Does this PR introduce any user-facing change?

<!--
If any user-facing interface changes, please [open an
issue](https://github.com/apache/incubator-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?
This PR concats write classname flag with package name, which can save
one byte for unregistred classname writing
<!-- Describe the purpose of this PR. -->


## 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/incubator-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.
-->
…he#1526)

<!--
**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/incubator-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/incubator-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?

<!-- Describe the purpose of this PR. -->
Use "\<!--...--\>" to display the placeholder in
[feature_request.md](https://github.com/apache/incubator-fury/blob/main/.github/ISSUE_TEMPLATE/feature_request.md),
so that the placeholder does not need to be deleted when the
corresponding content is not provided.

## 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/incubator-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.
-->

Signed-off-by: LiangliangSui <coolsui.coding@gmail.com>
…ectAndClass API (apache#1502)

<!--
**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/incubator-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/incubator-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?
This PR deprecates
serializeJavaObjectAndClass/deserializeJavaObjectAndClass API.
This APi is vargue and kind of duplicate with `Fury#serialize`. 
It doesn't provide `BufferCallback` support too.

We should make our API minimal and does not bloat it
<!-- Describe the purpose of this PR. -->


## 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/incubator-fury/issues/new/choose)
describing the need to do so and update the document if necessary.
-->

- [x] 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.
-->
…me (apache#1527)

## What does this PR do?
This PR supports meta string encoding for classname and package name in
fury java serialization.

Before this PR a unregistered class serialization:
```
Fury | MEDIA_CONTENT | false | array | 405 |
```

With this PR:
```
Fury | MEDIA_CONTENT | false | array | 390 |
```

This PR also fix buffer streaming readSliInt64 bugs introduced in apache#1451 

## 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/incubator-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.
-->
<!--
**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/incubator-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/incubator-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?
THis pr inline  isDeclType in codegen


before this pr:
```java
      boolean isDeclType0 = (value14 & 4) != 4;
      Serializer serializer2;
      if (isDeclType0) {
          serializer2 = serializer0;
      } else {
          serializer2 = classResolver.readClassInfo(memoryBuffer6, imageClassInfoHolder).getSerializer();
      }
```

with this pr:
```
      Serializer serializer2;
      if ( (value14 & 4) != 4) {
          serializer2 = serializer0;
      } else {
          serializer2 = classResolver.readClassInfo(memoryBuffer6, imageClassInfoHolder).getSerializer();
      }
```
<!-- Describe the purpose of this PR. -->


## 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/incubator-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.
-->
@chaokunyang chaokunyang changed the title Release0.5.0.rc3 chore: release 0.5.0-rc3 version Apr 17, 2024
@chaokunyang chaokunyang changed the title chore: release 0.5.0-rc3 version chore: update releases-0.5.0 to latest main branch Apr 17, 2024
Copy link
Member

@theweipeng theweipeng left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great

@chaokunyang chaokunyang merged commit fae0633 into apache:releases-0.5.0 Apr 17, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants