From 2e0757c18ffd6ce0bbb057ed0ba5e9c1690daa1b Mon Sep 17 00:00:00 2001 From: Pratik Surve Date: Thu, 4 Dec 2025 18:31:07 +0530 Subject: [PATCH] Add node name to I/O script and enhance pod termination detection --- rdr/busybox/base/busybox-dc-1.yaml | 4 ++ rdr/busybox/base/busybox-dc-10.yaml | 4 ++ rdr/busybox/base/busybox-dc-2.yaml | 4 ++ rdr/busybox/base/busybox-dc-3.yaml | 4 ++ rdr/busybox/base/busybox-dc-4.yaml | 4 ++ rdr/busybox/base/busybox-dc-5.yaml | 4 ++ rdr/busybox/base/busybox-dc-6.yaml | 4 ++ rdr/busybox/base/busybox-dc-7.yaml | 4 ++ rdr/busybox/base/busybox-dc-8.yaml | 4 ++ rdr/busybox/base/busybox-dc-9.yaml | 4 ++ rdr/busybox/scripts/simple_io.sh | 57 +++++++++++++++++++++++------ 11 files changed, 85 insertions(+), 12 deletions(-) diff --git a/rdr/busybox/base/busybox-dc-1.yaml b/rdr/busybox/base/busybox-dc-1.yaml index 9dd5ffde4..092b0ace0 100644 --- a/rdr/busybox/base/busybox-dc-1.yaml +++ b/rdr/busybox/base/busybox-dc-1.yaml @@ -48,6 +48,10 @@ spec: value: "/mnt/test/simple_io.sh" - name: DATA_INTEGRITY_SCRIPT value: "/mnt/test/simple_io_integrity_check.sh" + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName imagePullPolicy: IfNotPresent name: busybox volumeMounts: diff --git a/rdr/busybox/base/busybox-dc-10.yaml b/rdr/busybox/base/busybox-dc-10.yaml index 488f85740..9e73bb36d 100644 --- a/rdr/busybox/base/busybox-dc-10.yaml +++ b/rdr/busybox/base/busybox-dc-10.yaml @@ -48,6 +48,10 @@ spec: value: "/mnt/test/simple_io.sh" - name: DATA_INTEGRITY_SCRIPT value: "/mnt/test/simple_io_integrity_check.sh" + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName imagePullPolicy: IfNotPresent name: busybox volumeMounts: diff --git a/rdr/busybox/base/busybox-dc-2.yaml b/rdr/busybox/base/busybox-dc-2.yaml index d34923ab2..3840bb9ea 100644 --- a/rdr/busybox/base/busybox-dc-2.yaml +++ b/rdr/busybox/base/busybox-dc-2.yaml @@ -48,6 +48,10 @@ spec: value: "/mnt/test/simple_io.sh" - name: DATA_INTEGRITY_SCRIPT value: "/mnt/test/simple_io_integrity_check.sh" + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName imagePullPolicy: IfNotPresent name: busybox volumeMounts: diff --git a/rdr/busybox/base/busybox-dc-3.yaml b/rdr/busybox/base/busybox-dc-3.yaml index 2c7fc6c84..edafcbf89 100644 --- a/rdr/busybox/base/busybox-dc-3.yaml +++ b/rdr/busybox/base/busybox-dc-3.yaml @@ -48,6 +48,10 @@ spec: value: "/mnt/test/simple_io.sh" - name: DATA_INTEGRITY_SCRIPT value: "/mnt/test/simple_io_integrity_check.sh" + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName imagePullPolicy: IfNotPresent name: busybox volumeMounts: diff --git a/rdr/busybox/base/busybox-dc-4.yaml b/rdr/busybox/base/busybox-dc-4.yaml index 341712704..735e1d8af 100644 --- a/rdr/busybox/base/busybox-dc-4.yaml +++ b/rdr/busybox/base/busybox-dc-4.yaml @@ -48,6 +48,10 @@ spec: value: "/mnt/test/simple_io.sh" - name: DATA_INTEGRITY_SCRIPT value: "/mnt/test/simple_io_integrity_check.sh" + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName imagePullPolicy: IfNotPresent name: busybox volumeMounts: diff --git a/rdr/busybox/base/busybox-dc-5.yaml b/rdr/busybox/base/busybox-dc-5.yaml index 084f8eca5..f1ed6018b 100644 --- a/rdr/busybox/base/busybox-dc-5.yaml +++ b/rdr/busybox/base/busybox-dc-5.yaml @@ -48,6 +48,10 @@ spec: value: "/mnt/test/simple_io.sh" - name: DATA_INTEGRITY_SCRIPT value: "/mnt/test/simple_io_integrity_check.sh" + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName imagePullPolicy: IfNotPresent name: busybox volumeMounts: diff --git a/rdr/busybox/base/busybox-dc-6.yaml b/rdr/busybox/base/busybox-dc-6.yaml index cd1577fbb..e84fc11b2 100644 --- a/rdr/busybox/base/busybox-dc-6.yaml +++ b/rdr/busybox/base/busybox-dc-6.yaml @@ -48,6 +48,10 @@ spec: value: "/mnt/test/simple_io.sh" - name: DATA_INTEGRITY_SCRIPT value: "/mnt/test/simple_io_integrity_check.sh" + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName imagePullPolicy: IfNotPresent name: busybox volumeMounts: diff --git a/rdr/busybox/base/busybox-dc-7.yaml b/rdr/busybox/base/busybox-dc-7.yaml index 95ee1771f..72286a263 100644 --- a/rdr/busybox/base/busybox-dc-7.yaml +++ b/rdr/busybox/base/busybox-dc-7.yaml @@ -48,6 +48,10 @@ spec: value: "/mnt/test/simple_io.sh" - name: DATA_INTEGRITY_SCRIPT value: "/mnt/test/simple_io_integrity_check.sh" + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName imagePullPolicy: IfNotPresent name: busybox volumeMounts: diff --git a/rdr/busybox/base/busybox-dc-8.yaml b/rdr/busybox/base/busybox-dc-8.yaml index 3f99248fc..ee366b31e 100644 --- a/rdr/busybox/base/busybox-dc-8.yaml +++ b/rdr/busybox/base/busybox-dc-8.yaml @@ -48,6 +48,10 @@ spec: value: "/mnt/test/simple_io.sh" - name: DATA_INTEGRITY_SCRIPT value: "/mnt/test/simple_io_integrity_check.sh" + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName imagePullPolicy: IfNotPresent name: busybox volumeMounts: diff --git a/rdr/busybox/base/busybox-dc-9.yaml b/rdr/busybox/base/busybox-dc-9.yaml index 83f4f07e1..85772fd94 100644 --- a/rdr/busybox/base/busybox-dc-9.yaml +++ b/rdr/busybox/base/busybox-dc-9.yaml @@ -48,6 +48,10 @@ spec: value: "/mnt/test/simple_io.sh" - name: DATA_INTEGRITY_SCRIPT value: "/mnt/test/simple_io_integrity_check.sh" + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName imagePullPolicy: IfNotPresent name: busybox volumeMounts: diff --git a/rdr/busybox/scripts/simple_io.sh b/rdr/busybox/scripts/simple_io.sh index a6324fed0..a1cc3cac2 100644 --- a/rdr/busybox/scripts/simple_io.sh +++ b/rdr/busybox/scripts/simple_io.sh @@ -1,46 +1,79 @@ #!/bin/sh # Color codes for formatted output -Cyan='\033[0;36m' -NC='\033[0m' # No Color +Cyan='\033[0;36m' +NC='\033[0m' # Constants MOUNT="/mnt/test" HASHFILE="$MOUNT/hashfile" +LOGFILE="$MOUNT/script.log" + +# Simple logger: level, message... +log() { + level=$1 + shift + ts=$(date '+%Y-%m-%dT%H:%M:%S%z') + # write to stdout and append to logfile (best-effort) + printf "%s [%s] %s\n" "$ts" "$level" "$*" | tee -a "$LOGFILE" +} # Trap to handle termination signals (SIGINT, SIGTERM) cleanup() { - echo "Received termination signal! Syncing data and exiting..." + log INFO "Received termination signal! Syncing data and exiting..." + + if [ -n "$SLEEP_PID" ] && kill -0 "$SLEEP_PID" 2>/dev/null; then + log INFO "Killing background sleep (pid $SLEEP_PID)" + kill "$SLEEP_PID" 2>/dev/null + fi + sync touch "$MOUNT/trap_$(date +%s)" - exit 1 + log INFO "Exiting cleanly" + exit 0 } trap cleanup SIGINT SIGTERM +hostname=$(hostname -f 2>/dev/null || hostname) +node="${NODE_NAME:-unknown}" + # Main loop while true; do - hostname=$(hostname -f) - file="$MOUNT/data_$(date +%s)_$hostname" - - printf "Creating file with name: ${Cyan}$file${NC}\n" + file="$MOUNT/data_$(date +%s)_${hostname}_${node}" + + log INFO "Creating file with name: ${file}" # Write random data to file - dd if=/dev/urandom of="$file" bs=4k count=$((RANDOM % 3 + 1)) oflag=direct + dd if=/dev/urandom of="$file" bs=4k count=$((RANDOM % 3 + 1)) oflag=direct 2>>"$LOGFILE" + dd_status=$? + if [ "$dd_status" -ne 0 ]; then + log ERROR "dd failed with status $dd_status; removing partial file $file" + rm -f "$file" + sync + # short backoff before continuing loop + sleep 1 + continue + fi # Compute and store hash - md5sum "$file" >> "$HASHFILE" + md5sum "$file" >> "$HASHFILE" 2>>"$LOGFILE" || log WARN "Failed to append hash for $file" sync # Random sleep with trap awareness sleep_time=$((RANDOM % 15 + 1)) - echo "Sleeping for $sleep_time seconds..." + log INFO "Sleeping for $sleep_time seconds..." sleep "$sleep_time" & SLEEP_PID=$! wait "$SLEEP_PID" + SLEEP_PID= # Perform random integrity check if [ $((RANDOM % 2)) -eq 1 ]; then - md5sum -c --quiet "$HASHFILE" + if md5sum -c --quiet "$HASHFILE"; then + log INFO "Integrity check passed" + else + log WARN "Integrity check found problems (see md5sum output)" + fi fi done