You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by dm...@apache.org on 2023/02/28 10:30:08 UTC

[trafficserver] branch master updated: QUIC: Make some adjustment to the qlog configuration (#9461)

This is an automated email from the ASF dual-hosted git repository.

dmeden pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git


The following commit(s) were added to refs/heads/master by this push:
     new cfacdecd9 QUIC: Make some adjustment to the qlog configuration (#9461)
cfacdecd9 is described below

commit cfacdecd9866f025076b1b77e58e9e79dc25e70f
Author: Damian Meden <dm...@apache.org>
AuthorDate: Tue Feb 28 10:29:58 2023 +0000

    QUIC: Make some adjustment to the qlog configuration (#9461)
    
    Renamed the qlog_dir and make qlog its own map inside quic config.
---
 doc/admin-guide/files/records.yaml.en.rst           | 21 ++++++++++++++++++---
 iocore/net/QUICNetVConnection.cc                    |  2 +-
 iocore/net/QUICPacketHandler_quiche.cc              |  8 +++++---
 iocore/net/quic/QUICConfig.cc                       | 13 ++++++++-----
 iocore/net/quic/QUICConfig.h                        |  7 +++++--
 iocore/net/quic/qlog/QLogListener.h                 |  2 +-
 src/records/RecordsConfig.cc                        |  2 +-
 .../traffic_dump/traffic_dump_http3.test.py         |  2 +-
 tests/gold_tests/records/gold/full_records.yaml     |  3 ++-
 .../records/legacy_config/full_records.config       |  2 +-
 10 files changed, 43 insertions(+), 19 deletions(-)

diff --git a/doc/admin-guide/files/records.yaml.en.rst b/doc/admin-guide/files/records.yaml.en.rst
index 12cc3231c..9be55369f 100644
--- a/doc/admin-guide/files/records.yaml.en.rst
+++ b/doc/admin-guide/files/records.yaml.en.rst
@@ -4415,11 +4415,26 @@ QUIC Configuration
 All configurations for QUIC are still experimental and may be changed or
 removed in the future without prior notice.
 
-.. ts:cv:: CONFIG proxy.config.quic.qlog_dir STRING NULL
+.. ts:cv:: CONFIG proxy.config.quic.qlog.file_base STRING NULL
    :reloadable:
 
-    The qlog is enabled when this configuration is not NULL. And will dump
-    the qlog to this dir.
+   Sets qlog output to a specific base file name.  For a given file base name the file becomes
+   ``{file_base}-{trace id}.sqlog``.
+   Absolute path or relative to the configured prefix can be used.
+   Qlog is emitted  for each connection.
+
+   .. code-block:: yaml
+
+      ts:
+        quic:
+          qlog:
+            file_base: /my/logs/test1
+
+   The above configuration will make |TS| to generate Qlogs with the following format:
+
+.. code-block:: bash
+
+   /my/logs/test1-e9158839e54cb8f34ab00d34236ad5e19a49.sqlog
 
 .. ts:cv:: CONFIG proxy.config.quic.instance_id INT 0
    :reloadable:
diff --git a/iocore/net/QUICNetVConnection.cc b/iocore/net/QUICNetVConnection.cc
index 5d8290208..3abbeb032 100644
--- a/iocore/net/QUICNetVConnection.cc
+++ b/iocore/net/QUICNetVConnection.cc
@@ -477,7 +477,7 @@ QUICNetVConnection::start()
   this->_frame_dispatcher->add_handler(this->_handshake_handler);
 
   // register qlog
-  if (this->_context->config()->qlog_dir() != nullptr) {
+  if (this->_context->config()->get_qlog_file_base_name() != nullptr) {
     this->_qlog = std::make_unique<QLog::QLogListener>(*this->_context, this->_original_quic_connection_id.hex());
     this->_qlog->last_trace().set_vantage_point(
       {"ats", QLog::Trace::VantagePointType::server, QLog::Trace::VantagePointType::server});
diff --git a/iocore/net/QUICPacketHandler_quiche.cc b/iocore/net/QUICPacketHandler_quiche.cc
index a79c34492..34aa812e1 100644
--- a/iocore/net/QUICPacketHandler_quiche.cc
+++ b/iocore/net/QUICPacketHandler_quiche.cc
@@ -282,14 +282,16 @@ QUICPacketHandlerIn::_recv_packet(int event, UDPPacket *udp_packet)
                     &udp_packet->from.sa, udp_packet->from.isIp4() ? sizeof(udp_packet->from.sin) : sizeof(udp_packet->from.sin6),
                     &this->_quiche_config);
 
-    if (params->qlog_dir() != nullptr) {
+    if (params->get_qlog_file_base_name() != nullptr) {
       char qlog_filepath[PATH_MAX];
       const uint8_t *quic_trace_id;
       size_t quic_trace_id_len = 0;
       quiche_conn_trace_id(quiche_con, &quic_trace_id, &quic_trace_id_len);
-      snprintf(qlog_filepath, PATH_MAX, "%s/%.*s.sqlog", Layout::get()->relative(params->qlog_dir()).c_str(),
+      snprintf(qlog_filepath, PATH_MAX, "%s-%.*s.sqlog", Layout::get()->relative(params->get_qlog_file_base_name()).c_str(),
                static_cast<int>(quic_trace_id_len), quic_trace_id);
-      quiche_conn_set_qlog_path(quiche_con, qlog_filepath, "ats", "");
+      if (auto success = quiche_conn_set_qlog_path(quiche_con, qlog_filepath, "Apache Traffic Server", "qlog"); !success) {
+        QUICDebug("quiche_conn_set_qlog_path failed to use %s", qlog_filepath);
+      }
     }
 
     vc = static_cast<QUICNetVConnection *>(getNetProcessor()->allocate_vc(nullptr));
diff --git a/iocore/net/quic/QUICConfig.cc b/iocore/net/quic/QUICConfig.cc
index 8e06255e4..8058b5efc 100644
--- a/iocore/net/quic/QUICConfig.cc
+++ b/iocore/net/quic/QUICConfig.cc
@@ -95,8 +95,9 @@ quic_init_client_ssl_ctx(const QUICConfigParams *params)
 //
 QUICConfigParams::~QUICConfigParams()
 {
-  this->_server_supported_groups = (char *)ats_free_null(this->_server_supported_groups);
-  this->_client_supported_groups = (char *)ats_free_null(this->_client_supported_groups);
+  this->_server_supported_groups = static_cast<char *>(ats_free_null(this->_server_supported_groups));
+  this->_client_supported_groups = static_cast<char *>(ats_free_null(this->_client_supported_groups));
+  this->_qlog_file_base_name     = static_cast<char *>(ats_free_null(this->_qlog_file_base_name));
 
   SSL_CTX_free(this->_client_ssl_ctx.get());
 };
@@ -117,7 +118,9 @@ QUICConfigParams::initialize()
   REC_ReadConfigStringAlloc(this->_server_supported_groups, "proxy.config.quic.server.supported_groups");
   REC_ReadConfigStringAlloc(this->_client_supported_groups, "proxy.config.quic.client.supported_groups");
   REC_ReadConfigStringAlloc(this->_client_session_file, "proxy.config.quic.client.session_file");
-  REC_ReadConfigStringAlloc(this->_qlog_dir, "proxy.config.quic.qlog_dir");
+
+  // Qlog
+  REC_ReadConfigStringAlloc(this->_qlog_file_base_name, "proxy.config.quic.qlog.file_base");
 
   // Transport Parameters
   REC_EstablishStaticConfigInt32U(this->_no_activity_timeout_in, "proxy.config.quic.no_activity_timeout_in");
@@ -442,9 +445,9 @@ QUICConfigParams::client_session_file() const
 }
 
 const char *
-QUICConfigParams::qlog_dir() const
+QUICConfigParams::get_qlog_file_base_name() const
 {
-  return this->_qlog_dir;
+  return this->_qlog_file_base_name;
 }
 
 //
diff --git a/iocore/net/quic/QUICConfig.h b/iocore/net/quic/QUICConfig.h
index 82f9c7e93..12044a4c0 100644
--- a/iocore/net/quic/QUICConfig.h
+++ b/iocore/net/quic/QUICConfig.h
@@ -46,7 +46,9 @@ public:
   const char *server_supported_groups() const;
   const char *client_supported_groups() const;
   const char *client_session_file() const;
-  const char *qlog_dir() const;
+
+  // qlog
+  const char *get_qlog_file_base_name() const;
 
   shared_SSL_CTX client_ssl_ctx() const;
 
@@ -106,7 +108,8 @@ private:
   char *_server_supported_groups = nullptr;
   char *_client_supported_groups = nullptr;
   char *_client_session_file     = nullptr;
-  char *_qlog_dir                = nullptr;
+  // qlog
+  char *_qlog_file_base_name = nullptr;
 
   shared_SSL_CTX _client_ssl_ctx = nullptr;
 
diff --git a/iocore/net/quic/qlog/QLogListener.h b/iocore/net/quic/qlog/QLogListener.h
index 9337b075f..6f28c2d22 100644
--- a/iocore/net/quic/qlog/QLogListener.h
+++ b/iocore/net/quic/qlog/QLogListener.h
@@ -99,7 +99,7 @@ public:
   void
   connection_close_callback(QUICCallbackContext &) override
   {
-    this->_log.dump(this->_context.config()->qlog_dir());
+    this->_log.dump(this->_context.config()->get_qlog_file_base_name());
   }
 
   Trace &
diff --git a/src/records/RecordsConfig.cc b/src/records/RecordsConfig.cc
index 924445037..31317d76b 100644
--- a/src/records/RecordsConfig.cc
+++ b/src/records/RecordsConfig.cc
@@ -1390,7 +1390,7 @@ static const RecordElement RecordsConfig[] =
   ,
   {RECT_CONFIG, "proxy.config.quic.client.session_file", RECD_STRING, nullptr , RECU_RESTART_TS, RR_NULL, RECC_NULL, nullptr, RECA_NULL}
   ,
-  {RECT_CONFIG, "proxy.config.quic.qlog_dir", RECD_STRING, nullptr , RECU_RESTART_TS, RR_NULL, RECC_NULL, nullptr, RECA_NULL}
+  {RECT_CONFIG, "proxy.config.quic.qlog.file_base", RECD_STRING, nullptr , RECU_DYNAMIC, RR_NULL, RECC_NULL, nullptr, RECA_NULL}
   ,
   // Transport Parameters
   {RECT_CONFIG, "proxy.config.quic.no_activity_timeout_in", RECD_INT, "30000", RECU_DYNAMIC, RR_NULL, RECC_STR, "^-?[0-9]+$", RECA_NULL}
diff --git a/tests/gold_tests/pluginTest/traffic_dump/traffic_dump_http3.test.py b/tests/gold_tests/pluginTest/traffic_dump/traffic_dump_http3.test.py
index 48268b21a..68617add5 100644
--- a/tests/gold_tests/pluginTest/traffic_dump/traffic_dump_http3.test.py
+++ b/tests/gold_tests/pluginTest/traffic_dump/traffic_dump_http3.test.py
@@ -55,7 +55,7 @@ ts.Disk.records_config.update({
     'proxy.config.diags.debug.tags': 'traffic_dump|quic',
     'proxy.config.http.insert_age_in_response': 0,
 
-    'proxy.config.quic.qlog_dir': qlog_dir,
+    'proxy.config.quic.qlog.file_base': qlog_dir,
 
     'proxy.config.ssl.server.cert.path': ts.Variables.SSLDir,
     'proxy.config.ssl.server.private_key.path': ts.Variables.SSLDir,
diff --git a/tests/gold_tests/records/gold/full_records.yaml b/tests/gold_tests/records/gold/full_records.yaml
index b211a3118..b8372eee7 100644
--- a/tests/gold_tests/records/gold/full_records.yaml
+++ b/tests/gold_tests/records/gold/full_records.yaml
@@ -462,7 +462,8 @@ ts:
     num_alt_connection_ids: 8
     preferred_address_ipv4: null
     preferred_address_ipv6: null
-    qlog_dir: null
+    qlog:
+      file_base: null
     server:
       quantum_readiness_test_enabled: 0
       stateless_retry_enabled: 0
diff --git a/tests/gold_tests/records/legacy_config/full_records.config b/tests/gold_tests/records/legacy_config/full_records.config
index 2bad9fadf..c88cdf1cf 100644
--- a/tests/gold_tests/records/legacy_config/full_records.config
+++ b/tests/gold_tests/records/legacy_config/full_records.config
@@ -448,7 +448,7 @@ CONFIG proxy.config.quic.server.quantum_readiness_test_enabled INT 0
 CONFIG proxy.config.quic.server.supported_groups STRING P-256:X25519:P-384:P-52
 CONFIG proxy.config.quic.client.supported_groups STRING P-256:X25519:P-384:P-52
 CONFIG proxy.config.quic.client.session_file STRING nullptr
-CONFIG proxy.config.quic.qlog_dir STRING nullptr
+CONFIG proxy.config.quic.qlog.file_base STRING nullptr
 CONFIG proxy.config.quic.no_activity_timeout_in INT 30000
 CONFIG proxy.config.quic.no_activity_timeout_out INT 30000
 CONFIG proxy.config.quic.preferred_address_ipv4 STRING nullptr