Skip to content

[🐛 Bug]: Event Bus container unable to use telemetry Java Agents #2714

Open
@quickjp2

Description

@quickjp2

What happened?

Looking to use Azure Application Insights for tracing within my installation of Selenium Grid (fully distributed), instead of using Jaeger. I followed the docs for installing the agent along side the Selenium jar (see AppInsights Agent Docs), and added an initContainer to each of the Selenium Grid component deployments. All of the other components pick-up the AppInsights Java Agent and check-in with Azure, except for the Event Bus. As well, no browser nodes are able to check-in with the Grid.

However, when I remove the initContainer from just the Event Bus deployment, and remove the JAVA_TOOL_OPTIONS and APPLICATIONINSIGHTS_CONNECTION_STRING env vars from just there, the Event Bus does not throw the errors, and browser nodes are able to register with the grid.

Expectations:

  • Event Bus uses the Java agent to self-register within Azure AppInsights application map
  • Nodes are able register

As part of my troubleshooting, I tried using a different Java Agent, and the Event Bus container outputs the same errors (see logs).

Link to Azure AppInsights Agent Docs
Link to Open-Telemetry Agent Docs

Command used to start Selenium Grid with Docker (or Kubernetes)

# Source: selenium-grid/templates/event-bus-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: selenium-grid-selenium-event-bus-config
  namespace: selenium-grid-demo-ns
  labels:
    app.kubernetes.io/managed-by: helm
    app.kubernetes.io/instance: selenium-grid
    app.kubernetes.io/version: 4.29.0-20250303
    app.kubernetes.io/component: selenium-grid-4.29.0-20250303
    helm.sh/chart: selenium-grid-0.40.1
