Skip to content

Commit

Permalink
[call-v3] Move grpc_call_final_info into its own target (grpc#35504)
Browse files Browse the repository at this point in the history
We probably want to reconsider this types role in the system, but for now removing it would be a large job. Move it to somewhere isolated for now.

Closes grpc#35504

COPYBARA_INTEGRATE_REVIEW=grpc#35504 from ctiller:move-it-stats 9ee755d
PiperOrigin-RevId: 597382258
  • Loading branch information
ctiller authored and copybara-github committed Jan 11, 2024
1 parent a446df6 commit 3020a68
Show file tree
Hide file tree
Showing 21 changed files with 141 additions and 47 deletions.
1 change: 1 addition & 0 deletions BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -1530,6 +1530,7 @@ grpc_cc_library(
"//src/core:arena_promise",
"//src/core:atomic_utils",
"//src/core:bitset",
"//src/core:call_final_info",
"//src/core:cancel_callback",
"//src/core:channel_args",
"//src/core:channel_args_endpoint_config",
Expand Down
3 changes: 3 additions & 0 deletions CMakeLists.txt

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions Makefile

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions Package.swift

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions build_autogenerated.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions config.m4

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions config.w32

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions gRPC-C++.podspec

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions gRPC-Core.podspec

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions grpc.gemspec

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions grpc.gyp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions package.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions src/core/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -6624,6 +6624,20 @@ grpc_cc_library(
],
)

grpc_cc_library(
name = "call_final_info",
srcs = [
"lib/transport/call_final_info.cc",
],
hdrs = [
"lib/transport/call_final_info.h",
],
deps = [
"//:gpr",
"//:grpc_public_hdrs",
],
)

grpc_cc_library(
name = "parsed_metadata",
srcs = [
Expand Down
11 changes: 1 addition & 10 deletions src/core/lib/channel/channel_stack.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@
#include "src/core/lib/iomgr/polling_entity.h"
#include "src/core/lib/promise/arena_promise.h"
#include "src/core/lib/resource_quota/arena.h"
#include "src/core/lib/transport/call_final_info.h"
#include "src/core/lib/transport/transport.h"

struct grpc_channel_element_args {
Expand All @@ -90,16 +91,6 @@ struct grpc_call_element_args {
grpc_core::Arena* arena;
grpc_core::CallCombiner* call_combiner;
};
struct grpc_call_stats {
grpc_transport_stream_stats transport_stream_stats;
gpr_timespec latency; // From call creating to enqueing of received status
};
/// Information about the call upon completion.
struct grpc_call_final_info {
grpc_call_stats stats;
grpc_status_code final_status = GRPC_STATUS_OK;
const char* error_string = nullptr;
};

// Channel filters specify:
// 1. the amount of memory needed in the channel & call (via the sizeof_XXX
Expand Down
38 changes: 38 additions & 0 deletions src/core/lib/transport/call_final_info.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// Copyright 2024 gRPC authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#include <grpc/support/port_platform.h>

#include "src/core/lib/transport/call_final_info.h"

#include <utility>

static void move64bits(uint64_t* from, uint64_t* to) {
*to += *from;
*from = 0;
}

void grpc_transport_move_one_way_stats(grpc_transport_one_way_stats* from,
grpc_transport_one_way_stats* to) {
move64bits(&from->framing_bytes, &to->framing_bytes);
move64bits(&from->data_bytes, &to->data_bytes);
move64bits(&from->header_bytes, &to->header_bytes);
}

void grpc_transport_move_stats(grpc_transport_stream_stats* from,
grpc_transport_stream_stats* to) {
grpc_transport_move_one_way_stats(&from->incoming, &to->incoming);
grpc_transport_move_one_way_stats(&from->outgoing, &to->outgoing);
to->latency = std::exchange(from->latency, gpr_inf_future(GPR_TIMESPAN));
}
54 changes: 54 additions & 0 deletions src/core/lib/transport/call_final_info.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
// Copyright 2024 gRPC authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef GRPC_SRC_CORE_LIB_TRANSPORT_CALL_FINAL_INFO_H
#define GRPC_SRC_CORE_LIB_TRANSPORT_CALL_FINAL_INFO_H

#include <grpc/support/port_platform.h>

#include <cstdint>

#include <grpc/status.h>
#include <grpc/support/time.h>

struct grpc_transport_one_way_stats {
uint64_t framing_bytes = 0;
uint64_t data_bytes = 0;
uint64_t header_bytes = 0;
};

struct grpc_transport_stream_stats {
grpc_transport_one_way_stats incoming;
grpc_transport_one_way_stats outgoing;
gpr_timespec latency = gpr_inf_future(GPR_TIMESPAN);
};

void grpc_transport_move_one_way_stats(grpc_transport_one_way_stats* from,
grpc_transport_one_way_stats* to);

void grpc_transport_move_stats(grpc_transport_stream_stats* from,
grpc_transport_stream_stats* to);

struct grpc_call_stats {
grpc_transport_stream_stats transport_stream_stats;
gpr_timespec latency; // From call creating to enqueing of received status
};
/// Information about the call upon completion.
struct grpc_call_final_info {
grpc_call_stats stats;
grpc_status_code final_status = GRPC_STATUS_OK;
const char* error_string = nullptr;
};

#endif // GRPC_SRC_CORE_LIB_TRANSPORT_CALL_FINAL_INFO_H
19 changes: 0 additions & 19 deletions src/core/lib/transport/transport.cc
Original file line number Diff line number Diff line change
Expand Up @@ -86,25 +86,6 @@ void grpc_stream_ref_init(grpc_stream_refcount* refcount, int /*initial_refs*/,
: nullptr);
}

static void move64bits(uint64_t* from, uint64_t* to) {
*to += *from;
*from = 0;
}

void grpc_transport_move_one_way_stats(grpc_transport_one_way_stats* from,
grpc_transport_one_way_stats* to) {
move64bits(&from->framing_bytes, &to->framing_bytes);
move64bits(&from->data_bytes, &to->data_bytes);
move64bits(&from->header_bytes, &to->header_bytes);
}

void grpc_transport_move_stats(grpc_transport_stream_stats* from,
grpc_transport_stream_stats* to) {
grpc_transport_move_one_way_stats(&from->incoming, &to->incoming);
grpc_transport_move_one_way_stats(&from->outgoing, &to->outgoing);
to->latency = std::exchange(from->latency, gpr_inf_future(GPR_TIMESPAN));
}

namespace grpc_core {
void Transport::SetPollingEntity(grpc_stream* stream,
grpc_polling_entity* pollset_or_pollset_set) {
Expand Down
19 changes: 1 addition & 18 deletions src/core/lib/transport/transport.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@
#include "src/core/lib/promise/status_flag.h"
#include "src/core/lib/resource_quota/arena.h"
#include "src/core/lib/slice/slice_buffer.h"
#include "src/core/lib/transport/call_final_info.h"
#include "src/core/lib/transport/connectivity_state.h"
#include "src/core/lib/transport/metadata_batch.h"
#include "src/core/lib/transport/transport_fwd.h"
Expand Down Expand Up @@ -679,24 +680,6 @@ inline void grpc_stream_unref(grpc_stream_refcount* refcount) {
grpc_slice grpc_slice_from_stream_owned_buffer(grpc_stream_refcount* refcount,
void* buffer, size_t length);

struct grpc_transport_one_way_stats {
uint64_t framing_bytes = 0;
uint64_t data_bytes = 0;
uint64_t header_bytes = 0;
};

struct grpc_transport_stream_stats {
grpc_transport_one_way_stats incoming;
grpc_transport_one_way_stats outgoing;
gpr_timespec latency = gpr_inf_future(GPR_TIMESPAN);
};

void grpc_transport_move_one_way_stats(grpc_transport_one_way_stats* from,
grpc_transport_one_way_stats* to);

void grpc_transport_move_stats(grpc_transport_stream_stats* from,
grpc_transport_stream_stats* to);

// This struct (which is present in both grpc_transport_stream_op_batch
// and grpc_transport_op_batch) is a convenience to allow filters or
// transports to schedule a closure related to a particular batch without
Expand Down
Loading

0 comments on commit 3020a68

Please sign in to comment.