Skip to content

SBR | split-brain storage arbitration test (OCP-88877) - #29

Merged
openshift-merge-bot[bot] merged 3 commits into
medik8s:mainfrom
maximunited:feat/sbr-ocp88877-split-brain
Jun 24, 2026
Merged

SBR | split-brain storage arbitration test (OCP-88877)#29
openshift-merge-bot[bot] merged 3 commits into
medik8s:mainfrom
maximunited:feat/sbr-ocp88877-split-brain

Conversation

@maximunited

Copy link
Copy Markdown

Summary

  • Adds split-brain/storage arbitration test (OCP-88877)
  • Verifies only the storage-isolated node is fenced by SBR via NHC; healthy witness nodes remain schedulable and their boot IDs unchanged
  • Requires NHC CRD installed and 3+ eligible worker nodes; skips otherwise
  • Adds NHC/injection timing constants to sbrparams/const.go

Test plan

  • make vet passes
  • bash scripts/golangci-lint.sh passes (0 issues)
  • /test 4.22-konflux-e2e-sbr-aws-odf

@maximunited

Copy link
Copy Markdown
Author

/test 4.22-konflux-e2e-sbr-aws-odf

@openshift-ci
openshift-ci Bot requested review from lyfofvipin and rbartal June 21, 2026 00:09
@coderabbitai

coderabbitai Bot commented Jun 21, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@maximunited, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 30 minutes and 29 seconds. Learn how PR review limits work.

Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file).

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based credits.

🚦 How do rate limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan refill rate.

For paid Pro and Pro+ PR reviews, CodeRabbit uses rolling per-developer review limits. Reviews become available again as older review attempts age out of the rolling limit window.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 71bcb6a9-f9a5-4170-abee-af032e27f3b9

📥 Commits

Reviewing files that changed from the base of the PR and between b17c006 and 2b18ea5.

📒 Files selected for processing (5)
  • tests/sbr-operator/internal/sbrparams/const.go
  • tests/sbr-operator/tests/remediation.go
  • tests/sbr-operator/tests/sbr.go
  • tests/sbr-operator/tests/split_brain.go
  • tests/sbr-operator/tests/watchdog.go
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@qodo-2-for-medik8s

qodo-2-for-medik8s Bot commented Jun 21, 2026

Copy link
Copy Markdown

PR-Agent: could not find a component named 4.22-konflux-e2e-sbr-aws-odf in a supported language in this PR.

@qodo-2-for-medik8s

Copy link
Copy Markdown

PR Summary by Qodo

Add SBR split-brain (storage arbitration) and CR lifecycle functional tests
🧪 Tests ✨ Enhancement 🕐 40+ Minutes

Grey Divider

Description

• Add functional tests for SBR CR lifecycle and split-brain storage arbitration via NHC.
• Validate only the storage-isolated node is fenced; witness nodes stay schedulable/unchanged.
• Centralize SBR/NHC timing, naming, and helper builders for reliable test setup/cleanup.
Diagram

graph TD
  T1["tests/split_brain.go"] --> SBRC[("SBRC CR")] --> AG["Agent DaemonSet"] --> SBR[("SBR CR")]
  T1 --> INJ["Injector pod"] --> NODE["Isolated worker"] --> NHC[("NHC CR")] --> SBR
  SBR --> NODE --> T1
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Use a dedicated injector DaemonSet (nodeSelector=target) instead of a single pod
  • ➕ More deterministic scheduling onto the target node across restarts
  • ➕ Easier to ensure cleanup via ownerReferences/GC
  • ➖ More objects to manage and wait for in the test
  • ➖ Still requires privileged/host access; similar security posture
2. Use a chaos/fault-injection operator (e.g., NetworkChaos) for network isolation
  • ➕ Cleaner abstraction for network disruption with built-in rollback
  • ➕ Potentially less bespoke iptables logic in tests
  • ➖ Introduces a new dependency/operator requirement for the test environment
  • ➖ May not be available/allowed in target CI clusters

