Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
131 commits
Select commit Hold shift + click to select a range
7ca7f7a
fix(replication): the namespace eviction never ran — subsystem_get re…
michixs Aug 24, 2026
da7d1be
fix(replication): confirm the stale namespace is GONE before the cuto…
michixs Aug 24, 2026
f3ea3cf
fix: evict the stale preserved-identity namespace on every HA node, n…
michixs Aug 24, 2026
d361e0e
fix: adopt or clear a landing volume left by an interrupted transfer …
michixs Aug 24, 2026
d8f6677
test: wait for the cluster to settle before node-down cases; surface …
michixs Aug 24, 2026
22c9188
fix: fail-over must match the full preserved identity (nqn AND nsid),…
michixs Aug 24, 2026
2aa42bc
test: pass env overrides to the remote driver; track fio survival acr…
michixs Aug 24, 2026
28b9bcb
test: pin the ultra image carrying the ANA fix, deploy 2 clients, sur…
michixs Aug 24, 2026
be5bffd
fix: clear pre-existing lint/type errors blocking CI on main (#1265)
wmousa Aug 24, 2026
4bdf334
fix: namespaced siblings must replicate to the same target node
michixs Aug 24, 2026
3beb572
test: make the chaos gate health-aware and restart the workload after…
michixs Aug 24, 2026
bf60495
fix: tell the journal component when a cluster is dual-node
michixs Aug 25, 2026
d3d0385
test(mp): run the parity-desync leadership fix (ultra b44de698, spdk …
michixs Aug 25, 2026
e39458c
test: prove replication resumed by a post-recovery point-in-time, not…
michixs Aug 25, 2026
dd641a5
feat: tiered snapshot retention and fail-over generation selection
michixs Aug 25, 2026
3aadb01
test: three nodes per cluster everywhere -- two-node clusters are not…
michixs Aug 25, 2026
12a0904
feat: snapshot consistency groups on replication policies
michixs Aug 25, 2026
9397dea
fix: confirm the clone bdev exists after clone_register before adding…
michixs Aug 25, 2026
a6b3ec2
Fix CLI, linter and type checker on main
mxsrc Aug 25, 2026
82eed79
fix: retire empty-stack landing records without the async delete mach…
michixs Aug 25, 2026
57ce4a1
Fix unit and integration tests
mxsrc Aug 25, 2026
aa29231
test: ship lvol_monitor's own module in the hotfix
michixs Aug 25, 2026
01c56f7
test: cases 10-12 for the new features
michixs Aug 25, 2026
37751bf
fix: never delete a shared subsystem while other live volumes claim i…
michixs Aug 25, 2026
397d1dc
Fix linter, type checks, and unit tests
mxsrc Aug 26, 2026
646e86b
fix(multipath): prune duplicate paths, and stop a dial hold outliving…
michixs Aug 26, 2026
787e6ef
test(mp): fail the soak on a verify failure, dump the bytes, allow a …
michixs Aug 26, 2026
3e25476
adding a delay on final step for testing case
EbiRider Aug 18, 2026
97b7b4f
disabling source cleanup
EbiRider Aug 18, 2026
0e8ef23
remove the delay
EbiRider Aug 18, 2026
5aa5f71
adding delays for each step after final batch migration
EbiRider Aug 18, 2026
83a89aa
disabling ana state switch
EbiRider Aug 18, 2026
8b83f3e
disabling namespace swap
EbiRider Aug 18, 2026
6095b7d
disbaling the delete of intermediate snapshots
EbiRider Aug 18, 2026
0ec0b5c
adding logs to trace the tree not reconstructing issue
EbiRider Aug 18, 2026
0b0c18d
fix: batch migration skip building the tree on the target
EbiRider Aug 18, 2026
2987130
fix: redundent add listener rpc call, explicit ns id passing to the t…
EbiRider Aug 19, 2026
8a5286b
testing with source paths going off for 5 second before opening targe…
EbiRider Aug 19, 2026
01d31cb
disabling rpc calls past final step in batch migration
EbiRider Aug 19, 2026
7bcd4df
making all paths inaccessible 10 second before fianl step
EbiRider Aug 19, 2026
1456f01
reduced delay
EbiRider Aug 19, 2026
7f2b1e9
reenable the disabled features for the testing
EbiRider Aug 19, 2026
c360a24
removing debug logs, and redudent calls
EbiRider Aug 19, 2026
d940afc
fix: batch migration cleanup target fail to detect overlap nodes
EbiRider Aug 20, 2026
5b1ab52
removing any hub lvol detach call from the retry path of batch lvol m…
EbiRider Aug 20, 2026
6cb2b23
batch migration now may take extra intermediate snapshots if the delt…
EbiRider Aug 20, 2026
8e586cf
on retry batch migration will take extra intermediate snapshots if ne…
EbiRider Aug 21, 2026
dbed3fa
temp: manually blockiong the port during lvol migration for testing
EbiRider Aug 21, 2026
16eea54
removing temp port block
EbiRider Aug 21, 2026
5789559
fix: ns id not passed explicitly, chain between intermediates, add cl…
EbiRider Aug 24, 2026
b24c3c7
fixed bad delete, duplicate bdev get calls
EbiRider Aug 24, 2026
b26ebfd
test: pin the ECR digest for main-d91ff03a-amd64, not docker.io's
michixs Aug 26, 2026
fc12620
Feat/distrib priority over alceml (#1268)
wmousa Aug 26, 2026
28af35b
test: run the outage soak on a non-multipath 2+2 cluster, deployed in…
michixs Aug 26, 2026
064f61a
fix(scripts): cap --max-subsys at the product ceiling so cluster crea…
michixs Aug 26, 2026
48c0e2f
fix: resolve API v1 metric leak
mxsrc Aug 26, 2026
c668202
test: repl_soak.py -- one-liner to deploy a lab from a branch and run…
michixs Aug 26, 2026
9977c63
Merge remote-tracking branch 'origin/consistency-groups' into replica…
michixs Aug 26, 2026
a303080
fix(scripts): pass --dev on add-node, or --spdk-image is rejected
michixs Aug 26, 2026
08a2e4a
test: repl_soak must probe the lab before using stale metadata
michixs Aug 26, 2026
2884342
Merge remote-tracking branch 'origin/main' into rf-sync
michixs Aug 26, 2026
38bc456
test: default the soak to this branch and its own ultra image
michixs Aug 26, 2026
6e29c67
fix: preserve original source lvolID through failback cutover by swap…
geoffrey1330 Aug 26, 2026
8d2305d
test: cases 13-15 -- a single node dies DURING fail-over / fail-back …
michixs Aug 26, 2026
d461f3c
fix: evict stale failback namespace from HA peer nodes to prevent -32…
geoffrey1330 Aug 26, 2026
5d716b5
ci: apply checks to release PRs as well
mxsrc Aug 26, 2026
0809576
Merge branch 'R26.3' into retain_source_lvolID
geoffrey1330 Aug 26, 2026
d474afa
test: give each phase-chaos round its own policy and volumes
michixs Aug 26, 2026
115ae1f
test: accept --cases in every shape a shell produces
michixs Aug 26, 2026
a284f73
test: hotfix mounts every module that differs from the image, not a h…
michixs Aug 26, 2026
90989c7
fix: say WHY a replica namespace add was rejected
michixs Aug 26, 2026
dab4bb0
fix: never evict a sibling's namespace from a shared subsystem
michixs Aug 26, 2026
d3b11a9
fix: use DBController() instance in _evict_stale_namespace instead of…
geoffrey1330 Aug 26, 2026
34921a8
Merge branch 'R26.3' into retain_source_lvolID
geoffrey1330 Aug 26, 2026
3aebabc
fix: preserve do_replicate and replication config fields from origina…
geoffrey1330 Aug 26, 2026
2bc3d76
test: add secondary_node_id and tertiary_node_id to _EvictNode stub t…
geoffrey1330 Aug 26, 2026
92fdaa7
test: case 7 runs its 20 namespaced volumes on a 5-minute cadence
michixs Aug 26, 2026
ffc69b1
test: an ssh -f timeout is inconclusive, not a launch failure
michixs Aug 26, 2026
19501bd
fix: create the shared subsystem on a node that does not have it yet
michixs Aug 26, 2026
5eded38
fix: a failed replica leg must leave nothing behind in the subsystem
michixs Aug 26, 2026
fd88c2d
fix: roll back every node that received a fail-over copy, and pass ids
michixs Aug 26, 2026
6739e1a
Claim the fail-over copy's nsid on the target instead of auto-assigning
michixs Aug 26, 2026
904d9a6
Keep a shared subsystem on one target primary from BOTH entry points
michixs Aug 26, 2026
42d2660
Fail-back: retire the superseded original before the returning volume
michixs Aug 26, 2026
ff5c2ee
Merge origin/R26.3 into replication-features
michixs Aug 27, 2026
1d1b706
Redact the GitHub token before it reaches a log line
michixs Aug 27, 2026
995c222
fix: restore do_replicate=True and replication config after failback …
geoffrey1330 Aug 27, 2026
4fa1950
Converge the cutover delta before freezing, and give the lvstore to it
michixs Aug 27, 2026
f487978
test: verify client cleanup, and give the chaos cases a cadence they …
michixs Aug 27, 2026
2e55ad2
fix: extend set_cutover_proceed to signal failback cutovers via targe…
geoffrey1330 Aug 27, 2026
51ccb7a
Stamp round 1, so the cutover actually converges
michixs Aug 27, 2026
51c5670
Queue cutovers per lvstore instead of starving all but one
michixs Aug 27, 2026
d5f058b
Make a dying cutover say why
michixs Aug 27, 2026
ae7c5bf
run replication-final tasks in parallel threads to eliminate serial s…
geoffrey1330 Aug 27, 2026
15edcc9
fix flaky test: use ordinal sum instead of hash() for mgmt_ip to avoi…
geoffrey1330 Aug 27, 2026
ea4440e
failback: delete stale failed_over LVolReplication after UUID swap to…
geoffrey1330 Aug 27, 2026
d97daea
Instrument the replication pipeline so its delays are separable
michixs Aug 27, 2026
ca4b2bb
rebased with branch replication-features
geoffrey1330 Aug 28, 2026
aa810d7
Say which retention is in force, and pin the ladder with a test
michixs Aug 28, 2026
dd4934b
Act on a finished transfer within 100ms, not on a later runner pass
michixs Aug 28, 2026
ebe0d51
fix: break LVS cutover circular stall by writing claim before arbitra…
geoffrey1330 Aug 28, 2026
3d1f485
fix: reset shrink deadline and state on cutover retry to prevent inst…
geoffrey1330 Aug 28, 2026
ab10ca4
Merge replication-features: add tasks= passthrough, _any_cutover_in_f…
geoffrey1330 Aug 28, 2026
1e49b95
chore: revert _lvs_cutover_owner to per-lvstore serialization matchin…
geoffrey1330 Aug 28, 2026
95ab5e6
Exclusivity is the endgame, not the whole cutover
michixs Aug 28, 2026
99ca46c
remove shrink reset on retry; deadline expiry now falls through to cu…
geoffrey1330 Aug 28, 2026
5c4af76
replication: skip shrink rounds when transfer is zero bytes
geoffrey1330 Aug 28, 2026
c8cfedf
replication: fix retry burn and node-offline stall during cutover
geoffrey1330 Aug 28, 2026
cafc904
Land replication transfers in a COW clone so the delta path can run
michixs Aug 28, 2026
ae3a6d0
test: never lose the timing bundle to a control-plane hiccup
michixs Aug 28, 2026
636fb31
cutover: converge on the ordinary cadence, then run an exclusive endgame
michixs Aug 28, 2026
5a9c34f
fix: resolve merge conflict in tasks_runner_replication_final and rem…
geoffrey1330 Aug 31, 2026
2720fd8
fix: treat lag=None as proceed in await_catchup gate — unblocks failb…
geoffrey1330 Aug 31, 2026
1c4d97f
fix: unblock failback cutover — bypass await_catchup when lag=None, e…
geoffrey1330 Aug 31, 2026
52e75af
commented out allow_partial
geoffrey1330 Aug 31, 2026
ce8bc2a
fix: treat transfer_state=Failed as failure in final-step cutover
geoffrey1330 Aug 31, 2026
937a3ab
fix(failback): gate pre-cutover delete of superseded original behind …
geoffrey1330 Sep 1, 2026
43f7d58
fix(failback): give cutover clone a fresh bdev name when the original…
geoffrey1330 Sep 1, 2026
3a00915
fix(failback): report the relationship source id in connect entries s…
geoffrey1330 Sep 2, 2026
4178075
Merge branch 'R26.3' into retain_source_lvolID
geoffrey1330 Sep 2, 2026
7031835
fix(cutover): enable the cutover-proceed preconnect gate now that the…
geoffrey1330 Sep 2, 2026
f5b0b77
fix(failback): evict the superseded original's namespace by its ident…
geoffrey1330 Sep 2, 2026
08c0761
fix(failback): register the clone's namespace with the superseded ori…
geoffrey1330 Sep 2, 2026
5916276
fix(failback): advertise the DR source's wire identity on the clone n…
geoffrey1330 Sep 2, 2026
b5ea6d8
fix(failback): gate delete-source on client coverage of the target su…
geoffrey1330 Sep 2, 2026
00206dd
fix(failover): fence and unpublish the source volume's data path so a…
geoffrey1330 Sep 3, 2026
167a4c5
revert(replication): drop delete-source coverage gate — failover sour…
geoffrey1330 Sep 3, 2026
9832bd0
fix: green the unit suite — 3 production bugs, stale cutover tests, l…
geoffrey1330 Sep 3, 2026
a216dc5
fix(cli): declare retention-schedule, consistency-group, and replicat…
geoffrey1330 Sep 3, 2026
272a3a0
fix(proxy): start the server and stats thread only under __main__ — t…
geoffrey1330 Sep 4, 2026
0a1fc38
test(migration): mock bdev_lvol_transfer_final_step synchronously — t…
geoffrey1330 Sep 4, 2026
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
172 changes: 172 additions & 0 deletions img_hashes.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
d41d8cd98f00b204e9800998ecf8427e simplyblock_core/__init__.py
921aad174688b985519e0c72d1d6d0e7 simplyblock_core/cluster_ops.py
eb941f1f1c0fbc49bf6c569fef7d31f8 simplyblock_core/constants.py
d41d8cd98f00b204e9800998ecf8427e simplyblock_core/controllers/__init__.py
a440b45b21c4f14f2e40240dbf2d9bc5 simplyblock_core/controllers/backup_controller.py
eb0275929e5d1dd522763c44b3b40fda simplyblock_core/controllers/backup_events.py
43f023313267a2434a2029deda471f61 simplyblock_core/controllers/cluster_events.py
d41d8cd98f00b204e9800998ecf8427e simplyblock_core/controllers/cluster_expansion/__init__.py
38cba0e6dd4e9374b37c3fe2cd0c6b8f simplyblock_core/controllers/cluster_expansion/executor.py
7e3ed535a62cdcd5e087044502437269 simplyblock_core/controllers/cluster_expansion/orchestrator.py
5388e317669ef6ed861b882f75522e27 simplyblock_core/controllers/cluster_expansion/planner.py
cb317fde8a270cda8bba528d0e4bf286 simplyblock_core/controllers/cluster_expansion/preconditions.py
1dd883da6a0e99bad07ea12cb6ed2727 simplyblock_core/controllers/device_controller.py
49318a96a77b96cd2438b1389a927600 simplyblock_core/controllers/device_events.py
9563d5d608189dc3ee1cc7dc6575d8c8 simplyblock_core/controllers/events_controller.py
96466463b95d74b79cce2a398949956a simplyblock_core/controllers/fdb_backup_controller.py
ef01b95df3f3c501bbd0df35753eeea0 simplyblock_core/controllers/health_controller.py
583833a31731ee88d6c5e4ed9ed8b2f9 simplyblock_core/controllers/host_auth.py
122238a7f90215505a85c9fb4e1d06d7 simplyblock_core/controllers/lvol_controller.py
8ed20e8ada22c39ad2b40dc1aeb91436 simplyblock_core/controllers/lvol_events.py
d7261581a5308b13e1fc830910b4202d simplyblock_core/controllers/mgmt_events.py
4495ba0571fed37306e9d6684e993e87 simplyblock_core/controllers/migration_bdev_ops.py
7a7a80de2a192802cfab2a4d52a619c4 simplyblock_core/controllers/migration_controller.py
faf2454ca99acce7a0b8b12f2a0a1c2e simplyblock_core/controllers/migration_events.py
3329fdc76d009ab22043a4adfdd31162 simplyblock_core/controllers/ops_gate.py
16b973f2a2a44a20ae1d76329572ed33 simplyblock_core/controllers/pool_controller.py
1c79832885997693b642ea125465c224 simplyblock_core/controllers/pool_events.py
10fbc91df11af77ad23a83c9d0dbe66b simplyblock_core/controllers/qos_controller.py
8ef27ba9a004a7f365f7fdc810796cfa simplyblock_core/controllers/replication_policy_controller.py
a4a06dc366b026908f02fc21502792d2 simplyblock_core/controllers/snapshot_controller.py
99f7f70f3a3c0e909aac03802f5006b3 simplyblock_core/controllers/snapshot_events.py
9c08682f202955ed566ed96d9535c829 simplyblock_core/controllers/storage_events.py
441da86657062e418f150da66efa5390 simplyblock_core/controllers/tasks_controller.py
c5cc66cb98bde4768092cdb1a0131ae4 simplyblock_core/controllers/tasks_events.py
b8d69479e568944c6d26da7e9b61bb56 simplyblock_core/controllers/tcp_ports_events.py
91613b33cc8eecfd8e36488c42b1efcb simplyblock_core/db_controller.py
84a808ea97b86654e5547b13472faf48 simplyblock_core/distr_controller.py
212bb9c4ba9198b35be212d5dfd89601 simplyblock_core/exceptions.py
c577aec17bc3aa0428af060e5cbbd8f0 simplyblock_core/fw_api_client.py
3fc3f4fc5f60993d7b138fa9b4adbcad simplyblock_core/jm_raid.py
74e7b278ad56e4adbfc6f5105f23fa70 simplyblock_core/kms/__init__.py
b21dfac624800ae4695edb6dead53a7c simplyblock_core/kms/_base.py
eaa1c679331e65af0a8533856173c486 simplyblock_core/kms/_exceptions.py
707d37b161f048797f4be19654345709 simplyblock_core/kms/_fdb.py
7f917ea95665ee16c0ffd1c08ddbd9c2 simplyblock_core/kms/_hcp.py
fcd90d3a9b7af72c76369eb6fd67e955 simplyblock_core/mgmt_node_ops.py
d41d8cd98f00b204e9800998ecf8427e simplyblock_core/models/__init__.py
f4a6dff300d400be9d9983ea6bcd02b0 simplyblock_core/models/backup.py
1991ef4a4e6f043d90f08232ccd6998a simplyblock_core/models/base_model.py
b7a0b089043fcd1bbc4114cf866f2a98 simplyblock_core/models/cluster.py
41c4c62321b77e7381709d39345be74c simplyblock_core/models/events.py
c1d95ed3eb8531a3736a74ba9d522a16 simplyblock_core/models/hub_cooldown.py
84a5e67573439d80fc8217bf6956e86d simplyblock_core/models/hublvol.py
aaa0f08f3724359abfccac3a6f912651 simplyblock_core/models/iface.py
bad6cffda3d269eac4528a9fbe3bceca simplyblock_core/models/job_schedule.py
fbf8c48e05b78ad0cfadd0d0b6952e3e simplyblock_core/models/lvol_migration.py
93e027ba3737c5d3a66a76c4bef1eb99 simplyblock_core/models/lvol_migration_group.py
7233db81712cd3c02277cf88b2c5509d simplyblock_core/models/lvol_model.py
79a31818d478ecce83c63050ece62065 simplyblock_core/models/lvstore_lock.py
5e8aeda97b87058699292ed0fd3603b9 simplyblock_core/models/mgmt_node.py
b1076bf14319f93df9906a1ff77e9920 simplyblock_core/models/nvme_device.py
16e6498b741406a6ca52e531a2a34611 simplyblock_core/models/pool.py
d350fce28254cf53da607facfdab1cce simplyblock_core/models/port_stat.py
76b86dcb5850954d0b78928a772e4616 simplyblock_core/models/qos.py
82eb6d6570452eaa7052d84dd5a2b47e simplyblock_core/models/replication.py
7e34fc1f2577c045667418687e82796d simplyblock_core/models/restart_lock.py
b17735bfa9fb6099d948ca1ab954a907 simplyblock_core/models/snapshot.py
930d082cbb3d3f2f9076837e38a5283d simplyblock_core/models/stats.py
afadba47b1b755674ecfb2edbae2dafd simplyblock_core/models/storage_node.py
f820ca63541b36fc34dc938a1419da53 simplyblock_core/prom_client.py
9ef4b502175a7d5cc32f6ea82d110dfa simplyblock_core/release_upgrades/__init__.py
cba45f129303eca7295214719b56df4b simplyblock_core/release_upgrades/jc_compression_upgrade.py
ae7b5ff638b16236f39f38ecd52563e5 simplyblock_core/rpc_client.py
fb8278ed7174bd9ca12b44a545b108e6 simplyblock_core/scripts/__init__.py
649b3072b7625d6bbb732a9e66566dc2 simplyblock_core/scripts/collect_logs.py
d41d8cd98f00b204e9800998ecf8427e simplyblock_core/scripts/helpers/__init__.py
455c553a6598cd0178ecb36433f07d10 simplyblock_core/scripts/helpers/nvme_disconnect_by_ip.py
a371a8ebc56236f463fa49c6674faa51 simplyblock_core/scripts/restore_fdb_from_kvfiledump.py
4c20bb18b5f6e04234455dfe8112b3d8 simplyblock_core/services/__init__.py
89ea5203a611d9eb7ba04d1879aa840c simplyblock_core/services/cap_monitor.py
c74e062d9cd028e98503b07fd3a7ee04 simplyblock_core/services/capacity_and_stats_collector.py
9310b22ccdc7d6f5d850e932a6d6098d simplyblock_core/services/device_monitor.py
3b982e4e58d489fc2cc861ee9f5d9e88 simplyblock_core/services/health_check_service.py
8773b45be91a706f4dd50bf6ba14ff87 simplyblock_core/services/hub_controller_manager.py
f22a5aa9946183ec33061a253166b9f0 simplyblock_core/services/lvol_monitor.py
5af944ba3a09848e24984cc560012c00 simplyblock_core/services/lvol_stat_collector.py
e286e508f7f34ea28b6894df29b6819e simplyblock_core/services/main_distr_event_collector.py
db8fd72f53396244adcd18f1e0348655 simplyblock_core/services/mgmt_node_monitor.py
66a30a4a6386a08eb720530341b3ee0e simplyblock_core/services/new_device_discovery.py
1da9113a14a2e5c72438f8174d4d1301 simplyblock_core/services/replication_final_step.py
f49cf6719f484f43c6f543f09a59356d simplyblock_core/services/snapshot_monitor.py
0103fd4d054878e22b450350e72cfd04 simplyblock_core/services/snapshot_replication.py
a8e8f2ac6baaec3a2781cbc774886036 simplyblock_core/services/spdk_http_proxy_server.py
d21aa89347671199e4c4f93db11067e6 simplyblock_core/services/storage_node_monitor.py
f5a0397d343cfc2148eb86192c9e8ebd simplyblock_core/services/tasks_cluster_status.py
659ee98597f9f0f8e9607209a3abebd1 simplyblock_core/services/tasks_runner_backup.py
10a97c1171915bbaa645c649cff88da2 simplyblock_core/services/tasks_runner_backup_merge.py
ed954f1ff465008efb0222c09bb68deb simplyblock_core/services/tasks_runner_batch_migration.py
b4048ca32a99789e6ed76ae16c834985 simplyblock_core/services/tasks_runner_cluster_expand.py
13faa65654c71c55bd8f3a19e34cba15 simplyblock_core/services/tasks_runner_failed_migration.py
4894a2715a481f116ee2f092fe963c8b simplyblock_core/services/tasks_runner_fdb_backup.py
d7f6eb76fb513c62e8a3d5abd5192fa1 simplyblock_core/services/tasks_runner_jc_comp.py
1c1ac93f66e096d52addb6373db50de2 simplyblock_core/services/tasks_runner_lvol_migration.py
9763fc859165deda77a7433f48dc3825 simplyblock_core/services/tasks_runner_migration.py
a45d0d3c7e952a7598ff15c91e90c6af simplyblock_core/services/tasks_runner_new_dev_migration.py
2cd5d1df8cfda73e0eaf1b9e1d96b8b9 simplyblock_core/services/tasks_runner_node_add.py
2b57c422d936551428c28546ce9d7a02 simplyblock_core/services/tasks_runner_node_removal.py
5015f0ed7eb5d465a2e61f0d414a8f19 simplyblock_core/services/tasks_runner_port_allow.py
75434f8a8951e5dabee51f20bd8d8c3a simplyblock_core/services/tasks_runner_replication_final.py
dfafaedfafff3b69802d3f2c9f680390 simplyblock_core/services/tasks_runner_restart.py
6f7c8d54b32d8a3cb60f18eff49a1217 simplyblock_core/services/tasks_runner_sync_lvol_del.py
a3c56c87ab44a01ba71bcb12d778d23e simplyblock_core/settings.py
c0fb4c93ff5b5d32005d63bcdb813d0c simplyblock_core/shell_utils.py
03cda4cb8275cd62cb084da29d8a09af simplyblock_core/snapshot_retention.py
f1bc395dbd5223ae85a7efe1fee9b9cb simplyblock_core/snode_client.py
b12f37e2116565a4801be071c6a2fc10 simplyblock_core/storage_node_ops.py
cc67f35ed45f89fa61d44fc74069898b simplyblock_core/test/conftest.py
4e36ab773d8359225f213cecaf429aab simplyblock_core/test/test_ana_namespace_scope.py
a77e777d1924e7964788ab3e1624b9b3 simplyblock_core/test/test_async_delete_poll.py
93ee14f68659902bb5eb33efabdb7039 simplyblock_core/test/test_backpressure_safety_valve.py
a99d0eb13088fa96da90263687413d29 simplyblock_core/test/test_chain_lock_scope.py
4ebd88bc0d2f073317bebe6398a92023 simplyblock_core/test/test_connect_path_resolution.py
0fdd9f09d496833cbf4450237868243f simplyblock_core/test/test_del_sync_gate_release.py
5b6b39afa4d99b0f3185f7d071178f28 simplyblock_core/test/test_delete_absent_is_done.py
1739de1f19e94c6af8368e0d169be4bf simplyblock_core/test/test_failback_chain_parent.py
b2f945c83409c635074eb2179036e043 simplyblock_core/test/test_failover_clone_race.py
6cd40edbbf823f2d5e8482c3cd39f720 simplyblock_core/test/test_failover_snapshot_selection.py
f202c98493ee5e1e182dd902b40eccb2 simplyblock_core/test/test_failover_target.py
cef1f86b3ef92e3de9a181555edbd587 simplyblock_core/test/test_internal_snapshot_backpressure.py
d394ebf8b8c7e5451817fa4ec07d000d simplyblock_core/test/test_internal_snapshot_scheduler.py
51ab8b315c56ddebb6524922d1f05c03 simplyblock_core/test/test_internal_subsystem_exemption.py
cbc0dd39dd808c076c3b6a0de6e97eea simplyblock_core/test/test_jc_dual_node.py
98a25a8b439113f8730b070e32a68151 simplyblock_core/test/test_lvstore_mutation_lock.py
494ffa54376289a7a3746d003291a785 simplyblock_core/test/test_models.py
468f1f2ee94262aea2a960e1ba79a519 simplyblock_core/test/test_pool_id_or_name.py
8eee2578bf5bffcd5b682212499e8b61 simplyblock_core/test/test_replication_backlog_chain.py
4df442ad73560df92de19c3f02a8499a simplyblock_core/test/test_replication_backlog_destination.py
858ad1c5544632989bf9b3a71ced0019 simplyblock_core/test/test_replication_backlog_reporting.py
87fc1665b2d89826c316e5b9adc6dc06 simplyblock_core/test/test_replication_chain_completeness.py
d6b2259d2fd45d8b672c58dfdcf333d4 simplyblock_core/test/test_replication_chain_predecessor.py
142c27321f4107cb8dcd6f80cebc6d71 simplyblock_core/test/test_replication_commit.py
27c3901c3b17efe712cfeb0441b750ed simplyblock_core/test/test_replication_destination_resolution.py
2aef47c5d33aa862031042362abb4552 simplyblock_core/test/test_replication_failback.py
cbcedc215d05ce9d13e5aa1297da65c4 simplyblock_core/test/test_replication_failback_pool.py
efdcf72be12304a4d6ea97570052b564 simplyblock_core/test/test_replication_final_step.py
ec169938b233d87ed30f5356867b1a02 simplyblock_core/test/test_replication_health.py
428cce0e1f68056e361ec7e7affa4861 simplyblock_core/test/test_replication_leader_follow.py
7fd80e9a3b36f0cbe9f8204d67fccbb7 simplyblock_core/test/test_replication_models.py
674100457e09a93981f8d1bbeca581b4 simplyblock_core/test/test_replication_policies.py
142f851c9f1a973a3b69ad6587ab084f simplyblock_core/test/test_replication_progress.py
c5d56733f8e64b4934a83dfa773dd9e8 simplyblock_core/test/test_replication_relationship_and_delete_source.py
9deb75aea6214d0dc6ad81527332acb2 simplyblock_core/test/test_replication_runner_resilience.py
722b01fc4a5a39f1165d01d365fdccfa simplyblock_core/test/test_replication_source_leader.py
d060d8d46b38d9fca593db7206f0d33a simplyblock_core/test/test_shutdown_task_guard.py
78de0df795baaf32863f4e6916a34967 simplyblock_core/test/test_snapshot_chain_target.py
d6e30188e4eb37f5f54e72c031ca1ccd simplyblock_core/test/test_snapshot_instance_handoff.py
98c1f729b8a91aadcfe5bd15ac5466b3 simplyblock_core/test/test_snapshot_monitor_live_clone.py
7088fd00c8673421cb9d100ec7612b16 simplyblock_core/test/test_snapshot_retention.py
9a95119047fe465944e67c499cd925b3 simplyblock_core/test/test_sync_delete_peer.py
33b8ddf70012155e20620d95b495dfcd simplyblock_core/test/test_tasks_runner_replication_final.py
bc53f292fae277b435d6b1952cdc6daf simplyblock_core/test/test_transfer_hub_heal.py
0c9a3e9dc14315ea372a1f631802c354 simplyblock_core/test/test_utils.py
9e4fa1baf48be1c833f34da643b1a81f simplyblock_core/utils/__init__.py
fc87695c06fb33ca74293dae12f6bb15 simplyblock_core/utils/dial_backoff.py
4d255423494ff9d96f38b2cae3175195 simplyblock_core/utils/helpers.py
70c1bf1532768cc2ff86d061b4b8d17b simplyblock_core/utils/hublvol_reconnect.py
7dcbc009ce235b4df483d38d5b34c13b simplyblock_core/utils/nvme.py
b0b3ac01438e9bbea6b7eeb678f4f52f simplyblock_core/utils/pci.py
9d2effb926da5d0e36be1e86778bbdde simplyblock_core/utils/port_block.py
b45bc54582bfbe1bea24580cf20e8010 simplyblock_core/utils/secrets.py
57af18bc39674a7a16cbb7bc9a8684b5 simplyblock_core/utils/ttl_cache.py
dbf1184940d69c0d5bf7a1f22f000b63 simplyblock_core/workers/cleanup_foundationdb.py
44 changes: 41 additions & 3 deletions scripts/aws_dual_node_outage_soak_multipath.py
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,18 @@
"fio: pid=",
"Killed",
"Terminated",
# fio prints verify failures WITHOUT the "fio: " prefix -- the line reads
# "verify: bad magic header a8a4, wanted acca at file ...". Neither
# "fio: verify" nor "verify failed" matches that, so run 20260825_155730
# corrupted vol6 at 18:53 and vol2 at 19:43 and the soak kept applying
# outages for another two hours, reporting PASS each time, until vol4's
# fio *process* died at 20:49 and the rc-file branch finally caught it.
# A data verification failure is the single most important thing this
# harness can find; it must never again depend on fio also crashing.
"verify: bad",
"bad magic header",
"bad header offset",
"verify: got",
)
#: fio stderr markers for a --max_latency violation. Fatal in phase 1 (a
#: single-NIC outage must be transparent), counted in phase 2 (promotion
Expand Down Expand Up @@ -206,6 +218,14 @@ def parse_args():
help="Seconds the NIC stays down on all nodes (default 30).")
nic.add_argument("--nic-phase-settle", type=int, default=30,
help="Seconds to wait after NIC restore before verifying (default 30).")
nic.add_argument("--no-nic-phase", action="store_true",
help="Disable phase 1 (the all-nodes single-NIC outage) "
"entirely. REQUIRED on a single-data-NIC, non-multipath "
"cluster: with one data NIC per node, phase 1 takes that "
"NIC down on every node at once and isolates the whole "
"cluster instead of exercising path redundancy. Note that "
"--nic-phase-every 0 does NOT disable phase 1 -- it means "
"'once, on iteration 1'.")
nic.add_argument("--nic-phase-every", type=int, default=1,
help="Run the NIC phase every N iterations. 0 = once, before the "
"first pair only (default 1).")
Expand Down Expand Up @@ -1220,8 +1240,15 @@ def start_fio(self, volumes):
if args.fio_max_latency > 0:
fio_cmd += f"--max_latency={args.fio_max_latency}s "
if args.fio_verify:
# verify_dump writes <file>.<offset>.received / .expected on a
# mismatch. Without it a verify failure gives only fio's one
# line, and every corruption so far has died with the returned
# bytes unidentified -- we could not tell stale data from
# parity noise from a neighbouring block, and the volumes are
# on instance store so they vanish when the fleet is stopped.
# The dumps are 4 KiB each and only appear on failure.
fio_cmd += (f"--verify={args.fio_verify} --verify_fatal=1 "
f"--verify_backlog=1024 ")
f"--verify_backlog=1024 --verify_dump=1 ")
fio_cmd += f"--output={shlex.quote(volume['fio_log'])}"