data:
  SE_EVENT_BUS_HOST: "selenium-grid-selenium-event-bus"
  SE_EVENT_BUS_PUBLISH_PORT: "4442"
  SE_EVENT_BUS_SUBSCRIBE_PORT: "4443"
  SE_JAVA_OPTS: "-XX:+UseG1GC -XX:MaxGCPauseMillis=1000 -XX:MaxRAMPercentage=100 -Dos.name=linux"
  start-selenium-grid-eventbus.sh: |-
      #!/usr/bin/env bash

      # set -e: exit asap if a command exits with a non-zero status
      set -e

      echo "Starting Selenium Grid EventBus..."

      function append_se_opts() {
        local option="${1}"
        local value="${2:-""}"
        local log_message="${3:-true}"
        if [[ "${SE_OPTS}" != *"${option}"* ]]; then
          if [ "${log_message}" = "true" ]; then
            echo "Appending Selenium option: ${option} ${value}"
          else
            echo "Appending Selenium option: ${option} $(mask ${value})"
          fi
          SE_OPTS="${SE_OPTS} ${option}"
          if [ ! -z "${value}" ]; then
            SE_OPTS="${SE_OPTS} ${value}"
          fi
        else
          echo "Selenium option: ${option} already set in env variable SE_OPTS. Ignore new option: ${option} ${value}"
        fi
      }

      if [ ! -z "$SE_EVENT_BUS_HOST" ]; then
        echo "Using SE_EVENT_BUS_HOST: ${SE_EVENT_BUS_HOST}"
        HOST_CONFIG="--host ${SE_EVENT_BUS_HOST}"
      fi

      if [ ! -z "$SE_EVENT_BUS_PORT" ]; then
        echo "Using SE_EVENT_BUS_PORT: ${SE_EVENT_BUS_PORT}"
        PORT_CONFIG="--port ${SE_EVENT_BUS_PORT}"
      fi

      if [ ! -z "$SE_OPTS" ]; then
        echo "Appending Selenium options: ${SE_OPTS}"
      fi

      if [ ! -z "$SE_LOG_LEVEL" ]; then
        append_se_opts "--log-level" "${SE_LOG_LEVEL}"
      fi

      if [ ! -z "$SE_HTTP_LOGS" ]; then
        append_se_opts "--http-logs" "${SE_HTTP_LOGS}"
      fi

      if [ ! -z "$SE_STRUCTURED_LOGS" ]; then
        append_se_opts "--structured-logs" "${SE_STRUCTURED_LOGS}"
      fi

      if [ ! -z "$SE_EXTERNAL_URL" ]; then
        append_se_opts "--external-url" "${SE_EXTERNAL_URL}"
      fi

      if [ "${SE_ENABLE_TLS}" = "true" ]; then
        # Configure truststore for the server
        if [ ! -z "$SE_JAVA_SSL_TRUST_STORE" ]; then
          echo "Appending Java options: -Djavax.net.ssl.trustStore=${SE_JAVA_SSL_TRUST_STORE}"
          SE_JAVA_OPTS="$SE_JAVA_OPTS -Djavax.net.ssl.trustStore=${SE_JAVA_SSL_TRUST_STORE}"
        fi
        if [ -f "${SE_JAVA_SSL_TRUST_STORE_PASSWORD}" ]; then
          echo "Getting Truststore password from ${SE_JAVA_SSL_TRUST_STORE_PASSWORD} to set Java options: -Djavax.net.ssl.trustStorePassword"
          SE_JAVA_SSL_TRUST_STORE_PASSWORD="$(cat ${SE_JAVA_SSL_TRUST_STORE_PASSWORD})"
        fi
        if [ ! -z "${SE_JAVA_SSL_TRUST_STORE_PASSWORD}" ]; then
          echo "Appending Java options: -Djavax.net.ssl.trustStorePassword=$(mask ${SE_JAVA_SSL_TRUST_STORE_PASSWORD})"
          SE_JAVA_OPTS="$SE_JAVA_OPTS -Djavax.net.ssl.trustStorePassword=${SE_JAVA_SSL_TRUST_STORE_PASSWORD}"
        fi
        echo "Appending Java options: -Djdk.internal.httpclient.disableHostnameVerification=${SE_JAVA_DISABLE_HOSTNAME_VERIFICATION}"
        SE_JAVA_OPTS="$SE_JAVA_OPTS -Djdk.internal.httpclient.disableHostnameVerification=${SE_JAVA_DISABLE_HOSTNAME_VERIFICATION}"
        # Configure certificate and private key for component communication
        if [ ! -z "$SE_HTTPS_CERTIFICATE" ]; then
          append_se_opts "--https-certificate" "${SE_HTTPS_CERTIFICATE}"
        fi
        if [ ! -z "$SE_HTTPS_PRIVATE_KEY" ]; then
          append_se_opts "--https-private-key" "${SE_HTTPS_PRIVATE_KEY}"
        fi
      fi

      EXTRA_LIBS=""

      if [ "${SE_ENABLE_TRACING}" = "true" ] && [ -n "${SE_OTEL_EXPORTER_ENDPOINT}" ]; then
        EXTERNAL_JARS=$(</external_jars/.classpath.txt)
        [ -n "$EXTRA_LIBS" ] && [ -n "${EXTERNAL_JARS}" ] && EXTRA_LIBS=${EXTRA_LIBS}:
        EXTRA_LIBS="--ext "${EXTRA_LIBS}${EXTERNAL_JARS}
        echo "Tracing is enabled"
        echo "Classpath will be enriched with these external jars : " ${EXTRA_LIBS}
        if [ -n "$SE_OTEL_SERVICE_NAME" ]; then
          SE_OTEL_JVM_ARGS="$SE_OTEL_JVM_ARGS -Dotel.resource.attributes=service.name=${SE_OTEL_SERVICE_NAME}"
        fi
        if [ -n "$SE_OTEL_TRACES_EXPORTER" ]; then
          SE_OTEL_JVM_ARGS="$SE_OTEL_JVM_ARGS -Dotel.traces.exporter=${SE_OTEL_TRACES_EXPORTER}"
        fi
        if [ -n "$SE_OTEL_EXPORTER_ENDPOINT" ]; then
          SE_OTEL_JVM_ARGS="$SE_OTEL_JVM_ARGS -Dotel.exporter.otlp.endpoint=$(envsubst < <(echo ${SE_OTEL_EXPORTER_ENDPOINT}))"
        fi
        if [ -n "$SE_OTEL_JAVA_GLOBAL_AUTOCONFIGURE_ENABLED" ]; then
          SE_OTEL_JVM_ARGS="$SE_OTEL_JVM_ARGS -Dotel.java.global-autoconfigure.enabled=${SE_OTEL_JAVA_GLOBAL_AUTOCONFIGURE_ENABLED}"
        fi
        if [ -n "$SE_OTEL_JVM_ARGS" ]; then
          SE_JAVA_OPTS="$SE_JAVA_OPTS ${SE_OTEL_JVM_ARGS}"
        fi
      else
        if [ -n "${APPLICATIONINSIGHTS_CONNECTION_STRING}" ]; then
          echo "Using Azure App Insights"
          APPLICATIONINSIGHTS_ROLE_NAME="${SE_OTEL_SERVICE_NAME}"
          if [ -n "$SE_OTEL_JAVA_GLOBAL_AUTOCONFIGURE_ENABLED" ]; then
            SE_OTEL_JVM_ARGS="$SE_OTEL_JVM_ARGS -Dotel.java.global-autoconfigure.enabled=${SE_OTEL_JAVA_GLOBAL_AUTOCONFIGURE_ENABLED}"
          fi
          if [ -n "$SE_OTEL_TRACES_EXPORTER" ]; then
            SE_OTEL_JVM_ARGS="$SE_OTEL_JVM_ARGS -Dotel.traces.exporter=${SE_OTEL_TRACES_EXPORTER}"
          fi
          if [ -n "$SE_OTEL_JVM_ARGS" ]; then
            SE_JAVA_OPTS="$SE_JAVA_OPTS ${SE_OTEL_JVM_ARGS}"
          fi
        else
          append_se_opts "--tracing" "false"
          SE_JAVA_OPTS="$SE_JAVA_OPTS -Dwebdriver.remote.enableTracing=false"
          echo "Tracing is disabled"
        fi
      fi

      if [ -n "${SE_JAVA_HTTPCLIENT_VERSION}" ]; then
        SE_JAVA_OPTS="$SE_JAVA_OPTS -Dwebdriver.httpclient.version=${SE_JAVA_HTTPCLIENT_VERSION}"
      fi

      if [ -n "${SE_JAVA_OPTS_DEFAULT}" ]; then
        SE_JAVA_OPTS="${SE_JAVA_OPTS_DEFAULT} $SE_JAVA_OPTS"
      fi

      if [ -n "${JAVA_OPTS:-$SE_JAVA_OPTS}" ]; then
        echo "Using JAVA_OPTS: ${JAVA_OPTS:-$SE_JAVA_OPTS}"
      fi

      function handle_heap_dump() {
        /opt/bin/handle_heap_dump.sh /opt/selenium/logs
      }
      if [ "${SE_JAVA_HEAP_DUMP}" = "true" ]; then
        trap handle_heap_dump ERR SIGTERM SIGINT
      else
        trap handle_heap_dump ERR
      fi

      java ${JAVA_OPTS:-$SE_JAVA_OPTS} \
        -jar /opt/selenium/selenium-server.jar \
        ${EXTRA_LIBS} event-bus \
        --bind-host ${SE_BIND_HOST} \
        ${HOST_CONFIG} \
        ${PORT_CONFIG} \
        ${SE_OPTS}
