github-actions[bot] commented on code in PR #41035:
URL: https://github.com/apache/beam/pull/41035#discussion_r4495189253


##########
sdks/python/scripts/run_expansion_services.sh:
##########
@@ -108,31 +108,69 @@ if [[ $CHECK_FLOCK -eq 0 ]]; then
   fi
 fi
 
+wait_for_port() {
+  local port=$1
+  local srv_pid=$2
+  local name=$3
+  local logfile=$4
+  local elapsed=0
+  while [ $elapsed -lt 60 ]; do
+    if ! kill -0 "$srv_pid" >/dev/null 2>&1; then
+      echo "$name expansion service (pid $srv_pid) exited prematurely. Logs:"
+      cat "$logfile" || true
+      return 1
+    fi
+    if python -c "import socket, sys; s = socket.socket(); res = 
s.connect_ex(('localhost', int(sys.argv[1]))); s.close(); sys.exit(0 if res == 
0 else 1)" "$port" >/dev/null 2>&1; then
+      echo "$name expansion service is listening @ $port"
+      return 0
+    fi
+    sleep 1
+    elapsed=$((elapsed + 1))
+  done
+  echo "Timed out waiting 60s for $name expansion service @ $port. Logs:"
+  cat "$logfile" || true
+  return 1
+}
+
 case $STARTSTOP in
   start)
     if [ -f "$pid" ]; then
       echo "services already running."
       exit 0
     fi
 
+    source $PYTHON_VIRTUALENV_DIR/bin/activate
+
     echo "Launching Java expansion service @ $JAVA_PORT"
-    java -jar $JAVA_EXPANSION_SERVICE_JAR $JAVA_PORT 
--javaClassLookupAllowlistFile="$JAVA_EXPANSION_SERVICE_ALLOWLIST_FILE" 
>$TEMP_DIR/$FILE_BASE-java.log 2>&1 </dev/null &
-    mypid=$!
-    if kill -0 $mypid >/dev/null 2>&1; then
-      echo $mypid >> $pid
+    if [[ $CHECK_FLOCK -eq 0 ]]; then
+      java -jar $JAVA_EXPANSION_SERVICE_JAR $JAVA_PORT 
--javaClassLookupAllowlistFile="$JAVA_EXPANSION_SERVICE_ALLOWLIST_FILE" 
>$TEMP_DIR/$FILE_BASE-java.log 2>&1 </dev/null 200>&- &
+    else
+      java -jar $JAVA_EXPANSION_SERVICE_JAR $JAVA_PORT 
--javaClassLookupAllowlistFile="$JAVA_EXPANSION_SERVICE_ALLOWLIST_FILE" 
>$TEMP_DIR/$FILE_BASE-java.log 2>&1 </dev/null &
+    fi
+    java_pid=$!
+    if kill -0 $java_pid >/dev/null 2>&1; then
+      echo $java_pid >> $pid
     else
       echo "Can't start Java expansion service."
+      exit 1
     fi
 
     echo "Launching Python expansion service @ $PYTHON_PORT"
-    source $PYTHON_VIRTUALENV_DIR/bin/activate
-    python -m $PYTHON_EXPANSION_SERVICE_MODULE -p $PYTHON_PORT 
--fully_qualified_name_glob "$PYTHON_EXPANSION_SERVICE_ALLOWLIST_GLOB" 
>$TEMP_DIR/$FILE_BASE-python.log 2>&1 </dev/null &
-    mypid=$!
-    if kill -0 $mypid >/dev/null 2>&1; then
-      echo $mypid >> $pid
+    if [[ $CHECK_FLOCK -eq 0 ]]; then
+      python -m $PYTHON_EXPANSION_SERVICE_MODULE -p $PYTHON_PORT 
--fully_qualified_name_glob "$PYTHON_EXPANSION_SERVICE_ALLOWLIST_GLOB" 
>$TEMP_DIR/$FILE_BASE-python.log 2>&1 </dev/null 200>&- &
+    else
+      python -m $PYTHON_EXPANSION_SERVICE_MODULE -p $PYTHON_PORT 
--fully_qualified_name_glob "$PYTHON_EXPANSION_SERVICE_ALLOWLIST_GLOB" 
>$TEMP_DIR/$FILE_BASE-python.log 2>&1 </dev/null &
+    fi
+    python_pid=$!
+    if kill -0 $python_pid >/dev/null 2>&1; then
+      echo $python_pid >> $pid
     else
       echo "Can't start Python expansion service."
+      exit 1
     fi
+
+    wait_for_port "$JAVA_PORT" "$java_pid" "Java" 
"$TEMP_DIR/$FILE_BASE-java.log"
+    wait_for_port "$PYTHON_PORT" "$python_pid" "Python" 
"$TEMP_DIR/$FILE_BASE-python.log"

Review Comment:
   **🟠 High**: When `CHECK_FLOCK -eq 0`, the subsequent `flock -u 200` on line 
191 overwrites a non-zero return status from this `wait_for_port` call, causing 
`run_expansion_services.sh` to exit with `0` even if the Python expansion 
service exits prematurely or times out. Append `|| exit 1` to propagate the 
failure exit code.
   
   ```suggestion
       wait_for_port "$PYTHON_PORT" "$python_pid" "Python" 
"$TEMP_DIR/$FILE_BASE-python.log" || exit 1
   ```