Recommendation: Current approach (privileged nsenter + iptables REJECT on CephFS ports) is pragmatic for CI because it avoids extra dependencies and triggers fast, node-local storage loss detection. Keep it, but consider moving injection to a small DaemonSet if pod scheduling/cleanup becomes flaky in practice.

Files changed (5) +973 / -20

Refactor (2) +48 / -20
sbr.goRefactor shared builders and add SBRC readiness helper +48/-2

Refactor shared builders and add SBRC readiness helper

• Moves isNodeSchedulable into a shared location and refactors unstructured CR creation into a generic buildSBRUnstructured helper used by SBRC/SBR builders. Adds waitForSBRCReady to block until the SBRC agent DaemonSet has ready pods before running functional tests.

tests/sbr-operator/tests/sbr.go

watchdog.goRemove duplicate isNodeSchedulable helper (now shared) +0/-18

Remove duplicate isNodeSchedulable helper (now shared)

• Deletes the local isNodeSchedulable implementation and relies on the shared helper moved into sbr.go, reducing duplication across functional tests.

tests/sbr-operator/tests/watchdog.go

Tests (2) +859 / -0
remediation.goAdd StorageBasedRemediation CR lifecycle functional test (OCP-88737) +289/-0

Add StorageBasedRemediation CR lifecycle functional test (OCP-88737)

• Adds an Ordered Ginkgo test that creates a minimal SBRC, creates an SBR CR with empty spec, verifies the controller adds the expected finalizer, and ensures deletion fully removes the CR. Includes defensive cleanup that clears finalizers and ensures the node is not left cordoned.

tests/sbr-operator/tests/remediation.go

split_brain.goAdd split-brain (storage arbitration) fencing test via NHC (OCP-88877) +570/-0

Add split-brain (storage arbitration) fencing test via NHC (OCP-88877)

• Adds a disruptive functional test that requires NHC CRD and 3+ eligible worker nodes. Creates SBRC with RWX storage class, creates/reuses a NodeHealthCheck, injects CephFS port isolation on a target node via privileged pod/iptables, and asserts only the isolated node is fenced/rebooted while witness nodes remain schedulable with unchanged boot IDs.

tests/sbr-operator/tests/split_brain.go

Other (1) +66 / -0
const.goAdd SBR/NHC constants for functional and split-brain tests +66/-0

Add SBR/NHC constants for functional and split-brain tests

• Introduces constants for SBR finalizer name, SBRC/DaemonSet naming, NHC API details, split-brain resource names, and timing/poll intervals. Centralizes timeouts for SBRC readiness, storage-unhealthy detection, NHC→SBR creation, and node reboot checks.

tests/sbr-operator/internal/sbrparams/const.go

@qodo-2-for-medik8s

qodo-2-for-medik8s Bot commented Jun 21, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (2) 📘 Rule violations (0) 📎 Requirement gaps (0) 🎨 UX issues (0) 🔗 Cross-repo conflicts (0) 📜 Skill insights (0)

Grey Divider


Action required

1. Unsafe NHC reuse 🐞 Bug ☼ Reliability
Description
If a NodeHealthCheck named test-nhc-sbr-split-brain already exists, the test reuses it without
validating or reconciling its spec and also will not delete it in cleanup. This can make the test
non-deterministic and can trigger remediation outside the intended scenario if the preexisting NHC
has different selectors or templates.
Code

tests/sbr-operator/tests/split_brain.go[R234-266]

