ソースを参照

Merge branch 'master' of https://github.com/grpc/grpc

Srini Polavarapu 6 年 前
コミット
a1f863a2d9
36 ファイル変更503 行追加446 行削除
  1. 3 0
      .gitmodules
  2. 1 0
      BUILD
  3. 12 0
      bazel/grpc_deps.bzl
  4. 2 0
      include/grpc/impl/codegen/atm_gcc_sync.h
  5. 2 0
      include/grpc/impl/codegen/atm_windows.h
  6. 2 32
      src/core/ext/filters/client_channel/lb_policy/xds/xds.cc
  7. 8 27
      src/core/ext/transport/chttp2/transport/chttp2_transport.cc
  8. 16 6
      src/core/ext/transport/chttp2/transport/internal.h
  9. 13 14
      src/core/lib/gprpp/orphanable.h
  10. 8 3
      src/core/lib/gprpp/ref_counted.h
  11. 7 7
      src/core/lib/iomgr/ev_posix.cc
  12. 36 3
      src/core/lib/iomgr/internal_errqueue.cc
  13. 7 1
      src/core/lib/iomgr/internal_errqueue.h
  14. 2 0
      src/core/lib/iomgr/iomgr.cc
  15. 1 2
      src/core/lib/iomgr/port.h
  16. 6 8
      src/core/lib/iomgr/tcp_posix.cc
  17. 228 221
      src/core/lib/transport/static_metadata.cc
  18. 75 71
      src/core/lib/transport/static_metadata.h
  19. 3 3
      src/php/ext/grpc/php_grpc.c
  20. 2 0
      src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi
  21. 0 7
      src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi
  22. 5 5
      src/python/grpcio_tests/tests/interop/methods.py
  23. 11 0
      src/python/grpcio_tests/tests/unit/_credentials_test.py
  24. 1 1
      src/ruby/lib/grpc/generic/service.rb
  25. 22 0
      src/ruby/spec/generic/rpc_server_spec.rb
  26. 1 0
      src/ruby/spec/support/services.rb
  27. 3 11
      templates/tools/dockerfile/interoptest/grpc_interop_python/Dockerfile.template
  28. 1 0
      test/core/end2end/fuzzers/hpack.dictionary
  29. 1 1
      test/cpp/qps/qps_json_driver.cc
  30. 1 0
      third_party/upb
  31. 1 0
      tools/codegen/core/gen_static_metadata.py
  32. 15 18
      tools/dockerfile/interoptest/grpc_interop_python/Dockerfile
  33. 2 2
      tools/dockerfile/interoptest/grpc_interop_python/build_interop.sh
  34. 3 3
      tools/run_tests/run_interop_tests.py
  35. 1 0
      tools/run_tests/sanity/check_bazel_workspace.py
  36. 1 0
      tools/run_tests/sanity/check_submodules.sh

+ 3 - 0
.gitmodules

@@ -51,3 +51,6 @@
 [submodule "third_party/protoc-gen-validate"]
 [submodule "third_party/protoc-gen-validate"]
 	path = third_party/protoc-gen-validate
 	path = third_party/protoc-gen-validate
 	url = https://github.com/lyft/protoc-gen-validate.git
 	url = https://github.com/lyft/protoc-gen-validate.git
+[submodule "third_party/upb"]
+	path = third_party/upb
+	url = https://github.com/google/upb.git

+ 1 - 0
BUILD

@@ -647,6 +647,7 @@ grpc_cc_library(
         "debug_location",
         "debug_location",
         "gpr_base",
         "gpr_base",
         "grpc_trace",
         "grpc_trace",
+        "ref_counted",
         "ref_counted_ptr",
         "ref_counted_ptr",
     ],
     ],
 )
 )

+ 12 - 0
bazel/grpc_deps.bzl

@@ -8,6 +8,11 @@ def grpc_deps():
         actual = "@com_github_nanopb_nanopb//:nanopb",
         actual = "@com_github_nanopb_nanopb//:nanopb",
     )
     )
 
 
+    native.bind(
+        name = "upblib",
+        actual = "@upb//:upb",
+    )
+
     native.bind(
     native.bind(
         name = "absl-base",
         name = "absl-base",
         actual = "@com_google_absl//absl/base",
         actual = "@com_google_absl//absl/base",
@@ -184,6 +189,13 @@ def grpc_deps():
             url = "https://github.com/census-instrumentation/opencensus-cpp/archive/fdf0f308b1631bb4a942e32ba5d22536a6170274.tar.gz",
             url = "https://github.com/census-instrumentation/opencensus-cpp/archive/fdf0f308b1631bb4a942e32ba5d22536a6170274.tar.gz",
         )
         )
 
 
+    if "upb" not in native.existing_rules():
+        native.http_archive(
+            name = "upb",
+            strip_prefix = "upb-9ce4a77f61c134bbed28bfd5be5cd7dc0e80f5e3",
+            url = "https://github.com/google/upb/archive/9ce4a77f61c134bbed28bfd5be5cd7dc0e80f5e3.tar.gz",
+        )
+
 
 
 # TODO: move some dependencies from "grpc_deps" here?
 # TODO: move some dependencies from "grpc_deps" here?
 def grpc_test_only_deps():
 def grpc_test_only_deps():

+ 2 - 0
include/grpc/impl/codegen/atm_gcc_sync.h

@@ -26,6 +26,8 @@
 typedef intptr_t gpr_atm;
 typedef intptr_t gpr_atm;
 #define GPR_ATM_MAX INTPTR_MAX
 #define GPR_ATM_MAX INTPTR_MAX
 #define GPR_ATM_MIN INTPTR_MIN
 #define GPR_ATM_MIN INTPTR_MIN
+#define GPR_ATM_INC_CAS_THEN(blah) blah
+#define GPR_ATM_INC_ADD_THEN(blah) blah
 
 
 #define GPR_ATM_COMPILE_BARRIER_() __asm__ __volatile__("" : : : "memory")
 #define GPR_ATM_COMPILE_BARRIER_() __asm__ __volatile__("" : : : "memory")
 
 

+ 2 - 0
include/grpc/impl/codegen/atm_windows.h

@@ -25,6 +25,8 @@
 typedef intptr_t gpr_atm;
 typedef intptr_t gpr_atm;
 #define GPR_ATM_MAX INTPTR_MAX
 #define GPR_ATM_MAX INTPTR_MAX
 #define GPR_ATM_MIN INTPTR_MIN
 #define GPR_ATM_MIN INTPTR_MIN
+#define GPR_ATM_INC_CAS_THEN(blah) blah
+#define GPR_ATM_INC_ADD_THEN(blah) blah
 
 
 #define gpr_atm_full_barrier MemoryBarrier
 #define gpr_atm_full_barrier MemoryBarrier
 
 

+ 2 - 32
src/core/ext/filters/client_channel/lb_policy/xds/xds.cc

@@ -199,7 +199,6 @@ class XdsLb : public LoadBalancingPolicy {
     static bool LoadReportCountersAreZero(xds_grpclb_request* request);
     static bool LoadReportCountersAreZero(xds_grpclb_request* request);
 
 
     static void MaybeSendClientLoadReportLocked(void* arg, grpc_error* error);
     static void MaybeSendClientLoadReportLocked(void* arg, grpc_error* error);
-    static void ClientLoadReportDoneLocked(void* arg, grpc_error* error);
     static void OnInitialRequestSentLocked(void* arg, grpc_error* error);
     static void OnInitialRequestSentLocked(void* arg, grpc_error* error);
     static void OnBalancerMessageReceivedLocked(void* arg, grpc_error* error);
     static void OnBalancerMessageReceivedLocked(void* arg, grpc_error* error);
     static void OnBalancerStatusReceivedLocked(void* arg, grpc_error* error);
     static void OnBalancerStatusReceivedLocked(void* arg, grpc_error* error);
@@ -668,6 +667,7 @@ bool XdsLb::BalancerCallState::LoadReportCountersAreZero(
          (drop_entries == nullptr || drop_entries->empty());
          (drop_entries == nullptr || drop_entries->empty());
 }
 }
 
 
