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.
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"