Skip to content

Commit

Permalink
chore(doc): add incubating DISCLAIMER (#1681)
Browse files Browse the repository at this point in the history
## What does this PR do?

add incubating DISCLAIMER

## 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.
-->
  • Loading branch information
chaokunyang committed Jun 11, 2024
1 parent a621b05 commit 0251df0
Show file tree
Hide file tree
Showing 24 changed files with 71 additions and 65 deletions.
10 changes: 5 additions & 5 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,16 +26,16 @@ body:
attributes:
label: Search before asking
description: >
Please make sure to search in the [issues](https://github.com/apache/incubator-fury/issues) first to see whether the same issue was reported already.
Please make sure to search in the [issues](https://github.com/apache/fury/issues) first to see whether the same issue was reported already.
options:
- label: >
I had searched in the [issues](https://github.com/apache/incubator-fury/issues) and found no similar issues.
I had searched in the [issues](https://github.com/apache/fury/issues) and found no similar issues.
required: true
- type: textarea
attributes:
label: Version
description: >
Please provide the versions of Fury, OS, and others such as JDK/Python/Gcc/Clang/Go/NodeJS if they are used.
Please provide the versions of Fury, OS, and others such as JDK/Python/Gcc/Clang/Go/NodeJS if they are used.
If Fury is the unstable version, please input commit id.
validations:
required: true
Expand Down Expand Up @@ -80,10 +80,10 @@ body:
attributes:
label: Are you willing to submit a PR?
description: >
We very much look forward to developers or users to help solve Fury problems together.
We very much look forward to developers or users to help solve Fury problems together.
If you are willing to submit a PR to fix this problem, please tick it.
options:
- label: I'm willing to submit a PR!
- type: markdown
attributes:
value: "Thanks for completing our form!"
value: "Thanks for completing our form!"
6 changes: 3 additions & 3 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
<!--
**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).**
**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/incubator-fury/blob/main/CONTRIBUTING.md).
- 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.
-->
Expand All @@ -29,7 +29,7 @@ Is there any related issue? Please attach here.
## 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.
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?
Expand Down
2 changes: 1 addition & 1 deletion .github/sync.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.

apache/incubator-fury-site@main:
apache/fury-site@main:
- source: docs/guide/
dest: docs/guide/
- source: docs/specification/
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jobs:
release-python:
name: Publish Fury Python to PyPI
runs-on: ubuntu-20.04
if: github.repository == 'apache/incubator-fury'
if: github.repository == 'apache/fury'
environment:
name: pypi
url: https://pypi.org/project/pyfury
Expand All @@ -43,7 +43,7 @@ jobs:
run: ./ci/run_ci.sh install_bazel
- name: Update version in setup.py
run: |
echo "GITHUB_REF: $GITHUB_REF"
echo "GITHUB_REF: $GITHUB_REF"
tag=$(echo $GITHUB_REF | cut -d / -f 3)
echo "tag: $tag"
version=${tag:1}
Expand Down
10 changes: 5 additions & 5 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@

## Finding good first issues

See [Good First Issues](https://github.com/apache/incubator-fury/contribute).
See [Good First Issues](https://github.com/apache/fury/contribute).

## How to create an issue

Create an issue with [this form](https://github.com/apache/incubator-fury/issues/new/choose).
Create an issue with [this form](https://github.com/apache/fury/issues/new/choose).

## How to title your PR

Generally we follows the [Conventional Commits](https://www.conventionalcommits.org/) for pull request titles,
Generally we follows the [Conventional Commits](https://www.conventionalcommits.org/) for pull request titles,
since we will squash and merge the PR and use the PR title as the first line of commit message.

For example, here are good PR titles:
Expand All @@ -20,7 +20,7 @@ For example, here are good PR titles:

If the submitted PR affects the performance of Fury, we strongly recommend using the perf type,
and need to provide benchmark data in the PR description. For how to run the benchmark,
please check [Fury Java Benchmark](https://github.com/apache/incubator-fury/blob/main/java/benchmark/README.md).
please check [Fury Java Benchmark](https://github.com/apache/fury/blob/main/java/benchmark/README.md).

For more details, please check [pr-lint.yml](./.github/workflows/pr-lint.yml).

Expand Down Expand Up @@ -189,7 +189,7 @@ sudo flamegraph.pl out.folded > out.svg

## Website

Fury's website consists of static pages hosted at https://github.com/apache/incubator-fury-site.
Fury's website consists of static pages hosted at https://github.com/apache/fury-site.

All updates about docs under [guide](docs/guide) and [benchmarks](docs/benchmarks) will be synced to the site repo automatically.

Expand Down
20 changes: 13 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<img width="65%" alt="" src="docs/images/logo/fury_github_banner.png"><br>
</div>

[![Build Status](https://img.shields.io/github/actions/workflow/status/apache/incubator-fury/ci.yml?branch=main&style=for-the-badge&label=GITHUB%20ACTIONS&logo=github)](https://github.com/apache/incubator-fury/actions/workflows/ci.yml)
[![Build Status](https://img.shields.io/github/actions/workflow/status/apache/fury/ci.yml?branch=main&style=for-the-badge&label=GITHUB%20ACTIONS&logo=github)](https://github.com/apache/fury/actions/workflows/ci.yml)
[![Slack Channel](https://img.shields.io/badge/slack-join-3f0e40?logo=slack&style=for-the-badge)](https://join.slack.com/t/fury-project/shared_invite/zt-1u8soj4qc-ieYEu7ciHOqA2mo47llS8A)
[![Twitter](https://img.shields.io/badge/@ApacheFury-follow-blue?logo=twitter&style=for-the-badge)](https://twitter.com/ApacheFury)
[![Maven Version](https://img.shields.io/maven-central/v/org.apache.fury/fury-core?style=for-the-badge)](https://search.maven.org/#search|gav|1|g:"org.apache.fury"%20AND%20a:"fury-core")
Expand All @@ -12,6 +12,12 @@

https://fury.apache.org

> [!IMPORTANT]
> Apache Fury (incubating) is an effort undergoing incubation at the Apache
> Software Foundation (ASF), sponsored by the Apache Incubator PMC.
>
> Please read the [DISCLAIMER](DISCLAIMER) and a full explanation of ["incubating"](https://incubator.apache.org/policy/incubation.html).
## Features
- **Multiple languages**: Java/Python/C++/Golang/JavaScript/Rust/Scala/TypeScript.
- **Zero-copy**: Cross-language out-of-band serialization inspired
Expand Down Expand Up @@ -58,7 +64,7 @@ To ensure accurate benchmark statistics, it is advisable to **warm up** the syst
### Java Serialization
In these charts below, titles containing "compatible" represent schema compatible mode: type forward/backward compatibility is enabled; while titles without "compatible" represent schema consistent mode: class schema must be the same between serialization and deserialization.

Where `Struct` is a class with [100 primitive fields](https://github.com/apache/incubator-fury/tree/main/docs/benchmarks#Struct), `MediaContent` is a class from [jvm-serializers](https://github.com/eishay/jvm-serializers/blob/master/tpc/src/data/media/MediaContent.java), and `Sample` is a class from [kryo benchmark](https://github.com/EsotericSoftware/kryo/blob/master/benchmarks/src/main/java/com/esotericsoftware/kryo/benchmarks/data/Sample.java).
Where `Struct` is a class with [100 primitive fields](https://github.com/apache/fury/tree/main/docs/benchmarks#Struct), `MediaContent` is a class from [jvm-serializers](https://github.com/eishay/jvm-serializers/blob/master/tpc/src/data/media/MediaContent.java), and `Sample` is a class from [kryo benchmark](https://github.com/EsotericSoftware/kryo/blob/master/benchmarks/src/main/java/com/esotericsoftware/kryo/benchmarks/data/Sample.java).

<p align="center">
<img width="24%" alt="" src="docs/benchmarks/compatible/bench_serialize_compatible_STRUCT_to_directBuffer_tps.png">
Expand All @@ -74,7 +80,7 @@ Where `Struct` is a class with [100 primitive fields](https://github.com/apache/
<img width="24%" alt="" src="docs/benchmarks/deserialization/bench_deserialize_SAMPLE_from_array_tps.png">
</p>

See [benchmarks](https://github.com/apache/incubator-fury/tree/main/docs/benchmarks) for more benchmarks about type forward/backward compatibility, off-heap support, zero-copy serialization.
See [benchmarks](https://github.com/apache/fury/tree/main/docs/benchmarks) for more benchmarks about type forward/backward compatibility, off-heap support, zero-copy serialization.

## Installation
### Java
Expand Down Expand Up @@ -138,7 +144,7 @@ npm install @furyjs/fury

### Golang
```bash
go get github.com/apache/incubator-fury/go/fury
go get github.com/apache/fury/go/fury
```

## Quickstart
Expand Down Expand Up @@ -251,7 +257,7 @@ print(fury.deserialize(data))
```go
package main

import furygo "github.com/apache/incubator-fury/go/fury"
import furygo "github.com/apache/fury/go/fury"
import "fmt"

func main() {
Expand Down Expand Up @@ -352,12 +358,12 @@ print(foo_row.f2[100000], foo_row.f4[100000].f1, foo_row.f4[200000].f2[5])
### Schema Compatibility
Fury java object graph serialization supports class schema forward/backward compatibility. The serialization peer and deserialization peer can add/delete fields independently.

We plan to add the schema compatibility support of cross-language serialization after [meta compression](https://github.com/apache/incubator-fury/issues/203) is finished.
We plan to add the schema compatibility support of cross-language serialization after [meta compression](https://github.com/apache/fury/issues/203) is finished.

### Binary Compatibility
We are still improving our protocols, thus binary compatibility is not guaranteed between Fury major releases for now.
However, it is guaranteed between minor versions. Please
`versioning` your data by Fury major version if you will upgrade Fury in the future, see [how to upgrade fury](https://github.com/apache/incubator-fury/blob/main/docs/guide/java_object_graph_guide.md#upgrade-fury) for further details.
`versioning` your data by Fury major version if you will upgrade Fury in the future, see [how to upgrade fury](https://github.com/apache/fury/blob/main/docs/guide/java_object_graph_guide.md#upgrade-fury) for further details.

Binary compatibility will be guaranteed when Fury 1.0 is released.

Expand Down
2 changes: 1 addition & 1 deletion ci/format.sh
Original file line number Diff line number Diff line change
Expand Up @@ -304,7 +304,7 @@ elif [ "${1-}" == '--java' ]; then
else
# Add the origin remote if it doesn't exist
if ! git remote -v | grep -q origin; then
git remote add 'origin' 'https://github.com/apache/incubator-fury.git'
git remote add 'origin' 'https://github.com/apache/fury.git'
fi

# use unshallow fetch for `git merge-base origin/main HEAD` to work.
Expand Down
2 changes: 1 addition & 1 deletion docs/guide/DEVELOPMENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ id: development

# How to build Fury

Please checkout the source tree from https://github.com/apache/incubator-fury.
Please checkout the source tree from https://github.com/apache/fury.

### Build Fury Java

Expand Down
26 changes: 13 additions & 13 deletions docs/guide/graalvm_guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,26 +6,26 @@ id: graalvm_guide

# GraalVM Native Image
GraalVM `native image` can compile java code into native code ahead to build faster, smaller, leaner applications.
The native image doesn't have a JIT compiler to compile bytecode into machine code, and doesn't support
The native image doesn't have a JIT compiler to compile bytecode into machine code, and doesn't support
reflection unless configure reflection file.

Fury runs on GraalVM native image pretty well. Fury generates all serializer code for `Fury JIT framework` and `MethodHandle/LambdaMetafactory` at graalvm build time. Then use those generated code for serialization at runtime without
Fury runs on GraalVM native image pretty well. Fury generates all serializer code for `Fury JIT framework` and `MethodHandle/LambdaMetafactory` at graalvm build time. Then use those generated code for serialization at runtime without
any extra cost, the performance is great.

In order to use Fury on graalvm native image, you must create Fury as an **static** field of a class, and **register** all classes at
the enclosing class initialize time. Then configure `native-image.properties` under
`resources/META-INF/native-image/$xxx/native-image.propertie` to tell graalvm to init the class at native image
the enclosing class initialize time. Then configure `native-image.properties` under
`resources/META-INF/native-image/$xxx/native-image.propertie` to tell graalvm to init the class at native image
build time. For example, here we configure `org.apache.fury.graalvm.Example` class be init at build time:
```properties
Args = --initialize-at-build-time=org.apache.fury.graalvm.Example
```

Another benefit using fury is that you don't have to configure [reflection json](https://www.graalvm.org/latest/reference-manual/native-image/metadata/#specifying-reflection-metadata-in-json) and
Another benefit using fury is that you don't have to configure [reflection json](https://www.graalvm.org/latest/reference-manual/native-image/metadata/#specifying-reflection-metadata-in-json) and
[serialization json](https://www.graalvm.org/latest/reference-manual/native-image/metadata/#serialization), which is
very tedious, cumbersome and inconvenient. When using fury, you just need to invoke
very tedious, cumbersome and inconvenient. When using fury, you just need to invoke
`org.apache.fury.Fury.register(Class<?>, boolean)` for every type you want to serialize.

Note that Fury `asyncCompilationEnabled` option will be disabled automatically for graalvm native image since graalvm
Note that Fury `asyncCompilationEnabled` option will be disabled automatically for graalvm native image since graalvm
native image doesn't support JIT at the image run time.

## Not thread-safe Fury
Expand Down Expand Up @@ -85,7 +85,7 @@ public class ThreadSafeExample {
List<String> f3,
Map<String, Long> f4) {
}

static ThreadSafeFury fury;

static {
Expand Down Expand Up @@ -115,9 +115,9 @@ Args = --initialize-at-build-time=org.apache.fury.graalvm.ThreadSafeExample
```

## Framework Integration
For framework developers, if you want to integrate fury for serialization, you can provided a configuration file to let
the users to list all the classes they want to serialize, then you can load those classes and invoke
`org.apache.fury.Fury.register(Class<?>, boolean)` to register those classes in your Fury integration class, and configure that
For framework developers, if you want to integrate fury for serialization, you can provided a configuration file to let
the users to list all the classes they want to serialize, then you can load those classes and invoke
`org.apache.fury.Fury.register(Class<?>, boolean)` to register those classes in your Fury integration class, and configure that
class be initialized at graalvm native image build time.

## Benchmark
Expand All @@ -131,7 +131,7 @@ When Fury compression is enabled:
- Struct: Fury is `24x speed, 31% size` compared to JDK.
- Pojo: Fury is `12x speed, 48% size` compared to JDK.

See [[Benchmark.java](https://github.com/apache/incubator-fury/blob/main/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/Benchmark.java)] for benchmark code.
See [[Benchmark.java](https://github.com/apache/fury/blob/main/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/Benchmark.java)] for benchmark code.

### Struct Benchmark
#### Class Fields
Expand Down Expand Up @@ -211,4 +211,4 @@ Fury serialization took mills: 1289
JDK serialization took mills: 15069
Compare speed: Fury is 12.11x speed of JDK
Compare size: Fury is 0.48x size of JDK
```
```
6 changes: 3 additions & 3 deletions docs/guide/scala_guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ fury.register(Class.forName("scala.Enumeration.Val"))
If you want to avoid such registration, you can disable class registration by `FuryBuilder#requireClassRegistration(false)`.
Note that this option allow to deserialize objects unknown types, more flexible but may be insecure if the classes contains malicious code.

And circular references are common in scala, `Reference tracking` should be enabled by `FuryBuilder#withRefTracking(true)`. If you don't enable reference tracking, [StackOverflowError](https://github.com/apache/incubator-fury/issues/1032) may happen for some scala versions when serializing scala Enumeration.
And circular references are common in scala, `Reference tracking` should be enabled by `FuryBuilder#withRefTracking(true)`. If you don't enable reference tracking, [StackOverflowError](https://github.com/apache/fury/issues/1032) may happen for some scala versions when serializing scala Enumeration.

Note that fury instance should be shared between multiple serialization, the creation of fury instance is not cheap.

Expand Down Expand Up @@ -115,6 +115,6 @@ Scala collections and generics doesn't follow java collection framework, and is

The execution for scala collections will invoke Java serialization API `writeObject/readObject/writeReplace/readResolve/readObjectNoData/Externalizable` with fury `ObjectStream` implementation. Although `org.apache.fury.serializer.ObjectStreamSerializer` is much faster than JDK `ObjectOutputStream/ObjectInputStream`, but it still doesn't know how use scala collection generics.

In future we plan to provide more optimization for scala types, see https://github.com/apache/incubator-fury/issues/682, stay tuned!
In future we plan to provide more optimization for scala types, see https://github.com/apache/fury/issues/682, stay tuned!

Scala collections serialization is finished in https://github.com/apache/incubator-fury/pull/1073, if you want better performance, please use fury snapshot version.
Scala collections serialization is finished in https://github.com/apache/fury/pull/1073, if you want better performance, please use fury snapshot version.
8 changes: 4 additions & 4 deletions docs/guide/xlang_serialization_guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ print(new_map)
```go
package main

import furygo "github.com/apache/incubator-fury/fury/go/fury"
import furygo "github.com/apache/fury/fury/go/fury"
import "fmt"

func main() {
Expand Down Expand Up @@ -251,7 +251,7 @@ if __name__ == "__main__":
```go
package main

import furygo "github.com/apache/incubator-fury/fury/go/fury"
import furygo "github.com/apache/fury/fury/go/fury"
import "fmt"

func main() {
Expand Down Expand Up @@ -456,7 +456,7 @@ print(fury.deserialize(data))
```go
package main

import furygo "github.com/apache/incubator-fury/fury/go/fury"
import furygo "github.com/apache/fury/fury/go/fury"
import "fmt"

func main() {
Expand Down Expand Up @@ -565,7 +565,7 @@ print(fury.deserialize(data, buffers=buffers))
```go
package main

import furygo "github.com/apache/incubator-fury/fury/go/fury"
import furygo "github.com/apache/fury/fury/go/fury"
import "fmt"

func main() {
Expand Down
2 changes: 1 addition & 1 deletion docs/specification/java_serialization_spec.md
Original file line number Diff line number Diff line change
Expand Up @@ -426,7 +426,7 @@ Format:
#### Map Key-Value data

Map iteration is too expensive, Fury won't compute the header like for collection before since it introduce
[considerable overhead](https://github.com/apache/incubator-fury/issues/925).
[considerable overhead](https://github.com/apache/fury/issues/925).
Users can use `MapFieldInfo` annotation to provide header in advance. Otherwise Fury will use first key-value pair to
predict header optimistically, and update the chunk header if the prediction failed at some pair.

Expand Down
Loading

0 comments on commit 0251df0

Please sign in to comment.