+// TODO(vpowar): Use LRS to send the client Load Report.
 void XdsLb::BalancerCallState::SendClientLoadReportLocked() {
 void XdsLb::BalancerCallState::SendClientLoadReportLocked() {
   // Construct message payload.
   // Construct message payload.
   GPR_ASSERT(send_message_payload_ == nullptr);
   GPR_ASSERT(send_message_payload_ == nullptr);
@@ -685,38 +685,8 @@ void XdsLb::BalancerCallState::SendClientLoadReportLocked() {
   } else {
   } else {
     last_client_load_report_counters_were_zero_ = false;
     last_client_load_report_counters_were_zero_ = false;
   }
   }
-  grpc_slice request_payload_slice = xds_grpclb_request_encode(request);
-  send_message_payload_ =
-      grpc_raw_byte_buffer_create(&request_payload_slice, 1);
-  grpc_slice_unref_internal(request_payload_slice);
+  // TODO(vpowar): Send the report on LRS stream.
   xds_grpclb_request_destroy(request);
   xds_grpclb_request_destroy(request);
-  // Send the report.
-  grpc_op op;
-  memset(&op, 0, sizeof(op));
-  op.op = GRPC_OP_SEND_MESSAGE;
-  op.data.send_message.send_message = send_message_payload_;
-  GRPC_CLOSURE_INIT(&client_load_report_closure_, ClientLoadReportDoneLocked,
-                    this, grpc_combiner_scheduler(xdslb_policy()->combiner()));
-  grpc_call_error call_error = grpc_call_start_batch_and_execute(
-      lb_call_, &op, 1, &client_load_report_closure_);
-  if (GPR_UNLIKELY(call_error != GRPC_CALL_OK)) {
-    gpr_log(GPR_ERROR, "[xdslb %p] call_error=%d", xdslb_policy_.get(),
-            call_error);
-    GPR_ASSERT(GRPC_CALL_OK == call_error);
-  }
-}
-
-void XdsLb::BalancerCallState::ClientLoadReportDoneLocked(void* arg,
-                                                          grpc_error* error) {
-  BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
-  XdsLb* xdslb_policy = lb_calld->xdslb_policy();
-  grpc_byte_buffer_destroy(lb_calld->send_message_payload_);
-  lb_calld->send_message_payload_ = nullptr;
-  if (error != GRPC_ERROR_NONE || lb_calld != xdslb_policy->lb_calld_.get()) {
-    lb_calld->Unref(DEBUG_LOCATION, "client_load_report");
-    return;
-  }
-  lb_calld->ScheduleNextClientLoadReportLocked();
 }
 }
 
 
 void XdsLb::BalancerCallState::OnInitialRequestSentLocked(void* arg,
 void XdsLb::BalancerCallState::OnInitialRequestSentLocked(void* arg,

+ 8 - 27
src/core/ext/transport/chttp2/transport/chttp2_transport.cc

@@ -211,32 +211,23 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
 void grpc_chttp2_unref_transport(grpc_chttp2_transport* t, const char* reason,
 void grpc_chttp2_unref_transport(grpc_chttp2_transport* t, const char* reason,
                                  const char* file, int line) {
                                  const char* file, int line) {
   if (grpc_trace_chttp2_refcount.enabled()) {
   if (grpc_trace_chttp2_refcount.enabled()) {
-    gpr_atm val = gpr_atm_no_barrier_load(&t->refs.count);
+    const grpc_core::RefCount::Value val = t->refs.get();
     gpr_log(GPR_DEBUG, "chttp2:unref:%p %" PRIdPTR "->%" PRIdPTR " %s [%s:%d]",
     gpr_log(GPR_DEBUG, "chttp2:unref:%p %" PRIdPTR "->%" PRIdPTR " %s [%s:%d]",
             t, val, val - 1, reason, file, line);
             t, val, val - 1, reason, file, line);
   }
   }
-  if (!gpr_unref(&t->refs)) return;
-  t->~grpc_chttp2_transport();
-  gpr_free(t);
+  if (!t->refs.Unref()) return;
+  grpc_core::Delete(t);
 }
 }
 
 
 void grpc_chttp2_ref_transport(grpc_chttp2_transport* t, const char* reason,
 void grpc_chttp2_ref_transport(grpc_chttp2_transport* t, const char* reason,
                                const char* file, int line) {
                                const char* file, int line) {
   if (grpc_trace_chttp2_refcount.enabled()) {
   if (grpc_trace_chttp2_refcount.enabled()) {
-    gpr_atm val = gpr_atm_no_barrier_load(&t->refs.count);
+    const grpc_core::RefCount::Value val = t->refs.get();
     gpr_log(GPR_DEBUG, "chttp2:  ref:%p %" PRIdPTR "->%" PRIdPTR " %s [%s:%d]",
     gpr_log(GPR_DEBUG, "chttp2:  ref:%p %" PRIdPTR "->%" PRIdPTR " %s [%s:%d]",
             t, val, val + 1, reason, file, line);
             t, val, val + 1, reason, file, line);
   }
   }
-  gpr_ref(&t->refs);
+  t->refs.Ref();
 }
 }
-#else
-void grpc_chttp2_unref_transport(grpc_chttp2_transport* t) {
-  if (!gpr_unref(&t->refs)) return;
-  t->~grpc_chttp2_transport();
-  gpr_free(t);
-}
-
-void grpc_chttp2_ref_transport(grpc_chttp2_transport* t) { gpr_ref(&t->refs); }
 #endif
 #endif
 
 
 static const grpc_transport_vtable* get_vtable(void);
 static const grpc_transport_vtable* get_vtable(void);
@@ -500,8 +491,6 @@ grpc_chttp2_transport::grpc_chttp2_transport(
   GPR_ASSERT(strlen(GRPC_CHTTP2_CLIENT_CONNECT_STRING) ==
   GPR_ASSERT(strlen(GRPC_CHTTP2_CLIENT_CONNECT_STRING) ==
              GRPC_CHTTP2_CLIENT_CONNECT_STRLEN);
              GRPC_CHTTP2_CLIENT_CONNECT_STRLEN);
   base.vtable = get_vtable();
   base.vtable = get_vtable();
-  /* one ref is for destroy */
-  gpr_ref_init(&refs, 1);
   /* 8 is a random stab in the dark as to a good initial size: it's small enough
   /* 8 is a random stab in the dark as to a good initial size: it's small enough
      that it shouldn't waste memory for infrequently used connections, yet
      that it shouldn't waste memory for infrequently used connections, yet
      large enough that the exponential growth should happen nicely when it's
      large enough that the exponential growth should happen nicely when it's
@@ -2845,8 +2834,8 @@ Chttp2IncomingByteStream::Chttp2IncomingByteStream(
     : ByteStream(frame_size, flags),
     : ByteStream(frame_size, flags),
       transport_(transport),
       transport_(transport),
       stream_(stream),
       stream_(stream),
+      refs_(2),
       remaining_bytes_(frame_size) {
       remaining_bytes_(frame_size) {
-  gpr_ref_init(&refs_, 2);
   GRPC_ERROR_UNREF(stream->byte_stream_error);
   GRPC_ERROR_UNREF(stream->byte_stream_error);
   stream->byte_stream_error = GRPC_ERROR_NONE;
   stream->byte_stream_error = GRPC_ERROR_NONE;
 }
 }
@@ -2871,14 +2860,6 @@ void Chttp2IncomingByteStream::Orphan() {
       GRPC_ERROR_NONE);
       GRPC_ERROR_NONE);
 }
 }
 
 
-void Chttp2IncomingByteStream::Unref() {
-  if (gpr_unref(&refs_)) {
-    Delete(this);
-  }
-}
-
-void Chttp2IncomingByteStream::Ref() { gpr_ref(&refs_); }
-
 void Chttp2IncomingByteStream::NextLocked(void* arg,
 void Chttp2IncomingByteStream::NextLocked(void* arg,
                                           grpc_error* error_ignored) {
                                           grpc_error* error_ignored) {
   Chttp2IncomingByteStream* bs = static_cast<Chttp2IncomingByteStream*>(arg);
   Chttp2IncomingByteStream* bs = static_cast<Chttp2IncomingByteStream*>(arg);
@@ -3198,8 +3179,8 @@ intptr_t grpc_chttp2_transport_get_socket_uuid(grpc_transport* transport) {
 grpc_transport* grpc_create_chttp2_transport(
 grpc_transport* grpc_create_chttp2_transport(
     const grpc_channel_args* channel_args, grpc_endpoint* ep, bool is_client,
     const grpc_channel_args* channel_args, grpc_endpoint* ep, bool is_client,
     grpc_resource_user* resource_user) {
     grpc_resource_user* resource_user) {
-  auto t = new (gpr_malloc(sizeof(grpc_chttp2_transport)))
-      grpc_chttp2_transport(channel_args, ep, is_client, resource_user);
+  auto t = grpc_core::New<grpc_chttp2_transport>(channel_args, ep, is_client,
+                                                 resource_user);
   return &t->base;
   return &t->base;
 }
 }
 
 

+ 16 - 6
src/core/ext/transport/chttp2/transport/internal.h

@@ -236,8 +236,12 @@ class Chttp2IncomingByteStream : public ByteStream {
   // alone for now.  We can revisit this once we're able to link against
   // alone for now.  We can revisit this once we're able to link against
   // libc++, at which point we can eliminate New<> and Delete<> and
   // libc++, at which point we can eliminate New<> and Delete<> and
   // switch to std::shared_ptr<>.
   // switch to std::shared_ptr<>.
-  void Ref();
-  void Unref();
+  void Ref() { refs_.Ref(); }
+  void Unref() {
+    if (refs_.Unref()) {
+      grpc_core::Delete(this);
+    }
+  }
 
 
   void PublishError(grpc_error* error);
   void PublishError(grpc_error* error);
 
 
@@ -256,7 +260,7 @@ class Chttp2IncomingByteStream : public ByteStream {
   grpc_chttp2_transport* transport_;  // Immutable.
   grpc_chttp2_transport* transport_;  // Immutable.
   grpc_chttp2_stream* stream_;        // Immutable.
   grpc_chttp2_stream* stream_;        // Immutable.
 
 
-  gpr_refcount refs_;
+  grpc_core::RefCount refs_;
 
 
   /* Accessed only by transport thread when stream->pending_byte_stream == false
   /* Accessed only by transport thread when stream->pending_byte_stream == false
    * Accessed only by application thread when stream->pending_byte_stream ==
    * Accessed only by application thread when stream->pending_byte_stream ==
@@ -290,7 +294,7 @@ struct grpc_chttp2_transport {
   ~grpc_chttp2_transport();
   ~grpc_chttp2_transport();
 
 
   grpc_transport base; /* must be first */
   grpc_transport base; /* must be first */
-  gpr_refcount refs;
+  grpc_core::RefCount refs;
   grpc_endpoint* ep;
   grpc_endpoint* ep;
   char* peer_string;
   char* peer_string;
 
 
@@ -793,8 +797,14 @@ void grpc_chttp2_ref_transport(grpc_chttp2_transport* t, const char* reason,
 #else
 #else
 #define GRPC_CHTTP2_REF_TRANSPORT(t, r) grpc_chttp2_ref_transport(t)
 #define GRPC_CHTTP2_REF_TRANSPORT(t, r) grpc_chttp2_ref_transport(t)
 #define GRPC_CHTTP2_UNREF_TRANSPORT(t, r) grpc_chttp2_unref_transport(t)
 #define GRPC_CHTTP2_UNREF_TRANSPORT(t, r) grpc_chttp2_unref_transport(t)
-void grpc_chttp2_unref_transport(grpc_chttp2_transport* t);
-void grpc_chttp2_ref_transport(grpc_chttp2_transport* t);
+inline void grpc_chttp2_unref_transport(grpc_chttp2_transport* t) {
+  if (t->refs.Unref()) {
+    grpc_core::Delete(t);
+  }
+}
+inline void grpc_chttp2_ref_transport(grpc_chttp2_transport* t) {
+  t->refs.Ref();
+}
 #endif
 #endif
 
 
 void grpc_chttp2_ack_ping(grpc_chttp2_transport* t, uint64_t id);
 void grpc_chttp2_ack_ping(grpc_chttp2_transport* t, uint64_t id);

+ 13 - 14
src/core/lib/gprpp/orphanable.h

@@ -31,6 +31,7 @@
 #include "src/core/lib/gprpp/abstract.h"
 #include "src/core/lib/gprpp/abstract.h"
 #include "src/core/lib/gprpp/debug_location.h"
 #include "src/core/lib/gprpp/debug_location.h"
 #include "src/core/lib/gprpp/memory.h"
 #include "src/core/lib/gprpp/memory.h"
+#include "src/core/lib/gprpp/ref_counted.h"
 #include "src/core/lib/gprpp/ref_counted_ptr.h"
 #include "src/core/lib/gprpp/ref_counted_ptr.h"
 
 
 namespace grpc_core {
 namespace grpc_core {
@@ -89,8 +90,8 @@ class InternallyRefCounted : public Orphanable {
   template <typename T>
   template <typename T>
   friend class RefCountedPtr;
   friend class RefCountedPtr;
 
 
-  InternallyRefCounted() { gpr_ref_init(&refs_, 1); }
-  virtual ~InternallyRefCounted() {}
+  InternallyRefCounted() = default;
+  virtual ~InternallyRefCounted() = default;
 
 
   RefCountedPtr<Child> Ref() GRPC_MUST_USE_RESULT {
   RefCountedPtr<Child> Ref() GRPC_MUST_USE_RESULT {
     IncrementRefCount();
     IncrementRefCount();
@@ -98,15 +99,15 @@ class InternallyRefCounted : public Orphanable {
   }
   }
 
 
   void Unref() {
   void Unref() {
-    if (gpr_unref(&refs_)) {
+    if (refs_.Unref()) {
       Delete(static_cast<Child*>(this));
       Delete(static_cast<Child*>(this));
     }
     }
   }
   }
 
 
  private:
  private:
-  void IncrementRefCount() { gpr_ref(&refs_); }
+  void IncrementRefCount() { refs_.Ref(); }
 
 
-  gpr_refcount refs_;
+  grpc_core::RefCount refs_;
 };
 };
 
 
 // An alternative version of the InternallyRefCounted base class that
 // An alternative version of the InternallyRefCounted base class that
@@ -137,16 +138,14 @@ class InternallyRefCountedWithTracing : public Orphanable {
       : InternallyRefCountedWithTracing(static_cast<TraceFlag*>(nullptr)) {}
       : InternallyRefCountedWithTracing(static_cast<TraceFlag*>(nullptr)) {}
 
 
   explicit InternallyRefCountedWithTracing(TraceFlag* trace_flag)
   explicit InternallyRefCountedWithTracing(TraceFlag* trace_flag)
-      : trace_flag_(trace_flag) {
-    gpr_ref_init(&refs_, 1);
-  }
+      : trace_flag_(trace_flag) {}
 
 
 #ifdef NDEBUG
 #ifdef NDEBUG
   explicit InternallyRefCountedWithTracing(DebugOnlyTraceFlag* trace_flag)
   explicit InternallyRefCountedWithTracing(DebugOnlyTraceFlag* trace_flag)
       : InternallyRefCountedWithTracing() {}
       : InternallyRefCountedWithTracing() {}
 #endif
 #endif
 
 
-  virtual ~InternallyRefCountedWithTracing() {}
+  virtual ~InternallyRefCountedWithTracing() = default;
 
 
   RefCountedPtr<Child> Ref() GRPC_MUST_USE_RESULT {
   RefCountedPtr<Child> Ref() GRPC_MUST_USE_RESULT {
     IncrementRefCount();
     IncrementRefCount();
@@ -156,7 +155,7 @@ class InternallyRefCountedWithTracing : public Orphanable {
   RefCountedPtr<Child> Ref(const DebugLocation& location,
   RefCountedPtr<Child> Ref(const DebugLocation& location,
                            const char* reason) GRPC_MUST_USE_RESULT {
                            const char* reason) GRPC_MUST_USE_RESULT {
     if (location.Log() && trace_flag_ != nullptr && trace_flag_->enabled()) {
     if (location.Log() && trace_flag_ != nullptr && trace_flag_->enabled()) {
-      gpr_atm old_refs = gpr_atm_no_barrier_load(&refs_.count);
+      const grpc_core::RefCount::Value old_refs = refs_.get();
       gpr_log(GPR_INFO, "%s:%p %s:%d ref %" PRIdPTR " -> %" PRIdPTR " %s",
       gpr_log(GPR_INFO, "%s:%p %s:%d ref %" PRIdPTR " -> %" PRIdPTR " %s",
               trace_flag_->name(), this, location.file(), location.line(),
               trace_flag_->name(), this, location.file(), location.line(),
               old_refs, old_refs + 1, reason);
               old_refs, old_refs + 1, reason);
@@ -170,14 +169,14 @@ class InternallyRefCountedWithTracing : public Orphanable {
   // friend of this class.
   // friend of this class.
 
 
   void Unref() {
   void Unref() {
-    if (gpr_unref(&refs_)) {
+    if (refs_.Unref()) {
       Delete(static_cast<Child*>(this));
       Delete(static_cast<Child*>(this));
     }
     }
   }
   }
 
 
   void Unref(const DebugLocation& location, const char* reason) {
   void Unref(const DebugLocation& location, const char* reason) {
     if (location.Log() && trace_flag_ != nullptr && trace_flag_->enabled()) {
     if (location.Log() && trace_flag_ != nullptr && trace_flag_->enabled()) {
-      gpr_atm old_refs = gpr_atm_no_barrier_load(&refs_.count);
+      const grpc_core::RefCount::Value old_refs = refs_.get();
       gpr_log(GPR_INFO, "%s:%p %s:%d unref %" PRIdPTR " -> %" PRIdPTR " %s",
       gpr_log(GPR_INFO, "%s:%p %s:%d unref %" PRIdPTR " -> %" PRIdPTR " %s",
               trace_flag_->name(), this, location.file(), location.line(),
               trace_flag_->name(), this, location.file(), location.line(),
               old_refs, old_refs - 1, reason);
               old_refs, old_refs - 1, reason);
@@ -186,10 +185,10 @@ class InternallyRefCountedWithTracing : public Orphanable {
   }
   }
 
 
  private:
  private:
-  void IncrementRefCount() { gpr_ref(&refs_); }
+  void IncrementRefCount() { refs_.Ref(); }
 
 
   TraceFlag* trace_flag_ = nullptr;
   TraceFlag* trace_flag_ = nullptr;
-  gpr_refcount refs_;
+  grpc_core::RefCount refs_;
 };
 };
 
 
 }  // namespace grpc_core
 }  // namespace grpc_core

+ 8 - 3
src/core/lib/gprpp/ref_counted.h

@@ -21,6 +21,7 @@
 
 
 #include <grpc/support/port_platform.h>
 #include <grpc/support/port_platform.h>
 
 
+#include <grpc/support/atm.h>
 #include <grpc/support/log.h>
 #include <grpc/support/log.h>
 #include <grpc/support/sync.h>
 #include <grpc/support/sync.h>
 
 
@@ -76,12 +77,15 @@ class RefCount {
   constexpr explicit RefCount(Value init = 1) : value_(init) {}
   constexpr explicit RefCount(Value init = 1) : value_(init) {}
 
 
   // Increases the ref-count by `n`.
   // Increases the ref-count by `n`.
-  void Ref(Value n = 1) { value_.fetch_add(n, std::memory_order_relaxed); }
+  void Ref(Value n = 1) {
+    GPR_ATM_INC_ADD_THEN(value_.fetch_add(n, std::memory_order_relaxed));
+  }
 
 
   // Similar to Ref() with an assert on the ref-count being non-zero.
   // Similar to Ref() with an assert on the ref-count being non-zero.
   void RefNonZero() {
   void RefNonZero() {
 #ifndef NDEBUG
 #ifndef NDEBUG
-    const Value prior = value_.fetch_add(1, std::memory_order_relaxed);
+    const Value prior =
+        GPR_ATM_INC_ADD_THEN(value_.fetch_add(1, std::memory_order_relaxed));
     assert(prior > 0);
     assert(prior > 0);
 #else
 #else
     Ref();
     Ref();
@@ -90,7 +94,8 @@ class RefCount {
 
 
   // Decrements the ref-count and returns true if the ref-count reaches 0.
   // Decrements the ref-count and returns true if the ref-count reaches 0.
   bool Unref() {
   bool Unref() {
-    const Value prior = value_.fetch_sub(1, std::memory_order_acq_rel);
+    const Value prior =
+        GPR_ATM_INC_ADD_THEN(value_.fetch_sub(1, std::memory_order_acq_rel));
     GPR_DEBUG_ASSERT(prior > 0);
     GPR_DEBUG_ASSERT(prior > 0);
     return prior == 1;
     return prior == 1;
   }
   }

+ 7 - 7
src/core/lib/iomgr/ev_posix.cc

@@ -36,6 +36,7 @@
 #include "src/core/lib/iomgr/ev_epoll1_linux.h"
 #include "src/core/lib/iomgr/ev_epoll1_linux.h"
 #include "src/core/lib/iomgr/ev_epollex_linux.h"
 #include "src/core/lib/iomgr/ev_epollex_linux.h"
 #include "src/core/lib/iomgr/ev_poll_posix.h"
 #include "src/core/lib/iomgr/ev_poll_posix.h"
+#include "src/core/lib/iomgr/internal_errqueue.h"
 
 
 grpc_core::TraceFlag grpc_polling_trace(false,
 grpc_core::TraceFlag grpc_polling_trace(false,
                                         "polling"); /* Disabled by default */
                                         "polling"); /* Disabled by default */
@@ -236,19 +237,18 @@ void grpc_event_engine_shutdown(void) {
 }
 }
 
 
 bool grpc_event_engine_can_track_errors(void) {
 bool grpc_event_engine_can_track_errors(void) {
-/* Only track errors if platform supports errqueue. */
-#ifdef GRPC_LINUX_ERRQUEUE
-  return g_event_engine->can_track_err;
-#else
+  /* Only track errors if platform supports errqueue. */
+  if (grpc_core::kernel_supports_errqueue()) {
+    return g_event_engine->can_track_err;
+  }
   return false;
   return false;
-#endif /* GRPC_LINUX_ERRQUEUE */
 }
 }
 
 
 grpc_fd* grpc_fd_create(int fd, const char* name, bool track_err) {
 grpc_fd* grpc_fd_create(int fd, const char* name, bool track_err) {
   GRPC_POLLING_API_TRACE("fd_create(%d, %s, %d)", fd, name, track_err);
   GRPC_POLLING_API_TRACE("fd_create(%d, %s, %d)", fd, name, track_err);
   GRPC_FD_TRACE("fd_create(%d, %s, %d)", fd, name, track_err);
   GRPC_FD_TRACE("fd_create(%d, %s, %d)", fd, name, track_err);
-  return g_event_engine->fd_create(fd, name,
-                                   track_err && g_event_engine->can_track_err);
+  return g_event_engine->fd_create(
+      fd, name, track_err && grpc_event_engine_can_track_errors());
 }
 }
 
 
 int grpc_fd_wrapped_fd(grpc_fd* fd) {
 int grpc_fd_wrapped_fd(grpc_fd* fd) {

+ 36 - 3
src/core/lib/iomgr/internal_errqueue.cc

@@ -20,17 +20,50 @@
 
 
 #include "src/core/lib/iomgr/port.h"
 #include "src/core/lib/iomgr/port.h"
 
 
+#include <grpc/impl/codegen/log.h>
 #include "src/core/lib/iomgr/internal_errqueue.h"
 #include "src/core/lib/iomgr/internal_errqueue.h"
 
 
 #ifdef GRPC_POSIX_SOCKET_TCP
 #ifdef GRPC_POSIX_SOCKET_TCP
 
 
-bool kernel_supports_errqueue() {
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/utsname.h>
+
+namespace grpc_core {
+static bool errqueue_supported = false;
+
+bool kernel_supports_errqueue() { return errqueue_supported; }
+
+void grpc_errqueue_init() {
+/* Both-compile time and run-time linux kernel versions should be atleast 4.0.0
+ */
 #ifdef LINUX_VERSION_CODE
 #ifdef LINUX_VERSION_CODE
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0)
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0)
-  return true;
+  struct utsname buffer;
+  if (uname(&buffer) != 0) {
+    gpr_log(GPR_ERROR, "uname: %s", strerror(errno));
+    return;
+  }
+  char* release = buffer.release;
+  if (release == nullptr) {
+    return;
+  }
+
+  if (strtol(release, nullptr, 10) >= 4) {
+    errqueue_supported = true;
+  } else {
+    gpr_log(GPR_DEBUG, "ERRQUEUE support not enabled");
+  }
 #endif /* LINUX_VERSION_CODE <= KERNEL_VERSION(4, 0, 0) */
 #endif /* LINUX_VERSION_CODE <= KERNEL_VERSION(4, 0, 0) */
 #endif /* LINUX_VERSION_CODE */
 #endif /* LINUX_VERSION_CODE */
-  return false;
 }
 }
+} /* namespace grpc_core */
+
+#else
+
+namespace grpc_core {
+void grpc_errqueue_init() {}
+} /* namespace grpc_core */
 
 
 #endif /* GRPC_POSIX_SOCKET_TCP */
 #endif /* GRPC_POSIX_SOCKET_TCP */

+ 7 - 1
src/core/lib/iomgr/internal_errqueue.h

@@ -76,8 +76,14 @@ constexpr uint32_t kTimestampingRecordingOptions =
  * Currently allowing only linux kernels above 4.0.0
  * Currently allowing only linux kernels above 4.0.0
  */
  */
 bool kernel_supports_errqueue();
 bool kernel_supports_errqueue();
-}  // namespace grpc_core
+
+} /* namespace grpc_core */
 
 
 #endif /* GRPC_POSIX_SOCKET_TCP */
 #endif /* GRPC_POSIX_SOCKET_TCP */
 
 
+namespace grpc_core {
+/* Initializes errqueue support */
+void grpc_errqueue_init();
+} /* namespace grpc_core */
+
 #endif /* GRPC_CORE_LIB_IOMGR_INTERNAL_ERRQUEUE_H */
 #endif /* GRPC_CORE_LIB_IOMGR_INTERNAL_ERRQUEUE_H */

+ 2 - 0
src/core/lib/iomgr/iomgr.cc

@@ -36,6 +36,7 @@
 #include "src/core/lib/iomgr/buffer_list.h"
 #include "src/core/lib/iomgr/buffer_list.h"
 #include "src/core/lib/iomgr/exec_ctx.h"
 #include "src/core/lib/iomgr/exec_ctx.h"
 #include "src/core/lib/iomgr/executor.h"
 #include "src/core/lib/iomgr/executor.h"
+#include "src/core/lib/iomgr/internal_errqueue.h"
 #include "src/core/lib/iomgr/iomgr_internal.h"
 #include "src/core/lib/iomgr/iomgr_internal.h"
 #include "src/core/lib/iomgr/network_status_tracker.h"
 #include "src/core/lib/iomgr/network_status_tracker.h"
 #include "src/core/lib/iomgr/timer.h"
 #include "src/core/lib/iomgr/timer.h"
@@ -58,6 +59,7 @@ void grpc_iomgr_init() {
   g_root_object.name = (char*)"root";
   g_root_object.name = (char*)"root";
   grpc_network_status_init();
   grpc_network_status_init();
   grpc_iomgr_platform_init();
   grpc_iomgr_platform_init();
+  grpc_core::grpc_errqueue_init();
 }
 }
 
 
 void grpc_iomgr_start() { grpc_timer_manager_init(); }
 void grpc_iomgr_start() { grpc_timer_manager_init(); }

+ 1 - 2
src/core/lib/iomgr/port.h

@@ -62,8 +62,7 @@
 #define GRPC_HAVE_UNIX_SOCKET 1
 #define GRPC_HAVE_UNIX_SOCKET 1
 #ifdef LINUX_VERSION_CODE
 #ifdef LINUX_VERSION_CODE
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0)
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0)
-/* TODO(yashykt): Re-enable once Fathom changes are commited.
-#define GRPC_LINUX_ERRQUEUE 1 */
+#define GRPC_LINUX_ERRQUEUE 1
 #endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0) */
 #endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0) */
 #endif /* LINUX_VERSION_CODE */
 #endif /* LINUX_VERSION_CODE */
 #define GRPC_LINUX_MULTIPOLL_WITH_EPOLL 1
 #define GRPC_LINUX_MULTIPOLL_WITH_EPOLL 1

+ 6 - 8
src/core/lib/iomgr/tcp_posix.cc

@@ -740,7 +740,7 @@ static bool process_errors(grpc_tcp* tcp) {
         }
         }
         return false;
         return false;
       }
       }
-      process_timestamp(tcp, &msg, cmsg);
+      cmsg = process_timestamp(tcp, &msg, cmsg);
     }
     }
   }
   }
 }
 }
@@ -761,13 +761,11 @@ static void tcp_handle_error(void* arg /* grpc_tcp */, grpc_error* error) {
 
 
   /* We are still interested in collecting timestamps, so let's try reading
   /* We are still interested in collecting timestamps, so let's try reading
    * them. */
    * them. */
-  if (!process_errors(tcp)) {
-    /* This was not a timestamps error. This was an actual error. Set the
-     * read and write closures to be ready.
-     */
-    grpc_fd_set_readable(tcp->em_fd);
-    grpc_fd_set_writable(tcp->em_fd);
-  }
+  process_errors(tcp);
+  /* This might not a timestamps error. Set the read and write closures to be
+   * ready. */
+  grpc_fd_set_readable(tcp->em_fd);
+  grpc_fd_set_writable(tcp->em_fd);
   GRPC_CLOSURE_INIT(&tcp->error_closure, tcp_handle_error, tcp,
   GRPC_CLOSURE_INIT(&tcp->error_closure, tcp_handle_error, tcp,
                     grpc_schedule_on_exec_ctx);
                     grpc_schedule_on_exec_ctx);
   grpc_fd_notify_on_error(tcp->em_fd, &tcp->error_closure);
   grpc_fd_notify_on_error(tcp->em_fd, &tcp->error_closure);

+ 228 - 221
src/core/lib/transport/static_metadata.cc

@@ -65,51 +65,56 @@ static uint8_t g_bytes[] = {
     97,  110, 99,  101, 114, 47,  66,  97,  108, 97,  110, 99,  101, 76,  111,
     97,  110, 99,  101, 114, 47,  66,  97,  108, 97,  110, 99,  101, 76,  111,
     97,  100, 47,  103, 114, 112, 99,  46,  104, 101, 97,  108, 116, 104, 46,
     97,  100, 47,  103, 114, 112, 99,  46,  104, 101, 97,  108, 116, 104, 46,
     118, 49,  46,  72,  101, 97,  108, 116, 104, 47,  87,  97,  116, 99,  104,
     118, 49,  46,  72,  101, 97,  108, 116, 104, 47,  87,  97,  116, 99,  104,
-    100, 101, 102, 108, 97,  116, 101, 103, 122, 105, 112, 115, 116, 114, 101,
-    97,  109, 47,  103, 122, 105, 112, 71,  69,  84,  80,  79,  83,  84,  47,
-    47,  105, 110, 100, 101, 120, 46,  104, 116, 109, 108, 104, 116, 116, 112,
-    104, 116, 116, 112, 115, 50,  48,  48,  50,  48,  52,  50,  48,  54,  51,
-    48,  52,  52,  48,  48,  52,  48,  52,  53,  48,  48,  97,  99,  99,  101,
-    112, 116, 45,  99,  104, 97,  114, 115, 101, 116, 103, 122, 105, 112, 44,
-    32,  100, 101, 102, 108, 97,  116, 101, 97,  99,  99,  101, 112, 116, 45,
-    108, 97,  110, 103, 117, 97,  103, 101, 97,  99,  99,  101, 112, 116, 45,
-    114, 97,  110, 103, 101, 115, 97,  99,  99,  101, 112, 116, 97,  99,  99,
-    101, 115, 115, 45,  99,  111, 110, 116, 114, 111, 108, 45,  97,  108, 108,
-    111, 119, 45,  111, 114, 105, 103, 105, 110, 97,  103, 101, 97,  108, 108,
-    111, 119, 97,  117, 116, 104, 111, 114, 105, 122, 97,  116, 105, 111, 110,
-    99,  97,  99,  104, 101, 45,  99,  111, 110, 116, 114, 111, 108, 99,  111,
-    110, 116, 101, 110, 116, 45,  100, 105, 115, 112, 111, 115, 105, 116, 105,
-    111, 110, 99,  111, 110, 116, 101, 110, 116, 45,  108, 97,  110, 103, 117,
-    97,  103, 101, 99,  111, 110, 116, 101, 110, 116, 45,  108, 101, 110, 103,
-    116, 104, 99,  111, 110, 116, 101, 110, 116, 45,  108, 111, 99,  97,  116,
-    105, 111, 110, 99,  111, 110, 116, 101, 110, 116, 45,  114, 97,  110, 103,
-    101, 99,  111, 111, 107, 105, 101, 100, 97,  116, 101, 101, 116, 97,  103,
-    101, 120, 112, 101, 99,  116, 101, 120, 112, 105, 114, 101, 115, 102, 114,
-    111, 109, 105, 102, 45,  109, 97,  116, 99,  104, 105, 102, 45,  109, 111,
-    100, 105, 102, 105, 101, 100, 45,  115, 105, 110, 99,  101, 105, 102, 45,
-    110, 111, 110, 101, 45,  109, 97,  116, 99,  104, 105, 102, 45,  114, 97,
-    110, 103, 101, 105, 102, 45,  117, 110, 109, 111, 100, 105, 102, 105, 101,
-    100, 45,  115, 105, 110, 99,  101, 108, 97,  115, 116, 45,  109, 111, 100,
-    105, 102, 105, 101, 100, 108, 105, 110, 107, 108, 111, 99,  97,  116, 105,
-    111, 110, 109, 97,  120, 45,  102, 111, 114, 119, 97,  114, 100, 115, 112,
-    114, 111, 120, 121, 45,  97,  117, 116, 104, 101, 110, 116, 105, 99,  97,
-    116, 101, 112, 114, 111, 120, 121, 45,  97,  117, 116, 104, 111, 114, 105,
-    122, 97,  116, 105, 111, 110, 114, 97,  110, 103, 101, 114, 101, 102, 101,
-    114, 101, 114, 114, 101, 102, 114, 101, 115, 104, 114, 101, 116, 114, 121,
-    45,  97,  102, 116, 101, 114, 115, 101, 114, 118, 101, 114, 115, 101, 116,
-    45,  99,  111, 111, 107, 105, 101, 115, 116, 114, 105, 99,  116, 45,  116,
-    114, 97,  110, 115, 112, 111, 114, 116, 45,  115, 101, 99,  117, 114, 105,
-    116, 121, 116, 114, 97,  110, 115, 102, 101, 114, 45,  101, 110, 99,  111,
-    100, 105, 110, 103, 118, 97,  114, 121, 118, 105, 97,  119, 119, 119, 45,
-    97,  117, 116, 104, 101, 110, 116, 105, 99,  97,  116, 101, 48,  105, 100,
-    101, 110, 116, 105, 116, 121, 116, 114, 97,  105, 108, 101, 114, 115, 97,
-    112, 112, 108, 105, 99,  97,  116, 105, 111, 110, 47,  103, 114, 112, 99,
-    103, 114, 112, 99,  80,  85,  84,  108, 98,  45,  99,  111, 115, 116, 45,
-    98,  105, 110, 105, 100, 101, 110, 116, 105, 116, 121, 44,  100, 101, 102,
-    108, 97,  116, 101, 105, 100, 101, 110, 116, 105, 116, 121, 44,  103, 122,
-    105, 112, 100, 101, 102, 108, 97,  116, 101, 44,  103, 122, 105, 112, 105,
-    100, 101, 110, 116, 105, 116, 121, 44,  100, 101, 102, 108, 97,  116, 101,
-    44,  103, 122, 105, 112};
+    47,  101, 110, 118, 111, 121, 46,  115, 101, 114, 118, 105, 99,  101, 46,
+    100, 105, 115, 99,  111, 118, 101, 114, 121, 46,  118, 50,  46,  65,  103,
+    103, 114, 101, 103, 97,  116, 101, 100, 68,  105, 115, 99,  111, 118, 101,
+    114, 121, 83,  101, 114, 118, 105, 99,  101, 47,  83,  116, 114, 101, 97,
+    109, 65,  103, 103, 114, 101, 103, 97,  116, 101, 100, 82,  101, 115, 111,
+    117, 114, 99,  101, 115, 100, 101, 102, 108, 97,  116, 101, 103, 122, 105,
+    112, 115, 116, 114, 101, 97,  109, 47,  103, 122, 105, 112, 71,  69,  84,
+    80,  79,  83,  84,  47,  47,  105, 110, 100, 101, 120, 46,  104, 116, 109,
+    108, 104, 116, 116, 112, 104, 116, 116, 112, 115, 50,  48,  48,  50,  48,
+    52,  50,  48,  54,  51,  48,  52,  52,  48,  48,  52,  48,  52,  53,  48,
+    48,  97,  99,  99,  101, 112, 116, 45,  99,  104, 97,  114, 115, 101, 116,
+    103, 122, 105, 112, 44,  32,  100, 101, 102, 108, 97,  116, 101, 97,  99,
+    99,  101, 112, 116, 45,  108, 97,  110, 103, 117, 97,  103, 101, 97,  99,
+    99,  101, 112, 116, 45,  114, 97,  110, 103, 101, 115, 97,  99,  99,  101,
+    112, 116, 97,  99,  99,  101, 115, 115, 45,  99,  111, 110, 116, 114, 111,
+    108, 45,  97,  108, 108, 111, 119, 45,  111, 114, 105, 103, 105, 110, 97,
+    103, 101, 97,  108, 108, 111, 119, 97,  117, 116, 104, 111, 114, 105, 122,
+    97,  116, 105, 111, 110, 99,  97,  99,  104, 101, 45,  99,  111, 110, 116,
+    114, 111, 108, 99,  111, 110, 116, 101, 110, 116, 45,  100, 105, 115, 112,
+    111, 115, 105, 116, 105, 111, 110, 99,  111, 110, 116, 101, 110, 116, 45,
+    108, 97,  110, 103, 117, 97,  103, 101, 99,  111, 110, 116, 101, 110, 116,
+    45,  108, 101, 110, 103, 116, 104, 99,  111, 110, 116, 101, 110, 116, 45,
+    108, 111, 99,  97,  116, 105, 111, 110, 99,  111, 110, 116, 101, 110, 116,
+    45,  114, 97,  110, 103, 101, 99,  111, 111, 107, 105, 101, 100, 97,  116,
+    101, 101, 116, 97,  103, 101, 120, 112, 101, 99,  116, 101, 120, 112, 105,
+    114, 101, 115, 102, 114, 111, 109, 105, 102, 45,  109, 97,  116, 99,  104,
+    105, 102, 45,  109, 111, 100, 105, 102, 105, 101, 100, 45,  115, 105, 110,
+    99,  101, 105, 102, 45,  110, 111, 110, 101, 45,  109, 97,  116, 99,  104,
+    105, 102, 45,  114, 97,  110, 103, 101, 105, 102, 45,  117, 110, 109, 111,
+    100, 105, 102, 105, 101, 100, 45,  115, 105, 110, 99,  101, 108, 97,  115,
+    116, 45,  109, 111, 100, 105, 102, 105, 101, 100, 108, 105, 110, 107, 108,
+    111, 99,  97,  116, 105, 111, 110, 109, 97,  120, 45,  102, 111, 114, 119,
+    97,  114, 100, 115, 112, 114, 111, 120, 121, 45,  97,  117, 116, 104, 101,
+    110, 116, 105, 99,  97,  116, 101, 112, 114, 111, 120, 121, 45,  97,  117,
+    116, 104, 111, 114, 105, 122, 97,  116, 105, 111, 110, 114, 97,  110, 103,
+    101, 114, 101, 102, 101, 114, 101, 114, 114, 101, 102, 114, 101, 115, 104,
+    114, 101, 116, 114, 121, 45,  97,  102, 116, 101, 114, 115, 101, 114, 118,
+    101, 114, 115, 101, 116, 45,  99,  111, 111, 107, 105, 101, 115, 116, 114,
+    105, 99,  116, 45,  116, 114, 97,  110, 115, 112, 111, 114, 116, 45,  115,
+    101, 99,  117, 114, 105, 116, 121, 116, 114, 97,  110, 115, 102, 101, 114,
+    45,  101, 110, 99,  111, 100, 105, 110, 103, 118, 97,  114, 121, 118, 105,
+    97,  119, 119, 119, 45,  97,  117, 116, 104, 101, 110, 116, 105, 99,  97,
+    116, 101, 48,  105, 100, 101, 110, 116, 105, 116, 121, 116, 114, 97,  105,
+    108, 101, 114, 115, 97,  112, 112, 108, 105, 99,  97,  116, 105, 111, 110,
+    47,  103, 114, 112, 99,  103, 114, 112, 99,  80,  85,  84,  108, 98,  45,
+    99,  111, 115, 116, 45,  98,  105, 110, 105, 100, 101, 110, 116, 105, 116,
+    121, 44,  100, 101, 102, 108, 97,  116, 101, 105, 100, 101, 110, 116, 105,
+    116, 121, 44,  103, 122, 105, 112, 100, 101, 102, 108, 97,  116, 101, 44,
+    103, 122, 105, 112, 105, 100, 101, 110, 116, 105, 116, 121, 44,  100, 101,
+    102, 108, 97,  116, 101, 44,  103, 122, 105, 112};
 
 
 static void static_ref(void* unused) {}
 static void static_ref(void* unused) {}
 static void static_unref(void* unused) {}
 static void static_unref(void* unused) {}
@@ -227,6 +232,7 @@ grpc_slice_refcount grpc_static_metadata_refcounts[GRPC_STATIC_MDSTR_COUNT] = {
     {&grpc_static_metadata_vtable, &static_sub_refcnt},
     {&grpc_static_metadata_vtable, &static_sub_refcnt},
     {&grpc_static_metadata_vtable, &static_sub_refcnt},
     {&grpc_static_metadata_vtable, &static_sub_refcnt},
     {&grpc_static_metadata_vtable, &static_sub_refcnt},
     {&grpc_static_metadata_vtable, &static_sub_refcnt},
+    {&grpc_static_metadata_vtable, &static_sub_refcnt},
 };
 };
 
 
 const grpc_slice grpc_static_slice_table[GRPC_STATIC_MDSTR_COUNT] = {
 const grpc_slice grpc_static_slice_table[GRPC_STATIC_MDSTR_COUNT] = {
@@ -266,76 +272,77 @@ const grpc_slice grpc_static_slice_table[GRPC_STATIC_MDSTR_COUNT] = {
     {&grpc_static_metadata_refcounts[33], {{g_bytes + 415, 31}}},
     {&grpc_static_metadata_refcounts[33], {{g_bytes + 415, 31}}},
     {&grpc_static_metadata_refcounts[34], {{g_bytes + 446, 36}}},
     {&grpc_static_metadata_refcounts[34], {{g_bytes + 446, 36}}},
     {&grpc_static_metadata_refcounts[35], {{g_bytes + 482, 28}}},
     {&grpc_static_metadata_refcounts[35], {{g_bytes + 482, 28}}},
-    {&grpc_static_metadata_refcounts[36], {{g_bytes + 510, 7}}},
-    {&grpc_static_metadata_refcounts[37], {{g_bytes + 517, 4}}},
-    {&grpc_static_metadata_refcounts[38], {{g_bytes + 521, 11}}},
-    {&grpc_static_metadata_refcounts[39], {{g_bytes + 532, 3}}},
-    {&grpc_static_metadata_refcounts[40], {{g_bytes + 535, 4}}},
-    {&grpc_static_metadata_refcounts[41], {{g_bytes + 539, 1}}},
-    {&grpc_static_metadata_refcounts[42], {{g_bytes + 540, 11}}},
-    {&grpc_static_metadata_refcounts[43], {{g_bytes + 551, 4}}},
-    {&grpc_static_metadata_refcounts[44], {{g_bytes + 555, 5}}},
-    {&grpc_static_metadata_refcounts[45], {{g_bytes + 560, 3}}},
-    {&grpc_static_metadata_refcounts[46], {{g_bytes + 563, 3}}},
-    {&grpc_static_metadata_refcounts[47], {{g_bytes + 566, 3}}},
-    {&grpc_static_metadata_refcounts[48], {{g_bytes + 569, 3}}},
-    {&grpc_static_metadata_refcounts[49], {{g_bytes + 572, 3}}},
-    {&grpc_static_metadata_refcounts[50], {{g_bytes + 575, 3}}},
-    {&grpc_static_metadata_refcounts[51], {{g_bytes + 578, 3}}},
-    {&grpc_static_metadata_refcounts[52], {{g_bytes + 581, 14}}},
-    {&grpc_static_metadata_refcounts[53], {{g_bytes + 595, 13}}},
-    {&grpc_static_metadata_refcounts[54], {{g_bytes + 608, 15}}},
-    {&grpc_static_metadata_refcounts[55], {{g_bytes + 623, 13}}},
-    {&grpc_static_metadata_refcounts[56], {{g_bytes + 636, 6}}},
-    {&grpc_static_metadata_refcounts[57], {{g_bytes + 642, 27}}},
-    {&grpc_static_metadata_refcounts[58], {{g_bytes + 669, 3}}},
-    {&grpc_static_metadata_refcounts[59], {{g_bytes + 672, 5}}},
-    {&grpc_static_metadata_refcounts[60], {{g_bytes + 677, 13}}},
-    {&grpc_static_metadata_refcounts[61], {{g_bytes + 690, 13}}},
-    {&grpc_static_metadata_refcounts[62], {{g_bytes + 703, 19}}},
-    {&grpc_static_metadata_refcounts[63], {{g_bytes + 722, 16}}},
-    {&grpc_static_metadata_refcounts[64], {{g_bytes + 738, 14}}},
-    {&grpc_static_metadata_refcounts[65], {{g_bytes + 752, 16}}},
-    {&grpc_static_metadata_refcounts[66], {{g_bytes + 768, 13}}},
-    {&grpc_static_metadata_refcounts[67], {{g_bytes + 781, 6}}},
-    {&grpc_static_metadata_refcounts[68], {{g_bytes + 787, 4}}},
-    {&grpc_static_metadata_refcounts[69], {{g_bytes + 791, 4}}},
-    {&grpc_static_metadata_refcounts[70], {{g_bytes + 795, 6}}},
-    {&grpc_static_metadata_refcounts[71], {{g_bytes + 801, 7}}},
-    {&grpc_static_metadata_refcounts[72], {{g_bytes + 808, 4}}},
-    {&grpc_static_metadata_refcounts[73], {{g_bytes + 812, 8}}},
-    {&grpc_static_metadata_refcounts[74], {{g_bytes + 820, 17}}},
-    {&grpc_static_metadata_refcounts[75], {{g_bytes + 837, 13}}},
-    {&grpc_static_metadata_refcounts[76], {{g_bytes + 850, 8}}},
-    {&grpc_static_metadata_refcounts[77], {{g_bytes + 858, 19}}},
-    {&grpc_static_metadata_refcounts[78], {{g_bytes + 877, 13}}},
-    {&grpc_static_metadata_refcounts[79], {{g_bytes + 890, 4}}},
-    {&grpc_static_metadata_refcounts[80], {{g_bytes + 894, 8}}},
-    {&grpc_static_metadata_refcounts[81], {{g_bytes + 902, 12}}},
-    {&grpc_static_metadata_refcounts[82], {{g_bytes + 914, 18}}},
-    {&grpc_static_metadata_refcounts[83], {{g_bytes + 932, 19}}},
-    {&grpc_static_metadata_refcounts[84], {{g_bytes + 951, 5}}},
-    {&grpc_static_metadata_refcounts[85], {{g_bytes + 956, 7}}},
-    {&grpc_static_metadata_refcounts[86], {{g_bytes + 963, 7}}},
-    {&grpc_static_metadata_refcounts[87], {{g_bytes + 970, 11}}},
-    {&grpc_static_metadata_refcounts[88], {{g_bytes + 981, 6}}},
-    {&grpc_static_metadata_refcounts[89], {{g_bytes + 987, 10}}},
-    {&grpc_static_metadata_refcounts[90], {{g_bytes + 997, 25}}},
-    {&grpc_static_metadata_refcounts[91], {{g_bytes + 1022, 17}}},
-    {&grpc_static_metadata_refcounts[92], {{g_bytes + 1039, 4}}},
-    {&grpc_static_metadata_refcounts[93], {{g_bytes + 1043, 3}}},
-    {&grpc_static_metadata_refcounts[94], {{g_bytes + 1046, 16}}},
-    {&grpc_static_metadata_refcounts[95], {{g_bytes + 1062, 1}}},
-    {&grpc_static_metadata_refcounts[96], {{g_bytes + 1063, 8}}},
-    {&grpc_static_metadata_refcounts[97], {{g_bytes + 1071, 8}}},
-    {&grpc_static_metadata_refcounts[98], {{g_bytes + 1079, 16}}},
-    {&grpc_static_metadata_refcounts[99], {{g_bytes + 1095, 4}}},
-    {&grpc_static_metadata_refcounts[100], {{g_bytes + 1099, 3}}},
-    {&grpc_static_metadata_refcounts[101], {{g_bytes + 1102, 11}}},
-    {&grpc_static_metadata_refcounts[102], {{g_bytes + 1113, 16}}},
-    {&grpc_static_metadata_refcounts[103], {{g_bytes + 1129, 13}}},
-    {&grpc_static_metadata_refcounts[104], {{g_bytes + 1142, 12}}},
-    {&grpc_static_metadata_refcounts[105], {{g_bytes + 1154, 21}}},
+    {&grpc_static_metadata_refcounts[36], {{g_bytes + 510, 80}}},
+    {&grpc_static_metadata_refcounts[37], {{g_bytes + 590, 7}}},
+    {&grpc_static_metadata_refcounts[38], {{g_bytes + 597, 4}}},
+    {&grpc_static_metadata_refcounts[39], {{g_bytes + 601, 11}}},
+    {&grpc_static_metadata_refcounts[40], {{g_bytes + 612, 3}}},
+    {&grpc_static_metadata_refcounts[41], {{g_bytes + 615, 4}}},
+    {&grpc_static_metadata_refcounts[42], {{g_bytes + 619, 1}}},
+    {&grpc_static_metadata_refcounts[43], {{g_bytes + 620, 11}}},
+    {&grpc_static_metadata_refcounts[44], {{g_bytes + 631, 4}}},
+    {&grpc_static_metadata_refcounts[45], {{g_bytes + 635, 5}}},
+    {&grpc_static_metadata_refcounts[46], {{g_bytes + 640, 3}}},
+    {&grpc_static_metadata_refcounts[47], {{g_bytes + 643, 3}}},
+    {&grpc_static_metadata_refcounts[48], {{g_bytes + 646, 3}}},
+    {&grpc_static_metadata_refcounts[49], {{g_bytes + 649, 3}}},
+    {&grpc_static_metadata_refcounts[50], {{g_bytes + 652, 3}}},
+    {&grpc_static_metadata_refcounts[51], {{g_bytes + 655, 3}}},
+    {&grpc_static_metadata_refcounts[52], {{g_bytes + 658, 3}}},
+    {&grpc_static_metadata_refcounts[53], {{g_bytes + 661, 14}}},
+    {&grpc_static_metadata_refcounts[54], {{g_bytes + 675, 13}}},
+    {&grpc_static_metadata_refcounts[55], {{g_bytes + 688, 15}}},
+    {&grpc_static_metadata_refcounts[56], {{g_bytes + 703, 13}}},
+    {&grpc_static_metadata_refcounts[57], {{g_bytes + 716, 6}}},
+    {&grpc_static_metadata_refcounts[58], {{g_bytes + 722, 27}}},
+    {&grpc_static_metadata_refcounts[59], {{g_bytes + 749, 3}}},
+    {&grpc_static_metadata_refcounts[60], {{g_bytes + 752, 5}}},
+    {&grpc_static_metadata_refcounts[61], {{g_bytes + 757, 13}}},
+    {&grpc_static_metadata_refcounts[62], {{g_bytes + 770, 13}}},
+    {&grpc_static_metadata_refcounts[63], {{g_bytes + 783, 19}}},
+    {&grpc_static_metadata_refcounts[64], {{g_bytes + 802, 16}}},
+    {&grpc_static_metadata_refcounts[65], {{g_bytes + 818, 14}}},
+    {&grpc_static_metadata_refcounts[66], {{g_bytes + 832, 16}}},
+    {&grpc_static_metadata_refcounts[67], {{g_bytes + 848, 13}}},
+    {&grpc_static_metadata_refcounts[68], {{g_bytes + 861, 6}}},
+    {&grpc_static_metadata_refcounts[69], {{g_bytes + 867, 4}}},
+    {&grpc_static_metadata_refcounts[70], {{g_bytes + 871, 4}}},
+    {&grpc_static_metadata_refcounts[71], {{g_bytes + 875, 6}}},
+    {&grpc_static_metadata_refcounts[72], {{g_bytes + 881, 7}}},
+    {&grpc_static_metadata_refcounts[73], {{g_bytes + 888, 4}}},
+    {&grpc_static_metadata_refcounts[74], {{g_bytes + 892, 8}}},
+    {&grpc_static_metadata_refcounts[75], {{g_bytes + 900, 17}}},
+    {&grpc_static_metadata_refcounts[76], {{g_bytes + 917, 13}}},
+    {&grpc_static_metadata_refcounts[77], {{g_bytes + 930, 8}}},
+    {&grpc_static_metadata_refcounts[78], {{g_bytes + 938, 19}}},
+    {&grpc_static_metadata_refcounts[79], {{g_bytes + 957, 13}}},
+    {&grpc_static_metadata_refcounts[80], {{g_bytes + 970, 4}}},
+    {&grpc_static_metadata_refcounts[81], {{g_bytes + 974, 8}}},
+    {&grpc_static_metadata_refcounts[82], {{g_bytes + 982, 12}}},
+    {&grpc_static_metadata_refcounts[83], {{g_bytes + 994, 18}}},
+    {&grpc_static_metadata_refcounts[84], {{g_bytes + 1012, 19}}},
+    {&grpc_static_metadata_refcounts[85], {{g_bytes + 1031, 5}}},
+    {&grpc_static_metadata_refcounts[86], {{g_bytes + 1036, 7}}},
+    {&grpc_static_metadata_refcounts[87], {{g_bytes + 1043, 7}}},
+    {&grpc_static_metadata_refcounts[88], {{g_bytes + 1050, 11}}},
+    {&grpc_static_metadata_refcounts[89], {{g_bytes + 1061, 6}}},
+    {&grpc_static_metadata_refcounts[90], {{g_bytes + 1067, 10}}},
+    {&grpc_static_metadata_refcounts[91], {{g_bytes + 1077, 25}}},
+    {&grpc_static_metadata_refcounts[92], {{g_bytes + 1102, 17}}},
+    {&grpc_static_metadata_refcounts[93], {{g_bytes + 1119, 4}}},
+    {&grpc_static_metadata_refcounts[94], {{g_bytes + 1123, 3}}},
+    {&grpc_static_metadata_refcounts[95], {{g_bytes + 1126, 16}}},
+    {&grpc_static_metadata_refcounts[96], {{g_bytes + 1142, 1}}},
+    {&grpc_static_metadata_refcounts[97], {{g_bytes + 1143, 8}}},
+    {&grpc_static_metadata_refcounts[98], {{g_bytes + 1151, 8}}},
+    {&grpc_static_metadata_refcounts[99], {{g_bytes + 1159, 16}}},
+    {&grpc_static_metadata_refcounts[100], {{g_bytes + 1175, 4}}},
+    {&grpc_static_metadata_refcounts[101], {{g_bytes + 1179, 3}}},
+    {&grpc_static_metadata_refcounts[102], {{g_bytes + 1182, 11}}},
+    {&grpc_static_metadata_refcounts[103], {{g_bytes + 1193, 16}}},
+    {&grpc_static_metadata_refcounts[104], {{g_bytes + 1209, 13}}},
+    {&grpc_static_metadata_refcounts[105], {{g_bytes + 1222, 12}}},
+    {&grpc_static_metadata_refcounts[106], {{g_bytes + 1234, 21}}},
 };
 };
 
 
 uintptr_t grpc_static_mdelem_user_data[GRPC_STATIC_MDELEM_COUNT] = {
 uintptr_t grpc_static_mdelem_user_data[GRPC_STATIC_MDELEM_COUNT] = {
@@ -345,17 +352,17 @@ uintptr_t grpc_static_mdelem_user_data[GRPC_STATIC_MDELEM_COUNT] = {
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 4, 6, 6, 8, 8, 2, 4, 4};
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 4, 6, 6, 8, 8, 2, 4, 4};
 
 
 static const int8_t elems_r[] = {
 static const int8_t elems_r[] = {
-    16, 11,  -8, 0,  3,  -42, -81, -43, 0,  6,   -8,  0,   0,   0,  -7,
-    -3, -10, 0,  0,  0,  -1,  -2,  0,   0,  0,   0,   0,   0,   0,  0,
-    0,  0,   0,  0,  0,  0,   0,   0,   0,  0,   0,   0,   0,   0,  0,
-    0,  0,   0,  0,  0,  0,   0,   -63, 0,  -47, -68, -69, -70, 0,  33,
-    33, 32,  31, 30, 29, 28,  27,  26,  25, 24,  23,  22,  21,  20, 20,
-    19, 18,  17, 16, 15, 14,  13,  12,  11, 10,  9,   8,   7,   6,  5,
-    4,  4,   4,  3,  10, 9,   0,   0,   0,  0,   0,   0,   -3,  0};
+    15, 10,  -8, 0,  2,  -42, -81, -43, 0,   6,  -8,  0,   0,   0,   2,
+    -3, -10, 0,  0,  1,  0,   -1,  0,   0,   0,  0,   0,   0,   0,   0,
+    0,  0,   0,  0,  0,  0,   0,   0,   0,   0,  0,   0,   0,   0,   0,
+    0,  0,   0,  0,  0,  0,   0,   0,   -64, 0,  -67, -68, -69, -70, 0,
+    35, 34,  33, 32, 31, 30,  29,  28,  27,  26, 25,  24,  23,  22,  21,
+    20, 19,  18, 17, 16, 15,  14,  13,  12,  11, 10,  9,   8,   7,   6,
+    5,  4,   5,  4,  4,  8,   8,   0,   0,   0,  0,   0,   0,   -5,  0};
 static uint32_t elems_phash(uint32_t i) {
 static uint32_t elems_phash(uint32_t i) {
-  i -= 41;
-  uint32_t x = i % 104;
-  uint32_t y = i / 104;
+  i -= 42;
+  uint32_t x = i % 105;
+  uint32_t y = i / 105;
   uint32_t h = x;
   uint32_t h = x;
   if (y < GPR_ARRAY_SIZE(elems_r)) {
   if (y < GPR_ARRAY_SIZE(elems_r)) {
     uint32_t delta = (uint32_t)elems_r[y];
     uint32_t delta = (uint32_t)elems_r[y];
@@ -365,29 +372,29 @@ static uint32_t elems_phash(uint32_t i) {
 }
 }
 
 
 static const uint16_t elem_keys[] = {
 static const uint16_t elem_keys[] = {
-    257,  258,  259,  260,  261,  262,  263,  1096, 1097, 1513, 1725, 145,
-    146,  467,  468,  1619, 41,   42,   1733, 990,  991,  767,  768,  1627,
-    627,  837,  2043, 2149, 2255, 5541, 5859, 5965, 6071, 6177, 1749, 6283,
-    6389, 6495, 6601, 6707, 6813, 6919, 7025, 7131, 7237, 7343, 7449, 7555,
-    7661, 5753, 7767, 7873, 7979, 8085, 8191, 8297, 8403, 8509, 8615, 8721,
-    8827, 8933, 9039, 9145, 9251, 9357, 9463, 1156, 9569, 523,  9675, 9781,
-    206,  1162, 1163, 1164, 1165, 1792, 1582, 1050, 9887, 9993, 1686, 10735,
-    1799, 0,    0,    0,    0,    0,    347,  0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0};
+    260,  261,  262,  263,  264,  265,  266,   1107, 1108,  1741,  147,  148,
+    472,  473,  1634, 42,   43,   1527, 1750,  1000, 1001,  774,   775,  1643,
+    633,  845,  2062, 2169, 2276, 5700, 5914,  6021, 6128,  6235,  1766, 6342,
+    6449, 6556, 6663, 6770, 6877, 6984, 7091,  7198, 7305,  7412,  7519, 7626,
+    7733, 7840, 7947, 8054, 8161, 8268, 8375,  8482, 8589,  8696,  8803, 8910,
+    9017, 9124, 9231, 9338, 9445, 9552, 9659,  1167, 528,   9766,  9873, 208,
+    9980, 1173, 1174, 1175, 1176, 1809, 10087, 1060, 10194, 10943, 1702, 0,
+    1816, 0,    0,    1597, 0,    0,    350,   0,    0,     0,     0,    0,
+    0,    0,    0,    0,    0,    0,    0,     0,    0,     0,     0,    0,
+    0,    0,    0,    0,    0,    0,    0,     0,    0,     0,     0,    0,
+    0,    0,    0,    0,    0,    0,    0,     0,    0,     0,     0,    0,
+    0,    0,    0,    0,    0,    0,    0};
 static const uint8_t elem_idxs[] = {
 static const uint8_t elem_idxs[] = {
-    7,  8,  9,  10, 11, 12,  13,  77,  79,  30,  71, 1,  2,  5,  6,  25,
-    3,  4,  84, 66, 65, 62,  63,  73,  67,  61,  57, 37, 74, 14, 17, 18,
-    19, 20, 15, 21, 22, 23,  24,  26,  27,  28,  29, 31, 32, 33, 34, 35,
-    36, 16, 38, 39, 40, 41,  42,  43,  44,  45,  46, 47, 48, 49, 50, 51,
-    52, 53, 54, 76, 55, 69,  56,  58,  70,  78,  80, 81, 82, 83, 68, 64,
-    59, 60, 72, 75, 85, 255, 255, 255, 255, 255, 0};
+    7,  8,  9,  10,  11, 12,  13,  77, 79,  71,  1,  2,  5,  6,  25, 3,
+    4,  30, 84, 66,  65, 62,  63,  73, 67,  61,  57, 37, 74, 14, 16, 17,
+    18, 19, 15, 20,  21, 22,  23,  24, 26,  27,  28, 29, 31, 32, 33, 34,
+    35, 36, 38, 39,  40, 41,  42,  43, 44,  45,  46, 47, 48, 49, 50, 51,
+    52, 53, 54, 76,  69, 55,  56,  70, 58,  78,  80, 81, 82, 83, 59, 64,
+    60, 75, 72, 255, 85, 255, 255, 68, 255, 255, 0};
 
 
 grpc_mdelem grpc_static_mdelem_for_static_strings(int a, int b) {
 grpc_mdelem grpc_static_mdelem_for_static_strings(int a, int b) {
   if (a == -1 || b == -1) return GRPC_MDNULL;
   if (a == -1 || b == -1) return GRPC_MDNULL;
-  uint32_t k = (uint32_t)(a * 106 + b);
+  uint32_t k = (uint32_t)(a * 107 + b);
   uint32_t h = elems_phash(k);
   uint32_t h = elems_phash(k);
   return h < GPR_ARRAY_SIZE(elem_keys) && elem_keys[h] == k &&
   return h < GPR_ARRAY_SIZE(elem_keys) && elem_keys[h] == k &&
                  elem_idxs[h] != 255
                  elem_idxs[h] != 255
@@ -400,175 +407,175 @@ grpc_mdelem_data grpc_static_mdelem_table[GRPC_STATIC_MDELEM_COUNT] = {
     {{&grpc_static_metadata_refcounts[3], {{g_bytes + 19, 10}}},
     {{&grpc_static_metadata_refcounts[3], {{g_bytes + 19, 10}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
     {{&grpc_static_metadata_refcounts[1], {{g_bytes + 5, 7}}},
     {{&grpc_static_metadata_refcounts[1], {{g_bytes + 5, 7}}},
-     {&grpc_static_metadata_refcounts[39], {{g_bytes + 532, 3}}}},
+     {&grpc_static_metadata_refcounts[40], {{g_bytes + 612, 3}}}},
     {{&grpc_static_metadata_refcounts[1], {{g_bytes + 5, 7}}},
     {{&grpc_static_metadata_refcounts[1], {{g_bytes + 5, 7}}},
-     {&grpc_static_metadata_refcounts[40], {{g_bytes + 535, 4}}}},
+     {&grpc_static_metadata_refcounts[41], {{g_bytes + 615, 4}}}},
     {{&grpc_static_metadata_refcounts[0], {{g_bytes + 0, 5}}},
     {{&grpc_static_metadata_refcounts[0], {{g_bytes + 0, 5}}},
-     {&grpc_static_metadata_refcounts[41], {{g_bytes + 539, 1}}}},
+     {&grpc_static_metadata_refcounts[42], {{g_bytes + 619, 1}}}},
     {{&grpc_static_metadata_refcounts[0], {{g_bytes + 0, 5}}},
     {{&grpc_static_metadata_refcounts[0], {{g_bytes + 0, 5}}},
-     {&grpc_static_metadata_refcounts[42], {{g_bytes + 540, 11}}}},
+     {&grpc_static_metadata_refcounts[43], {{g_bytes + 620, 11}}}},
     {{&grpc_static_metadata_refcounts[4], {{g_bytes + 29, 7}}},
     {{&grpc_static_metadata_refcounts[4], {{g_bytes + 29, 7}}},
-     {&grpc_static_metadata_refcounts[43], {{g_bytes + 551, 4}}}},
+     {&grpc_static_metadata_refcounts[44], {{g_bytes + 631, 4}}}},
     {{&grpc_static_metadata_refcounts[4], {{g_bytes + 29, 7}}},
     {{&grpc_static_metadata_refcounts[4], {{g_bytes + 29, 7}}},
-     {&grpc_static_metadata_refcounts[44], {{g_bytes + 555, 5}}}},
+     {&grpc_static_metadata_refcounts[45], {{g_bytes + 635, 5}}}},
     {{&grpc_static_metadata_refcounts[2], {{g_bytes + 12, 7}}},
     {{&grpc_static_metadata_refcounts[2], {{g_bytes + 12, 7}}},
-     {&grpc_static_metadata_refcounts[45], {{g_bytes + 560, 3}}}},
+     {&grpc_static_metadata_refcounts[46], {{g_bytes + 640, 3}}}},
     {{&grpc_static_metadata_refcounts[2], {{g_bytes + 12, 7}}},
     {{&grpc_static_metadata_refcounts[2], {{g_bytes + 12, 7}}},
-     {&grpc_static_metadata_refcounts[46], {{g_bytes + 563, 3}}}},
+     {&grpc_static_metadata_refcounts[47], {{g_bytes + 643, 3}}}},
     {{&grpc_static_metadata_refcounts[2], {{g_bytes + 12, 7}}},
     {{&grpc_static_metadata_refcounts[2], {{g_bytes + 12, 7}}},
-     {&grpc_static_metadata_refcounts[47], {{g_bytes + 566, 3}}}},
+     {&grpc_static_metadata_refcounts[48], {{g_bytes + 646, 3}}}},
     {{&grpc_static_metadata_refcounts[2], {{g_bytes + 12, 7}}},
     {{&grpc_static_metadata_refcounts[2], {{g_bytes + 12, 7}}},
-     {&grpc_static_metadata_refcounts[48], {{g_bytes + 569, 3}}}},
+     {&grpc_static_metadata_refcounts[49], {{g_bytes + 649, 3}}}},
     {{&grpc_static_metadata_refcounts[2], {{g_bytes + 12, 7}}},
     {{&grpc_static_metadata_refcounts[2], {{g_bytes + 12, 7}}},
-     {&grpc_static_metadata_refcounts[49], {{g_bytes + 572, 3}}}},
+     {&grpc_static_metadata_refcounts[50], {{g_bytes + 652, 3}}}},
     {{&grpc_static_metadata_refcounts[2], {{g_bytes + 12, 7}}},
     {{&grpc_static_metadata_refcounts[2], {{g_bytes + 12, 7}}},
-     {&grpc_static_metadata_refcounts[50], {{g_bytes + 575, 3}}}},
+     {&grpc_static_metadata_refcounts[51], {{g_bytes + 655, 3}}}},
     {{&grpc_static_metadata_refcounts[2], {{g_bytes + 12, 7}}},
     {{&grpc_static_metadata_refcounts[2], {{g_bytes + 12, 7}}},
-     {&grpc_static_metadata_refcounts[51], {{g_bytes + 578, 3}}}},
-    {{&grpc_static_metadata_refcounts[52], {{g_bytes + 581, 14}}},
+     {&grpc_static_metadata_refcounts[52], {{g_bytes + 658, 3}}}},
+    {{&grpc_static_metadata_refcounts[53], {{g_bytes + 661, 14}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
     {{&grpc_static_metadata_refcounts[16], {{g_bytes + 186, 15}}},
     {{&grpc_static_metadata_refcounts[16], {{g_bytes + 186, 15}}},
-     {&grpc_static_metadata_refcounts[53], {{g_bytes + 595, 13}}}},
-    {{&grpc_static_metadata_refcounts[54], {{g_bytes + 608, 15}}},
+     {&grpc_static_metadata_refcounts[54], {{g_bytes + 675, 13}}}},
+    {{&grpc_static_metadata_refcounts[55], {{g_bytes + 688, 15}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[55], {{g_bytes + 623, 13}}},
+    {{&grpc_static_metadata_refcounts[56], {{g_bytes + 703, 13}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[56], {{g_bytes + 636, 6}}},
+    {{&grpc_static_metadata_refcounts[57], {{g_bytes + 716, 6}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[57], {{g_bytes + 642, 27}}},
+    {{&grpc_static_metadata_refcounts[58], {{g_bytes + 722, 27}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[58], {{g_bytes + 669, 3}}},
+    {{&grpc_static_metadata_refcounts[59], {{g_bytes + 749, 3}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[59], {{g_bytes + 672, 5}}},
+    {{&grpc_static_metadata_refcounts[60], {{g_bytes + 752, 5}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[60], {{g_bytes + 677, 13}}},
+    {{&grpc_static_metadata_refcounts[61], {{g_bytes + 757, 13}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[61], {{g_bytes + 690, 13}}},
+    {{&grpc_static_metadata_refcounts[62], {{g_bytes + 770, 13}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[62], {{g_bytes + 703, 19}}},
+    {{&grpc_static_metadata_refcounts[63], {{g_bytes + 783, 19}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
     {{&grpc_static_metadata_refcounts[15], {{g_bytes + 170, 16}}},
     {{&grpc_static_metadata_refcounts[15], {{g_bytes + 170, 16}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[63], {{g_bytes + 722, 16}}},
+    {{&grpc_static_metadata_refcounts[64], {{g_bytes + 802, 16}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[64], {{g_bytes + 738, 14}}},
+    {{&grpc_static_metadata_refcounts[65], {{g_bytes + 818, 14}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[65], {{g_bytes + 752, 16}}},
+    {{&grpc_static_metadata_refcounts[66], {{g_bytes + 832, 16}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[66], {{g_bytes + 768, 13}}},
+    {{&grpc_static_metadata_refcounts[67], {{g_bytes + 848, 13}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
     {{&grpc_static_metadata_refcounts[14], {{g_bytes + 158, 12}}},
     {{&grpc_static_metadata_refcounts[14], {{g_bytes + 158, 12}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[67], {{g_bytes + 781, 6}}},
+    {{&grpc_static_metadata_refcounts[68], {{g_bytes + 861, 6}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[68], {{g_bytes + 787, 4}}},
+    {{&grpc_static_metadata_refcounts[69], {{g_bytes + 867, 4}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[69], {{g_bytes + 791, 4}}},
+    {{&grpc_static_metadata_refcounts[70], {{g_bytes + 871, 4}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[70], {{g_bytes + 795, 6}}},
+    {{&grpc_static_metadata_refcounts[71], {{g_bytes + 875, 6}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[71], {{g_bytes + 801, 7}}},
+    {{&grpc_static_metadata_refcounts[72], {{g_bytes + 881, 7}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[72], {{g_bytes + 808, 4}}},
+    {{&grpc_static_metadata_refcounts[73], {{g_bytes + 888, 4}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
     {{&grpc_static_metadata_refcounts[20], {{g_bytes + 278, 4}}},
     {{&grpc_static_metadata_refcounts[20], {{g_bytes + 278, 4}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[73], {{g_bytes + 812, 8}}},
+    {{&grpc_static_metadata_refcounts[74], {{g_bytes + 892, 8}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[74], {{g_bytes + 820, 17}}},
+    {{&grpc_static_metadata_refcounts[75], {{g_bytes + 900, 17}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[75], {{g_bytes + 837, 13}}},
+    {{&grpc_static_metadata_refcounts[76], {{g_bytes + 917, 13}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[76], {{g_bytes + 850, 8}}},
+    {{&grpc_static_metadata_refcounts[77], {{g_bytes + 930, 8}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[77], {{g_bytes + 858, 19}}},
+    {{&grpc_static_metadata_refcounts[78], {{g_bytes + 938, 19}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[78], {{g_bytes + 877, 13}}},
+    {{&grpc_static_metadata_refcounts[79], {{g_bytes + 957, 13}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[79], {{g_bytes + 890, 4}}},
+    {{&grpc_static_metadata_refcounts[80], {{g_bytes + 970, 4}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[80], {{g_bytes + 894, 8}}},
+    {{&grpc_static_metadata_refcounts[81], {{g_bytes + 974, 8}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[81], {{g_bytes + 902, 12}}},
+    {{&grpc_static_metadata_refcounts[82], {{g_bytes + 982, 12}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[82], {{g_bytes + 914, 18}}},
+    {{&grpc_static_metadata_refcounts[83], {{g_bytes + 994, 18}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[83], {{g_bytes + 932, 19}}},
+    {{&grpc_static_metadata_refcounts[84], {{g_bytes + 1012, 19}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[84], {{g_bytes + 951, 5}}},
+    {{&grpc_static_metadata_refcounts[85], {{g_bytes + 1031, 5}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[85], {{g_bytes + 956, 7}}},
+    {{&grpc_static_metadata_refcounts[86], {{g_bytes + 1036, 7}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[86], {{g_bytes + 963, 7}}},
+    {{&grpc_static_metadata_refcounts[87], {{g_bytes + 1043, 7}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[87], {{g_bytes + 970, 11}}},
+    {{&grpc_static_metadata_refcounts[88], {{g_bytes + 1050, 11}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[88], {{g_bytes + 981, 6}}},
+    {{&grpc_static_metadata_refcounts[89], {{g_bytes + 1061, 6}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[89], {{g_bytes + 987, 10}}},
+    {{&grpc_static_metadata_refcounts[90], {{g_bytes + 1067, 10}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[90], {{g_bytes + 997, 25}}},
+    {{&grpc_static_metadata_refcounts[91], {{g_bytes + 1077, 25}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[91], {{g_bytes + 1022, 17}}},
+    {{&grpc_static_metadata_refcounts[92], {{g_bytes + 1102, 17}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
     {{&grpc_static_metadata_refcounts[19], {{g_bytes + 268, 10}}},
     {{&grpc_static_metadata_refcounts[19], {{g_bytes + 268, 10}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[92], {{g_bytes + 1039, 4}}},
+    {{&grpc_static_metadata_refcounts[93], {{g_bytes + 1119, 4}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[93], {{g_bytes + 1043, 3}}},
+    {{&grpc_static_metadata_refcounts[94], {{g_bytes + 1123, 3}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[94], {{g_bytes + 1046, 16}}},
+    {{&grpc_static_metadata_refcounts[95], {{g_bytes + 1126, 16}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
     {{&grpc_static_metadata_refcounts[7], {{g_bytes + 50, 11}}},
     {{&grpc_static_metadata_refcounts[7], {{g_bytes + 50, 11}}},
-     {&grpc_static_metadata_refcounts[95], {{g_bytes + 1062, 1}}}},
+     {&grpc_static_metadata_refcounts[96], {{g_bytes + 1142, 1}}}},
     {{&grpc_static_metadata_refcounts[7], {{g_bytes + 50, 11}}},
     {{&grpc_static_metadata_refcounts[7], {{g_bytes + 50, 11}}},
      {&grpc_static_metadata_refcounts[25], {{g_bytes + 350, 1}}}},
      {&grpc_static_metadata_refcounts[25], {{g_bytes + 350, 1}}}},
     {{&grpc_static_metadata_refcounts[7], {{g_bytes + 50, 11}}},
     {{&grpc_static_metadata_refcounts[7], {{g_bytes + 50, 11}}},
      {&grpc_static_metadata_refcounts[26], {{g_bytes + 351, 1}}}},
      {&grpc_static_metadata_refcounts[26], {{g_bytes + 351, 1}}}},
     {{&grpc_static_metadata_refcounts[9], {{g_bytes + 77, 13}}},
     {{&grpc_static_metadata_refcounts[9], {{g_bytes + 77, 13}}},
-     {&grpc_static_metadata_refcounts[96], {{g_bytes + 1063, 8}}}},
+     {&grpc_static_metadata_refcounts[97], {{g_bytes + 1143, 8}}}},
     {{&grpc_static_metadata_refcounts[9], {{g_bytes + 77, 13}}},
     {{&grpc_static_metadata_refcounts[9], {{g_bytes + 77, 13}}},
-     {&grpc_static_metadata_refcounts[37], {{g_bytes + 517, 4}}}},
+     {&grpc_static_metadata_refcounts[38], {{g_bytes + 597, 4}}}},
     {{&grpc_static_metadata_refcounts[9], {{g_bytes + 77, 13}}},
     {{&grpc_static_metadata_refcounts[9], {{g_bytes + 77, 13}}},
-     {&grpc_static_metadata_refcounts[36], {{g_bytes + 510, 7}}}},
+     {&grpc_static_metadata_refcounts[37], {{g_bytes + 590, 7}}}},
     {{&grpc_static_metadata_refcounts[5], {{g_bytes + 36, 2}}},
     {{&grpc_static_metadata_refcounts[5], {{g_bytes + 36, 2}}},
-     {&grpc_static_metadata_refcounts[97], {{g_bytes + 1071, 8}}}},
+     {&grpc_static_metadata_refcounts[98], {{g_bytes + 1151, 8}}}},
     {{&grpc_static_metadata_refcounts[14], {{g_bytes + 158, 12}}},
     {{&grpc_static_metadata_refcounts[14], {{g_bytes + 158, 12}}},
-     {&grpc_static_metadata_refcounts[98], {{g_bytes + 1079, 16}}}},
+     {&grpc_static_metadata_refcounts[99], {{g_bytes + 1159, 16}}}},
     {{&grpc_static_metadata_refcounts[4], {{g_bytes + 29, 7}}},
     {{&grpc_static_metadata_refcounts[4], {{g_bytes + 29, 7}}},
-     {&grpc_static_metadata_refcounts[99], {{g_bytes + 1095, 4}}}},
+     {&grpc_static_metadata_refcounts[100], {{g_bytes + 1175, 4}}}},
     {{&grpc_static_metadata_refcounts[1], {{g_bytes + 5, 7}}},
     {{&grpc_static_metadata_refcounts[1], {{g_bytes + 5, 7}}},
-     {&grpc_static_metadata_refcounts[100], {{g_bytes + 1099, 3}}}},
+     {&grpc_static_metadata_refcounts[101], {{g_bytes + 1179, 3}}}},
     {{&grpc_static_metadata_refcounts[16], {{g_bytes + 186, 15}}},
     {{&grpc_static_metadata_refcounts[16], {{g_bytes + 186, 15}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
     {{&grpc_static_metadata_refcounts[15], {{g_bytes + 170, 16}}},
     {{&grpc_static_metadata_refcounts[15], {{g_bytes + 170, 16}}},
-     {&grpc_static_metadata_refcounts[96], {{g_bytes + 1063, 8}}}},
+     {&grpc_static_metadata_refcounts[97], {{g_bytes + 1143, 8}}}},
     {{&grpc_static_metadata_refcounts[15], {{g_bytes + 170, 16}}},
     {{&grpc_static_metadata_refcounts[15], {{g_bytes + 170, 16}}},
-     {&grpc_static_metadata_refcounts[37], {{g_bytes + 517, 4}}}},
+     {&grpc_static_metadata_refcounts[38], {{g_bytes + 597, 4}}}},
     {{&grpc_static_metadata_refcounts[21], {{g_bytes + 282, 8}}},
     {{&grpc_static_metadata_refcounts[21], {{g_bytes + 282, 8}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
-    {{&grpc_static_metadata_refcounts[101], {{g_bytes + 1102, 11}}},
+    {{&grpc_static_metadata_refcounts[102], {{g_bytes + 1182, 11}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
      {&grpc_static_metadata_refcounts[29], {{g_bytes + 354, 0}}}},
     {{&grpc_static_metadata_refcounts[10], {{g_bytes + 90, 20}}},
     {{&grpc_static_metadata_refcounts[10], {{g_bytes + 90, 20}}},
-     {&grpc_static_metadata_refcounts[96], {{g_bytes + 1063, 8}}}},
+     {&grpc_static_metadata_refcounts[97], {{g_bytes + 1143, 8}}}},
     {{&grpc_static_metadata_refcounts[10], {{g_bytes + 90, 20}}},
     {{&grpc_static_metadata_refcounts[10], {{g_bytes + 90, 20}}},
-     {&grpc_static_metadata_refcounts[36], {{g_bytes + 510, 7}}}},
+     {&grpc_static_metadata_refcounts[37], {{g_bytes + 590, 7}}}},
     {{&grpc_static_metadata_refcounts[10], {{g_bytes + 90, 20}}},
     {{&grpc_static_metadata_refcounts[10], {{g_bytes + 90, 20}}},
-     {&grpc_static_metadata_refcounts[102], {{g_bytes + 1113, 16}}}},
+     {&grpc_static_metadata_refcounts[103], {{g_bytes + 1193, 16}}}},
     {{&grpc_static_metadata_refcounts[10], {{g_bytes + 90, 20}}},
     {{&grpc_static_metadata_refcounts[10], {{g_bytes + 90, 20}}},
-     {&grpc_static_metadata_refcounts[37], {{g_bytes + 517, 4}}}},
+     {&grpc_static_metadata_refcounts[38], {{g_bytes + 597, 4}}}},
     {{&grpc_static_metadata_refcounts[10], {{g_bytes + 90, 20}}},
     {{&grpc_static_metadata_refcounts[10], {{g_bytes + 90, 20}}},
-     {&grpc_static_metadata_refcounts[103], {{g_bytes + 1129, 13}}}},
+     {&grpc_static_metadata_refcounts[104], {{g_bytes + 1209, 13}}}},
     {{&grpc_static_metadata_refcounts[10], {{g_bytes + 90, 20}}},
     {{&grpc_static_metadata_refcounts[10], {{g_bytes + 90, 20}}},
-     {&grpc_static_metadata_refcounts[104], {{g_bytes + 1142, 12}}}},
+     {&grpc_static_metadata_refcounts[105], {{g_bytes + 1222, 12}}}},
     {{&grpc_static_metadata_refcounts[10], {{g_bytes + 90, 20}}},
     {{&grpc_static_metadata_refcounts[10], {{g_bytes + 90, 20}}},
-     {&grpc_static_metadata_refcounts[105], {{g_bytes + 1154, 21}}}},
+     {&grpc_static_metadata_refcounts[106], {{g_bytes + 1234, 21}}}},
     {{&grpc_static_metadata_refcounts[16], {{g_bytes + 186, 15}}},
     {{&grpc_static_metadata_refcounts[16], {{g_bytes + 186, 15}}},
-     {&grpc_static_metadata_refcounts[96], {{g_bytes + 1063, 8}}}},
+     {&grpc_static_metadata_refcounts[97], {{g_bytes + 1143, 8}}}},
     {{&grpc_static_metadata_refcounts[16], {{g_bytes + 186, 15}}},
     {{&grpc_static_metadata_refcounts[16], {{g_bytes + 186, 15}}},
-     {&grpc_static_metadata_refcounts[37], {{g_bytes + 517, 4}}}},
+     {&grpc_static_metadata_refcounts[38], {{g_bytes + 597, 4}}}},
     {{&grpc_static_metadata_refcounts[16], {{g_bytes + 186, 15}}},
     {{&grpc_static_metadata_refcounts[16], {{g_bytes + 186, 15}}},
-     {&grpc_static_metadata_refcounts[103], {{g_bytes + 1129, 13}}}},
+     {&grpc_static_metadata_refcounts[104], {{g_bytes + 1209, 13}}}},
 };
 };
 const uint8_t grpc_static_accept_encoding_metadata[8] = {0,  76, 77, 78,
 const uint8_t grpc_static_accept_encoding_metadata[8] = {0,  76, 77, 78,
                                                          79, 80, 81, 82};
                                                          79, 80, 81, 82};

+ 75 - 71
src/core/lib/transport/static_metadata.h

@@ -31,7 +31,7 @@
 
 
 #include "src/core/lib/transport/metadata.h"
 #include "src/core/lib/transport/metadata.h"
 
 
-#define GRPC_STATIC_MDSTR_COUNT 106
+#define GRPC_STATIC_MDSTR_COUNT 107
 extern const grpc_slice grpc_static_slice_table[GRPC_STATIC_MDSTR_COUNT];
 extern const grpc_slice grpc_static_slice_table[GRPC_STATIC_MDSTR_COUNT];
 /* ":path" */
 /* ":path" */
 #define GRPC_MDSTR_PATH (grpc_static_slice_table[0])
 #define GRPC_MDSTR_PATH (grpc_static_slice_table[0])
@@ -110,147 +110,151 @@ extern const grpc_slice grpc_static_slice_table[GRPC_STATIC_MDSTR_COUNT];
 /* "/grpc.health.v1.Health/Watch" */
 /* "/grpc.health.v1.Health/Watch" */
 #define GRPC_MDSTR_SLASH_GRPC_DOT_HEALTH_DOT_V1_DOT_HEALTH_SLASH_WATCH \
 #define GRPC_MDSTR_SLASH_GRPC_DOT_HEALTH_DOT_V1_DOT_HEALTH_SLASH_WATCH \
   (grpc_static_slice_table[35])
   (grpc_static_slice_table[35])
+/* "/envoy.service.discovery.v2.AggregatedDiscoveryService/StreamAggregatedResources"
+ */
+#define GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_DISCOVERY_DOT_V2_DOT_AGGREGATEDDISCOVERYSERVICE_SLASH_STREAMAGGREGATEDRESOURCES \
+  (grpc_static_slice_table[36])
 /* "deflate" */
 /* "deflate" */
-#define GRPC_MDSTR_DEFLATE (grpc_static_slice_table[36])
+#define GRPC_MDSTR_DEFLATE (grpc_static_slice_table[37])
 /* "gzip" */
 /* "gzip" */
-#define GRPC_MDSTR_GZIP (grpc_static_slice_table[37])
+#define GRPC_MDSTR_GZIP (grpc_static_slice_table[38])
 /* "stream/gzip" */
 /* "stream/gzip" */
-#define GRPC_MDSTR_STREAM_SLASH_GZIP (grpc_static_slice_table[38])
+#define GRPC_MDSTR_STREAM_SLASH_GZIP (grpc_static_slice_table[39])
 /* "GET" */
 /* "GET" */
-#define GRPC_MDSTR_GET (grpc_static_slice_table[39])
+#define GRPC_MDSTR_GET (grpc_static_slice_table[40])
 /* "POST" */
 /* "POST" */
-#define GRPC_MDSTR_POST (grpc_static_slice_table[40])
+#define GRPC_MDSTR_POST (grpc_static_slice_table[41])
 /* "/" */
 /* "/" */
-#define GRPC_MDSTR_SLASH (grpc_static_slice_table[41])
+#define GRPC_MDSTR_SLASH (grpc_static_slice_table[42])
 /* "/index.html" */
 /* "/index.html" */
-#define GRPC_MDSTR_SLASH_INDEX_DOT_HTML (grpc_static_slice_table[42])
+#define GRPC_MDSTR_SLASH_INDEX_DOT_HTML (grpc_static_slice_table[43])
 /* "http" */
 /* "http" */
-#define GRPC_MDSTR_HTTP (grpc_static_slice_table[43])
+#define GRPC_MDSTR_HTTP (grpc_static_slice_table[44])
 /* "https" */
 /* "https" */
-#define GRPC_MDSTR_HTTPS (grpc_static_slice_table[44])
+#define GRPC_MDSTR_HTTPS (grpc_static_slice_table[45])
 /* "200" */
 /* "200" */
-#define GRPC_MDSTR_200 (grpc_static_slice_table[45])
+#define GRPC_MDSTR_200 (grpc_static_slice_table[46])
 /* "204" */
 /* "204" */
-#define GRPC_MDSTR_204 (grpc_static_slice_table[46])
+#define GRPC_MDSTR_204 (grpc_static_slice_table[47])
 /* "206" */
 /* "206" */
-#define GRPC_MDSTR_206 (grpc_static_slice_table[47])
+#define GRPC_MDSTR_206 (grpc_static_slice_table[48])
 /* "304" */
 /* "304" */
-#define GRPC_MDSTR_304 (grpc_static_slice_table[48])
+#define GRPC_MDSTR_304 (grpc_static_slice_table[49])
 /* "400" */
 /* "400" */
-#define GRPC_MDSTR_400 (grpc_static_slice_table[49])
+#define GRPC_MDSTR_400 (grpc_static_slice_table[50])
 /* "404" */
 /* "404" */
-#define GRPC_MDSTR_404 (grpc_static_slice_table[50])
+#define GRPC_MDSTR_404 (grpc_static_slice_table[51])
 /* "500" */
 /* "500" */
-#define GRPC_MDSTR_500 (grpc_static_slice_table[51])
+#define GRPC_MDSTR_500 (grpc_static_slice_table[52])
 /* "accept-charset" */
 /* "accept-charset" */
-#define GRPC_MDSTR_ACCEPT_CHARSET (grpc_static_slice_table[52])
+#define GRPC_MDSTR_ACCEPT_CHARSET (grpc_static_slice_table[53])
 /* "gzip, deflate" */
 /* "gzip, deflate" */
-#define GRPC_MDSTR_GZIP_COMMA_DEFLATE (grpc_static_slice_table[53])
+#define GRPC_MDSTR_GZIP_COMMA_DEFLATE (grpc_static_slice_table[54])
 /* "accept-language" */
 /* "accept-language" */
-#define GRPC_MDSTR_ACCEPT_LANGUAGE (grpc_static_slice_table[54])
+#define GRPC_MDSTR_ACCEPT_LANGUAGE (grpc_static_slice_table[55])
 /* "accept-ranges" */
 /* "accept-ranges" */
-#define GRPC_MDSTR_ACCEPT_RANGES (grpc_static_slice_table[55])
+#define GRPC_MDSTR_ACCEPT_RANGES (grpc_static_slice_table[56])
 /* "accept" */
 /* "accept" */
-#define GRPC_MDSTR_ACCEPT (grpc_static_slice_table[56])
+#define GRPC_MDSTR_ACCEPT (grpc_static_slice_table[57])
 /* "access-control-allow-origin" */
 /* "access-control-allow-origin" */
-#define GRPC_MDSTR_ACCESS_CONTROL_ALLOW_ORIGIN (grpc_static_slice_table[57])
+#define GRPC_MDSTR_ACCESS_CONTROL_ALLOW_ORIGIN (grpc_static_slice_table[58])
 /* "age" */
 /* "age" */
-#define GRPC_MDSTR_AGE (grpc_static_slice_table[58])
+#define GRPC_MDSTR_AGE (grpc_static_slice_table[59])
 /* "allow" */
 /* "allow" */
-#define GRPC_MDSTR_ALLOW (grpc_static_slice_table[59])
+#define GRPC_MDSTR_ALLOW (grpc_static_slice_table[60])
 /* "authorization" */
 /* "authorization" */
-#define GRPC_MDSTR_AUTHORIZATION (grpc_static_slice_table[60])
+#define GRPC_MDSTR_AUTHORIZATION (grpc_static_slice_table[61])
 /* "cache-control" */
 /* "cache-control" */
-#define GRPC_MDSTR_CACHE_CONTROL (grpc_static_slice_table[61])
+#define GRPC_MDSTR_CACHE_CONTROL (grpc_static_slice_table[62])
 /* "content-disposition" */
 /* "content-disposition" */
-#define GRPC_MDSTR_CONTENT_DISPOSITION (grpc_static_slice_table[62])
+#define GRPC_MDSTR_CONTENT_DISPOSITION (grpc_static_slice_table[63])
 /* "content-language" */
 /* "content-language" */
-#define GRPC_MDSTR_CONTENT_LANGUAGE (grpc_static_slice_table[63])
+#define GRPC_MDSTR_CONTENT_LANGUAGE (grpc_static_slice_table[64])
 /* "content-length" */
 /* "content-length" */
-#define GRPC_MDSTR_CONTENT_LENGTH (grpc_static_slice_table[64])
+#define GRPC_MDSTR_CONTENT_LENGTH (grpc_static_slice_table[65])
 /* "content-location" */
 /* "content-location" */
-#define GRPC_MDSTR_CONTENT_LOCATION (grpc_static_slice_table[65])
+#define GRPC_MDSTR_CONTENT_LOCATION (grpc_static_slice_table[66])
 /* "content-range" */
 /* "content-range" */
-#define GRPC_MDSTR_CONTENT_RANGE (grpc_static_slice_table[66])
+#define GRPC_MDSTR_CONTENT_RANGE (grpc_static_slice_table[67])
 /* "cookie" */
 /* "cookie" */
-#define GRPC_MDSTR_COOKIE (grpc_static_slice_table[67])
+#define GRPC_MDSTR_COOKIE (grpc_static_slice_table[68])
 /* "date" */
 /* "date" */
-#define GRPC_MDSTR_DATE (grpc_static_slice_table[68])
+#define GRPC_MDSTR_DATE (grpc_static_slice_table[69])
 /* "etag" */
 /* "etag" */
-#define GRPC_MDSTR_ETAG (grpc_static_slice_table[69])
+#define GRPC_MDSTR_ETAG (grpc_static_slice_table[70])
 /* "expect" */
 /* "expect" */
-#define GRPC_MDSTR_EXPECT (grpc_static_slice_table[70])
+#define GRPC_MDSTR_EXPECT (grpc_static_slice_table[71])
 /* "expires" */
 /* "expires" */
-#define GRPC_MDSTR_EXPIRES (grpc_static_slice_table[71])
+#define GRPC_MDSTR_EXPIRES (grpc_static_slice_table[72])
 /* "from" */
 /* "from" */
-#define GRPC_MDSTR_FROM (grpc_static_slice_table[72])
+#define GRPC_MDSTR_FROM (grpc_static_slice_table[73])
 /* "if-match" */
 /* "if-match" */
-#define GRPC_MDSTR_IF_MATCH (grpc_static_slice_table[73])
+#define GRPC_MDSTR_IF_MATCH (grpc_static_slice_table[74])
 /* "if-modified-since" */
 /* "if-modified-since" */
-#define GRPC_MDSTR_IF_MODIFIED_SINCE (grpc_static_slice_table[74])
+#define GRPC_MDSTR_IF_MODIFIED_SINCE (grpc_static_slice_table[75])
 /* "if-none-match" */
 /* "if-none-match" */
-#define GRPC_MDSTR_IF_NONE_MATCH (grpc_static_slice_table[75])
+#define GRPC_MDSTR_IF_NONE_MATCH (grpc_static_slice_table[76])
 /* "if-range" */
 /* "if-range" */
-#define GRPC_MDSTR_IF_RANGE (grpc_static_slice_table[76])
+#define GRPC_MDSTR_IF_RANGE (grpc_static_slice_table[77])
 /* "if-unmodified-since" */
 /* "if-unmodified-since" */
-#define GRPC_MDSTR_IF_UNMODIFIED_SINCE (grpc_static_slice_table[77])
+#define GRPC_MDSTR_IF_UNMODIFIED_SINCE (grpc_static_slice_table[78])
 /* "last-modified" */
 /* "last-modified" */
-#define GRPC_MDSTR_LAST_MODIFIED (grpc_static_slice_table[78])
+#define GRPC_MDSTR_LAST_MODIFIED (grpc_static_slice_table[79])
 /* "link" */
 /* "link" */
-#define GRPC_MDSTR_LINK (grpc_static_slice_table[79])
+#define GRPC_MDSTR_LINK (grpc_static_slice_table[80])
 /* "location" */
 /* "location" */
-#define GRPC_MDSTR_LOCATION (grpc_static_slice_table[80])
+#define GRPC_MDSTR_LOCATION (grpc_static_slice_table[81])
 /* "max-forwards" */
 /* "max-forwards" */
-#define GRPC_MDSTR_MAX_FORWARDS (grpc_static_slice_table[81])
+#define GRPC_MDSTR_MAX_FORWARDS (grpc_static_slice_table[82])
 /* "proxy-authenticate" */
 /* "proxy-authenticate" */
-#define GRPC_MDSTR_PROXY_AUTHENTICATE (grpc_static_slice_table[82])
+#define GRPC_MDSTR_PROXY_AUTHENTICATE (grpc_static_slice_table[83])
 /* "proxy-authorization" */
 /* "proxy-authorization" */
-#define GRPC_MDSTR_PROXY_AUTHORIZATION (grpc_static_slice_table[83])
+#define GRPC_MDSTR_PROXY_AUTHORIZATION (grpc_static_slice_table[84])
 /* "range" */
 /* "range" */
-#define GRPC_MDSTR_RANGE (grpc_static_slice_table[84])
+#define GRPC_MDSTR_RANGE (grpc_static_slice_table[85])
 /* "referer" */
 /* "referer" */
-#define GRPC_MDSTR_REFERER (grpc_static_slice_table[85])
+#define GRPC_MDSTR_REFERER (grpc_static_slice_table[86])
 /* "refresh" */
 /* "refresh" */
-#define GRPC_MDSTR_REFRESH (grpc_static_slice_table[86])
+#define GRPC_MDSTR_REFRESH (grpc_static_slice_table[87])
 /* "retry-after" */
 /* "retry-after" */
-#define GRPC_MDSTR_RETRY_AFTER (grpc_static_slice_table[87])
+#define GRPC_MDSTR_RETRY_AFTER (grpc_static_slice_table[88])
 /* "server" */
 /* "server" */
-#define GRPC_MDSTR_SERVER (grpc_static_slice_table[88])
+#define GRPC_MDSTR_SERVER (grpc_static_slice_table[89])
 /* "set-cookie" */
 /* "set-cookie" */
-#define GRPC_MDSTR_SET_COOKIE (grpc_static_slice_table[89])
+#define GRPC_MDSTR_SET_COOKIE (grpc_static_slice_table[90])
 /* "strict-transport-security" */
 /* "strict-transport-security" */
-#define GRPC_MDSTR_STRICT_TRANSPORT_SECURITY (grpc_static_slice_table[90])
+#define GRPC_MDSTR_STRICT_TRANSPORT_SECURITY (grpc_static_slice_table[91])
 /* "transfer-encoding" */
 /* "transfer-encoding" */
-#define GRPC_MDSTR_TRANSFER_ENCODING (grpc_static_slice_table[91])
+#define GRPC_MDSTR_TRANSFER_ENCODING (grpc_static_slice_table[92])
 /* "vary" */
 /* "vary" */
-#define GRPC_MDSTR_VARY (grpc_static_slice_table[92])
+#define GRPC_MDSTR_VARY (grpc_static_slice_table[93])
 /* "via" */
 /* "via" */
-#define GRPC_MDSTR_VIA (grpc_static_slice_table[93])
+#define GRPC_MDSTR_VIA (grpc_static_slice_table[94])
 /* "www-authenticate" */
 /* "www-authenticate" */
-#define GRPC_MDSTR_WWW_AUTHENTICATE (grpc_static_slice_table[94])
+#define GRPC_MDSTR_WWW_AUTHENTICATE (grpc_static_slice_table[95])
 /* "0" */
 /* "0" */
-#define GRPC_MDSTR_0 (grpc_static_slice_table[95])
+#define GRPC_MDSTR_0 (grpc_static_slice_table[96])
 /* "identity" */
 /* "identity" */
-#define GRPC_MDSTR_IDENTITY (grpc_static_slice_table[96])
+#define GRPC_MDSTR_IDENTITY (grpc_static_slice_table[97])
 /* "trailers" */
 /* "trailers" */
-#define GRPC_MDSTR_TRAILERS (grpc_static_slice_table[97])
+#define GRPC_MDSTR_TRAILERS (grpc_static_slice_table[98])
 /* "application/grpc" */
 /* "application/grpc" */
-#define GRPC_MDSTR_APPLICATION_SLASH_GRPC (grpc_static_slice_table[98])
+#define GRPC_MDSTR_APPLICATION_SLASH_GRPC (grpc_static_slice_table[99])
 /* "grpc" */
 /* "grpc" */
-#define GRPC_MDSTR_GRPC (grpc_static_slice_table[99])
+#define GRPC_MDSTR_GRPC (grpc_static_slice_table[100])
 /* "PUT" */
 /* "PUT" */
-#define GRPC_MDSTR_PUT (grpc_static_slice_table[100])
+#define GRPC_MDSTR_PUT (grpc_static_slice_table[101])
 /* "lb-cost-bin" */
 /* "lb-cost-bin" */
-#define GRPC_MDSTR_LB_COST_BIN (grpc_static_slice_table[101])
+#define GRPC_MDSTR_LB_COST_BIN (grpc_static_slice_table[102])
 /* "identity,deflate" */
 /* "identity,deflate" */
-#define GRPC_MDSTR_IDENTITY_COMMA_DEFLATE (grpc_static_slice_table[102])
+#define GRPC_MDSTR_IDENTITY_COMMA_DEFLATE (grpc_static_slice_table[103])
 /* "identity,gzip" */
 /* "identity,gzip" */
-#define GRPC_MDSTR_IDENTITY_COMMA_GZIP (grpc_static_slice_table[103])
+#define GRPC_MDSTR_IDENTITY_COMMA_GZIP (grpc_static_slice_table[104])
 /* "deflate,gzip" */
 /* "deflate,gzip" */
-#define GRPC_MDSTR_DEFLATE_COMMA_GZIP (grpc_static_slice_table[104])
+#define GRPC_MDSTR_DEFLATE_COMMA_GZIP (grpc_static_slice_table[105])
 /* "identity,deflate,gzip" */
 /* "identity,deflate,gzip" */
 #define GRPC_MDSTR_IDENTITY_COMMA_DEFLATE_COMMA_GZIP \
 #define GRPC_MDSTR_IDENTITY_COMMA_DEFLATE_COMMA_GZIP \
-  (grpc_static_slice_table[105])
+  (grpc_static_slice_table[106])
 
 
 extern const grpc_slice_refcount_vtable grpc_static_metadata_vtable;
 extern const grpc_slice_refcount_vtable grpc_static_metadata_vtable;
 extern grpc_slice_refcount
 extern grpc_slice_refcount

+ 3 - 3
src/php/ext/grpc/php_grpc.c

@@ -170,12 +170,12 @@ void prefork() {
   acquire_persistent_locks();
   acquire_persistent_locks();
 }
 }
 
 
-void postfork_child() {
+void postfork_child(TSRMLS_D) {
   // loop through persistant list and destroy all underlying grpc_channel objs
   // loop through persistant list and destroy all underlying grpc_channel objs
   destroy_grpc_channels();
   destroy_grpc_channels();
 
 
   // clear completion queue
   // clear completion queue
-  grpc_php_shutdown_completion_queue();
+  grpc_php_shutdown_completion_queue(TSRMLS_C);
 
 
   // clean-up grpc_core
   // clean-up grpc_core
   grpc_shutdown();
   grpc_shutdown();
@@ -187,7 +187,7 @@ void postfork_child() {
 
 
   // restart grpc_core
   // restart grpc_core
   grpc_init();
   grpc_init();
-  grpc_php_init_completion_queue();
+  grpc_php_init_completion_queue(TSRMLS_C);
 
 
   // re-create grpc_channel and point wrapped to it
   // re-create grpc_channel and point wrapped to it
   // unlock wrapped grpc channel mutex
   // unlock wrapped grpc channel mutex

+ 2 - 0
src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi

@@ -129,6 +129,8 @@ cdef class SSLSessionCacheLRU:
 cdef class SSLChannelCredentials(ChannelCredentials):
 cdef class SSLChannelCredentials(ChannelCredentials):
 
 
   def __cinit__(self, pem_root_certificates, private_key, certificate_chain):
   def __cinit__(self, pem_root_certificates, private_key, certificate_chain):
+    if pem_root_certificates is not None and not isinstance(pem_root_certificates, bytes):
+      raise TypeError('expected certificate to be bytes, got %s' % (type(pem_root_certificates)))
     self._pem_root_certificates = pem_root_certificates
     self._pem_root_certificates = pem_root_certificates
     self._private_key = private_key
     self._private_key = private_key
     self._certificate_chain = certificate_chain
     self._certificate_chain = certificate_chain

+ 0 - 7
src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi

@@ -121,7 +121,6 @@ cdef extern from "grpc/grpc.h":
     GRPC_STATUS_DATA_LOSS
     GRPC_STATUS_DATA_LOSS
     GRPC_STATUS__DO_NOT_USE
     GRPC_STATUS__DO_NOT_USE
 
 
-  const char *GRPC_ARG_PRIMARY_USER_AGENT_STRING
   const char *GRPC_ARG_ENABLE_CENSUS
   const char *GRPC_ARG_ENABLE_CENSUS
   const char *GRPC_ARG_MAX_CONCURRENT_STREAMS
   const char *GRPC_ARG_MAX_CONCURRENT_STREAMS
   const char *GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH
   const char *GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH
@@ -190,12 +189,6 @@ cdef extern from "grpc/grpc.h":
     size_t arguments_length "num_args"
     size_t arguments_length "num_args"
     grpc_arg *arguments "args"
     grpc_arg *arguments "args"
 
 
-  ctypedef enum grpc_compression_level:
-    GRPC_COMPRESS_LEVEL_NONE
-    GRPC_COMPRESS_LEVEL_LOW
-    GRPC_COMPRESS_LEVEL_MED
-    GRPC_COMPRESS_LEVEL_HIGH
-
   ctypedef enum grpc_stream_compression_level:
   ctypedef enum grpc_stream_compression_level:
     GRPC_STREAM_COMPRESS_LEVEL_NONE
     GRPC_STREAM_COMPRESS_LEVEL_NONE
     GRPC_STREAM_COMPRESS_LEVEL_LOW
     GRPC_STREAM_COMPRESS_LEVEL_LOW

+ 5 - 5
src/python/grpcio_tests/tests/interop/methods.py

@@ -376,7 +376,7 @@ def _unimplemented_service(unimplemented_service_stub):
 
 
 def _custom_metadata(stub):
 def _custom_metadata(stub):
     initial_metadata_value = "test_initial_metadata_value"
     initial_metadata_value = "test_initial_metadata_value"
-    trailing_metadata_value = "\x0a\x0b\x0a\x0b\x0a\x0b"
+    trailing_metadata_value = b"\x0a\x0b\x0a\x0b\x0a\x0b"
     metadata = ((_INITIAL_METADATA_KEY, initial_metadata_value),
     metadata = ((_INITIAL_METADATA_KEY, initial_metadata_value),
                 (_TRAILING_METADATA_KEY, trailing_metadata_value))
                 (_TRAILING_METADATA_KEY, trailing_metadata_value))
 
 
@@ -390,7 +390,7 @@ def _custom_metadata(stub):
         if trailing_metadata[_TRAILING_METADATA_KEY] != trailing_metadata_value:
         if trailing_metadata[_TRAILING_METADATA_KEY] != trailing_metadata_value:
             raise ValueError('expected trailing metadata %s, got %s' %
             raise ValueError('expected trailing metadata %s, got %s' %
                              (trailing_metadata_value,
                              (trailing_metadata_value,
-                              initial_metadata[_TRAILING_METADATA_KEY]))
+                              trailing_metadata[_TRAILING_METADATA_KEY]))
 
 
     # Testing with UnaryCall
     # Testing with UnaryCall
     request = messages_pb2.SimpleRequest(
     request = messages_pb2.SimpleRequest(
@@ -421,7 +421,7 @@ def _compute_engine_creds(stub, args):
 
 
 def _oauth2_auth_token(stub, args):
 def _oauth2_auth_token(stub, args):
     json_key_filename = os.environ[google_auth_environment_vars.CREDENTIALS]
     json_key_filename = os.environ[google_auth_environment_vars.CREDENTIALS]
-    wanted_email = json.load(open(json_key_filename, 'rb'))['client_email']
+    wanted_email = json.load(open(json_key_filename, 'r'))['client_email']
     response = _large_unary_common_behavior(stub, True, True, None)
     response = _large_unary_common_behavior(stub, True, True, None)
     if wanted_email != response.username:
     if wanted_email != response.username:
         raise ValueError('expected username %s, got %s' % (wanted_email,
         raise ValueError('expected username %s, got %s' % (wanted_email,
@@ -434,7 +434,7 @@ def _oauth2_auth_token(stub, args):
 
 
 def _jwt_token_creds(stub, args):
 def _jwt_token_creds(stub, args):
     json_key_filename = os.environ[google_auth_environment_vars.CREDENTIALS]
     json_key_filename = os.environ[google_auth_environment_vars.CREDENTIALS]
-    wanted_email = json.load(open(json_key_filename, 'rb'))['client_email']
+    wanted_email = json.load(open(json_key_filename, 'r'))['client_email']
     response = _large_unary_common_behavior(stub, True, False, None)
     response = _large_unary_common_behavior(stub, True, False, None)
     if wanted_email != response.username:
     if wanted_email != response.username:
         raise ValueError('expected username %s, got %s' % (wanted_email,
         raise ValueError('expected username %s, got %s' % (wanted_email,
@@ -443,7 +443,7 @@ def _jwt_token_creds(stub, args):
 
 
 def _per_rpc_creds(stub, args):
 def _per_rpc_creds(stub, args):
     json_key_filename = os.environ[google_auth_environment_vars.CREDENTIALS]
     json_key_filename = os.environ[google_auth_environment_vars.CREDENTIALS]
-    wanted_email = json.load(open(json_key_filename, 'rb'))['client_email']
+    wanted_email = json.load(open(json_key_filename, 'r'))['client_email']
     google_credentials, unused_project_id = google_auth.default(
     google_credentials, unused_project_id = google_auth.default(
         scopes=[args.oauth_scope])
         scopes=[args.oauth_scope])
     call_credentials = grpc.metadata_call_credentials(
     call_credentials = grpc.metadata_call_credentials(

+ 11 - 0
src/python/grpcio_tests/tests/unit/_credentials_test.py

@@ -15,6 +15,7 @@
 
 
 import unittest
 import unittest
 import logging
 import logging
+import six
 
 
 import grpc
 import grpc
 
 
@@ -53,6 +54,16 @@ class CredentialsTest(unittest.TestCase):
         self.assertIsInstance(channel_first_second_and_third,
         self.assertIsInstance(channel_first_second_and_third,
                               grpc.ChannelCredentials)
                               grpc.ChannelCredentials)
 
 
+    @unittest.skipIf(six.PY2, 'only invalid in Python3')
+    def test_invalid_string_certificate(self):
+        self.assertRaises(
+            TypeError,
+            grpc.ssl_channel_credentials,
+            root_certificates='A Certificate',
+            private_key=None,
+            certificate_chain=None,
+        )
+
 
 
 if __name__ == '__main__':
 if __name__ == '__main__':
     logging.basicConfig()
     logging.basicConfig()

+ 1 - 1
src/ruby/lib/grpc/generic/service.rb

@@ -95,7 +95,7 @@ module GRPC
         rpc_descs[name] = RpcDesc.new(name, input, output,
         rpc_descs[name] = RpcDesc.new(name, input, output,
                                       marshal_class_method,
                                       marshal_class_method,
                                       unmarshal_class_method)
                                       unmarshal_class_method)
-        define_method(GenericService.underscore(name.to_s).to_sym) do |_, _|
+        define_method(GenericService.underscore(name.to_s).to_sym) do |*|
           fail GRPC::BadStatus.new_status_exception(
           fail GRPC::BadStatus.new_status_exception(
             GRPC::Core::StatusCodes::UNIMPLEMENTED)
             GRPC::Core::StatusCodes::UNIMPLEMENTED)
         end
         end

+ 22 - 0
src/ruby/spec/generic/rpc_server_spec.rb

@@ -342,6 +342,28 @@ describe GRPC::RpcServer do
         t.join
         t.join
       end
       end
 
 
+      it 'should return UNIMPLEMENTED on unimplemented ' \
+         'methods for client_streamer', server: true do
+        @srv.handle(EchoService)
+        t = Thread.new { @srv.run }
+        @srv.wait_till_running
+        blk = proc do
+          stub = EchoStub.new(@host, :this_channel_is_insecure, **client_opts)
+          requests = [EchoMsg.new, EchoMsg.new]
+          stub.a_client_streaming_rpc_unimplemented(requests)
+        end
+
+        begin
+          expect(&blk).to raise_error do |error|
+            expect(error).to be_a(GRPC::BadStatus)
+            expect(error.code).to eq(GRPC::Core::StatusCodes::UNIMPLEMENTED)
+          end
+        ensure
+          @srv.stop # should be call not to crash
+          t.join
+        end
+      end
+
       it 'should handle multiple sequential requests', server: true do
       it 'should handle multiple sequential requests', server: true do
         @srv.handle(EchoService)
         @srv.handle(EchoService)
         t = Thread.new { @srv.run }
         t = Thread.new { @srv.run }

+ 1 - 0
src/ruby/spec/support/services.rb

@@ -33,6 +33,7 @@ class EchoService
   rpc :a_client_streaming_rpc, stream(EchoMsg), EchoMsg
   rpc :a_client_streaming_rpc, stream(EchoMsg), EchoMsg
   rpc :a_server_streaming_rpc, EchoMsg, stream(EchoMsg)
   rpc :a_server_streaming_rpc, EchoMsg, stream(EchoMsg)
   rpc :a_bidi_rpc, stream(EchoMsg), stream(EchoMsg)
   rpc :a_bidi_rpc, stream(EchoMsg), stream(EchoMsg)
+  rpc :a_client_streaming_rpc_unimplemented, stream(EchoMsg), EchoMsg
   attr_reader :received_md
   attr_reader :received_md
 
 
   def initialize(**kw)
   def initialize(**kw)

+ 3 - 11
templates/tools/dockerfile/interoptest/grpc_interop_python/Dockerfile.template

@@ -14,15 +14,7 @@
   # See the License for the specific language governing permissions and
   # See the License for the specific language governing permissions and
   # limitations under the License.
   # limitations under the License.
   
   
-  FROM debian:jessie
-  
-  <%include file="../../apt_get_basic.include"/>
-  <%include file="../../python_deps.include"/>
-  # Install pip and virtualenv for Python 3.4
-  RUN curl https://bootstrap.pypa.io/get-pip.py | python3.4
-  RUN python3.4 -m pip install virtualenv
+  <%include file="../../python_stretch.include"/>
 
 
-  <%include file="../../run_tests_addons.include"/>
-  # Define the default command.
-  CMD ["bash"]
-  
+  RUN apt-get update && apt-get -t testing install -y python3.7 python3-all-dev
+  RUN curl https://bootstrap.pypa.io/get-pip.py | python3.7

+ 1 - 0
test/core/end2end/fuzzers/hpack.dictionary

@@ -35,6 +35,7 @@
 "\x1Fgrpc.max_response_message_bytes"
 "\x1Fgrpc.max_response_message_bytes"
 "$/grpc.lb.v1.LoadBalancer/BalanceLoad"
 "$/grpc.lb.v1.LoadBalancer/BalanceLoad"
 "\x1C/grpc.health.v1.Health/Watch"
 "\x1C/grpc.health.v1.Health/Watch"
+"P/envoy.service.discovery.v2.AggregatedDiscoveryService/StreamAggregatedResources"
 "\x07deflate"
 "\x07deflate"
 "\x04gzip"
 "\x04gzip"
 "\x0Bstream/gzip"
 "\x0Bstream/gzip"

+ 1 - 1
test/cpp/qps/qps_json_driver.cc

@@ -91,7 +91,7 @@ ConstructPerWorkerCredentialTypesMap() {
   // a map.
   // a map.
   std::string remaining = FLAGS_per_worker_credential_types;
   std::string remaining = FLAGS_per_worker_credential_types;
   std::map<std::string, std::string> out;
   std::map<std::string, std::string> out;
-  while (remaining.size() > 0) {
+  while (!remaining.empty()) {
     size_t next_semicolon = remaining.find(';');
     size_t next_semicolon = remaining.find(';');
     std::string next_entry = remaining.substr(0, next_semicolon);
     std::string next_entry = remaining.substr(0, next_semicolon);
     if (next_semicolon == std::string::npos) {
     if (next_semicolon == std::string::npos) {

+ 1 - 0
third_party/upb

@@ -0,0 +1 @@
+Subproject commit 9ce4a77f61c134bbed28bfd5be5cd7dc0e80f5e3

+ 1 - 0
tools/codegen/core/gen_static_metadata.py

@@ -64,6 +64,7 @@ CONFIG = [
     # well known method names
     # well known method names
     '/grpc.lb.v1.LoadBalancer/BalanceLoad',
     '/grpc.lb.v1.LoadBalancer/BalanceLoad',
     '/grpc.health.v1.Health/Watch',
     '/grpc.health.v1.Health/Watch',
+    '/envoy.service.discovery.v2.AggregatedDiscoveryService/StreamAggregatedResources',
     # compression algorithm names
     # compression algorithm names
     'deflate',
     'deflate',
     'gzip',
     'gzip',

+ 15 - 18
tools/dockerfile/interoptest/grpc_interop_python/Dockerfile

@@ -12,8 +12,8 @@
 # See the License for the specific language governing permissions and
 # See the License for the specific language governing permissions and
 # limitations under the License.
 # limitations under the License.
 
 
-FROM debian:jessie
-
+FROM debian:stretch
+  
 # Install Git and basic packages.
 # Install Git and basic packages.
 RUN apt-get update && apt-get install -y \
 RUN apt-get update && apt-get install -y \
   autoconf \
   autoconf \
@@ -49,27 +49,24 @@ RUN apt-get update && apt-get install -y \
 # Build profiling
 # Build profiling
 RUN apt-get update && apt-get install -y time && apt-get clean
 RUN apt-get update && apt-get install -y time && apt-get clean
 
 
-#====================
-# Python dependencies
-
-# Install dependencies
-
-RUN apt-get update && apt-get install -y \
-    python-all-dev \
-    python3-all-dev \
-    python-pip
+# Google Cloud platform API libraries
+RUN apt-get update && apt-get install -y python-pip && apt-get clean
+RUN pip install --upgrade google-api-python-client oauth2client
 
 
-# Install Python packages from PyPI
-RUN pip install --upgrade pip==10.0.1
-RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.5.2.post1 six==1.10.0 twisted==17.5.0
+# Install Python 2.7
+RUN apt-get update && apt-get install -y python2.7 python-all-dev
+RUN curl https://bootstrap.pypa.io/get-pip.py | python2.7
 
 
-# Install pip and virtualenv for Python 3.4
-RUN curl https://bootstrap.pypa.io/get-pip.py | python3.4
-RUN python3.4 -m pip install virtualenv
+# Add Debian 'testing' repository
+RUN echo 'deb http://ftp.de.debian.org/debian testing main' >> /etc/apt/sources.list
+RUN echo 'APT::Default-Release "stable";' | tee -a /etc/apt/apt.conf.d/00local
 
 
 
 
 RUN mkdir /var/local/jenkins
 RUN mkdir /var/local/jenkins
 
 
 # Define the default command.
 # Define the default command.
 CMD ["bash"]
 CMD ["bash"]
+
+
+RUN apt-get update && apt-get -t testing install -y python3.7 python3-all-dev
+RUN curl https://bootstrap.pypa.io/get-pip.py | python3.7

+ 2 - 2
tools/dockerfile/interoptest/grpc_interop_python/build_interop.sh

@@ -28,5 +28,5 @@ cp -r /var/local/jenkins/service_account $HOME || true
 
 
 cd /var/local/git/grpc
 cd /var/local/git/grpc
 
 
-# interop tests only run using python2.7 currently (and python build is slow)
-tools/run_tests/run_tests.py -l python --compiler python2.7 -c opt --build_only
+# interop tests only run using python3.7 currently (and python build is slow)
+tools/run_tests/run_tests.py -l python --compiler python3.7 -c opt --build_only

+ 3 - 3
tools/run_tests/run_interop_tests.py

@@ -545,13 +545,13 @@ class PythonLanguage:
 
 
     def client_cmd(self, args):
     def client_cmd(self, args):
         return [
         return [
-            'py27_native/bin/python', 'src/python/grpcio_tests/setup.py',
+            'py37_native/bin/python', 'src/python/grpcio_tests/setup.py',
             'run_interop', '--client', '--args="{}"'.format(' '.join(args))
             'run_interop', '--client', '--args="{}"'.format(' '.join(args))
         ]
         ]
 
 
     def client_cmd_http2interop(self, args):
     def client_cmd_http2interop(self, args):
         return [
         return [
-            'py27_native/bin/python',
+            'py37_native/bin/python',
             'src/python/grpcio_tests/tests/http2/negative_http2_client.py',
             'src/python/grpcio_tests/tests/http2/negative_http2_client.py',
         ] + args
         ] + args
 
 
@@ -560,7 +560,7 @@ class PythonLanguage:
 
 
     def server_cmd(self, args):
     def server_cmd(self, args):
         return [
         return [
-            'py27_native/bin/python', 'src/python/grpcio_tests/setup.py',
+            'py37_native/bin/python', 'src/python/grpcio_tests/setup.py',
             'run_interop', '--server', '--args="{}"'.format(' '.join(args))
             'run_interop', '--server', '--args="{}"'.format(' '.join(args))
         ]
         ]
 
 

+ 1 - 0
tools/run_tests/sanity/check_bazel_workspace.py

@@ -42,6 +42,7 @@ _ZOPEFOUNDATION_ZOPE_INTERFACE_DEP_NAME = 'com_github_zopefoundation_zope_interf
 _TWISTED_CONSTANTLY_DEP_NAME = 'com_github_twisted_constantly'
 _TWISTED_CONSTANTLY_DEP_NAME = 'com_github_twisted_constantly'
 
 
 _GRPC_DEP_NAMES = [
 _GRPC_DEP_NAMES = [
+    'upb',
     'boringssl',
     'boringssl',
     'com_github_madler_zlib',
     'com_github_madler_zlib',
     'com_google_protobuf',
     'com_google_protobuf',

+ 1 - 0
tools/run_tests/sanity/check_submodules.sh

@@ -40,6 +40,7 @@ cat << EOF | awk '{ print $1 }' | sort > "$want_submodules"
  9245d481eb3e890f708ff2d7dadf2a10c04748ba third_party/libcxxabi (heads/release_60)
  9245d481eb3e890f708ff2d7dadf2a10c04748ba third_party/libcxxabi (heads/release_60)
  48cb18e5c419ddd23d9badcfe4e9df7bde1979b2 third_party/protobuf (v3.6.0.1-37-g48cb18e5)
  48cb18e5c419ddd23d9badcfe4e9df7bde1979b2 third_party/protobuf (v3.6.0.1-37-g48cb18e5)
  e143189bf6f37b3957fb31743df6a1bcf4a8c685 third_party/protoc-gen-validate (v0.0.10)
  e143189bf6f37b3957fb31743df6a1bcf4a8c685 third_party/protoc-gen-validate (v0.0.10)
+ 9ce4a77f61c134bbed28bfd5be5cd7dc0e80f5e3 third_party/upb (heads/upbc-cpp)
  cacf7f1d4e3d44d871b605da3b647f07d718623f third_party/zlib (v1.2.11)
  cacf7f1d4e3d44d871b605da3b647f07d718623f third_party/zlib (v1.2.11)
 EOF
 EOF