start_script = (
Expand Down Expand Up @@ -1602,6 +1629,12 @@ def _rpc_json(subcmd, what):
# node passive. active_passive means one NIC carries all hub IO.
to_check = [(b, "hublvol") for b in hublvol_bdevs]
to_check += [(b, "remote") for b in remote_bdevs[:max(0, self.args.policy_sample)]]
# Only meaningful with more than one path: on a single-data-NIC
# (non-multipath) cluster a bdev legitimately reports active_passive,
# and asserting active_active there would make every bdev a "problem",
# so the heal gate could never converge.
if len(self.args.data_nics) < 2:
to_check = []
for bdev_name, kind in to_check:
try:
bdevs = _rpc_json(f"bdev_get_bdevs -b {shlex.quote(bdev_name)}",
Expand Down Expand Up @@ -2152,8 +2185,13 @@ def run(self):
+ ", ".join(f"{n['uuid'][:12]}:{n['status']}" for n in current))
uuids = [n["uuid"] for n in current]

nic_due = (iteration == 1 if args.nic_phase_every == 0
else (iteration - 1) % args.nic_phase_every == 0)
# --nic-phase-every 0 means "once, on iteration 1"; only
# --no-nic-phase disables phase 1 outright, which is required on a
# single-data-NIC cluster where taking "one" NIC down on every node
# isolates the whole cluster instead of testing path redundancy.
nic_due = ((not args.no_nic_phase)
and (iteration == 1 if args.nic_phase_every == 0
else (iteration - 1) % args.nic_phase_every == 0))
if nic_due:
nic = args.data_nics[(iteration - 1) % len(args.data_nics)]
if self.run_nic_phase(iteration, nic, uuids):
Expand Down
Loading
Loading