You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by bc...@apache.org on 2016/03/10 18:13:24 UTC

trafficserver git commit: TS-4267: HTTP/2 Updates to debugging

Repository: trafficserver
Updated Branches:
  refs/heads/master 86a3d404a -> 940ff5c56


TS-4267: HTTP/2 Updates to debugging

This closes #522


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/940ff5c5
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/940ff5c5
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/940ff5c5

Branch: refs/heads/master
Commit: 940ff5c56bebabb96130a55c2a17212c5c518138
Parents: 86a3d40
Author: Bryan Call <bc...@apache.org>
Authored: Thu Mar 10 09:12:32 2016 -0800
Committer: Bryan Call <bc...@apache.org>
Committed: Thu Mar 10 09:12:32 2016 -0800

----------------------------------------------------------------------
 proxy/http2/Http2ConnectionState.cc | 13 ++++++++++---
 proxy/http2/Http2DebugNames.cc      | 23 +++++++++++++++++++++++
 proxy/http2/Http2DebugNames.h       |  1 +
 proxy/http2/Http2Stream.h           |  2 ++
 4 files changed, 36 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/940ff5c5/proxy/http2/Http2ConnectionState.cc
----------------------------------------------------------------------
diff --git a/proxy/http2/Http2ConnectionState.cc b/proxy/http2/Http2ConnectionState.cc
index 4d33830..077f8ea 100644
--- a/proxy/http2/Http2ConnectionState.cc
+++ b/proxy/http2/Http2ConnectionState.cc
@@ -533,11 +533,10 @@ rcv_window_update_frame(Http2ConnectionState &cstate, const Http2Frame &frame)
   uint32_t size;
   const Http2StreamId sid = frame.header().streamid;
 
-  DebugHttp2Stream(cstate.ua_session, sid, "Received WINDOW_UPDATE frame");
-
   //  A WINDOW_UPDATE frame with a length other than 4 octets MUST be
   //  treated as a connection error of type FRAME_SIZE_ERROR.
   if (frame.header().length != HTTP2_WINDOW_UPDATE_LEN) {
+    DebugHttp2Stream(cstate.ua_session, sid, "Received WINDOW_UPDATE frame - length incorrect");
     return Http2Error(HTTP2_ERROR_CLASS_CONNECTION, HTTP2_ERROR_FRAME_SIZE_ERROR);
   }
 
@@ -546,6 +545,9 @@ rcv_window_update_frame(Http2ConnectionState &cstate, const Http2Frame &frame)
     frame.reader()->memcpy(buf, sizeof(buf), 0);
     http2_parse_window_update(make_iovec(buf, sizeof(buf)), size);
 
+    DebugHttp2Stream(cstate.ua_session, sid, "Received WINDOW_UPDATE frame - updated to: %zd delta: %u",
+                     (cstate.client_rwnd + size), size);
+
     // A receiver MUST treat the receipt of a WINDOW_UPDATE frame with a
     // connection
     // flow control window increment of 0 as a connection error of type
@@ -582,6 +584,9 @@ rcv_window_update_frame(Http2ConnectionState &cstate, const Http2Frame &frame)
     frame.reader()->memcpy(buf, sizeof(buf), 0);
     http2_parse_window_update(make_iovec(buf, sizeof(buf)), size);
 
+    DebugHttp2Stream(cstate.ua_session, sid, "Received WINDOW_UPDATE frame - updated to: %zd delta: %u",
+                     (stream->client_rwnd + size), size);
+
     // A receiver MUST treat the receipt of a WINDOW_UPDATE frame with an
     // flow control window increment of 0 as a stream error of type
     // PROTOCOL_ERROR;
@@ -919,7 +924,6 @@ Http2ConnectionState::send_data_frame(FetchSM *fetch_sm)
   uint8_t payload_buffer[buf_len];
 
   Http2Stream *stream = static_cast<Http2Stream *>(fetch_sm->ext_get_user_data());
-  DebugHttp2Stream(ua_session, stream->get_id(), "Send DATA frame");
 
   if (stream->get_state() == HTTP2_STREAM_STATE_CLOSED) {
     return;
@@ -952,6 +956,8 @@ Http2ConnectionState::send_data_frame(FetchSM *fetch_sm)
     }
 
     // Create frame
