Spidey01 commented on issue #8614:
URL: https://github.com/apache/trafficserver/issues/8614#issuecomment-1745232464

   This morning, I tried reproducing this with ATS 9.2.1 and it just works as 
expected - issue does not reproduce.
   
   ```
   ==> /var/log/trafficserver/access.log <==
   {"localtimestamp": "03/Oct/2023:11:16:00 -0400", "client_ip": "10.211.55.2", 
"cache_response": "TCP_MISS", "cache_response_code": "200", "request_page": 
"http://cache-vm/MHawk/rolling-buffer/itcrowd/index.m3u8";, "server_response": 
"200", "bytes": 158, "user_agent": "thundering-herd.sh/horse2", "sessionId": 
"01_2329856082", "origin_response_time": 2, "client_response_time": 56, 
"ssl_connection": 0, "referrer": "-"}
   {"localtimestamp": "03/Oct/2023:11:16:00 -0400", "client_ip": "10.211.55.2", 
"cache_response": "TCP_MISS", "cache_response_code": "200", "request_page": 
"http://cache-vm/MHawk/rolling-buffer/itcrowd/index.m3u8";, "server_response": 
"200", "bytes": 158, "user_agent": "thundering-herd.sh/horse1", "sessionId": 
"01_2329856081", "origin_response_time": 1, "client_response_time": 68, 
"ssl_connection": 0, "referrer": "-"}
   {"localtimestamp": "03/Oct/2023:11:16:00 -0400", "client_ip": "10.211.55.2", 
"cache_response": "TCP_HIT", "cache_response_code": "200", "request_page": 
"http://cache-vm/MHawk/rolling-buffer/itcrowd/index.m3u8";, "server_response": 
"000", "bytes": 158, "user_agent": "thundering-herd.sh/horse4", "sessionId": 
"01_2329856084", "origin_response_time": -1, "client_response_time": 145, 
"ssl_connection": 0, "referrer": "-"}
   {"localtimestamp": "03/Oct/2023:11:16:00 -0400", "client_ip": "10.211.55.2", 
"cache_response": "TCP_MEM_HIT", "cache_response_code": "200", "request_page": 
"http://cache-vm/MHawk/rolling-buffer/itcrowd/index.m3u8";, "server_response": 
"000", "bytes": 158, "user_agent": "thundering-herd.sh/horse3", "sessionId": 
"01_2329856083", "origin_response_time": -1, "client_response_time": 194, 
"ssl_connection": 0, "referrer": "-"}
   ```
   
   I'm not sure if this is related to bug fixes between 9.1.3 and 9.2.1, or 
changes to other timeout settings. My VM's read-while writer related settings 
haven't changed since my previous comment, but  my timeout settings relative to 
the default have since been simplified.
   
   ```
   grep timeout records.config 
   CONFIG proxy.config.http.connect_attempts_timeout INT 1
   CONFIG proxy.config.http.keep_alive_no_activity_timeout_in INT 115
   CONFIG proxy.config.http.transaction_active_timeout_in INT 40
   CONFIG proxy.config.http.transaction_active_timeout_out INT 2
   CONFIG proxy.config.http.transaction_no_activity_timeout_out INT 2
   CONFIG proxy.config.http.background_fill_active_timeout INT 0
   ```
   
   
   For reference, here's an updated copy of thundering-herd.sh, not that it 