---
# Source: selenium-grid/templates/event-bus-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: selenium-grid-selenium-event-bus
  namespace: selenium-grid-demo-ns
  labels: &event_bus_labels
    app: selenium-grid-selenium-event-bus
    app.kubernetes.io/name: selenium-grid-selenium-event-bus
    app.kubernetes.io/managed-by: helm
    app.kubernetes.io/instance: selenium-grid
    app.kubernetes.io/version: 4.29.0-20250303
    app.kubernetes.io/component: selenium-grid-4.29.0-20250303
    helm.sh/chart: selenium-grid-0.40.1
spec:
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: selenium-grid-selenium-event-bus
      app.kubernetes.io/instance: selenium-grid
  template:
    metadata:
      labels: *event_bus_labels
      annotations:
        checksum/logging-configmap: 340341e72ca26257adeb74743bec46d3a16f7a94cbe37ac71703d23bf1a4144e
        checksum/server-configmap: bd08b4ce23320321f4ef8e3903ff63e449101c0e0c8bdd76957ff7974b30d37e
        checksum/secrets: 8068a715b5d90514c7f111b339be79a8d9915ad9391c853e2ba8afa1d58a8df6
    spec:
      serviceAccountName: selenium-grid-selenium-serviceaccount
      serviceAccount: selenium-grid-selenium-serviceaccount
      initContainers:
      - name: app-insights-clone
        image: selenium/hub:4.29.0-20250303
        imagePullPolicy: IfNotPresent
        command: ["/bin/sh","-c"]
        args: ["wget -P /tmp/jars https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar"]
        # args: ["wget -P /tmp/jars https://github.com/microsoft/ApplicationInsights-Java/releases/download/3.7.1/applicationinsights-agent-3.7.1.jar"]
        volumeMounts:
        - mountPath: /tmp/jars
          name: appinsights-jar
      containers:
        - name: selenium-grid-selenium-event-bus
          image: selenium/event-bus:4.29.0
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 5557
              protocol: TCP
            - containerPort: 4442
              protocol: TCP
            - containerPort: 4443
              protocol: TCP
          env:
            - name: KUBERNETES_NODE_HOST_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.hostIP
            - name: APPLICATIONINSIGHTS_ROLE_NAME
              value: 'selenium-grid-selenium-event-bus'
            - name: SE_OTEL_SERVICE_NAME
              value: 'selenium-grid-selenium-event-bus'
            - name: SE_EVENT_BUS_HOST
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
            - name: SE_EVENT_BUS_PORT
              value: "5557"
            - name: SE_LOG_LEVEL
              value: "FINEST"
            - name: APPLICATIONINSIGHTS_CONNECTION_STRING
              value: ""
            - name: JAVA_TOOL_OPTIONS
              value: "-javaagent:/tmp/jars/opentelemetry-javaagent.jar"
          envFrom:
            - configMapRef:
                name: selenium-grid-selenium-logging-config
            - configMapRef:
                name: selenium-grid-selenium-server-config
            - secretRef:
                name: selenium-grid-selenium-secrets
            - secretRef:
                name: selenium-grid-selenium-basic-auth-secrets
          volumeMounts:
            - mountPath: /opt/bin/start-selenium-grid-eventbus.sh
              name: selenium-grid-selenium-event-bus-config
              subPath: start-selenium-grid-eventbus.sh
            - mountPath: /tmp/jars
              name: appinsights-jar
          resources:
            limits:
              cpu: "1"
              memory: 2Gi
            requests:
              cpu: "0.5"
              memory: 512Mi
      volumes:
        - name: "selenium-grid-selenium-event-bus-config"
          configMap:
            name: selenium-grid-selenium-event-bus-config
            defaultMode: 493
        - emptyDir: {}
          name: appinsights-jar

