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

sudheerv 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 59c5e25  Track thread changes during origin connect and cache open 
write (#6872)
59c5e25 is described below

commit 59c5e25846b0dfe8720b5027fecac72af2da1545
Author: Sudheer Vinukonda <sudhe...@apache.org>
AuthorDate: Thu Jun 11 22:29:57 2020 -0700

    Track thread changes during origin connect and cache open write (#6872)
    
    Also make adjust_thread() inline as an optimization
---
 proxy/ProxyTransaction.cc | 17 -----------------
 proxy/ProxyTransaction.h  | 17 +++++++++++++++++
 proxy/http/HttpConfig.cc  |  6 ++++++
 proxy/http/HttpConfig.h   |  3 +++
 proxy/http/HttpSM.cc      |  2 ++
 5 files changed, 28 insertions(+), 17 deletions(-)

diff --git a/proxy/ProxyTransaction.cc b/proxy/ProxyTransaction.cc
index 3f824e0..9be892f 100644
--- a/proxy/ProxyTransaction.cc
+++ b/proxy/ProxyTransaction.cc
@@ -83,23 +83,6 @@ ProxyTransaction::destroy()
   this->mutex.clear();
 }
 
-// See if we need to schedule on the primary thread for the transaction or 
change the thread that is associated with the VC.
-// If we reschedule, the scheduled action is returned.  Otherwise, NULL is 
returned
-Action *
-ProxyTransaction::adjust_thread(Continuation *cont, int event, void *data)
-{
-  NetVConnection *vc   = this->get_netvc();
-  EThread *this_thread = this_ethread();
-  if (vc && vc->thread != this_thread) {
-    if (vc->thread->is_event_type(ET_NET)) {
-      return vc->thread->schedule_imm(cont, event, data);
-    } else { // Not a net thread, take over this thread
-      vc->thread = this_thread;
-    }
-  }
-  return nullptr;
-}
-
 void
 ProxyTransaction::set_rx_error_code(ProxyError e)
 {
diff --git a/proxy/ProxyTransaction.h b/proxy/ProxyTransaction.h
index 51f35db..83a2111 100644
--- a/proxy/ProxyTransaction.h
+++ b/proxy/ProxyTransaction.h
@@ -221,3 +221,20 @@ ProxyTransaction::support_sni() const
 {
   return _proxy_ssn ? _proxy_ssn->support_sni() : false;
 }
+
+// See if we need to schedule on the primary thread for the transaction or 
change the thread that is associated with the VC.
+// If we reschedule, the scheduled action is returned.  Otherwise, NULL is 
returned
+inline Action *
+ProxyTransaction::adjust_thread(Continuation *cont, int event, void *data)
+{
+  NetVConnection *vc   = this->get_netvc();
+  EThread *this_thread = this_ethread();
+  if (vc && vc->thread != this_thread) {
+    if (vc->thread->is_event_type(ET_NET)) {
+      return vc->thread->schedule_imm(cont, event, data);
+    } else { // Not a net thread, take over this thread
+      vc->thread = this_thread;
+    }
+  }
+  return nullptr;
+}
diff --git a/proxy/http/HttpConfig.cc b/proxy/http/HttpConfig.cc
index 4f00b34..0c51d04 100644
--- a/proxy/http/HttpConfig.cc
+++ b/proxy/http/HttpConfig.cc
@@ -942,6 +942,12 @@ register_stat_callbacks()
                      (int)http_origin_connections_throttled_stat, 
RecRawStatSyncCount);
   RecRegisterRawStat(http_rsb, RECT_PROCESS, 
"proxy.process.http.post_body_too_large", RECD_COUNTER, RECP_PERSISTENT,
                      (int)http_post_body_too_large, RecRawStatSyncCount);
+  RecRegisterRawStat(http_rsb, RECT_PROCESS, 
"proxy.process.http.origin.connect.adjust_thread", RECD_COUNTER, 
RECP_NON_PERSISTENT,
+                     (int)http_origin_connect_adjust_thread_stat, 
RecRawStatSyncCount);
+  HTTP_CLEAR_DYN_STAT(http_origin_connect_adjust_thread_stat);
+  RecRegisterRawStat(http_rsb, RECT_PROCESS, 
"proxy.process.http.cache.open_write.adjust_thread", RECD_COUNTER, 
RECP_NON_PERSISTENT,
+                     (int)http_cache_open_write_adjust_thread_stat, 
RecRawStatSyncCount);
+  HTTP_CLEAR_DYN_STAT(http_cache_open_write_adjust_thread_stat);
   // milestones
   RecRegisterRawStat(http_rsb, RECT_PROCESS, 
"proxy.process.http.milestone.ua_begin", RECD_COUNTER, RECP_PERSISTENT,
                      (int)http_ua_begin_time_stat, RecRawStatSyncSum);
diff --git a/proxy/http/HttpConfig.h b/proxy/http/HttpConfig.h
index ed0fcce..980c629 100644
--- a/proxy/http/HttpConfig.h
+++ b/proxy/http/HttpConfig.h
@@ -328,6 +328,9 @@ enum {
 
   http_origin_connections_throttled_stat,
 
+  http_origin_connect_adjust_thread_stat,
+  http_cache_open_write_adjust_thread_stat,
+
   http_stat_count
 };
 
diff --git a/proxy/http/HttpSM.cc b/proxy/http/HttpSM.cc
index 6dfbe23..323564f 100644
--- a/proxy/http/HttpSM.cc
+++ b/proxy/http/HttpSM.cc
@@ -2451,6 +2451,7 @@ HttpSM::state_cache_open_write(int event, void *data)
       pending_action->cancel();
     }
     if ((pending_action = ua_txn->adjust_thread(this, event, data))) {
+      HTTP_INCREMENT_DYN_STAT(http_cache_open_write_adjust_thread_stat);
       return 0; // Go away if we reschedule
     }
   }
@@ -4818,6 +4819,7 @@ HttpSM::do_http_server_open(bool raw)
   // Make sure we are on the "right" thread
   if (ua_txn) {
     if ((pending_action = ua_txn->adjust_thread(this, EVENT_INTERVAL, 
nullptr))) {
+      HTTP_INCREMENT_DYN_STAT(http_origin_connect_adjust_thread_stat);
       return; // Go away if we reschedule
     }
   }

Reply via email to