| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
Add port descriptor destroy API (#13518) TSPortDescriptorParse allocates an HttpProxyPort that plugins cannot release, so every parsed descriptor leaks for the lifetime of Traffic Server. The API also lacks end-to-end coverage that verifies the accept callback. This patch adds TSPortDescriptorDestroy while preserving the opaque handle ABI, validates unusable descriptors during parsing, and documents the ownership contract. It updates API users and adds an AuTest that opens a dynamically selected port and observes the accept callback. Fixes: #6894 | 1 个月前 | |
Add lz4 and zstd compression support to the CLFUS RAM cache (#13257) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> | 6 天前 | |
Remove autopep8 references since we use yapf (#12579) We have long since transitioned to yapf from autopep8. This completes the transition by removing autopep8 references that are still hanging around so that people are not confused by those references. | 10 个月前 | |
Make sense out of ci directory git-svn-id: https://svn.apache.org/repos/asf/trafficserver/traffic/trunk@943855 13f79535-47bb-0310-9956-ffa450edef68 | 16 年前 | |
Upgrade bundled RAT to 0.17 (#13071) This switches the bundled RAT tool to the official 0.17 release and updates the rat target to use the new exclude-file CLI. This rewrites the exclusion list for RAT 0.17 path matching so the existing ignored inputs still stay out of the report. It also excludes huge_resp_hdrs.conf because RAT 0.17 misclassifies that fixture as an unknown file type despite its ASF header. Co-authored-by: bneradt <bneradt@yahooinc.com> | 5 个月前 | |
ci: modernize the coverage helper script (#13305) Rework ci/coverage to drive an out-of-source CMake build and an optional autest run (AUTEST='*/tls/*' or AUTEST=all) when gathering coverage, and report via gcov/gcovr. | 3 个月前 | |
Remove PCRE references, complete migration to PCRE2 (#12685) - Remove cmake/FindPCRE.cmake (no longer needed) - Update all CMakeLists.txt files to use PkgConfig::PCRE2 instead of PCRE::PCRE - Remove find_package(PCRE) from main CMakeLists.txt - Update code comments from PCRE to PCRE2 in plugin sources - Update coverity model from PCRE to PCRE2 API - Update README example to remove obsolete PCRE_ROOT reference - Update tools/hrw4u/src/lsp/documentation.py to reference PCRE2 - Note: cripts::Matcher::PCRE class name intentionally unchanged (public API) - Remove redundant PCRE2 links, use tsutil Regex wrapper - Use RE_ERROR_NOMATCH from tsutil instead of PCRE2_ERROR_NOMATCH in ControlMatcher to properly use the Regex wrapper - Remove direct pcre2.h include from ControlMatcher.h - Remove redundant PCRE2 links from components that get it transitively through tsutil (tscore, tsapi) - Remove redundant PCRE2 links from plugins that only use tsutil/Regex.h (cachekey, prefetch, slice, tls_bridge) Only components that directly use PCRE2 APIs (tsutil, cripts, txn_box) should explicitly link PCRE2. Others get it transitively through tsutil which publicly exports PCRE2. | 9 个月前 | |
Add H3 quiche traffic handling tests and provide fixes (#13213) # Overview This patch extends the HTTP/3 autest coverage, using curl, Go, Python/aioquic, and Proxy Verifier HTTP/3 clients to generate their implementations of H3 traffic. It also adds request and response bodies of various sizes, including "large" 300k bodies to exercise multiple packet, buffer, and flow control ATS HTTP/3 implementations. It also exercises interesting requests and responses, such as HEAD, 204, PUT, DELETE, OPTIONS, range responses over cached objects, and malformed HTTP/3 frame behavior. This patch also includes the various production fixes needed for these tests. # Issues Found and their Fixes ## UDP batches could stall large H3 transfers Large request and response bodies exposed a UDP receive starvation bug in the UDP read path. On systems using `recvmmsg()` with edge-triggered readiness, ATS could read one full batch of datagrams and then leave the rest queued in the kernel without another readable event to wake the QUIC stack. This changes `UDPNetProcessorInternal::read_multiple_messages_from_net()` in `src/iocore/net/UnixUDPNet.cc` to return whether the kernel supplied a full batch. `udp_read_from_net()` now processes a bounded number of full batches per event, preserving UDP batching for H3 while avoiding both unread UDP bursts and unbounded net-thread monopolization under sustained QUIC load. ## QUIC stream writes consumed data before quiche accepted it The stream write path consumed the `QUICStreamVCAdapter` write reader inside `_read()`, before `QUICStream::send_data()` knew whether `quiche_conn_stream_send()` had accepted the bytes. When quiche accepted only a partial write or returned a flow-control error, ATS could lose stream data and report write progress too early. This makes `QUICStream::send_data()` keep a pending `IOBufferBlock`/FIN pair until quiche reports successful consumption, and only then calls the new `QUICStreamAdapter::consume()` hook. The concrete reader accounting lives in `QUICStreamVCAdapter::_consume()`, while `QUICStream::has_data_to_send()`, `QUICStream::on_write()`, and `QUICNetVConnection::on_stream_updated()` make newly writable stream data schedule packet writes again. This also treats completed finite writes with only FIN left as writable stream state, so empty bodies and fully consumed bodies still close the H3 stream cleanly. ## QUIC stream reads could expose bytes beyond the VIO request The large-body tests exposed that `QUICStreamVCAdapter::_read()` could hand more data to the transaction than the read VIO requested. That was usually hidden by small bodies, but larger reads made finite request-body accounting fragile. This clamps cloned input blocks in `QUICStreamVCAdapter::_read()` to the requested and available byte count before filling the read VIO. The adapter now also checks for a missing reader before touching the read buffer, which makes late stream cleanup paths more defensive. ## H3 transaction cleanup raced with stream closure The timeout and stream lifetime tests exposed cases where an `HQTransaction` could be deleted while an event handler was still active, or while the QUIC stream adapter still had read/write cleanup to finish. That left later stream-close and timeout paths touching state that had already been torn down. This makes the transaction and stream closed state derive from the active event handlers instead of separate booleans that could drift from the adapter state. `Http3App::on_stream_close()` now calls `HQTransaction::stream_closed()` while holding the transaction mutex, and `HQTransaction::_delete_if_possible()` waits until the transaction is done, the stream is closed or no longer readable, and pending writes have flushed before deleting the transaction. ## Malformed H3 streams could leave transactions behind The aioquic edge-case probes found malformed request streams that were correctly rejected at the H3 layer but still left partially constructed transactions attached to the session. Session teardown then either asserted because the transaction list was not empty or touched the H3 session after `Http3Session` had already nulled its network connection. This adds `HQSession::_close_transactions()` and drains any remaining transactions before destroying the H3 session-specific state. It also lets `Http3App::on_stream_close()` attach a cleanup callback to the transaction so the application stream map is erased when the transaction is actually destroyed, rather than when quiche first reports stream closure. ## H3 read completion could run before headers and DATA were settled The H3 request read path could signal completion before asynchronous QPACK header decode and buffered DATA delivery had finished updating the sink VIO. That showed up around HEAD, 204, and stream-close timing because the HTTP state machine needed a stable view of whether headers were decoded and whether a request body existed. This updates `Http3HeaderVIOAdaptor::_on_qpack_decode_complete()` to add the printed header length to the sink VIO and notify `Http3Transaction::on_header_decode_complete()`, which schedules the appropriate read event. `Http3StreamDataVIOAdaptor::finalize()` now uses a persistent reader, writes buffered DATA into the sink VIO exactly once, and updates `ndone`/`nbytes` consistently before the transaction is signaled. ## Malformed H3 frames were not consistently enforced The aioquic client can write raw QUIC stream data, which exposed gaps in ATS's HTTP/3 frame validation. Reserved frames on request streams, DATA-before-HEADERS, client-created push streams, and duplicate control streams did not all reliably close the QUIC connection with an H3 application error. This adds request-stream enforcement through `Http3ProtocolEnforcer` in `Http3Transaction`, recognizes reserved HTTP/3 frame types in `Http3Frame`, and routes connection-level errors through `Http3App::_handle_error()` and `Http3Transaction::_handle_error()` to close the QUIC connection. The transaction signal path now also avoids calling the HTTP state machine through closed transactions or the initial zero-byte write VIO created before the HTTP response handler is installed. ## The QPACK static table had drifted from the standard table The HEAD, 204, and quic-go coverage exposed that ATS's static QPACK table was not the table used by external HTTP/3 implementations. The extra zstd entry and modified `accept-encoding` value in `src/proxy/http3/QPACK.cc` shifted later static indexes, so an externally encoded `:status 204` could decode as a different status. This restores the standard static table entries by using `accept-encoding: gzip, deflate, br` and removing the non-standard `content-encoding: zstd` entry. The new 204 cases in `tests/gold_tests/h3/replays/h3_proxy_verifier.replay.yaml`, `tests/gold_tests/h3/replays/h3_server_for_go_client.replay.yaml`, and `tests/gold_tests/h3/replays/h3_server_for_python_client.replay.yaml` cover this interoperability point with Proxy Verifier, quic-go, and aioquic. | 1 个月前 | |
Upgrade bundled RAT to 0.17 (#13071) This switches the bundled RAT tool to the official 0.17 release and updates the rat target to use the new exclude-file CLI. This rewrites the exclusion list for RAT 0.17 path matching so the existing ignored inputs still stay out of the report. It also excludes huge_resp_hdrs.conf because RAT 0.17 misclassifies that fixture as an unknown file type despite its ASF header. Co-authored-by: bneradt <bneradt@yahooinc.com> | 5 个月前 | |
TCL: Remove TCL from our code base | 7 年前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 个月前 | ||
| 6 天前 | ||
| 10 个月前 | ||
| 16 年前 | ||
| 5 个月前 | ||
| 3 个月前 | ||
| 9 个月前 | ||
| 1 个月前 | ||
| 5 个月前 | ||
| 7 年前 |