Relevant log output

# Opentelemetry-Agent Logs
15:02:23.308 DEBUG [PlatformDependent0.<clinit>] - direct buffer constructor: unavailable
java.lang.UnsupportedOperationException: Reflective setAccessible(true) disabled
        at io.netty.util.internal.ReflectionUtil.trySetAccessible(ReflectionUtil.java:31)
        at io.netty.util.internal.PlatformDependent0$5.run(PlatformDependent0.java:332)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:319)
        at io.netty.util.internal.PlatformDependent0.<clinit>(PlatformDependent0.java:325)
        at io.netty.util.internal.PlatformDependent.isAndroid(PlatformDependent.java:334)
        at io.netty.util.internal.PlatformDependent.<clinit>(PlatformDependent.java:90)
        at io.netty.channel.nio.NioEventLoop.<clinit>(NioEventLoop.java:84)
        at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:182)
        at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:38)
        at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:84)
        at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:60)
        at io.netty.channel.MultithreadEventLoopGroup.<init>(MultithreadEventLoopGroup.java:52)
        at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:97)
        at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:92)
        at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:73)
        at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:53)
        at org.openqa.selenium.netty.server.NettyServer.<init>(NettyServer.java:102)
        at org.openqa.selenium.netty.server.NettyServer.<init>(NettyServer.java:68)
        at org.openqa.selenium.grid.commands.EventBusCommand$1.<init>(EventBusCommand.java:158)
        at org.openqa.selenium.grid.commands.EventBusCommand.asServer(EventBusCommand.java:133)
        at org.openqa.selenium.grid.commands.EventBusCommand.execute(EventBusCommand.java:186)
        at org.openqa.selenium.grid.TemplateGridCommand.lambda$configure$4(TemplateGridCommand.java:122)
        at org.openqa.selenium.grid.Main.launch(Main.java:83)
        at org.openqa.selenium.grid.Main.go(Main.java:56)
        at org.openqa.selenium.grid.Main.main(Main.java:41)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
        at java.base/java.lang.reflect.Method.invoke(Method.java:580)
        at org.openqa.selenium.grid.Bootstrap.runMain(Bootstrap.java:77)
        at org.openqa.selenium.grid.Bootstrap.main(Bootstrap.java:70)
{"class": "PlatformDependent0","log-level": "DEBUG","log-message": "direct buffer constructor: unavailable","log-name": "io.netty.util.internal.PlatformDependent0","log-time-local": "2025-03-18T15:02:23.308Z","log-time-utc": "2025-03-18T15:02:23.308Z","method": "\u003cclinit>"}
15:02:23.316 DEBUG [PlatformDependent0.<clinit>] - java.nio.Bits.unaligned: available, true
{"class": "PlatformDependent0","log-level": "DEBUG","log-message": "java.nio.Bits.unaligned: available, true","log-name": "io.netty.util.internal.PlatformDependent0","log-time-local": "2025-03-18T15:02:23.316Z","log-time-utc": "2025-03-18T15:02:23.316Z","method": "\u003cclinit>"}
15:02:23.320 DEBUG [PlatformDependent0.<clinit>] - jdk.internal.misc.Unsafe.allocateUninitializedArray(int): unavailable
java.lang.IllegalAccessException: class io.netty.util.internal.PlatformDependent0$7 cannot access class jdk.internal.misc.Unsafe (in module java.base) because module java.base does not export jdk.internal.misc to unnamed module @1757cd72
        at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:394)
        at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:714)
        at java.base/java.lang.reflect.Method.invoke(Method.java:571)
        at io.netty.util.internal.PlatformDependent0$7.run(PlatformDependent0.java:468)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:319)
        at io.netty.util.internal.PlatformDependent0.<clinit>(PlatformDependent0.java:459)
        at io.netty.util.internal.PlatformDependent.isAndroid(PlatformDependent.java:334)
        at io.netty.util.internal.PlatformDependent.<clinit>(PlatformDependent.java:90)
        at io.netty.channel.nio.NioEventLoop.<clinit>(NioEventLoop.java:84)
        at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:182)
        at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:38)
        at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:84)
        at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:60)
        at io.netty.channel.MultithreadEventLoopGroup.<init>(MultithreadEventLoopGroup.java:52)
        at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:97)
        at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:92)
        at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:73)
        at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:53)
        at org.openqa.selenium.netty.server.NettyServer.<init>(NettyServer.java:102)
        at org.openqa.selenium.netty.server.NettyServer.<init>(NettyServer.java:68)
        at org.openqa.selenium.grid.commands.EventBusCommand$1.<init>(EventBusCommand.java:158)
        at org.openqa.selenium.grid.commands.EventBusCommand.asServer(EventBusCommand.java:133)
        at org.openqa.selenium.grid.commands.EventBusCommand.execute(EventBusCommand.java:186)
        at org.openqa.selenium.grid.TemplateGridCommand.lambda$configure$4(TemplateGridCommand.java:122)
        at org.openqa.selenium.grid.Main.launch(Main.java:83)
        at org.openqa.selenium.grid.Main.go(Main.java:56)
        at org.openqa.selenium.grid.Main.main(Main.java:41)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
        at java.base/java.lang.reflect.Method.invoke(Method.java:580)
        at org.openqa.selenium.grid.Bootstrap.runMain(Bootstrap.java:77)
        at org.openqa.selenium.grid.Bootstrap.main(Bootstrap.java:70)
{"class": "PlatformDependent0","log-level": "DEBUG","log-message": "jdk.internal.misc.Unsafe.allocateUninitializedArray(int): unavailable","log-name": "io.netty.util.internal.PlatformDependent0","log-time-local": "2025-03-18T15:02:23.32Z","log-time-utc": "2025-03-18T15:02:23.32Z","method": "\u003cclinit>"}