+    DebugHttp2Stream(ua_session, stream->get_id(), "Send DATA frame - client window con: %zd stream: %zd payload: %zd", client_rwnd,
+                     stream->client_rwnd, payload_length);
     Http2Frame data(HTTP2_FRAME_TYPE_DATA, stream->get_id(), flags);
     data.alloc(buffer_size_index[HTTP2_FRAME_TYPE_DATA]);
     http2_write_data(payload_buffer, payload_length, data.write());
@@ -959,6 +965,7 @@ Http2ConnectionState::send_data_frame(FetchSM *fetch_sm)
 
     // Change state to 'closed' if its end of DATAs.
     if (flags & HTTP2_FLAGS_DATA_END_STREAM) {
+      DebugHttp2Stream(ua_session, stream->get_id(), "End of DATA frame");
       if (!stream->change_state(data.header().type, data.header().flags)) {
         this->send_goaway_frame(stream->get_id(), HTTP2_ERROR_PROTOCOL_ERROR);
       }

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/940ff5c5/proxy/http2/Http2DebugNames.cc
----------------------------------------------------------------------
diff --git a/proxy/http2/Http2DebugNames.cc b/proxy/http2/Http2DebugNames.cc
index 1a4f967..8009cfd 100644
--- a/proxy/http2/Http2DebugNames.cc
+++ b/proxy/http2/Http2DebugNames.cc
@@ -45,3 +45,26 @@ Http2DebugNames::get_settings_param_name(uint16_t id)
 
   return "UNKNOWN";
 }
+
+const char *
+Http2DebugNames::get_state_name(uint16_t id)
+{
+  switch (id) {
+  case HTTP2_STREAM_STATE_IDLE:
+    return "HTTP2_STREAM_STATE_IDLE";
+  case HTTP2_STREAM_STATE_RESERVED_LOCAL:
+    return "HTTP2_STREAM_STATE_RESERVED_LOCAL";
+  case HTTP2_STREAM_STATE_RESERVED_REMOTE:
+    return "HTTP2_STREAM_STATE_RESERVED_REMOTE";
+  case HTTP2_STREAM_STATE_OPEN:
+    return "HTTP2_STREAM_STATE_OPEN";
+  case HTTP2_STREAM_STATE_HALF_CLOSED_LOCAL:
+    return "HTTP2_STREAM_STATE_HALF_CLOSED_LOCAL";
+  case HTTP2_STREAM_STATE_HALF_CLOSED_REMOTE:
+    return "HTTP2_STREAM_STATE_HALF_CLOSED_REMOTE";
+  case HTTP2_STREAM_STATE_CLOSED:
+    return "HTTP2_STREAM_STATE_CLOSED";
+  }
+
+  return "UNKNOWN";
+}

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/940ff5c5/proxy/http2/Http2DebugNames.h
----------------------------------------------------------------------
diff --git a/proxy/http2/Http2DebugNames.h b/proxy/http2/Http2DebugNames.h
index cf6d077..b836477 100644
--- a/proxy/http2/Http2DebugNames.h
+++ b/proxy/http2/Http2DebugNames.h
@@ -30,6 +30,7 @@ class Http2DebugNames
 {
 public:
   static const char *get_settings_param_name(uint16_t id);
+  static const char *get_state_name(uint16_t id);
 };
 
 #endif // __HTTP2_DEBUG_NAMES_H__

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/940ff5c5/proxy/http2/Http2Stream.h
----------------------------------------------------------------------
diff --git a/proxy/http2/Http2Stream.h b/proxy/http2/Http2Stream.h
index 4bc196d..b89fb02 100644
--- a/proxy/http2/Http2Stream.h
+++ b/proxy/http2/Http2Stream.h
@@ -26,6 +26,7 @@
 
 #include "HTTP2.h"
 #include "FetchSM.h"
+#include "Http2DebugNames.h"
 
 class Http2ConnectionState;
 
@@ -46,6 +47,7 @@ public:
 
   ~Http2Stream()
   {
+    Debug("http2_stream", "[%d] state: %s", _id, Http2DebugNames::get_state_name(_state));
     HTTP2_DECREMENT_THREAD_DYN_STAT(HTTP2_STAT_CURRENT_CLIENT_STREAM_COUNT, _thread);
     ink_hrtime end_time = Thread::get_hrtime();
     HTTP2_SUM_THREAD_DYN_STAT(HTTP2_STAT_TOTAL_TRANSACTIONS_TIME, _thread, end_time - _start_time);