Some checks failed
go: build dev binaries / cleanup (push) Successful in 4s
Codespell / Check for spelling errors (push) Failing after 3s
docker: build dev containers / build-rust-binaries (amd64, x86_64-unknown-linux-musl) (push) Failing after 3s
docker: build dev containers / build-dev-containers (push) Has been skipped
docker: build dev containers / build-rust-binaries (arm64, true, aarch64-unknown-linux-musl) (push) Failing after 3s
End to End / FUSE Mount (push) Failing after 2s
EC Integration Tests / EC Integration Tests (push) Failing after 30s
FUSE DLM Integration Tests / FUSE DLM Integration Tests (push) Failing after 3s
FUSE Volume Server Failover Tests / FUSE Volume Server Failover (push) Failing after 3s
FUSE Integration Tests / FUSE Integration Testing (push) Failing after 2s
FUSE P2P Peer Chunk Sharing Integration Tests / FUSE P2P Peer Chunk Sharing (push) Failing after 3s
go: build binary / Go Vet (push) Failing after 2s
go: build binary / Go Vet 32-bit (push) Failing after 3s
go: build binary / Build (push) Failing after 4s
go: build binary / Build cross-platform (freebsd/amd64) (push) Failing after 3s
go: build binary / Build cross-platform (windows/amd64) (push) Failing after 3s
go: build binary / Build cross-platform (darwin/arm64) (push) Failing after 3s
go: build binary / Build cross-platform (windows/arm64) (push) Failing after 3s
go: build binary / Test (push) Failing after 2s
go: build binary / Test 32-bit (push) Failing after 3s
helm: lint and test charts / lint-test (push) Failing after 3s
Java Client Integration Tests / Java Integration Tests (11) (push) Failing after 3s
Java Client Integration Tests / Java Integration Tests (17) (push) Failing after 3s
go: build dev binaries / build_dev_linux_windows (amd64, linux) (push) Failing after 2s
go: build dev binaries / build_dev_linux_windows (amd64, windows) (push) Failing after 3s
go: build dev binaries / build_dev_darwin (amd64, darwin) (push) Has been skipped
go: build dev binaries / build_dev_darwin (arm64, darwin) (push) Has been skipped
Java Client Unit Tests / Java Unit Tests (11) (push) Failing after 3s
Java Client Unit Tests / Java Unit Tests (17) (push) Failing after 2s
Java Client Unit Tests / Java Unit Tests (21) (push) Failing after 3s
Java Client Unit Tests / Java Unit Tests (8) (push) Failing after 3s
Kafka Quick Test (Load Test with Schema Registry) / Kafka Client Load Test (Quick) (push) Failing after 3s
Kafka Gateway Tests / Kafka Unit Tests (unit-tests-1) (push) Failing after 11s
Kafka Gateway Tests / Kafka Integration Tests (Critical) (integration-1) (push) Failing after 3s
Kafka Gateway Tests / Kafka End-to-End Tests (with SMQ) (e2e-1) (push) Failing after 3s
Kafka Gateway Tests / Kafka Consumer Group Tests (Highly Isolated) (consumer-group-1) (push) Failing after 2s
Kafka Gateway Tests / Kafka Client Compatibility (with SMQ) (client-compat-1) (push) Failing after 3s
Kafka Gateway Tests / Kafka SMQ Integration Tests (Full Stack) (smq-integration-1) (push) Failing after 3s
Kafka Gateway Tests / Kafka Protocol Tests (Isolated) (protocol-1) (push) Failing after 3s
KMS Tests / KMS Provider Integration Tests (push) Failing after 2s
KMS Tests / S3 KMS End-to-End Tests (push) Failing after 3s
Master Cold Start Tests / Master Cold Start Tests (push) Failing after 4s
Metadata Subscribe Integration Tests / Metadata Subscribe Integration Tests (push) Failing after 3s
Multi-Master Tests / Multi-Master Failover Tests (push) Failing after 3s
Performance / CPU and Heap Profile (push) Failing after 2s
Performance / S3 Read/Write Benchmark (rust volume) (push) Failing after 3s
pjdfstest POSIX Compliance / pjdfstest (push) Failing after 2s
Plugin Worker Integration Tests / Plugin Worker: erasure_coding (push) Failing after 3s
Plugin Worker Integration Tests / Plugin Worker: vacuum (push) Failing after 3s
Rust Volume Server Tests / Rust Integration Tests (push) Failing after 3s
Rust Volume Server Tests / Go Tests with Rust Volume (grpc - Shard 1) (push) Failing after 2s
Rust Volume Server Tests / Go Tests with Rust Volume (http - Shard 1) (push) Failing after 3s
Rust Volume Server Tests / Go Tests with Rust Volume (grpc - Shard 2) (push) Failing after 3s
Rust Volume Server Tests / Go Tests with Rust Volume (http - Shard 2) (push) Failing after 3s
Rust Volume Server Tests / Go Tests with Rust Volume (grpc - Shard 3) (push) Failing after 3s
S3 IAM Integration Tests / S3 IAM Distributed Tests (push) Failing after 2s
S3 IAM Integration Tests / S3 IAM Performance Tests (push) Failing after 3s
Performance / Throughput Benchmark (go volume) (push) Failing after 3s
Performance / Throughput Benchmark (rust volume) (push) Failing after 2s
Performance / S3 Read/Write Benchmark (go volume) (push) Failing after 3s
Plugin Worker Integration Tests / Plugin Worker: volume_balance (push) Failing after 3s
PostgreSQL Gateway Tests / PostgreSQL Basic Tests (push) Failing after 3s
Rust Volume Server Tests / Rust Unit Tests (push) Failing after 2s
Rust Volume Server Tests / Go Tests with Rust Volume (http - Shard 3) (push) Failing after 3s
Rust Plugin Worker Tests / Rust Plugin Worker Build and Unit Tests (push) Failing after 3s
rust: build dev volume server binaries / cleanup (push) Successful in 3s
S3 ETag and ACL Tests / S3 ETag + ACL Integration Tests (push) Failing after 3s
S3 IAM Integration Tests / IAM Unit Tests (push) Failing after 3s
S3 IAM Integration Tests / S3 IAM Integration Tests (advanced) (push) Failing after 3s
S3 IAM Integration Tests / S3 IAM Integration Tests (basic) (push) Failing after 2s
S3 IAM Integration Tests / S3 IAM Integration Tests (group) (push) Failing after 3s
S3 IAM Integration Tests / S3 IAM Integration Tests (policy-enforcement) (push) Failing after 2s
S3 IAM Integration Tests / S3 IAM Integration Tests (sts) (push) Failing after 4s
S3 Keycloak Integration Tests / S3 Keycloak Integration Tests (push) Failing after 3s
S3 PyArrow Parquet Tests / PyArrow Parquet Tests (Python 3.11) (push) Failing after 3s
S3 PyArrow Parquet Tests / Go Unit Tests (Implicit Directory) (push) Has been cancelled
S3 PyArrow Parquet Tests / PyArrow Parquet Tests (Python 3.12) (push) Has been cancelled
rust: build dev volume server binaries / build-rust-volume-dev-darwin (darwin-amd64, x86_64-apple-darwin) (push) Has been cancelled
rust: build dev volume server binaries / build-rust-volume-dev-darwin (darwin-arm64, aarch64-apple-darwin) (push) Has been cancelled
rust: build dev volume server binaries / build-rust-volume-dev-linux (linux-amd64, x86_64-unknown-linux-gnu) (push) Has been cancelled
S3 PyArrow Parquet Tests / PyArrow Parquet Tests (Python 3.9) (push) Has been cancelled
S3 Proxy Signature Tests / S3 Proxy Signature Verification Tests (push) Has been cancelled
S3 SDK V2 Route Disambiguation Tests / S3 SDK V2 Routing Tests (push) Has been cancelled
S3 SSE Tests / S3 SSE Integration Tests (quick) (push) Has been cancelled
S3 SSE Tests / S3 SSE Compatibility Test (push) Has been cancelled
S3 SSE Tests / S3 SSE Metadata Persistence Test (push) Has been cancelled
S3 SSE Tests / S3 SSE Copy Operations Test (push) Has been cancelled
S3 SSE Tests / S3 SSE Multipart Upload Test (push) Has been cancelled
S3 SSE Tests / S3 SSE Performance Test (push) Has been cancelled
S3 SSE Tests / S3 Volume Encryption Test (push) Has been cancelled
S3 SSE Tests / S3 SSE Integration Tests (comprehensive) (push) Has been cancelled
Spark Integration Tests / Spark Integration Tests (push) Failing after 2s
Telemetry Integration Tests / telemetry-integration-test (push) Failing after 3s
Volume Server Integration Tests / Volume Server Integration Tests (grpc - Shard 1) (push) Failing after 3s
Volume Server Integration Tests / Volume Server Integration Tests (http - Shard 1) (push) Failing after 3s
Ceph S3 tests / Basic S3 tests (KV store) (push) Has been cancelled
Ceph S3 tests / S3 Versioning & Object Lock tests (push) Has been cancelled
S3 Policy Integration Tests / S3 Policy Unit Tests (push) Failing after 3s
Ceph S3 tests / S3 CORS tests (push) Has been cancelled
Ceph S3 tests / SeaweedFS Custom S3 Copy tests (push) Has been cancelled
Ceph S3 tests / Basic S3 tests (SQL store) (push) Has been cancelled
test s3 over https using aws-cli / awscli-tests (push) Has been cancelled
TLS Rotation Integration Tests / TLS Rotation Integration Tests (push) Has been cancelled
Vacuum Integration Tests / Vacuum Integration Tests (push) Has been cancelled
S3 Policy Integration Tests / S3 Policy Variables Integration Tests (push) Failing after 3s
S3 Policy Integration Tests / S3 Policy Enforcement Integration Tests (advanced-policy) (push) Failing after 3s
S3 Policy Integration Tests / S3 Policy Enforcement Integration Tests (basic-policy) (push) Failing after 2s
S3 Policy Integration Tests / S3 Policy Enforcement Integration Tests (contextual-policy) (push) Failing after 4s
S3 Policy Integration Tests / Trusted Proxy Detection Tests (push) Failing after 2s
S3 Policy Integration Tests / S3 Policy Shell Integration Tests (push) Failing after 3s
Samba on FUSE Integration / samba-integration (push) Failing after 2s
SFTP Integration Tests / SFTP Integration Testing (push) Failing after 3s
terraform: validate and test modules / fmt, validate, plan-level tests (push) Failing after 3s
terraform: validate and test modules / local cluster smoke test (real weed) (push) Failing after 2s
Volume Server Integration Tests / Volume Server Integration Tests (grpc - Shard 3) (push) Failing after 3s
Volume Server Integration Tests / Volume Server Integration Tests (grpc - Shard 2) (push) Failing after 3s
Volume Server Integration Tests / Volume Server Integration Tests (http - Shard 2) (push) Failing after 2s
Volume Server Integration Tests / Volume Server Integration Tests (http - Shard 3) (push) Failing after 5s
mount: windows conformance / WinFsp conformance (push) Has been cancelled
mount: windows / Mount on Windows (push) Has been cancelled
250 lines
8.4 KiB
Markdown
250 lines
8.4 KiB
Markdown
# Remote Object Cache Integration Tests
|
|
|
|
This directory contains integration tests for the remote object caching feature with singleflight deduplication.
|
|
|
|
## Test Flow
|
|
|
|
Each test follows this pattern:
|
|
1. **Write to local** - Upload data to primary SeaweedFS (local storage)
|
|
2. **Uncache** - Push data to remote storage and remove local chunks
|
|
3. **Read** - Read data (triggers caching from remote back to local)
|
|
|
|
This tests the full remote caching workflow including singleflight deduplication.
|
|
|
|
## Architecture
|
|
|
|
```text
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ Test Client │
|
|
│ │
|
|
│ 1. PUT data to primary SeaweedFS │
|
|
│ 2. remote.cache.uncache (push to remote, purge local) │
|
|
│ 3. GET data (triggers caching from remote) │
|
|
│ 4. Verify singleflight deduplication │
|
|
└──────────────────────────────────┬──────────────────────────────┘
|
|
│
|
|
┌─────────────────┴─────────────────┐
|
|
▼ ▼
|
|
┌────────────────────────────────────┐ ┌────────────────────────────────┐
|
|
│ Primary SeaweedFS │ │ Remote SeaweedFS │
|
|
│ (port 8333) │ │ (port 8334) │
|
|
│ │ │ │
|
|
│ - Being tested │ │ - Acts as "remote" S3 │
|
|
│ - Has remote storage mounted │──▶│ - Receives uncached data │
|
|
│ - Caches remote objects │ │ - Serves data for caching │
|
|
│ - Singleflight deduplication │ │ │
|
|
└────────────────────────────────────┘ └────────────────────────────────┘
|
|
```
|
|
|
|
## What's Being Tested
|
|
|
|
### Test Files and Coverage
|
|
|
|
| Test File | Commands Tested | Test Count | Description |
|
|
|-----------|----------------|------------|-------------|
|
|
| `remote_cache_test.go` | Basic caching | 6 tests | Original caching workflow and singleflight tests, plus a mount with `-cacheWait=0` reading straight from the remote |
|
|
| `remote_cache_copy_test.go` | S3 CopyObject / UploadPartCopy from a remote-only source | 2 tests | Source object lives only in remote storage; CopyObject and UploadPartCopy must cache it locally before persisting the destination so the result is readable |
|
|
| `command_remote_configure_test.go` | `remote.configure` | 6 tests | Configuration management |
|
|
| `command_remote_mount_test.go` | `remote.mount`, `remote.unmount`, `remote.mount.buckets` | 10 tests | Mount operations |
|
|
| `command_remote_cache_test.go` | `remote.cache`, `remote.uncache` | 13 tests | Cache/uncache with filters |
|
|
| `command_remote_copy_local_test.go` | `remote.copy.local` | 12 tests | **NEW in PR #8033** - Local to remote copy |
|
|
| `command_remote_meta_sync_test.go` | `remote.meta.sync` | 8 tests | Metadata synchronization |
|
|
| `command_edge_cases_test.go` | All commands | 11 tests | Edge cases and stress tests |
|
|
|
|
**Total: 68 test cases covering 8 weed shell commands and the S3 copy paths for remote-only sources**
|
|
|
|
### Commands Tested
|
|
|
|
1. **`remote.configure`** - Configure remote storage backends
|
|
2. **`remote.mount`** - Mount remote storage to local directory
|
|
3. **`remote.unmount`** - Unmount remote storage
|
|
4. **`remote.mount.buckets`** - Mount all buckets from remote
|
|
5. **`remote.cache`** - Cache remote files locally
|
|
6. **`remote.uncache`** - Remove local cache, keep metadata
|
|
7. **`remote.copy.local`** - Copy local files to remote (**NEW in PR #8033**)
|
|
8. **`remote.meta.sync`** - Sync metadata from remote
|
|
|
|
### Test Coverage
|
|
|
|
**Basic Operations:**
|
|
- Basic caching workflow (Write → Uncache → Read)
|
|
- Singleflight deduplication (concurrent reads trigger ONE cache operation)
|
|
- Large object caching (5MB-100MB files)
|
|
- Range requests (partial reads)
|
|
- Not found handling
|
|
|
|
**File Filtering:**
|
|
- Include patterns (`*.pdf`, `*.txt`, etc.)
|
|
- Exclude patterns
|
|
- Size filters (`-minSize`, `-maxSize`)
|
|
- Age filters (`-minAge`, `-maxAge`)
|
|
- Combined filters
|
|
|
|
**Command Options:**
|
|
- Dry run mode (`-dryRun=true`)
|
|
- Concurrency settings (`-concurrent=N`)
|
|
- Force update (`-forceUpdate=true`)
|
|
- Non-empty directory mounting (`-nonempty=true`)
|
|
|
|
**Edge Cases:**
|
|
- Empty directories
|
|
- Nested directory hierarchies
|
|
- Special characters in filenames
|
|
- Very large files (100MB+)
|
|
- Many small files (100+)
|
|
- Rapid cache/uncache cycles
|
|
- Concurrent command execution
|
|
- Invalid paths
|
|
- Zero-byte files
|
|
|
|
## Running Tests
|
|
|
|
### Run All Tests
|
|
```bash
|
|
# Full automated workflow
|
|
make test-with-server
|
|
|
|
# Or manually
|
|
go test -v ./...
|
|
```
|
|
|
|
### Run Specific Test Files
|
|
```bash
|
|
# Test remote.configure command
|
|
go test -v -run TestRemoteConfigure
|
|
|
|
# Test remote.mount/unmount commands
|
|
go test -v -run TestRemoteMount
|
|
go test -v -run TestRemoteUnmount
|
|
|
|
# Test remote.cache/uncache commands
|
|
go test -v -run TestRemoteCache
|
|
go test -v -run TestRemoteUncache
|
|
|
|
# Test remote.copy.local command (PR #8033)
|
|
go test -v -run TestRemoteCopyLocal
|
|
|
|
# Test remote.meta.sync command
|
|
go test -v -run TestRemoteMetaSync
|
|
|
|
# Test edge cases
|
|
go test -v -run TestEdgeCase
|
|
```
|
|
|
|
## Quick Start
|
|
|
|
### Run Full Test Suite (Recommended)
|
|
|
|
```bash
|
|
# Build SeaweedFS, start both servers, run tests, stop servers
|
|
make test-with-server
|
|
```
|
|
|
|
### Manual Steps
|
|
|
|
```bash
|
|
# 1. Build SeaweedFS binary
|
|
make build-weed
|
|
|
|
# 2. Start remote SeaweedFS (acts as "remote" storage)
|
|
make start-remote
|
|
|
|
# 3. Start primary SeaweedFS (the one being tested)
|
|
make start-primary
|
|
|
|
# 4. Configure remote storage mount
|
|
make setup-remote
|
|
|
|
# 5. Run tests
|
|
make test
|
|
|
|
# 6. Clean up
|
|
make clean
|
|
```
|
|
|
|
## Configuration
|
|
|
|
### Primary SeaweedFS (Being Tested)
|
|
|
|
| Service | Port |
|
|
|---------|------|
|
|
| S3 API | 8333 |
|
|
| Filer | 8888 |
|
|
| Master | 9333 |
|
|
| Volume | 8080 |
|
|
|
|
### Remote SeaweedFS (Remote Storage)
|
|
|
|
| Service | Port |
|
|
|---------|------|
|
|
| S3 API | 8334 |
|
|
| Filer | 8889 |
|
|
| Master | 9334 |
|
|
| Volume | 8081 |
|
|
|
|
## Makefile Targets
|
|
|
|
```bash
|
|
make help # Show all available targets
|
|
make build-weed # Build SeaweedFS binary
|
|
make start-remote # Start remote SeaweedFS
|
|
make start-primary # Start primary SeaweedFS
|
|
make setup-remote # Configure remote storage mount
|
|
make test # Run tests
|
|
make test-with-server # Full automated test workflow
|
|
make logs # Show server logs
|
|
make health # Check server status
|
|
make clean # Stop servers and clean up
|
|
```
|
|
|
|
## Test Details
|
|
|
|
### TestRemoteCacheBasic
|
|
Basic workflow test:
|
|
1. Write object to primary (local)
|
|
2. Uncache (push to remote, remove local chunks)
|
|
3. Read (triggers caching from remote)
|
|
4. Read again (from local cache - should be faster)
|
|
|
|
### TestRemoteCacheConcurrent
|
|
Singleflight deduplication test:
|
|
1. Write 1MB object
|
|
2. Uncache to remote
|
|
3. Launch 10 concurrent reads
|
|
4. All should succeed with correct data
|
|
5. Only ONE caching operation should run (singleflight)
|
|
|
|
### TestRemoteCacheLargeObject
|
|
Large file test (5MB) to verify chunked transfer works correctly.
|
|
|
|
### TestRemoteCacheRangeRequest
|
|
Tests HTTP range requests work correctly after caching.
|
|
|
|
### TestRemoteCacheNotFound
|
|
Tests proper error handling for non-existent objects.
|
|
|
|
### TestRemoteCacheWaitZero
|
|
Remounts with `remote.mount -cacheWait=0` and checks that a read of a remote-only
|
|
object is served from the remote and leaves the object uncached, while the default
|
|
size-based wait caches it.
|
|
|
|
## Troubleshooting
|
|
|
|
### View logs
|
|
```bash
|
|
make logs # Show recent logs from both servers
|
|
make logs-primary # Follow primary logs in real-time
|
|
make logs-remote # Follow remote logs in real-time
|
|
```
|
|
|
|
### Check server health
|
|
```bash
|
|
make health
|
|
```
|
|
|
|
### Clean up and retry
|
|
```bash
|
|
make clean
|
|
make test-with-server
|
|
```
|