+			By("Creating NodeHealthCheck CR for split-brain test (or reusing an existing one)")
+
+			existingNHC := &unstructured.Unstructured{}
+			existingNHC.SetGroupVersionKind(schema.GroupVersionKind{
+				Group:   sbrparams.NHCAPIGroup,
+				Version: sbrparams.NHCAPIVersion,
+				Kind:    "NodeHealthCheck",
+			})
+
+			getErr := APIClient.Get(context.TODO(),
+				types.NamespacedName{Name: sbrparams.NHCSplitBrainTestName}, existingNHC)
+
+			switch {
+			case k8serrors.IsNotFound(getErr):
+				nhcCR = buildSplitBrainNHC()
+
+				nhcCreateErr := APIClient.Create(context.TODO(), nhcCR)
+				Expect(nhcCreateErr).ToNot(HaveOccurred(),
+					"Failed to create NodeHealthCheck CR %q", sbrparams.NHCSplitBrainTestName)
+
+				nhcCreatedByUs = true
+
+			case getErr != nil:
+				Expect(getErr).ToNot(HaveOccurred(),
+					"Unexpected error fetching NodeHealthCheck %q", sbrparams.NHCSplitBrainTestName)
+
+			default:
+				nhcCR = existingNHC
+				nhcCreatedByUs = false
+
+				GinkgoWriter.Printf("NodeHealthCheck %q already exists; using it as-is\n",
+					sbrparams.NHCSplitBrainTestName)
+			}
Relevance

⭐⭐⭐ High