##########
sdks/python/scripts/run_expansion_services.sh:
##########
@@ -108,31 +108,69 @@ if [[ $CHECK_FLOCK -eq 0 ]]; then
   fi
 fi
 
+wait_for_port() {
+  local port=$1
+  local srv_pid=$2
+  local name=$3
+  local logfile=$4
+  local elapsed=0
+  while [ $elapsed -lt 60 ]; do
+    if ! kill -0 "$srv_pid" >/dev/null 2>&1; then
+      echo "$name expansion service (pid $srv_pid) exited prematurely. Logs:"
+      cat "$logfile" || true
+      return 1
+    fi
+    if python -c "import socket, sys; s = socket.socket(); res = 
s.connect_ex(('localhost', int(sys.argv[1]))); s.close(); sys.exit(0 if res == 
0 else 1)" "$port" >/dev/null 2>&1; then
+      echo "$name expansion service is listening @ $port"
+      return 0
+    fi
+    sleep 1
+    elapsed=$((elapsed + 1))
+  done
+  echo "Timed out waiting 60s for $name expansion service @ $port. Logs:"
+  cat "$logfile" || true
+  return 1
+}
+
 case $STARTSTOP in
   start)
     if [ -f "$pid" ]; then
       echo "services already running."
       exit 0
     fi
 
+    source $PYTHON_VIRTUALENV_DIR/bin/activate
+
     echo "Launching Java expansion service @ $JAVA_PORT"
-    java -jar $JAVA_EXPANSION_SERVICE_JAR $JAVA_PORT 
--javaClassLookupAllowlistFile="$JAVA_EXPANSION_SERVICE_ALLOWLIST_FILE" 
>$TEMP_DIR/$FILE_BASE-java.log 2>&1 </dev/null &
-    mypid=$!
-    if kill -0 $mypid >/dev/null 2>&1; then
-      echo $mypid >> $pid
+    if [[ $CHECK_FLOCK -eq 0 ]]; then
+      java -jar $JAVA_EXPANSION_SERVICE_JAR $JAVA_PORT 
--javaClassLookupAllowlistFile="$JAVA_EXPANSION_SERVICE_ALLOWLIST_FILE" 
>$TEMP_DIR/$FILE_BASE-java.log 2>&1 </dev/null 200>&- &
+    else
+      java -jar $JAVA_EXPANSION_SERVICE_JAR $JAVA_PORT 
--javaClassLookupAllowlistFile="$JAVA_EXPANSION_SERVICE_ALLOWLIST_FILE" 
>$TEMP_DIR/$FILE_BASE-java.log 2>&1 </dev/null &
+    fi
+    java_pid=$!
+    if kill -0 $java_pid >/dev/null 2>&1; then
+      echo $java_pid >> $pid
     else
       echo "Can't start Java expansion service."
+      exit 1
     fi
 
     echo "Launching Python expansion service @ $PYTHON_PORT"
-    source $PYTHON_VIRTUALENV_DIR/bin/activate
-    python -m $PYTHON_EXPANSION_SERVICE_MODULE -p $PYTHON_PORT 
--fully_qualified_name_glob "$PYTHON_EXPANSION_SERVICE_ALLOWLIST_GLOB" 
>$TEMP_DIR/$FILE_BASE-python.log 2>&1 </dev/null &
-    mypid=$!
-    if kill -0 $mypid >/dev/null 2>&1; then
-      echo $mypid >> $pid
+    if [[ $CHECK_FLOCK -eq 0 ]]; then
+      python -m $PYTHON_EXPANSION_SERVICE_MODULE -p $PYTHON_PORT 
--fully_qualified_name_glob "$PYTHON_EXPANSION_SERVICE_ALLOWLIST_GLOB" 
>$TEMP_DIR/$FILE_BASE-python.log 2>&1 </dev/null 200>&- &
+    else
+      python -m $PYTHON_EXPANSION_SERVICE_MODULE -p $PYTHON_PORT 
--fully_qualified_name_glob "$PYTHON_EXPANSION_SERVICE_ALLOWLIST_GLOB" 
>$TEMP_DIR/$FILE_BASE-python.log 2>&1 </dev/null &
+    fi
+    python_pid=$!
+    if kill -0 $python_pid >/dev/null 2>&1; then
+      echo $python_pid >> $pid
     else
       echo "Can't start Python expansion service."
+      exit 1
     fi
+
+    wait_for_port "$JAVA_PORT" "$java_pid" "Java" 
"$TEMP_DIR/$FILE_BASE-java.log"

Review Comment:
   **🟠 High**: Because `set -e` is not enabled in this script, a non-zero 
return status from `wait_for_port` is ignored: execution continues to the 
Python `wait_for_port` check and then to `flock -u 200` at the end of the 
script, which resets `$?` to `0`. Append `|| exit 1` so the script fails fast 
if the Java expansion service crashes or times out.
   
   ```suggestion
       wait_for_port "$JAVA_PORT" "$java_pid" "Java" 
"$TEMP_DIR/$FILE_BASE-java.log" || exit 1
   ```



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