Merge branch 'cg-fwd-call' into cg-experiment-requires

pull/35267/head
Craig Tiller 1 year ago
commit 925bf8637a
  1. 2
      src/core/ext/filters/message_size/message_size_filter.cc
  2. 18
      src/core/lib/channel/promise_based_filter.h
  3. 8
      src/core/lib/experiments/experiments.yaml
  4. 11
      src/core/lib/gprpp/orphanable.h
  5. 26
      test/core/gprpp/orphanable_test.cc

@ -162,7 +162,7 @@ ServerMetadataHandle CheckPayload(const Message& msg,
absl::optional<uint32_t> max_length,
bool is_send) {
if (!max_length.has_value()) return nullptr;
if (grpc_call_trace.enabled()) {
if (GRPC_TRACE_FLAG_ENABLED(grpc_call_trace)) {
gpr_log(GPR_INFO, "%s[message_size] %s len:%" PRIdPTR " max:%d",
Activity::current()->DebugTag().c_str(), is_send ? "send" : "recv",
msg.payload()->Length(), *max_length);

@ -277,7 +277,7 @@ template <typename Derived>
class CallWrapper<Derived, absl::void_t<decltype(typename Derived::Call())>>
: public Derived::Call {
public:
explicit CallWrapper(Derived* channel) : Derived::Call() {}
explicit CallWrapper(Derived*) : Derived::Call() {}
};
// For the original promise scheme polyfill: data associated with once call.
@ -347,11 +347,11 @@ inline auto RunCall(
}
template <typename Derived>
inline auto RunCall(ServerMetadataHandle (Derived::Call::*fn)(
ClientMetadata& md, Derived* channel),
CallArgs call_args, NextPromiseFactory next_promise_factory,
FilterCallData<Derived>* call_data)
-> ArenaPromise<ServerMetadataHandle> {
inline auto RunCall(
ServerMetadataHandle (Derived::Call::*fn)(ClientMetadata& md,
Derived* channel),
CallArgs call_args, NextPromiseFactory next_promise_factory,
FilterCallData<Derived>* call_data) -> ArenaPromise<ServerMetadataHandle> {
GPR_DEBUG_ASSERT(fn == &Derived::Call::OnClientInitialMetadata);
auto return_md = call_data->call.OnClientInitialMetadata(
*call_args.client_initial_metadata, call_data->channel);
@ -410,8 +410,7 @@ inline void InterceptClientToServerMessage(const NoInterceptor*, void*, void*,
template <typename Derived>
inline void InterceptClientToServerMessage(
ServerMetadataHandle (Derived::Call::*fn)(const Message&),
typename Derived::Call* call, Derived* channel,
CallSpineInterface* call_spine) {
typename Derived::Call* call, Derived*, CallSpineInterface* call_spine) {
GPR_DEBUG_ASSERT(fn == &Derived::Call::OnClientToServerMessage);
call_spine->server_to_client_messages().sender.InterceptAndMap(
[call, call_spine](MessageHandle msg) -> absl::optional<MessageHandle> {
@ -596,8 +595,7 @@ inline void InterceptServerToClientMessage(const NoInterceptor*, void*, void*,
template <typename Derived>
inline void InterceptServerToClientMessage(
ServerMetadataHandle (Derived::Call::*fn)(const Message&),
typename Derived::Call* call, Derived* channel,
CallSpineInterface* call_spine) {
typename Derived::Call* call, Derived*, CallSpineInterface* call_spine) {
GPR_DEBUG_ASSERT(fn == &Derived::Call::OnServerToClientMessage);
call_spine->server_to_client_messages().sender.InterceptAndMap(
[call, call_spine](MessageHandle msg) -> absl::optional<MessageHandle> {

@ -53,7 +53,7 @@
allow_in_fuzzing_config: false
- name: client_idleness
description: If enabled, client channel idleness is enabled by default.
expiry: 2023/12/15
expiry: 2024/03/15
owner: roth@google.com
test_tags: []
- name: client_privacy
@ -152,7 +152,7 @@
- name: pick_first_happy_eyeballs
description:
Use Happy Eyeballs in pick_first.
expiry: 2024/01/15
expiry: 2024/03/15
owner: roth@google.com
test_tags: ["lb_unit_test", "cpp_lb_end2end_test", "xds_end2end_test"]
- name: promise_based_client_call
@ -208,7 +208,7 @@
description:
Change round_robin code to delegate to pick_first as per dualstack
backend design.
expiry: 2023/12/15
expiry: 2024/03/15
owner: roth@google.com
test_tags: ["lb_unit_test", "cpp_lb_end2end_test", "xds_end2end_test"]
- name: rstpit
@ -284,6 +284,6 @@
description:
Change WRR code to delegate to pick_first as per dualstack
backend design.
expiry: 2023/12/15
expiry: 2024/03/15
owner: roth@google.com
test_tags: ["lb_unit_test", "cpp_lb_end2end_test", "xds_end2end_test"]

@ -108,6 +108,17 @@ class InternallyRefCounted : public Orphanable {
}
}
GRPC_MUST_USE_RESULT RefCountedPtr<Child> RefIfNonZero() {
return RefCountedPtr<Child>(refs_.RefIfNonZero() ? static_cast<Child*>(this)
: nullptr);
}
GRPC_MUST_USE_RESULT RefCountedPtr<Child> RefIfNonZero(
const DebugLocation& location, const char* reason) {
return RefCountedPtr<Child>(refs_.RefIfNonZero(location, reason)
? static_cast<Child*>(this)
: nullptr);
}
private:
void IncrementRefCount() { refs_.Ref(); }
void IncrementRefCount(const DebugLocation& location, const char* reason) {

@ -103,6 +103,32 @@ TEST(OrphanablePtr, InternallyRefCountedWithTracing) {
baz->FinishWork();
}
class Qux : public InternallyRefCounted<Qux> {
public:
Qux() : Qux(0) {}
explicit Qux(int value) : InternallyRefCounted<Qux>("Qux"), value_(value) {}
~Qux() override { self_ref_ = RefIfNonZero(DEBUG_LOCATION, "extra_work"); }
void Orphan() override { Unref(); }
int value() const { return value_; }
void StartWork() { self_ref_ = RefIfNonZero(DEBUG_LOCATION, "work"); }
void FinishWork() {
// This is a little ugly, but it makes the logged ref and unref match up.
self_ref_.release();
Unref(DEBUG_LOCATION, "work");
}
private:
int value_;
RefCountedPtr<Qux> self_ref_;
};
TEST(OrphanablePtr, InternallyRefCountedIfNonZero) {
auto qux = MakeOrphanable<Qux>();
qux->StartWork();
qux->FinishWork();
}
} // namespace
} // namespace testing
} // namespace grpc_core

Loading…
Cancel
Save