# Azure ApplicationInsights Agent Logs
22:32:36.926 DEBUG [PlatformDependent0.<clinit>] - direct buffer constructor: unavailable
java.lang.UnsupportedOperationException: Reflective setAccessible(true) disabled
        at io.netty.util.internal.ReflectionUtil.trySetAccessible(ReflectionUtil.java:31)
        at io.netty.util.internal.PlatformDependent0$5.run(PlatformDependent0.java:332)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:319)
        at io.netty.util.internal.PlatformDependent0.<clinit>(PlatformDependent0.java:325)
        at io.netty.util.internal.PlatformDependent.isAndroid(PlatformDependent.java:334)
        at io.netty.util.internal.PlatformDependent.<clinit>(PlatformDependent.java:90)
        at io.netty.channel.nio.NioEventLoop.<clinit>(NioEventLoop.java:84)
        at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:182)
        at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:38)
        at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:84)
        at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:60)
        at io.netty.channel.MultithreadEventLoopGroup.<init>(MultithreadEventLoopGroup.java:52)
        at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:97)
        at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:92)
        at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:73)
        at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:53)
        at org.openqa.selenium.netty.server.NettyServer.<init>(NettyServer.java:102)
        at org.openqa.selenium.netty.server.NettyServer.<init>(NettyServer.java:68)
        at org.openqa.selenium.grid.commands.EventBusCommand$1.<init>(EventBusCommand.java:158)
        at org.openqa.selenium.grid.commands.EventBusCommand.asServer(EventBusCommand.java:133)
        at org.openqa.selenium.grid.commands.EventBusCommand.execute(EventBusCommand.java:186)
        at org.openqa.selenium.grid.TemplateGridCommand.lambda$configure$4(TemplateGridCommand.java:122)
        at org.openqa.selenium.grid.Main.launch(Main.java:83)
        at org.openqa.selenium.grid.Main.go(Main.java:56)
        at org.openqa.selenium.grid.Main.main(Main.java:41)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
        at java.base/java.lang.reflect.Method.invoke(Method.java:580)
        at org.openqa.selenium.grid.Bootstrap.runMain(Bootstrap.java:77)
        at org.openqa.selenium.grid.Bootstrap.main(Bootstrap.java:70)
{"class": "PlatformDependent0","log-level": "DEBUG","log-message": "direct buffer constructor: unavailable","log-name": "io.netty.util.internal.PlatformDependent0","log-time-local": "2025-03-17T22:32:36.926Z","log-time-utc": "2025-03-17T22:32:36.926Z","method": "\u003cclinit>"}
22:32:36.937 DEBUG [PlatformDependent0.<clinit>] - java.nio.Bits.unaligned: available, true
{"class": "PlatformDependent0","log-level": "DEBUG","log-message": "java.nio.Bits.unaligned: available, true","log-name": "io.netty.util.internal.PlatformDependent0","log-time-local": "2025-03-17T22:32:36.937Z","log-time-utc": "2025-03-17T22:32:36.937Z","method": "\u003cclinit>"}
22:32:36.938 DEBUG [PlatformDependent0.<clinit>] - jdk.internal.misc.Unsafe.allocateUninitializedArray(int): unavailable
java.lang.IllegalAccessException: class io.netty.util.internal.PlatformDependent0$7 cannot access class jdk.internal.misc.Unsafe (in module java.base) because module java.base does not export jdk.internal.misc to unnamed module @43bd930a
        at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:394)
        at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:714)
        at java.base/java.lang.reflect.Method.invoke(Method.java:571)
        at io.netty.util.internal.PlatformDependent0$7.run(PlatformDependent0.java:468)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:319)
        at io.netty.util.internal.PlatformDependent0.<clinit>(PlatformDependent0.java:459)
        at io.netty.util.internal.PlatformDependent.isAndroid(PlatformDependent.java:334)
        at io.netty.util.internal.PlatformDependent.<clinit>(PlatformDependent.java:90)
        at io.netty.channel.nio.NioEventLoop.<clinit>(NioEventLoop.java:84)
        at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:182)
        at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:38)
        at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:84)
        at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:60)
        at io.netty.channel.MultithreadEventLoopGroup.<init>(MultithreadEventLoopGroup.java:52)
        at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:97)
        at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:92)
        at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:73)
        at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:53)
        at org.openqa.selenium.netty.server.NettyServer.<init>(NettyServer.java:102)
        at org.openqa.selenium.netty.server.NettyServer.<init>(NettyServer.java:68)
        at org.openqa.selenium.grid.commands.EventBusCommand$1.<init>(EventBusCommand.java:158)
        at org.openqa.selenium.grid.commands.EventBusCommand.asServer(EventBusCommand.java:133)
        at org.openqa.selenium.grid.commands.EventBusCommand.execute(EventBusCommand.java:186)
        at org.openqa.selenium.grid.TemplateGridCommand.lambda$configure$4(TemplateGridCommand.java:122)
        at org.openqa.selenium.grid.Main.launch(Main.java:83)
        at org.openqa.selenium.grid.Main.go(Main.java:56)
        at org.openqa.selenium.grid.Main.main(Main.java:41)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
        at java.base/java.lang.reflect.Method.invoke(Method.java:580)
        at org.openqa.selenium.grid.Bootstrap.runMain(Bootstrap.java:77)
        at org.openqa.selenium.grid.Bootstrap.main(Bootstrap.java:70)
{"class": "PlatformDependent0","log-level": "DEBUG","log-message": "jdk.internal.misc.Unsafe.allocateUninitializedArray(int): unavailable","log-name": "io.netty.util.internal.PlatformDependent0","log-time-local": "2025-03-17T22:32:36.938Z","log-time-utc": "2025-03-17T22:32:36.938Z","method": "\u003cclinit>"}

Operating System

Kubernetes (AKS)

Docker Selenium version (image tag)

4.29.0-20250303

Selenium Grid chart version (chart version)

0.40.1

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions