Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ An AI-native distributed data plane that supports high performance RPC, KV Cache
[![Linux Only](https://img.shields.io/badge/Linux-Only-2ea44f)](#runtime-requirements)
[![Python](https://img.shields.io/badge/Python-%3E%3D3.10-3776AB)](#runtime-requirements)
[![Rust](https://img.shields.io/badge/Rust-1.93.0-000000)](./fluxon_rs/rust-toolchain.toml)
[![Latest](https://img.shields.io/badge/Latest-v0.2.3-f28500)](./fluxon_release)
[![Latest](https://img.shields.io/badge/Latest-v0.2.4-f28500)](./fluxon_release)
[![Interfaces](https://img.shields.io/badge/Interfaces-KV%2FRPC%20%7C%20MQ%20%7C%20FS-1f6feb)](#interface-capabilities)

<details>
Expand Down Expand Up @@ -201,7 +201,7 @@ The distribution installs the `fluxon_py` import package. Service-plane runtimes

```bash
docker run --rm -it --network host \
hanbaoaaa/fluxon_quick_start:0.2.3 \
hanbaoaaa/fluxon_quick_start:0.2.4 \
--mode kv \
--etcd-client-port 12379 \
--master-p2p-port 31000 \
Expand Down Expand Up @@ -234,7 +234,7 @@ Related interface docs:

```bash
docker run --rm -it --network host \
hanbaoaaa/fluxon_quick_start:0.2.3 \
hanbaoaaa/fluxon_quick_start:0.2.4 \
--mode mq \
--etcd-client-port 37379 \
--kv-master-port 34200 \
Expand Down Expand Up @@ -265,7 +265,7 @@ Related interface docs:

```bash
docker run --rm -it --network host \
hanbaoaaa/fluxon_quick_start:0.2.3 \
hanbaoaaa/fluxon_quick_start:0.2.4 \
--mode fs \
--etcd-client-port 36379 \
--kv-master-port 34100 \
Expand Down
8 changes: 4 additions & 4 deletions README_CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
[![Linux Only](https://img.shields.io/badge/Linux-Only-2ea44f)](#运行要求)
[![Python](https://img.shields.io/badge/Python-%3E%3D3.10-3776AB)](#运行要求)
[![Rust](https://img.shields.io/badge/Rust-1.93.0-000000)](./fluxon_rs/rust-toolchain.toml)
[![Latest](https://img.shields.io/badge/Latest-v0.2.3-f28500)](./fluxon_release)
[![Latest](https://img.shields.io/badge/Latest-v0.2.4-f28500)](./fluxon_release)
[![Interfaces](https://img.shields.io/badge/Interfaces-KV%2FRPC%20%7C%20MQ%20%7C%20FS-1f6feb)](#接口能力)

<details>
Expand Down Expand Up @@ -198,7 +198,7 @@ python3 -m pip install fluxon-py

```bash
docker run --rm -it --network host \
hanbaoaaa/fluxon_quick_start:0.2.3 \
hanbaoaaa/fluxon_quick_start:0.2.4 \
--mode kv \
--etcd-client-port 12379 \
--master-p2p-port 31000 \
Expand Down Expand Up @@ -231,7 +231,7 @@ del demo:hello

```bash
docker run --rm -it --network host \
hanbaoaaa/fluxon_quick_start:0.2.3 \
hanbaoaaa/fluxon_quick_start:0.2.4 \
--mode mq \
--etcd-client-port 37379 \
--kv-master-port 34200 \
Expand Down Expand Up @@ -262,7 +262,7 @@ exit

```bash
docker run --rm -it --network host \
hanbaoaaa/fluxon_quick_start:0.2.3 \
hanbaoaaa/fluxon_quick_start:0.2.4 \
--mode fs \
--etcd-client-port 36379 \
--kv-master-port 34100 \
Expand Down
8 changes: 4 additions & 4 deletions examples/fluxon_quick_start/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ It does not replace the formal service-plane, KV, MQ, or FS interface docs.
- unified quick-start entrypoint
- `build_image.py`
- quick-start image build entrypoint
- `fluxon_quick_start:0.2.3`
- `fluxon_quick_start:0.2.4`
- quick-start Docker image

## Runtime Modes
Expand Down Expand Up @@ -86,7 +86,7 @@ Python environment can already import both `fluxon_py` and `fluxon_pyo3`.

```bash
docker run --rm -it --network host \
fluxon_quick_start:0.2.3 \
fluxon_quick_start:0.2.4 \
--mode kv \
--etcd-client-port 12379 \
--master-p2p-port 31000 \
Expand Down Expand Up @@ -119,7 +119,7 @@ del demo:hello

```bash
docker run --rm -it --network host \
fluxon_quick_start:0.2.3 \
fluxon_quick_start:0.2.4 \
--mode mq \
--etcd-client-port 37379 \
--kv-master-port 34200 \
Expand Down Expand Up @@ -155,7 +155,7 @@ The background consumer keeps printing received messages.

```bash
docker run --rm -it --network host \
fluxon_quick_start:0.2.3 \
fluxon_quick_start:0.2.4 \
--mode fs \
--etcd-client-port 36379 \
--kv-master-port 34100 \
Expand Down
2 changes: 1 addition & 1 deletion examples/fluxon_quick_start/build_image.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
SCRIPTS_DIR = REPO_ROOT / "setup_and_pack"
DOCKERFILE_PATH = SCRIPT_DIR / "Dockerfile"
IMAGE_NAME = "fluxon_quick_start"
IMAGE_TAG = "0.2.3"
IMAGE_TAG = "0.2.4"

# Binaries to copy from ext_images into quick_start bin/.
EXT_BINARIES = ("etcd/etcd", "etcd/etcdctl", "greptime/greptime")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ docker run -d --name fluxon-s3 `
--mount "type=bind,src=C:\fluxon-s3\data,dst=/data" `
--mount "type=bind,src=C:\fluxon-s3\state,dst=/state" `
--entrypoint python3 `
"hanbaoaaa/fluxon_quick_start:0.2.3" `
"hanbaoaaa/fluxon_quick_start:0.2.4" `
-c "
from fluxon_py.quick_start import serve_s3_single_node

Expand Down
2 changes: 1 addition & 1 deletion fluxon_py/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@
from typing import Any


__version__ = "0.2.3"
__version__ = "0.2.4"
__all__ = [
# Core API
"KvClient",
Expand Down
16 changes: 15 additions & 1 deletion fluxon_py/tests/fluxon_fs_rclone_e2e.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,18 @@
RCLONE_COMMAND_TIMEOUT_SECS = 120
RCLONE_COMPLEX_COPY_TIMEOUT_SECS = 600
RCLONE_LIST_READY_TIMEOUT_SECS = 180.0
# rclone v1.60.1 defaults to a 200 MiB upload cutoff. Keep this test
# independent of that default so the fixture always exercises multipart.
RCLONE_MULTIPART_UPLOAD_CUTOFF = "5Mi"
RCLONE_MULTIPART_CHUNK_SIZE = "5Mi"
RCLONE_MULTIPART_CHUNK_SIZE_BYTES = 5 * 1024 * 1024
RCLONE_MULTIPART_FIXTURE_SIZE_BYTES = 12 * 1024 * 1024
RCLONE_MULTIPART_COPY_FLAGS = (
"--s3-upload-cutoff",
RCLONE_MULTIPART_UPLOAD_CUTOFF,
"--s3-chunk-size",
RCLONE_MULTIPART_CHUNK_SIZE,
)
COMPLEX_GROUP_COUNT = 8
COMPLEX_FILES_PER_GROUP = 50
COMPLEX_EXPECTED_FILE_COUNT = 405
Expand Down Expand Up @@ -239,7 +251,8 @@ def _build_complex_fixture_files() -> dict[str, bytes]:
"configs/dev/app.yaml": b"environment: dev\n",
"configs/prod/app.yaml": b"environment: prod\n",
"blobs/small.bin": bytes(range(64)),
"blobs/medium-8m.bin": bytes(range(256)) * (8 * 1024 * 1024 // 256),
"blobs/multipart-12m.bin": bytes(range(256))
* (RCLONE_MULTIPART_FIXTURE_SIZE_BYTES // 256),
}
)
assert len(files) == COMPLEX_EXPECTED_FILE_COUNT
Expand Down Expand Up @@ -338,6 +351,7 @@ def run_e2e(*, image_ref: str) -> None:
work_root=work_root,
args=[
"copy",
*RCLONE_MULTIPART_COPY_FLAGS,
f"{RCLONE_CONTAINER_WORKDIR}/complex-source",
complex_remote_root,
],
Expand Down
70 changes: 70 additions & 0 deletions fluxon_release/release_notes/v0.2.4.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# Fluxon v0.2.4

`v0.2.4` is a focused FluxonFS S3 compatibility and first-run security
release. It fixes multipart completion for the pinned rclone client, makes the
bootstrap credential transition explicit, and enforces private access-database
permissions on Unix.

## Highlights

- Accepts the XML-escaped quoted ETags sent by official rclone `v1.60.1` when
completing a multipart upload.
- Extends the rclone end-to-end test to force a real three-part upload using a
12 MiB object with a 5 MiB upload cutoff and chunk size.
- Requires a fresh `admin/admin` installation to enter **Change Credentials**
before bucket or S3 access, and allows the initial username and password to
be changed together.
- Creates and repairs `access.db`, `access.db-wal`, and `access.db-shm` with
mode `0600` on Unix.

## S3 Multipart Compatibility

rclone `v1.60.1` serializes completed part ETags as quoted XML text. On the
wire, the quotes can appear as `&#34;`, while the uploaded-part metadata stores
the unquoted hash. FluxonFS now decodes XML entities before normalizing and
validating each ETag, preserving strict part identity checks without rejecting
the valid rclone request.

The regression coverage uses the actual rclone XML shape, including the S3 XML
namespace and `ETag` before `PartNumber`. The Docker end-to-end path pins
`rclone/rclone:1.60.1` and verifies multipart upload, completion, and object
readback.

## Initial Credentials and Access Database

Fresh state bootstrapped with `admin/admin` is marked as requiring an initial
credential change. The Web UI redirects the first login to the credential form,
and S3 authentication remains unavailable until that transition completes.
The renamed administrator and completion state persist across restart. Existing
installations that have already replaced the default credentials are not forced
through the flow again.

On Unix, FluxonFS creates the SQLite access database with mode `0600` and also
repairs permissions on an existing database and its WAL/shared-memory sidecar
files.

## Version and SDK Contract

- Public Python package, Rust workspace, and Quick Start version: `0.2.4`.
- Closed communication SDK version: `0.2.1`.
- Closed SDK required open-surface contract version: `0.2.1`.

The SDK and open-surface contract versions remain independent from the public
release version.

## Release Artifacts

- PyPI: `fluxon-py==0.2.4`.
- Docker Hub: `hanbaoaaa/fluxon_quick_start:0.2.4`.
- GitHub Release: `fluxon_release.tar.gz`.
- GitHub Release: `fluxon_quick_start_0.2.4_docker_image.tar.gz`.

The Docker publication does not update `latest`.

## Runtime Requirements

- Linux only; Python `>=3.10`.
- The Quick Start still requires the configured external middleware when
`start_middleware=False`.
- Dynamic bucket creation remains outside the Quick Start contract; exported
bucket names are configured before startup.
Loading
Loading