Skip to content

Commit 079585c

Browse files
committed
Fix format
1 parent 30fcd68 commit 079585c

1 file changed

Lines changed: 9 additions & 9 deletions

File tree

website_and_docs/content/blog/2026/selenium-grid-4-41-deep-dive.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ spec:
145145
claimName: selenium-assets
146146
```
147147

148-
Event bus connectivity (host, ports, registration secret) is passed as environment variables. Browser stereotypes and Kubernetes-specific tuning (`termination-grace-period`, `assets-path`, resource overrides) live entirely in the TOML file inside the ConfigMap, keeping them independently updatable without redeploying the Node.
148+
Event bus connectivity (host), and node config (session timeout) are passed as environment variables. Browser stereotypes live entirely in the TOML file inside the ConfigMap, keeping them independently updatable without redeploying the Node.
149149

150150
The [RBAC manifest](https://github.com/SeleniumHQ/docker-selenium/blob/4.41.0-20260222/kubernetes/DynamicGrid/BaseConfig/rbac.yaml) grants the Node the minimal permissions needed — `create`, `delete`, and `get` on `pods` and `pods/log` in the configured namespace. No cluster-wide permissions needed.
151151

@@ -158,21 +158,21 @@ This means the browser Pods land on exactly the same node pool, zone, or hardwar
158158
The practical implication: you can deploy **multiple Dynamic Grid Nodes**, each pinned to a different cluster segment via their own `nodeSelector` or `affinity`, and all registered to the same Hub. The Hub distributes session requests across them, and each Node provisions browser Pods that inherit its own placement constraints.
159159

160160
```
161-
┌─────────────────────────────────┐
161+
┌─────────────────────────────────-
162162
│ Hub │
163-
└──────┬──────────────┬───────────┘
163+
└──────┬──────────────┬───────────-
164164
│ │
165-
┌────────────────▼──┐ ┌───▼────────────────┐
165+
┌────────────────▼──┐ ┌───-▼────────────────┐
166166
│ NodeKubernetes │ │ NodeKubernetes │
167167
│ nodeSelector: │ │ nodeSelector: │
168168
│ zone=us-west │ │ zone=us-east │
169-
└────────┬──────────┘ └────────┬───────────┘
169+
└────────┬──────────┘ └────────-┬───────────┘
170170
│ inherits spec │ inherits spec
171-
┌─────────▼──────────┐ ┌──────────▼──────────┐
171+
┌─────────▼──────────┐ ┌──────────-▼──────────┐
172172
│ browser Pod │ │ browser Pod │
173173
│ (us-west, same │ │ (us-east, same │
174174
│ tolerations...) │ │ tolerations...) │
175-
└────────────────────┘ └─────────────────────┘
175+
└────────────────────┘ └─────────────────────-
176176
```
177177

178178
Teams can keep multiple Dynamic Nodes on standby — lightweight processes consuming minimal resources — and let the browser Pods scale horizontally on demand within each segment. This approach fits naturally into cluster autoscaler workflows: idle Nodes hold their spot in the cluster; browser Jobs drive the actual compute scaling.
@@ -229,7 +229,7 @@ The Node validates the event, enriches it with `nodeId`, `nodeUri`, and `timesta
229229

230230
### Multi-language client support
231231

232-
Firing events is surfaced directly on the driver instance in **all five official language bindings**. No manual HTTP wiring needed — the driver knows the session ID and Grid URL:
232+
Firing events is surfaced directly on the driver instance in **all five official language bindings** (required binding version 4.41.0+ also). No manual HTTP wiring needed — the driver knows the session ID and Grid URL:
233233

234234
```python
235235
# Python
@@ -329,7 +329,7 @@ Set `SE_UPLOAD_FAILURE_SESSION_ONLY=true` and the uploader will **skip cloud upl
329329
A session is treated as failed under two conditions:
330330
331331
1. **Custom failure event fired** — your test framework calls `driver.fire_session_event("test:failed", ...)` during the session. The sidecar matches the event type against a configurable list of failure patterns.
332-
2. **Abnormal close** — the session timed out or crashed without a clean `session-closed` event.
332+
2. **Abnormal close reason** — the `session-closed` event is received but carries a `reason` other than `QUIT_COMMAND`. Currently, that means `TIMEOUT` (session exceeded the configured timeout) or `NODE_REMOVED` (the node was forcibly removed from the Grid). A clean `driver.quit()` sends `QUIT_COMMAND` and is never treated as a failure.
333333
334334
The failure event type matching is controlled by `SE_UPLOAD_FAILURE_SESSION_EVENTS` (default: `:failed,:failure`). The match is a substring check on the event type, so the default catches `test:failed`, `suite:failed`, `step:failure`, etc. You can extend the list for your own conventions:
335335

0 commit comments

Comments
 (0)