summaryrefslogtreecommitdiff
path: root/tools/testing/selftests/filesystems/ceph/README
blob: eb0092b38f80bccde1ea7dfe5a1a9cc2f16713a5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# CephFS Client Reset Test Suite

Test suite for the CephFS kernel client manual session reset feature.
This trimmed set contains the single-client stress test, the targeted
corner-case test, and the one-shot validation harness used during
feature bring-up.

## Prerequisites

- Linux kernel with the CephFS client reset feature (this branch)
- A running Ceph cluster with at least one MDS
- Root access (debugfs requires it)
- Python 3 (for validators)
- flock utility (for lock tests, usually in util-linux)

## Test inventory

| Test | Script(s) | What it covers |
|------|-----------|----------------|
| Single-client stress | `reset_stress.sh` | I/O + resets + data integrity on one mount |
| Corner cases | `reset_corner_cases.sh` | EBUSY, dirty caps, flock reclaim, unmount-during-reset |
| Validation harness | `run_validation.sh` | baseline + corner cases + moderate/aggressive stress + final status check |

## Quick start

Stress run:

    sudo ./reset_stress.sh --mount-point /mnt/cephfs --profile moderate

Corner cases:

    sudo ./reset_corner_cases.sh --mount-point /mnt/cephfs

End-to-end validation:

    sudo ./run_validation.sh --mount-point /mnt/cephfs

## Stress profiles

    baseline   - no resets, 1 IO + 1 rename, 600s
    moderate   - reset every 5-15s, 2 IO + 1 rename, 900s
    aggressive - reset every 1-5s, 4 IO + 2 rename, 900s
    soak       - reset every 5-15s, 2 IO + 1 rename, 3600s

## Key options (all scripts)

    --mount-point PATH   CephFS mount point (required)
    --client-id ID       Debugfs client id (auto-detected if one)

reset_stress.sh additionally accepts:

    --profile NAME       baseline|moderate|aggressive|soak
    --duration-sec N     Override profile runtime
    --no-reset           Disable reset injection
    --out-dir PATH       Artifact directory

## Corner case tests

    [1/4] ebusy_rejection       Second reset rejected while first in-flight
    [2/4] dirty_caps_at_reset   Reset with unflushed dirty caps
    [3/4] flock_after_reset     Stale lock EIO + fresh lock after holder exit
    [4/4] unmount_during_reset  umount during active reset (destroy-path wakeup)

Test 4 requires creating a second CephFS mount instance and SKIPs if
the host cannot do so.  See `--help` output for details.

## Troubleshooting

**No writable Ceph reset interface found:**
Kernel lacks the reset feature, debugfs not mounted, or not root.
Check: `ls /sys/kernel/debug/ceph/*/reset/`

**Multiple Ceph clients found:**
Use `--client-id` to select one.
List: `ls /sys/kernel/debug/ceph/`

## Files

| File | Role |
|------|------|
| `reset_stress.sh` | Single-client stress test runner |
| `validate_consistency.py` | Single-client post-run validator |
| `reset_corner_cases.sh` | Corner case harness (4 sequential tests) |
| `run_validation.sh` | One-shot validation harness |