Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package conmon for openSUSE:Factory checked in at 2026-02-26 18:50:32 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/conmon (Old) and /work/SRC/openSUSE:Factory/.conmon.new.29461 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "conmon" Thu Feb 26 18:50:32 2026 rev:40 rq:1334707 version:2.2.1 Changes: -------- --- /work/SRC/openSUSE:Factory/conmon/conmon.changes 2026-02-02 14:55:36.707576979 +0100 +++ /work/SRC/openSUSE:Factory/.conmon.new.29461/conmon.changes 2026-02-26 18:51:12.339907884 +0100 @@ -1,0 +2,15 @@ +Fri Feb 20 11:35:25 UTC 2026 - Madhankumar Chellamuthu <[email protected]> + +- Update to version 2.2.1: + * Release v2.2.1 + * Fix EAGAIN busy-loop in drain_stdio() + * Add CRI-O critest + * Fix test for reverted F-sequence behavior + * Revert PR #592 + * Revert PR #629 + * Skip test if RUNTIME_BINARY is not runc + * Fix k8s-file log format for terminating F-sequence + * tests: Ensure necessary dependencies are available + * Release v2.2.0 + +------------------------------------------------------------------- Old: ---- conmon-2.2.0.tar.xz New: ---- conmon-2.2.1.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ conmon.spec ++++++ --- /var/tmp/diff_new_pack.9sRzfm/_old 2026-02-26 18:51:14.592001801 +0100 +++ /var/tmp/diff_new_pack.9sRzfm/_new 2026-02-26 18:51:14.652004303 +0100 @@ -17,7 +17,7 @@ Name: conmon -Version: 2.2.0 +Version: 2.2.1 Release: 0 Summary: An OCI container runtime monitor License: Apache-2.0 ++++++ _service ++++++ --- /var/tmp/diff_new_pack.9sRzfm/_old 2026-02-26 18:51:15.012019318 +0100 +++ /var/tmp/diff_new_pack.9sRzfm/_new 2026-02-26 18:51:15.032020151 +0100 @@ -4,7 +4,7 @@ <param name="scm">git</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">[v]?([^\+]+)(.*)</param> -<param name="revision">v2.2.0</param> +<param name="revision">v2.2.1</param> <param name="changesgenerate">enable</param> </service> <service name="recompress" mode="manual"> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.9sRzfm/_old 2026-02-26 18:51:15.140024655 +0100 +++ /var/tmp/diff_new_pack.9sRzfm/_new 2026-02-26 18:51:15.188026657 +0100 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/containers/conmon</param> - <param name="changesrevision">ff908cce92cf89167b6b97ed240e91a6b147acc1</param></service></servicedata> + <param name="changesrevision">c8cc2c4db27531bd4e084ce7857f73cd21ee639d</param></service></servicedata> (No newline at EOF) ++++++ conmon-2.2.0.tar.xz -> conmon-2.2.1.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/conmon-2.2.0/.github/workflows/integration.yml new/conmon-2.2.1/.github/workflows/integration.yml --- old/conmon-2.2.0/.github/workflows/integration.yml 2026-01-12 11:08:40.000000000 +0100 +++ new/conmon-2.2.1/.github/workflows/integration.yml 2026-02-12 17:58:22.000000000 +0100 @@ -28,6 +28,7 @@ strategy: matrix: go-version: [stable, oldstable] + critest: [0, 1] steps: - uses: actions/checkout@v6 - uses: actions/setup-go@v6 @@ -39,13 +40,13 @@ sudo apt-get update sudo apt-get install -y bats - run: sudo hack/github-actions-setup - - name: Run CRI-O integration tests + - name: Run CRI-O integration tests (critest=${{ matrix.critest }}) run: | CRIO_DIR=$(sudo go env GOPATH)/src/github.com/cri-o/cri-o sudo make -C "$CRIO_DIR" all test-binaries # skip seccomp tests because they have permission denied issues in a container and accept signed image as they don't use conmon sudo rm -f "$CRIO_DIR"/test/seccomp*.bats "$CRIO_DIR"/test/image.bats "$CRIO_DIR"/test/policy.bats - sudo sh -c "cd $CRIO_DIR; ./test/test_runner.sh" + sudo sh -c "cd $CRIO_DIR; RUN_CRITEST=${{ matrix.critest }} ./test/test_runner.sh" env: JOBS: '2' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/conmon-2.2.0/VERSION new/conmon-2.2.1/VERSION --- old/conmon-2.2.0/VERSION 2026-01-12 11:08:40.000000000 +0100 +++ new/conmon-2.2.1/VERSION 2026-02-12 17:58:22.000000000 +0100 @@ -1 +1 @@ -2.2.0 +2.2.1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/conmon-2.2.0/rpm/conmon.spec new/conmon-2.2.1/rpm/conmon.spec --- old/conmon-2.2.0/rpm/conmon.spec 2026-01-12 11:08:40.000000000 +0100 +++ new/conmon-2.2.1/rpm/conmon.spec 2026-02-12 17:58:22.000000000 +0100 @@ -19,7 +19,7 @@ %else Epoch: 2 %endif -Version: 2.2.0 +Version: 2.2.1 License: Apache-2.0 Release: %autorelease Summary: OCI container runtime monitor diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/conmon-2.2.0/src/ctr_logging.c new/conmon-2.2.1/src/ctr_logging.c --- old/conmon-2.2.0/src/ctr_logging.c 2026-01-12 11:08:40.000000000 +0100 +++ new/conmon-2.2.1/src/ctr_logging.c 2026-02-12 17:58:22.000000000 +0100 @@ -481,19 +481,13 @@ * The CRI requires us to write logs with a (timestamp, stream, line) format * for every newline-separated line. write_k8s_log writes said format for every * line in buf, and will partially write the final line of the log if buf is - * not terminated by a newline. A 0 buflen argument forces any buffered partial - * line to be finalized with an F-sequence. + * not terminated by a newline. */ static int write_k8s_log(stdpipe_t pipe, const char *buf, ssize_t buflen) { - static bool stdout_has_partial = false; - static bool stderr_has_partial = false; - writev_buffer_t bufv = {0}; int64_t bytes_to_be_written = 0; - bool *has_partial = (pipe == STDOUT_PIPE) ? &stdout_has_partial : &stderr_has_partial; - /* * Use the same timestamp for every line of the log in this buffer. * There is no practical difference in the output since write(2) is @@ -502,32 +496,6 @@ char tsbuf[TSBUFLEN]; set_k8s_timestamp(tsbuf, sizeof tsbuf, stdpipe_name(pipe)); - /* If buflen is 0, this is a drain operation. Generate terminating F-sequence if needed. */ - if (buflen == 0 && *has_partial) { - /* Generate terminating F-sequence for previous partial line */ - bool timestamp_written = false; - bool f_sequence_written = false; - - if (writev_buffer_append_segment(k8s_log_fd, &bufv, tsbuf, TSBUFLEN - 1) >= 0) { - timestamp_written = true; - if (writev_buffer_append_segment(k8s_log_fd, &bufv, "F\n", 2) >= 0) { - f_sequence_written = true; - } - } - - if (timestamp_written && f_sequence_written) { - k8s_bytes_written += TSBUFLEN - 1 + 2; - k8s_total_bytes_written += TSBUFLEN - 1 + 2; - } else { - if (!timestamp_written) { - nwarn("failed to write timestamp for terminating F-sequence"); - } else { - nwarn("failed to write terminating F-sequence"); - } - } - *has_partial = false; - } - ptrdiff_t line_len = 0; while (buflen > 0) { bool partial = get_line_len(&line_len, buf, buflen); @@ -591,9 +559,6 @@ k8s_bytes_written += bytes_to_be_written; k8s_total_bytes_written += bytes_to_be_written; - - /* Track partial state for this pipe */ - *has_partial = partial; next: /* Update the head of the buffer remaining to output. */ buf += line_len; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/conmon-2.2.0/src/ctr_stdio.c new/conmon-2.2.1/src/ctr_stdio.c --- old/conmon-2.2.0/src/ctr_stdio.c 2026-01-12 11:08:40.000000000 +0100 +++ new/conmon-2.2.1/src/ctr_stdio.c 2026-02-12 17:58:22.000000000 +0100 @@ -130,8 +130,8 @@ return false; } else if (num_read < 0) { if (errno == EAGAIN || errno == EWOULDBLOCK) { - // Non-blocking mode - no data available, return gracefully - return true; + // Non-blocking mode - no data available, stop draining + return false; } /* Ignore EIO if fd is a tty, since this can happen when the tty is closed while we are reading from it. */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/conmon-2.2.0/test/02-ctr-logs.bats new/conmon-2.2.1/test/02-ctr-logs.bats --- old/conmon-2.2.0/test/02-ctr-logs.bats 2026-01-12 11:08:40.000000000 +0100 +++ new/conmon-2.2.1/test/02-ctr-logs.bats 2026-02-12 17:58:22.000000000 +0100 @@ -171,5 +171,4 @@ assert_file_exists "$LOG_PATH" run cat "$LOG_PATH" assert "${output}" =~ "stdout P" - assert "${output}" =~ "stdout F" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/conmon-2.2.0/test/04-runtime.bats new/conmon-2.2.1/test/04-runtime.bats --- old/conmon-2.2.0/test/04-runtime.bats 2026-01-12 11:08:40.000000000 +0100 +++ new/conmon-2.2.1/test/04-runtime.bats 2026-02-12 17:58:22.000000000 +0100 @@ -92,7 +92,10 @@ assert "${output}" =~ "\"pid\": $CONTAINER_PID" } -@test "runtime: runtime error with _OCI_SYNCPIPE defined" { +@test "runtime: runc error with _OCI_SYNCPIPE defined" { + if [[ $(basename "$RUNTIME_BINARY") != "runc" ]]; then + skip "test requires runc" + fi # This trailing " results in wrong config.json. We expect the runtime # failure. setup_container_env '"' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/conmon-2.2.0/test/09-partial-log-test.bats new/conmon-2.2.1/test/09-partial-log-test.bats --- old/conmon-2.2.0/test/09-partial-log-test.bats 2026-01-12 11:08:40.000000000 +0100 +++ new/conmon-2.2.1/test/09-partial-log-test.bats 1970-01-01 01:00:00.000000000 +0100 @@ -1,140 +0,0 @@ -#!/usr/bin/env bats - -load test_helper - -setup() { - check_conmon_binary - check_runtime_binary - setup_container_env -} - -teardown() { - cleanup_test_env -} - -@test "partial log: container with printf (no newline) generates F-sequence" { - # Modify config to run printf instead of echo - jq '.process.args = ["/usr/bin/printf", "hello world"]' "$BUNDLE_PATH/config.json" > "$BUNDLE_PATH/config.json.tmp" - mv "$BUNDLE_PATH/config.json.tmp" "$BUNDLE_PATH/config.json" - - # Run conmon - timeout 30s "$CONMON_BINARY" \ - --cid "$CTR_ID" \ - --cuuid "$CTR_ID" \ - --runtime "$RUNTIME_BINARY" \ - --log-path "k8s-file:$LOG_PATH" \ - --bundle "$BUNDLE_PATH" \ - --socket-dir-path "$SOCKET_PATH" \ - --log-level debug \ - --container-pidfile "$PID_FILE" \ - --conmon-pidfile "$CONMON_PID_FILE" & - - local conmon_pid=$! - sleep 2 - - if kill -0 $conmon_pid 2>/dev/null; then - kill $conmon_pid 2>/dev/null || true - wait $conmon_pid 2>/dev/null || true - fi - - # Verify log file exists - [ -f "$LOG_PATH" ] - - local log_content - log_content=$(cat "$LOG_PATH") - - # Test environment may not support container execution - # If logs are empty, skip the functional test but verify the implementation exists - if [ -z "$log_content" ]; then - echo "Log is empty - container runtime not available in test environment" - echo "Skipping functional test, verifying implementation exists in source code" - - # Verify the fix is present in source code - grep -q "If buflen is 0, this is a drain operation" "$PWD/src/ctr_logging.c" || { - echo "Missing drain operation code" - return 1 - } - grep -q "stdout_has_partial" "$PWD/src/ctr_logging.c" || { - echo "Missing stdout_has_partial tracking" - return 1 - } - grep -q "stderr_has_partial" "$PWD/src/ctr_logging.c" || { - echo "Missing stderr_has_partial tracking" - return 1 - } - grep -q "Generate terminating F-sequence" "$PWD/src/ctr_logging.c" || { - echo "Missing F-sequence generation code" - return 1 - } - - skip "Container runtime not available for functional testing" - else - echo "=== Actual log content ===" - echo "$log_content" - echo "=== End log ===" - - # Test for actual F-sequence functionality - # Should have partial line followed by F-sequence - echo "$log_content" | grep -q "stdout P hello world" || { - echo "Expected partial line not found" - return 1 - } - - echo "$log_content" | grep -q "stdout F$" || { - echo "Expected F-sequence not found" - return 1 - } - fi -} - -@test "partial log: container with echo (with newline) does NOT generate standalone F-sequence" { - # Default config already uses echo which outputs newline - - # Run conmon - timeout 30s "$CONMON_BINARY" \ - --cid "$CTR_ID" \ - --cuuid "$CTR_ID" \ - --runtime "$RUNTIME_BINARY" \ - --log-path "k8s-file:$LOG_PATH" \ - --bundle "$BUNDLE_PATH" \ - --socket-dir-path "$SOCKET_PATH" \ - --log-level debug \ - --container-pidfile "$PID_FILE" \ - --conmon-pidfile "$CONMON_PID_FILE" & - - local conmon_pid=$! - sleep 2 - - if kill -0 $conmon_pid 2>/dev/null; then - kill $conmon_pid 2>/dev/null || true - wait $conmon_pid 2>/dev/null || true - fi - - # Check if log file exists and has content - if [ ! -f "$LOG_PATH" ] || [ ! -s "$LOG_PATH" ]; then - echo "Log file missing or empty - container runtime not available" - echo "Skipping functional test, verifying implementation exists" - - # Verify the fix implementation exists - grep -q "If buflen is 0, this is a drain operation" "$PWD/src/ctr_logging.c" || { - echo "Missing drain operation code" - return 1 - } - - skip "Container runtime not available for functional testing" - fi - - local log_content - log_content=$(cat "$LOG_PATH") - - echo "=== Log content ===" - echo "$log_content" - echo "=== End log ===" - - # For normal output with newlines, should NOT have standalone F-sequences - # (F-sequences should only appear for partial line termination) - ! echo "$log_content" | grep -q "stdout F$" || { - echo "Unexpected standalone F-sequence found for normal output" - return 1 - } -} \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/conmon-2.2.0/test/run-tests.sh new/conmon-2.2.1/test/run-tests.sh --- old/conmon-2.2.0/test/run-tests.sh 2026-01-12 11:08:40.000000000 +0100 +++ new/conmon-2.2.1/test/run-tests.sh 2026-02-12 17:58:22.000000000 +0100 @@ -61,10 +61,14 @@ check_dependencies() { local missing_deps=() - if ! command -v bats >/dev/null 2>&1; then + if ! command -v bats >& /dev/null; then missing_deps+=("bats") fi + if ! command -v socat >& /dev/null; then + missing_deps+=("socat") + fi + if [[ ! -x "$CONMON_BINARY" ]]; then missing_deps+=("conmon binary at $CONMON_BINARY") fi @@ -213,4 +217,4 @@ # Only run main if script is executed directly if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then main "$@" -fi \ No newline at end of file +fi