Team repeatedly accepts test isolation/cleanup hardening to avoid leaked or unsafe resources (PRs
#10,#16).

PR-#10
PR-#16

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The test explicitly falls back to reusing the existing NHC "as-is" and only deletes the NHC during
cleanup if it was created by this run.

tests/sbr-operator/tests/split_brain.go[234-266]
tests/sbr-operator/tests/split_brain.go[280-288]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
The test reuses an existing `NodeHealthCheck` with the fixed name `test-nhc-sbr-split-brain` without validating/overwriting its spec, and it only deletes the NHC when it created it.

### Issue Context
This is a cluster-scoped object whose spec controls remediation selection/behavior; reusing an arbitrary existing instance breaks test isolation.

### Fix Focus Areas
- tests/sbr-operator/tests/split_brain.go[234-266]
- tests/sbr-operator/tests/split_brain.go[280-288]

### Suggested approach
Choose one of:
- **Best isolation:** Create a uniquely named NHC per run (include a random suffix), and always delete it in cleanup.
- **If name must be stable:** When the object exists, `Patch`/`Update` it to the expected spec (selector, unhealthyConditions, remediationTemplate, durations) and record the previous spec to restore it in cleanup.
- If the existing object differs and you cannot safely reconcile it, `Skip()` (or fail) with a clear message rather than using it as-is.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Iptables flush cleanup ✓ Resolved 🐞 Bug ☼ Reliability
Description
split_brain.go uses iptables -F for cleanup, which flushes the host filter table rather than
removing only the rules inserted by the test and can disrupt node networking for subsequent tests.
Cleanup should delete only the specific rules (or a dedicated chain) created by this test.
Code

tests/sbr-operator/tests/split_brain.go[R303-308]

+			cleanupPod, pullErr := pod.Pull(APIClient, injectorPodName, medik8sparams.OperatorNs)
+			if pullErr == nil {
+				_, flushErr := cleanupPod.ExecCommand([]string{
+					"nsenter", "--target", "1", "--net",
+					"iptables", "-F",
+				})
Relevance

⭐⭐⭐ High

Safety-oriented test hardening is commonly accepted (resource-leak and non-destructive safeguards
accepted in PRs #10,#16).

PR-#10
PR-#16

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The test injects specific REJECT rules into INPUT/OUTPUT but cleans up by flushing the entire table
(iptables -F) in both AfterAll and DeferCleanup, which is broader than necessary and can remove
unrelated rules.

tests/sbr-operator/tests/split_brain.go[303-308]
tests/sbr-operator/tests/split_brain.go[333-338]
tests/sbr-operator/tests/split_brain.go[390-403]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
The split-brain test injects a small set of iptables REJECT rules, but cleanup uses `iptables -F`, which flushes *all* rules in the filter table in the host network namespace.

### Issue Context
The test inserts specific rules with `iptables -I ... -j REJECT`, so cleanup can (and should) remove only those specific rules.

### Fix Focus Areas
- tests/sbr-operator/tests/split_brain.go[301-346]
- tests/sbr-operator/tests/split_brain.go[385-409]

### Suggested approach
- Replace `iptables -F` with deterministic removal of only the rules this test adds.
 - Option A: create a dedicated chain (e.g., `SBR_SPLIT_BRAIN_TEST`), insert a single jump from INPUT/OUTPUT to that chain, add REJECT rules inside it, and delete the chain/jumps on cleanup.
 - Option B: delete the exact rules using `iptables -D ...` (in reverse insertion order), possibly guarded with `iptables -C` checks.
- Keep cleanup idempotent (safe to run multiple times).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. RWX discovery too broad ✓ Resolved 🐞 Bug ≡ Correctness
Description
discoverRWXStorageClass() is documented as returning an RWX-capable StorageClass but will accept any
provisioner containing "rbd" and uses it for sharedStorageClass. This can select an unsuitable
class and misconfigure the split-brain SBRC, causing the test to fail or behave inconsistently
across clusters.
Code

tests/sbr-operator/tests/split_brain.go[R28-50]

+// discoverRWXStorageClass returns the name of an RWX-capable storage class.
+// SBR_STORAGE_CLASS env var overrides auto-discovery.
+func discoverRWXStorageClass() string {
+	if sc := os.Getenv("SBR_STORAGE_CLASS"); sc != "" {
+		GinkgoWriter.Printf("Using SBR_STORAGE_CLASS=%q from environment\n", sc)
+
+		return sc
+	}
+
+	scList, err := APIClient.StorageV1Interface.StorageClasses().List(context.TODO(), metav1.ListOptions{})
+	if err != nil || len(scList.Items) == 0 {
+		return ""
+	}
+
+	for _, storClass := range scList.Items {
+		prov := strings.ToLower(storClass.Provisioner)
+		if strings.Contains(prov, "cephfs") || strings.Contains(prov, "nfs") ||
+			strings.Contains(prov, "rbd") {
+			GinkgoWriter.Printf("Auto-discovered storage class %q (provisioner: %s)\n",
+				storClass.Name, storClass.Provisioner)
+
+			return storClass.Name
+		}
Relevance

⭐⭐ Medium

No close precedent found; team often hardens tests for cross-cluster reliability (accepted
cleanup/safety in PRs #10,#16).

PR-#10
PR-#16

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The helper is explicitly labeled RWX but includes an rbd match, and its result is immediately used
as sharedStorageClass for the SBRC used by the test.

tests/sbr-operator/tests/split_brain.go[28-50]
tests/sbr-operator/tests/split_brain.go[213-224]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`discoverRWXStorageClass()` claims to find an RWX-capable StorageClass, but its heuristic can select a class that does not actually meet the test's RWX/shared-storage needs.

### Issue Context
The returned storage class is used directly for `sharedStorageClass` when creating the split-brain SBRC.

### Fix Focus Areas
- tests/sbr-operator/tests/split_brain.go[28-54]
- tests/sbr-operator/tests/split_brain.go[213-224]

### Suggested approach
- Tighten selection:
 - Prefer known RWX-friendly provisioners (e.g., cephfs/nfs) and remove the `rbd` substring match, **or**
 - Actively validate the candidate by creating a small PVC and verifying it can be mounted ReadWriteMany across nodes (or otherwise prove it satisfies the test's shared-storage requirements).
- If auto-discovery remains ambiguous, require `SBR_STORAGE_CLASS` explicitly and `Skip()` with a clear message.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

4. Reboot timeout doubled 🐞 Bug ➹ Performance
Description
The split-brain test uses NodeRebootTimeout for both the NotReady wait and the Ready wait, so
total waiting can be ~2× the constant even though the constant is documented as a full reboot-cycle
bound. This inflates suite runtime and delays failure detection when a node never transitions.
Code

tests/sbr-operator/tests/split_brain.go[R475-517]

+				By(fmt.Sprintf("Waiting for target node %q: NotReady → Ready (reboot cycle)", targetNodeName))
+
+				// Phase 1: wait for NotReady.
+				Eventually(func() error {
+					node, nodeErr := APIClient.CoreV1Interface.Nodes().Get(
+						context.TODO(), targetNodeName, metav1.GetOptions{})
+					if nodeErr != nil {
+						return nodeErr
+					}
+
+					for _, cond := range node.Status.Conditions {
+						if cond.Type == corev1.NodeReady && cond.Status != corev1.ConditionTrue {
+							return nil
+						}
+					}
+
+					return fmt.Errorf("node %s is still Ready; waiting for NotReady", targetNodeName)
+				}, sbrparams.NodeRebootTimeout, sbrparams.NodeRebootPollInterval).Should(Succeed(),
+					"Target node %q must become NotReady during SBR-triggered reboot", targetNodeName)
+
+				GinkgoWriter.Printf("Node %q is NotReady — reboot in progress\n", targetNodeName)
+
+				// Phase 2: wait for Ready.
+				Eventually(func() error {
+					node, nodeErr := APIClient.CoreV1Interface.Nodes().Get(
+						context.TODO(), targetNodeName, metav1.GetOptions{})
+					if nodeErr != nil {
+						return nodeErr
+					}
+
+					for _, cond := range node.Status.Conditions {
+						if cond.Type == corev1.NodeReady {
+							if cond.Status == corev1.ConditionTrue {
+								return nil
+							}
+
+							return fmt.Errorf("node %s: Ready=%s", targetNodeName, cond.Status)
+						}
+					}
+
+					return fmt.Errorf("node %s has no Ready condition", targetNodeName)
+				}, sbrparams.NodeRebootTimeout, sbrparams.NodeRebootPollInterval).Should(Succeed(),
+					"Target node %q must return to Ready after SBR-triggered reboot", targetNodeName)
Relevance

⭐⭐ Medium

No direct history on reducing timeouts; some flake-hardening suggestions were rejected (PR #10),
making outcome uncertain.

PR-#10

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The constant is described as covering a full reboot cycle, but the test applies it to two sequential
waits, which can extend total wall time substantially.

tests/sbr-operator/internal/sbrparams/const.go[137-141]
tests/sbr-operator/tests/split_brain.go[475-517]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`NodeRebootTimeout` is documented as the maximum time for a full reboot cycle, but the test uses it twice (NotReady phase + Ready phase), effectively doubling the budget.

### Issue Context
Two sequential `Eventually` blocks each get the full timeout.

### Fix Focus Areas
- tests/sbr-operator/internal/sbrparams/const.go[137-141]
- tests/sbr-operator/tests/split_brain.go[475-517]

### Suggested approach
- Use a single overall deadline/budget across both phases (compute remaining time for phase 2), **or**
- Split the constant into `NodeRebootToNotReadyTimeout` and `NodeRebootToReadyTimeout`, **or**
- Update the constant comment to reflect that it is per-phase, not per-cycle (if that is intentional).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Qodo Logo

Comment thread tests/sbr-operator/tests/split_brain.go
Comment thread tests/sbr-operator/tests/split_brain.go Outdated
Comment thread tests/sbr-operator/tests/split_brain.go
maximunited added a commit to maximunited/medik8s-system-tests that referenced this pull request Jun 21, 2026
…etion on creation (PR medik8s#29 review)

- Replace iptables -F (flushes all rules) with targeted iptables -D
  for each injected CephFS rule in both DeferCleanup and AfterAll
- Remove rbd from discoverRWXStorageClass provisioner filter; rbd
  (Ceph block device) is not RWX-capable, only cephfs and nfs qualify
- NHC deletion already correctly gated by nhcCreatedByUs (no change needed)
@maximunited

Copy link
Copy Markdown
Author

Fixed Qodo findings: (1) iptables -D instead of -F, (2) removed rbd from RWX discovery, (3) nhcCreated only true when Create succeeds.

@maximunited

Copy link
Copy Markdown
Author

/test 4.22-konflux-e2e-sbr-aws-odf

@qodo-2-for-medik8s

qodo-2-for-medik8s Bot commented Jun 21, 2026

Copy link
Copy Markdown

PR-Agent: could not find a component named 4.22-konflux-e2e-sbr-aws-odf in a supported language in this PR.

@maximunited

Copy link
Copy Markdown
Author

/test 4.22-konflux-e2e-sbr-aws-odf

@qodo-2-for-medik8s

qodo-2-for-medik8s Bot commented Jun 21, 2026

Copy link
Copy Markdown

PR-Agent: could not find a component named 4.22-konflux-e2e-sbr-aws-odf in a supported language in this PR.

@maximunited
maximunited force-pushed the feat/sbr-ocp88877-split-brain branch from 3568ebb to 3778008 Compare June 21, 2026 09:30
@maximunited

Copy link
Copy Markdown
Author

/test 4.22-konflux-e2e-sbr-aws-odf

@qodo-2-for-medik8s

qodo-2-for-medik8s Bot commented Jun 21, 2026

Copy link
Copy Markdown

PR-Agent: could not find a component named 4.22-konflux-e2e-sbr-aws-odf in a supported language in this PR.

@maximunited

Copy link
Copy Markdown
Author

/test 4.22-konflux-e2e-sbr-aws-odf

@qodo-2-for-medik8s

qodo-2-for-medik8s Bot commented Jun 21, 2026

Copy link
Copy Markdown

PR-Agent: could not find a component named 4.22-konflux-e2e-sbr-aws-odf in a supported language in this PR.

@maximunited
maximunited force-pushed the feat/sbr-ocp88877-split-brain branch from 3778008 to c82728e Compare June 21, 2026 11:25
@maximunited

Copy link
Copy Markdown
Author

/test 4.22-konflux-e2e-sbr-aws-odf

@qodo-2-for-medik8s

qodo-2-for-medik8s Bot commented Jun 21, 2026

Copy link
Copy Markdown

PR-Agent: could not find a component named 4.22-konflux-e2e-sbr-aws-odf in a supported language in this PR.

@maximunited

Copy link
Copy Markdown
Author

/test 4.22-konflux-e2e-sbr-aws-odf

@qodo-2-for-medik8s

qodo-2-for-medik8s Bot commented Jun 21, 2026

Copy link
Copy Markdown

PR-Agent: could not find a component named 4.22-konflux-e2e-sbr-aws-odf in a supported language in this PR.

Comment thread tests/sbr-operator/tests/split_brain.go Outdated
Comment thread tests/sbr-operator/tests/split_brain.go Outdated
Comment thread tests/sbr-operator/tests/split_brain.go Outdated
Comment thread tests/sbr-operator/internal/sbrparams/const.go Outdated
Comment thread tests/sbr-operator/tests/split_brain.go Outdated
Comment thread tests/sbr-operator/tests/watchdog.go
Comment thread tests/sbr-operator/tests/split_brain.go
Comment thread tests/sbr-operator/tests/split_brain.go
Comment thread tests/sbr-operator/tests/split_brain.go
@maximunited
maximunited force-pushed the feat/sbr-ocp88877-split-brain branch from c82728e to 62983b1 Compare June 22, 2026 13:58
@maximunited

Copy link
Copy Markdown
Author

/test 4.22-konflux-e2e-sbr-aws-odf

@qodo-2-for-medik8s

qodo-2-for-medik8s Bot commented Jun 22, 2026

Copy link
Copy Markdown

PR-Agent: could not find a component named 4.22-konflux-e2e-sbr-aws-odf in a supported language in this PR.

Verifies only storage-isolated node is fenced; healthy nodes untouched.
Fixes: pod name limit 63 (not 253), CephFS-only RWX discovery, nsenter --
separator in injection rules, watchdog.go simplify to strings.Fields,
doc comment, constant naming, deterministic node sorting.

Polarion: OCP-88877
@maximunited
maximunited force-pushed the feat/sbr-ocp88877-split-brain branch 3 times, most recently from 116e59e to 04a53b2 Compare June 23, 2026 12:07
@maximunited

Copy link
Copy Markdown
Author

/retest

@maximunited
maximunited force-pushed the feat/sbr-ocp88877-split-brain branch from 04a53b2 to 0c0fc8c Compare June 23, 2026 12:21
@maximunited

Copy link
Copy Markdown
Author

/retest

@maximunited
maximunited force-pushed the feat/sbr-ocp88877-split-brain branch from 0c0fc8c to 5e85c0a Compare June 23, 2026 12:42
@maximunited

Copy link
Copy Markdown
Author

/retest

@maximunited

Copy link
Copy Markdown
Author

/test 4.22-konflux-e2e-sbr-aws-odf

@qodo-2-for-medik8s

qodo-2-for-medik8s Bot commented Jun 23, 2026

Copy link
Copy Markdown

PR-Agent: could not find a component named 4.22-konflux-e2e-sbr-aws-odf in a supported language in this PR.

@gamado gamado left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed for code quality, PR #13 review standards compliance, and efficiency. Build checks all clean (lint 0 issues, vet/gofmt clean). See inline comments below.

Comment thread tests/sbr-operator/tests/split_brain.go
Comment thread tests/sbr-operator/tests/split_brain.go
Comment thread tests/sbr-operator/tests/split_brain.go
Comment thread tests/sbr-operator/tests/split_brain.go
Comment thread tests/sbr-operator/tests/split_brain.go
Comment thread tests/sbr-operator/tests/split_brain.go
Comment thread tests/sbr-operator/tests/split_brain.go
Comment thread tests/sbr-operator/tests/split_brain.go
Comment thread tests/sbr-operator/tests/split_brain.go
@maximunited

Copy link
Copy Markdown
Author

/retest

@maximunited
maximunited force-pushed the feat/sbr-ocp88877-split-brain branch from 91d2dbf to 349a250 Compare June 23, 2026 20:06
@maximunited

Copy link
Copy Markdown
Author

/retest

@maximunited
maximunited force-pushed the feat/sbr-ocp88877-split-brain branch from 349a250 to 6b5d5cc Compare June 23, 2026 20:10
@maximunited

Copy link
Copy Markdown
Author

/retest

@maximunited

Copy link
Copy Markdown
Author

/retest

@maximunited
maximunited force-pushed the feat/sbr-ocp88877-split-brain branch from 6b5d5cc to 2b18ea5 Compare June 23, 2026 20:15
@maximunited

Copy link
Copy Markdown
Author

/test 4.22-konflux-e2e-sbr-aws-odf

@qodo-2-for-medik8s

qodo-2-for-medik8s Bot commented Jun 23, 2026

Copy link
Copy Markdown

PR-Agent: could not find a component named 4.22-konflux-e2e-sbr-aws-odf in a supported language in this PR.

@ugreener ugreener left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/lgtm

@openshift-ci openshift-ci Bot added the lgtm label Jun 24, 2026
@openshift-ci

openshift-ci Bot commented Jun 24, 2026

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: maximunited, ugreener

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:
  • OWNERS [maximunited,ugreener]

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@openshift-merge-bot
openshift-merge-bot Bot merged commit 3254d2e into medik8s:main Jun 24, 2026
5 checks passed
ugreener added a commit to ugreener/system-tests that referenced this pull request Jun 24, 2026
Resolve conflicts in SBR files by accepting upstream/main versions.
The split-brain test PR (PR medik8s#29) was merged to main while this NHC PR
was open. All conflicts were in SBR files which this PR does not modify.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants