Skip to main content

Pod JVM SQL Exception

Pod JVM SQL Exception fault simulates SQL query failures by raising exceptions for SQL queries executed by the Java process running inside a Kubernetes pod. This helps test the application's behavior and resilience against SQL-related errors.

tip

JVM chaos faults use the Byteman utility to inject chaos faults into the JVM.

Pod JVM SQL Exception

Use cases

Pod JVM SQL exception:

  • Validate the application's resilience by simulating SQL exceptions to ensure it can recover gracefully, retry operations, or switch to backup databases without affecting functionality.
  • Assess if the monitoring systems and alerting mechanisms can accurately detect and report SQL query exceptions in real-time.
  • Trigger exception-handling paths in the application to ensure coverage of edge cases related to SQL query failures during testing.

Mandatory tunables

Tunable Description Notes
TABLE The name of the SQL table to be targeted. For more information, go to Parameters
SQL_DATA_ACCESS_FRAMEWORK The name of the data access framework. It supports MYSQL5, MYSQL8, and HIBERNATE types. For more information, go to Parameters
SQL_EXCEPTION_CLASS The name of the exception class. For more information, go to Parameters
SQL_EXCEPTION_MESSAGE The exception message to be raised. For more information, go to Parameters

Optional tunables

Tunable Description Notes
TOTAL_CHAOS_DURATION Duration through which chaos is injected into the target resource. Should be provided in [numeric-hours]h[numeric-minutes]m[numeric-seconds]s format. Default: 30s. Examples: 1m25s, 1h3m2s, 1h3s. For more information, go to duration of the chaos.
SQL_OPERATION The type of SQL query to be targeted. If not provided, it targets all SQL queries. For example: select. For more information, go to Parameters
TRANSACTION_PERCENTAGE The percentage of total SQL queries to be targeted. Supports percentage in (0.00,1.00] range. If not provided, it targets all SQL queries. For more information, go to Parameters
POD_AFFECTED_PERCENTAGE Percentage of total pods to target. Provide numeric values. Default: 0 (corresponds to 1 replica). For more information, go to pods affected percentage.
JAVA_HOME Path to the Java installation directory. For example, /tmp/dir/jdk.
BYTEMAN_PORT Port used by the Byteman agent. Default: 9091.
CONTAINER_RUNTIME Container runtime interface for the cluster. Default: containerd. Support values: docker, containerd and crio. For more information, go to container runtime.
SOCKET_PATH Path of the containerd or crio or docker socket file. Default: /run/containerd/containerd.sock. For more information, go to socket path.
RAMP_TIME Period to wait before and after injecting chaos. Should be provided in [numeric-hours]h[numeric-minutes]m[numeric-seconds]s format. Default: 0s. Examples: 1m25s, 1h3m2s, 1h3s. For more information, go to ramp time.
SEQUENCE Sequence of chaos execution for multiple target pods. Default: parallel. Supports serial and parallel. For more information, go to sequence of chaos execution.
TARGET_CONTAINER Name of the container subject to API header modification. None. For more information, go to target specific container
TARGET_PODS Comma-separated list of application pod names subject to pod HTTP modify body. If not provided, the fault selects target pods randomly based on provided appLabels. For more information, go to target specific pods.
NODE_LABEL It filters the target pods that are scheduled on nodes matching the specified NODE_LABEL. For more information, go to node label.
LIB_IMAGE Image used to inject chaos. Default: harness/ddcr-faults:main-latest. For more information, go to image used by the helper pod.

Parameters

The following YAML snippet illustrates the use of these tunables:

kind: KubernetesChaosExperiment
apiVersion: litmuschaos.io/v1alpha1
metadata:
name: pod-jvm-sql-exception
namespace: hce
spec:
tasks:
- definition:
chaos:
env:
- name: TOTAL_CHAOS_DURATION
value: "60"
# provide the sql table name
- name: TABLE
value: "product"
# provide the sql operation name
# it supports select, insert, update, delete, replace types
- name: SQL_OPERATION
value: "select"
# name of the data access framework
# it supports MYSQL5, MYSQL8, HIBERNATE types
- name: SQL_DATA_ACCESS_FRAMEWORK
value: "MYSQL8"
# name of the sql exception class
- name: SQL_EXCEPTION_CLASS
value: "com.mysql.cj.exceptions.CJException"
# provide the exception message
- name: SQL_EXCEPTION_MESSAGE
value: "CHAOS BOOM!"
# provide the transaction percentage
- name: TRANSACTION_PERCENTAGE
value: "50"