You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by zw...@apache.org on 2021/04/07 14:55:11 UTC

[trafficserver] 01/02: Do NOT kill tunnel if it has any consumer besides HT_HTTP_CLIENT (#7641)

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

zwoop pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/trafficserver.git

commit 0ceccad534b34af1694627689725541268ef304f
Author: Masaori Koshiba <ma...@apache.org>
AuthorDate: Fri Apr 2 07:56:13 2021 +0900

    Do NOT kill tunnel if it has any consumer besides HT_HTTP_CLIENT (#7641)
    
    (cherry picked from commit 270ca6e84eba758e44c9b2a15046eaa7b8af8d8a)
---
 proxy/http/HttpSM.cc    |  4 ++--
 proxy/http/HttpTunnel.h | 26 ++++++++++++++++++++++++++
 2 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/proxy/http/HttpSM.cc b/proxy/http/HttpSM.cc
index aa88ede..1fa9ef7 100644
--- a/proxy/http/HttpSM.cc
+++ b/proxy/http/HttpSM.cc
@@ -901,9 +901,9 @@ HttpSM::state_watch_for_client_abort(int event, void *data)
    * client.
    */
   case VC_EVENT_EOS: {
-    // We got an early EOS.
+    // We got an early EOS. If the tunnal has cache writer, don't kill it for background fill.
     NetVConnection *netvc = ua_txn->get_netvc();
-    if (ua_txn->allow_half_open()) {
+    if (ua_txn->allow_half_open() || tunnel.has_consumer_besides_client()) {
       if (netvc) {
         netvc->do_io_shutdown(IO_SHUTDOWN_READ);
       }
diff --git a/proxy/http/HttpTunnel.h b/proxy/http/HttpTunnel.h
index c6aa9fc..7774e2c 100644
--- a/proxy/http/HttpTunnel.h
+++ b/proxy/http/HttpTunnel.h
@@ -282,6 +282,7 @@ public:
   }
   bool is_tunnel_alive() const;
   bool has_cache_writer() const;
+  bool has_consumer_besides_client() const;
 
   HttpTunnelProducer *add_producer(VConnection *vc, int64_t nbytes, IOBufferReader *reader_start, HttpProducerHandler sm_handler,
                                    HttpTunnelType_t vc_type, const char *name);
@@ -514,6 +515,31 @@ HttpTunnel::has_cache_writer() const
   return false;
 }
 
+/**
+   Return false if there is only a consumer for client
+ */
+inline bool
+HttpTunnel::has_consumer_besides_client() const
+{
+  bool res = true;
+
+  for (const auto &consumer : consumers) {
+    if (!consumer.alive) {
+      continue;
+    }
+
+    if (consumer.vc_type == HT_HTTP_CLIENT) {
+      res = false;
+      continue;
+    } else {
+      res = true;
+      break;
+    }
+  }
+
+  return res;
+}
+
 inline bool
 HttpTunnelConsumer::is_downstream_from(VConnection *vc)
 {