Tags: NVIDIA/OSMO
Tags
Merge pull request #1110 from NVIDIA/elookpotts/cherrypick-nextjs-6-3 fix: bump next.js compliance dependencies
Upgrade urllib3 to 2.7.0 (#1034) Pin urllib3 directly in runtime and test requirements and refresh generated lockfiles. Reason: GHSA-mf9v-mfxr-j63j
rsync: error on download when remote source does not exist (#1019) * rsync: error on download when remote source does not exist The gokrazy/rsync daemon exits 0 with zero files transferred when the requested remote path doesn't exist on the task pod, so the CLI's returncode check was the success branch — printing "Synced N files" (N counted from rsync's verbose chatter, not real transfers) and "Rsync download completed successfully" while leaving the local destination empty. After a successful rsync, compare destination contents against a pre-transfer snapshot. For sources without a trailing slash we look for the basename in dst (correctly handles re-download of in-sync files); for trailing-slash sources we check for any new entry. Drop the misleading "Synced N files" tail in _stream_progress. Fixes NVBug 6176483 / OSMO-6380. Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com> * rsync: rename dest_before -> dst_before, snapshot only for trailing-slash Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com> * rsync: address CodeRabbit S108 — neutral placeholder local_path in test Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
rsync: fix ValueError 'Invalid file descriptor: -1' on download shutd… …own (#987) * rsync: fix ValueError 'Invalid file descriptor: -1' on download shutdown Three layered fixes for the spurious shutdown error reported after a successful rsync download: 1. rsync.py RsyncClient.stop(): remove self._sock.close(). Once asyncio.start_server(sock=sock) is called in run_tcp_with_sock, the event loop owns the socket registration. Closing the fd externally before server.close() runs causes _stop_serving() to call sock.fileno() and get -1. 2. port_forward.py run_tcp_with_sock: drop server.serve_forever() from first_completed. The server is already active inside `async with server`; serve_forever() is redundant there. first_completed cancels tasks it creates but never awaits them, so the serve_forever task was leaking to asyncio.run() shutdown where its CancelledError handler called server.close() on an already-closed socket. 3. port_forward.py run_tcp_with_sock: catch ValueError from server.close() → _stop_serving() when the socket fd is already -1. This defensive layer handles run_tcp_with_sock itself being leaked by its caller (_port_forward's first_completed), cancelled during asyncio.run() cleanup after _port_forward's finally block closed the socket. Fixes NVBug 6164110 / OSMO-6361. Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com> * rsync: strengthen shutdown fix and add unit tests Follow-up to the initial fix: - rsync.py RsyncClient.stop(): await task cancellation via asyncio.gather so the port-forward task's server.close() and socket cleanup fully complete before stop() returns. Also skip tasks that are already done or are the current task. - port_forward.py run_tcp_with_sock: replace `async with server` with explicit try/finally so server.close() + wait_closed() are called under our control. Suppress ValueError only when sock.fileno() == -1 (closed externally); re-raise for any other ValueError. - Add test_port_forward.py with two cases: suppresses the shutdown ValueError when the socket is externally closed, and re-raises ValueError when the socket is still open. Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com> * rsync: shorten stop() comment to one line Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com> * rsync: log non-cancellation errors from gather in stop() Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
PreviousNext