Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
9623902
design library
atimin Aug 26, 2025
55e93b7
integrate backpack in file cache
atimin Aug 27, 2025
c8d4a0f
replace direct fs cals with cache
atimin Aug 27, 2025
c93f4f3
fix tests
atimin Aug 27, 2025
74ee416
clean code
atimin Aug 27, 2025
fd0a88e
start s3
atimin Aug 27, 2025
a1a3b7c
dummy implementation
atimin Aug 29, 2025
f48dea8
fix file browsing
atimin Aug 30, 2025
d376814
add remove dir
atimin Sep 1, 2025
239dfa6
improve synchronization
atimin Sep 1, 2025
10a7a95
fix block syncronization
atimin Sep 2, 2025
644f92a
remove uncessary rwlock
atimin Sep 2, 2025
e0a4cfe
clean code
atimin Sep 2, 2025
f78c291
handle access mode in file
atimin Sep 2, 2025
c9b17d6
integrate local cache quota
atimin Sep 2, 2025
56b0023
fix sync files after download
atimin Sep 2, 2025
cbe4ab3
fix dead lock in keeping quota
atimin Sep 2, 2025
93caab3
add debug message for removing
atimin Sep 2, 2025
0bb5437
compile tests
atimin Sep 2, 2025
12de837
fix tests
atimin Sep 2, 2025
ec32f0a
clean code
atimin Sep 2, 2025
8f585e2
Merge remote-tracking branch 'origin/main' into 906-feature-s3-storag…
atimin Sep 2, 2025
9b85f46
bump version
atimin Sep 2, 2025
a0e7eef
bring backend to reductstore
atimin Sep 2, 2025
2a16e5f
remove unused methods
atimin Sep 2, 2025
f2ee593
fix version test
atimin Sep 2, 2025
aae3a57
coverage without plugins and console
atimin Sep 2, 2025
e1bc310
refactor s3 connector
atimin Sep 3, 2025
8989772
isolate backen features
atimin Sep 3, 2025
d5de219
add unit tests for local cache
atimin Sep 3, 2025
e6133f7
test s3 connector
atimin Sep 3, 2025
ac67ec3
add tests for remote backend
atimin Sep 3, 2025
103c024
add tests for file system backend
atimin Sep 3, 2025
648cd1b
fix windows bug
atimin Sep 3, 2025
c1c1560
add tests for backend
atimin Sep 3, 2025
12c4649
add test for file
atimin Sep 3, 2025
fc32ca8
test backend builder
atimin Sep 3, 2025
2230352
add tests for config
atimin Sep 3, 2025
43ec8b8
fix config test
atimin Sep 3, 2025
44223e1
fix for aws
atimin Sep 4, 2025
fb1b317
fix test
atimin Sep 4, 2025
509d56e
test s3 connector in ci
atimin Sep 4, 2025
879c833
enable ci in coverage
atimin Sep 4, 2025
232365f
use minio in ci
atimin Sep 4, 2025
bb1eaee
fix variable names
atimin Sep 4, 2025
455d8e1
add dirs
atimin Sep 4, 2025
061c519
fix syntax
atimin Sep 4, 2025
2324fc2
deploy minio manually
atimin Sep 4, 2025
91ab6be
fix bucket env
atimin Sep 4, 2025
121e64e
use actions to run minio
atimin Sep 4, 2025
ed684a3
fix container name
atimin Sep 4, 2025
86277ac
forgot checkout
atimin Sep 4, 2025
424e5d4
test ci only with coverage
atimin Sep 4, 2025
9187ce6
test recursive listing
atimin Sep 4, 2025
5233d6d
fix recovery test
atimin Sep 4, 2025
a292141
add rename test
atimin Sep 4, 2025
38145f5
update CHANGELOG
atimin Sep 4, 2025
0433c44
copilot review
atimin Sep 4, 2025
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
36 changes: 36 additions & 0 deletions .github/actions/run-minio/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: run-minio
author: atimin
description: "Run MinIO server and provision a bucket"
inputs:
access_key:
description: "MinIO access key"
required: true
default: "minioadmin"
secret_key:
description: "MinIO secret key"
required: true
default: "minioadmin"
bucket_name:
description: "Name of the bucket to create"
required: true
default: "test-bucket"
runs:
using: "composite"
steps:
- name: Set up MinIO server
run: |
docker run -d --name minio-server -p 9000:9000 \
-e "MINIO_ROOT_USER=${{ inputs.access_key }}" \
-e "MINIO_ROOT_PASSWORD=${{ inputs.secret_key }}" \
minio/minio server /data
sleep 5 # Wait for the server to start
docker logs minio-server
shell: bash

- name: Create bucket
run: |
echo "Create bucket ${{ inputs.bucket_name }}"

docker exec minio-server mc alias set local http://localhost:9000 ${{ inputs.access_key }} ${{ inputs.secret_key }}
docker exec minio-server mc mb local/${{ inputs.bucket_name }}
shell: bash
97 changes: 81 additions & 16 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: ci
on:
push:
branches: [main, stable]
branches: [ main, stable ]
tags:
- "v*"
paths-ignore:
Expand All @@ -10,7 +10,7 @@ on:
- CHANGELOG.md

pull_request:
branches: [main, stable]
branches: [ main, stable ]
paths-ignore:
- docs/**
- README.md
Expand Down Expand Up @@ -145,7 +145,7 @@ jobs:
- build_binaries
strategy:
matrix:
os: [ubuntu-24.04, windows-2022, macos-14]
os: [ ubuntu-24.04, windows-2022, macos-14 ]
include:
- os: ubuntu-24.04
target: x86_64-unknown-linux-gnu
Expand Down Expand Up @@ -188,6 +188,10 @@ jobs:
env:
CARGO_TERM_COLOR: always
RUST_LOG: debug # expand logging
MINIO_ACCESS_KEY: minioadmin
MINIO_SECRET_KEY: minioadmin
MINIO_BUCKET: test
MINIO_ENDPOINT: http://127.0.0.1:9000
steps:
- uses: actions/checkout@v4

Expand All @@ -202,10 +206,16 @@ jobs:
version: "26.x"
repo-token: ${{ secrets.ACTION_GITHUB_TOKEN }}

- uses: ./.github/actions/run-minio
with:
access_key: ${{ env.MINIO_ACCESS_KEY }}
secret_key: ${{ env.MINIO_SECRET_KEY }}
bucket_name: ${{ env.MINIO_BUCKET }}

- name: Generate code coverage
env:
ARTIFACT_SAS_URL: ${{ secrets.ARTIFACT_SAS_URL }}
run: cargo llvm-cov --all-features --workspace --lcov --output-path lcov.info
run: cargo llvm-cov --features s3-backend,fs-backend,ci --workspace --lcov --output-path lcov.info

- name: Upload coverage to Codecov
continue-on-error: true
Expand All @@ -223,15 +233,20 @@ jobs:
- build
strategy:
matrix:
token: ["", "XXXX"]
cert_path: ["", "/misc/certificate.crt"]
license_path: ["", "/misc/license.lic"]
token: [ "", "XXXX" ]
cert_path: [ "", "/misc/certificate.crt" ]
license_path: [ "", "/misc/license.lic" ]
backend: [ "fs", "s3" ]
include:
- cert_path: "/misc/certificate.crt"
url: https://127.0.0.1:8383
- cert_path: ""
url: http://127.0.0.1:8383
timeout-minutes: 5
env:
MINIO_ACCESS_KEY: minioadmin
MINIO_SECRET_KEY: minioadmin
MINIO_BUCKET: test
steps:
- uses: actions/checkout@v4

Expand All @@ -249,7 +264,8 @@ jobs:
- name: Create license
run: echo '${{secrets.LICENSE_KEY}}' > ./misc/license.lic

- name: Run Database
- name: Run ReductStore with FileSystem backend
if: ${{matrix.backend == 'fs'}}
run: |
docker run --network=host -v ${PWD}/misc:/misc --env RS_API_TOKEN=${{matrix.token}} \
--name reduct \
Expand All @@ -260,6 +276,31 @@ jobs:
-d ${{github.repository}}
sleep 5

- name: Run MinIO server and create bucket
if : ${{matrix.backend == 's3'}}
uses: ./.github/actions/run-minio
with:
access_key: ${{ env.MINIO_ACCESS_KEY }}
secret_key: ${{ env.MINIO_SECRET_KEY }}
bucket_name: ${{ env.MINIO_BUCKET }}

- name: Run ReductStore with S3 backend
if: ${{matrix.backend == 's3'}}
run: |
docker run --network=host -v ${PWD}/misc:/misc \
--env RS_API_TOKEN=${{matrix.token}} \
--env RS_CERT_PATH=${{matrix.cert_path}} \
--env RS_LICENSE_PATH=${{matrix.license_path}} \
--env RS_CERT_KEY_PATH=/misc/privateKey.key \
--env RS_STORAGE_TYPE=s3 \
--env RS_REMOTE_BACKEND_ENDPOINT=${{ env.MINIO_ENDPOINT }} \
--env RS_REMOTE_ACCESS_KEY=${{ env.MINIO_ACCESS_KEY }} \
--env RS_REMOTE_SECRET_KEY=${{ env.MINIO_SECRET_KEY }} \
--env RS_REMOTE_BUCKET=${{ env.MINIO_BUCKET }} \
--env RS_CORS_ALLOW_ORIGIN="https://first-allowed-origin.com, https://second-allowed-origin.com" \
--name reduct -d ${{github.repository}}
sleep 5

- name: Build API tests
run: |
docker login -u ${{ secrets.DOCKER_USER }} -p ${{ secrets.DOCKER_TOKEN }}
Expand Down Expand Up @@ -367,12 +408,16 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
cmd: ["stop", "kill"]
backend: [ "fs", "s3" ]
cmd: [ "stop", "kill" ]
needs:
- unit_tests
- build
env:
RS_API_TOKEN: XXXX
MINIO_ACCESS_KEY: minioadmin
MINIO_SECRET_KEY: minioadmin
MINIO_BUCKET: test
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
Expand All @@ -390,12 +435,33 @@ jobs:
docker load --input /tmp/image.tar
docker image ls -a

- name: Run ReductStore
- name: Run ReductStore with FileSystem backend
if: ${{matrix.backend == 'fs'}}
run: |
docker run --network=host -v ./data:/data --env RS_API_TOKEN=${RS_API_TOKEN} --name reductstore -d ${{github.repository}}
sleep 5
docker logs reductstore

- name: Run MiniO server and create bucket
if : ${{matrix.backend == 's3'}}
uses: ./.github/actions/run-minio
with:
access_key: ${{ env.MINIO_ACCESS_KEY }}
secret_key: ${{ env.MINIO_SECRET_KEY }}
bucket_name: ${{ env.MINIO_BUCKET }}

- name: Run ReductStore with S3 backend
if: ${{matrix.backend == 's3'}}
run: |
docker run --network=host -v ./data:/data \
--env RS_API_TOKEN=${RS_API_TOKEN} \
--env RS_STORAGE_TYPE=s3 \
--env RS_REMOTE_BACKEND_ENDPOINT=http://127.0.0.1:9000 \
--env RS_REMOTE_ACCESS_KEY=${MINIO_ACCESS_KEY} \
--env RS_REMOTE_SECRET_KEY=${MINIO_SECRET_KEY} \
--env RS_REMOTE_BUCKET=${MINIO_BUCKET} \
--name reductstore -d ${{github.repository}}

- name: Upload data
run: |
pip install -r ./integration_tests/data_check/requirements.txt
Expand All @@ -408,7 +474,7 @@ jobs:
sleep 5
docker logs reductstore-1

- name: Check data after migraiton
- name: Check data after migration
run: python3 ./integration_tests/data_check/checker.py

- name: Save docker logs
Expand All @@ -417,7 +483,7 @@ jobs:
- uses: actions/upload-artifact@v4
if: always()
with:
name: docker-log-recovery-${{matrix.cmd}}
name: docker-log-recovery-${{matrix.cmd}}-${{matrix.backend}}
path: /tmp/docker-log.zip

- name: Show replication report
Expand Down Expand Up @@ -530,7 +596,7 @@ jobs:
- unit_tests
strategy:
matrix:
branch: ["main", "latest"]
branch: [ "main", "latest" ]
timeout-minutes: 5

steps:
Expand All @@ -550,7 +616,6 @@ jobs:
--name reductstore \
--env RS_DATA_PATH=/data \
--env RS_API_TOKEN=token \
--env RS_LOG_LEVEL=DEBUG \
-p 8383:8383 \
-v ./data:/data \
${{ github.repository }}:latest
Expand Down Expand Up @@ -652,7 +717,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
arch: [amd64, arm64]
arch: [ amd64, arm64 ]
needs:
- build_snap
- api_tests
Expand Down Expand Up @@ -685,7 +750,7 @@ jobs:
if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')
strategy:
matrix:
platform: [linux/amd64, linux/arm64]
platform: [ linux/amd64, linux/arm64 ]
include:
- platform: linux/amd64
cargo_target: x86_64-unknown-linux-gnu
Expand Down
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Added

- Integrate S3 Storage Backend, [PR-919](https://github.com/reductstore/reductstore/pull/919)

## [1.16.3] - 2025-08-22

Expand Down
Loading