should make a difference in reproducibility.
   
   ```sh
   #!/bin/sh
   
   default_rate=""
   rate=$default_rate
   lead_rate="$rate"
   default_maxtime=9999999
   maxtime=$default_maxtime 
   lead_maxtime=$maxtime
   output=""
   lead_output=$output
   stride=0
   
   usage() {
       echo "$(basename $0) [-m MAXTIME | -M MAXTIME] [-r RATE | -R RATE] URL 
SIZE INTERVAL"
       echo
       echo "  -m MAXTIME    Set the curl --max-time for each horse. Default is 
${maxtime}."
       echo "  -M MAXTIME    Set the curl --max-time for lead horse (overrides 
-m)."
       echo "  -r RATE       Set a curl --limit-rate for each horse. Default is 
not add --limit-rate."
       echo "  -R RATE       Set a curl --limit-rate for lead horse (overrides 
-r)."
       echo "  -o OUTPUT     Set a curl --output for each horse. The horse 
number will be appended to OUTPUT."
       echo "  -O OUTPUT     Set a curl --output for lead horse. The horse 
number will be appended to OUTPUT."
       echo "  -s STRIDE     Modify every horse settings by stride."
       echo "                E.g., -s 3 => every 3rd horse gets -r, -m; rest 
get defaults."
       echo "                Note that -o is always set, because curl treats 
binary data to terminal as an abort."
       echo
       echo "*WARNING* the lead horse in this context is client one. Which may 
NOT be the connection that the server chooses as the lead horse due to other 
constraints such as thread scheduling, TCP setup, etc"
       echo
       echo "URL: the URL to hit from each client."
       echo "SIZE: herd size, how many clients."
       echo "INTERVAL: stagger horses by sleep INTERVAL"
   }
   
   while getopts "r:R:m:M:o:O:s:h" arg; do
       case "$arg" in
           m)
               maxtime=$OPTARG
               ;;
           M)
               lead_maxtime=$OPTARG
               ;;
           r)
               rate=$OPTARG
               ;;
           R)
               lead_rate=$OPTARG
               ;;
           o)
               output=$OPTARG
               ;;
           O)
               lead_output=$OPTARG
               ;;
           s)
               stride=$OPTARG
               ;;
           h)
               usage
               exit
               ;;
           \?)
               [ -n "$OPTARG" ] && echo "Invalid option: -$OPTARG"
               exit $OPTERR
               ;;
       esac
   done
   shift $(($OPTIND - 1))
   
   url="$1"
   size="$2"
   interval="$3"
   
   echo "url: $url size: $size interval: $interval maxtime: $maxtime"
   [ -z $url -o -z $size ] && echo "must specify url and size" && usage && exit
   
   i=0
   while [ $i -lt $size ]; do
       i=$(($i + 1))
       echo "start client $i"
   
       target_maxtime=
       target_rate=
       [ -n "$output" ] && target_output="--output $output"
       if [ $stride -eq 0 ]; then
           # Apply to every horse.
           [ -n "$maxtime" ] && target_maxtime="--max-time $maxtime"
           [ -n "$rate" ] && target_rate="--limit-rate $rate"
       elif [ $stride -gt 0 ]; then
           if [ $(($i % $stride)) -eq 0 ]; then
               # Apply every stride'th horse.
               echo "$stride 'th horse"
               [ -n "$maxtime" ] && target_maxtime="--max-time $maxtime"
               [ -n "$rate" ] && target_rate="--limit-rate $rate"
           else
               target_maxtime=""
               target_rate=""
           fi
       fi
   
       [ -n "$lead_maxtime" -a $i -eq 1 ] && target_maxtime="--max-time 
$lead_maxtime"
       [ -n "$lead_rate" -a $i -eq 1 ] && target_rate="--limit-rate $lead_rate"
       [ -n "$lead_output" -a $i -eq 1 ] && target_output="--output 
$lead_output"
       user_agent="-A thundering-herd.sh/horse$i"
   
       echo "horse $i target_maxtime: $target_maxtime target_rate: $target_rate 
stride: $stride user_agent: $user_agent"
       # continue
   
       case $(uname -s) in
           Darwin)
               # macOS uses BSD style script.
               script /tmp/curl.$i.out curl $target_output $target_maxtime 
$target_rate $user_agent -v "$url" -L &
               ;;
           Linux)
               # Assume util-linux style script.
               script -c "curl $target_output $target_maxtime $target_rate 
$user_agent -v '$url' -L" /tmp/curl.$i.out &
               ;;
       esac
   
       [ -n "$interval" ] && sleep $interval
   done
   # Be nice to terminal.
   wait
   echo
   ```
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to