channel_trace.h
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2017 gRPC authors.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 #ifndef GRPC_CORE_LIB_CHANNEL_CHANNEL_TRACE_H
20 #define GRPC_CORE_LIB_CHANNEL_CHANNEL_TRACE_H
21 
23 
24 #include <stddef.h>
25 #include <stdint.h>
26 
28 #include <grpc/slice.h>
29 #include <grpc/support/sync.h>
30 
32 #include "src/core/lib/json/json.h"
33 
34 namespace grpc_core {
35 namespace channelz {
36 
37 namespace testing {
38 size_t GetSizeofTraceEvent(void);
39 }
40 
41 class BaseNode;
42 
43 // Object used to hold live data for a channel. This data is exposed via the
44 // channelz service:
45 // https://github.com/grpc/proposal/blob/master/A14-channelz.md
46 class ChannelTrace {
47  public:
48  explicit ChannelTrace(size_t max_event_memory);
49  ~ChannelTrace();
50 
51  enum Severity {
52  Unset = 0, // never to be used
53  Info, // we start at 1 to avoid using proto default values
56  };
57 
58  // Adds a new trace event to the tracing object
59  //
60  // NOTE: each ChannelTrace tracks the memory used by its list of trace
61  // events, so adding an event with a large amount of data could cause other
62  // trace event to be evicted. If a single trace is larger than the limit, it
63  // will cause all events to be evicted. The limit is set with the arg:
64  // GRPC_ARG_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE.
65  //
66  // TODO(ncteisen): as this call is used more and more throughout the gRPC
67  // stack, determine if it makes more sense to accept a char* instead of a
68  // slice.
70 
71  // Adds a new trace event to the tracing object. This trace event refers to a
72  // an event that concerns a different channelz entity. For example, if this
73  // channel has created a new subchannel, then it would record that with
74  // a TraceEvent referencing the new subchannel.
75  //
76  // NOTE: see the note in the method above.
77  //
78  // TODO(ncteisen): see the todo in the method above.
80  RefCountedPtr<BaseNode> referenced_entity);
81 
82  // Creates and returns the raw Json object, so a parent channelz
83  // object may incorporate the json before rendering.
84  Json RenderJson() const;
85 
86  private:
87  friend size_t testing::GetSizeofTraceEvent(void);
88 
89  // Private class to encapsulate all the data and bookkeeping needed for a
90  // a trace event.
91  class TraceEvent {
92  public:
93  // Constructor for a TraceEvent that references a channel.
96 
97  // Constructor for a TraceEvent that does not reverence a different
98  // channel.
100 
101  ~TraceEvent();
102 
103  // Renders the data inside of this TraceEvent into a json object. This is
104  // used by the ChannelTrace, when it is rendering itself.
105  Json RenderTraceEvent() const;
106 
107  // set and get for the next_ pointer.
108  TraceEvent* next() const { return next_; }
110 
111  size_t memory_usage() const { return memory_usage_; }
112 
113  private:
118  // the tracer object for the (sub)channel that this trace event refers to.
121  }; // TraceEvent
122 
123  // Internal helper to add and link in a trace event
124  void AddTraceEventHelper(TraceEvent* new_trace_event);
125 
133 };
134 
135 } // namespace channelz
136 } // namespace grpc_core
137 
138 #endif /* GRPC_CORE_LIB_CHANNEL_CHANNEL_TRACE_H */
grpc_core::channelz::ChannelTrace::TraceEvent::memory_usage
size_t memory_usage() const
Definition: channel_trace.h:111
grpc_core::channelz::ChannelTrace::num_events_logged_
uint64_t num_events_logged_
Definition: channel_trace.h:127
testing
Definition: aws_request_signer_test.cc:25
grpc_core::channelz::ChannelTrace::tracer_mu_
gpr_mu tracer_mu_
Definition: channel_trace.h:126
bloat_diff.severity
def severity
Definition: bloat_diff.py:143
grpc_core::channelz::ChannelTrace::AddTraceEventWithReference
void AddTraceEventWithReference(Severity severity, const grpc_slice &data, RefCountedPtr< BaseNode > referenced_entity)
Definition: channel_trace.cc:113
grpc_core::channelz::ChannelTrace::TraceEvent::referenced_entity_
RefCountedPtr< BaseNode > referenced_entity_
Definition: channel_trace.h:119
grpc_core::channelz::ChannelTrace::TraceEvent::RenderTraceEvent
Json RenderTraceEvent() const
Definition: channel_trace.cc:142
grpc_core::channelz::ChannelTrace::RenderJson
Json RenderJson() const
Definition: channel_trace.cc:162
slice.h
grpc_core::channelz::ChannelTrace::TraceEvent::next_
TraceEvent * next_
Definition: channel_trace.h:117
grpc_core
Definition: call_metric_recorder.h:31
grpc_core::channelz::ChannelTrace::Error
@ Error
Definition: channel_trace.h:55
grpc_core::channelz::ChannelTrace::TraceEvent::set_next
void set_next(TraceEvent *next)
Definition: channel_trace.h:109
grpc_core::channelz::ChannelTrace::time_created_
gpr_timespec time_created_
Definition: channel_trace.h:132
grpc_core::channelz::ChannelTrace::AddTraceEventHelper
void AddTraceEventHelper(TraceEvent *new_trace_event)
Definition: channel_trace.cc:84
grpc_core::channelz::ChannelTrace::Warning
@ Warning
Definition: channel_trace.h:54
grpc_core::channelz::ChannelTrace::max_event_memory_
size_t max_event_memory_
Definition: channel_trace.h:129
grpc_core::channelz::ChannelTrace::~ChannelTrace
~ChannelTrace()
Definition: channel_trace.cc:71
grpc_core::channelz::ChannelTrace::Unset
@ Unset
Definition: channel_trace.h:52
grpc_core::channelz::ChannelTrace::TraceEvent::timestamp_
gpr_timespec timestamp_
Definition: channel_trace.h:116
grpc_core::RefCountedPtr
Definition: ref_counted_ptr.h:35
Json
JSON (JavaScript Object Notation).
Definition: third_party/bloaty/third_party/protobuf/conformance/third_party/jsoncpp/json.h:227
uint64_t
unsigned __int64 uint64_t
Definition: stdint-msvc2008.h:90
grpc_core::channelz::BaseNode
Definition: channelz.h:78
grpc_core::channelz::ChannelTrace::event_list_memory_usage_
size_t event_list_memory_usage_
Definition: channel_trace.h:128
grpc_core::channelz::testing::GetSizeofTraceEvent
size_t GetSizeofTraceEvent(void)
Definition: channel_trace_test.cc:54
grpc_slice
Definition: include/grpc/impl/codegen/slice.h:65
data
char data[kBufferLength]
Definition: abseil-cpp/absl/strings/internal/str_format/float_conversion.cc:1006
grpc_core::channelz::ChannelTrace::Severity
Severity
Definition: channel_trace.h:51
grpc_core::channelz::ChannelTrace::head_trace_
TraceEvent * head_trace_
Definition: channel_trace.h:130
json.h
stdint.h
grpc_core::channelz::ChannelTrace::TraceEvent::TraceEvent
TraceEvent(Severity severity, const grpc_slice &data, RefCountedPtr< BaseNode > referenced_entity_)
Definition: channel_trace.cc:40
gpr_types.h
grpc_core::channelz::ChannelTrace::TraceEvent::~TraceEvent
~TraceEvent()
Definition: channel_trace.cc:56
gpr_mu
pthread_mutex_t gpr_mu
Definition: impl/codegen/sync_posix.h:47
grpc_core::channelz::ChannelTrace::TraceEvent::severity_
Severity severity_
Definition: channel_trace.h:114
grpc_core::channelz::ChannelTrace::tail_trace_
TraceEvent * tail_trace_
Definition: channel_trace.h:131
channelz
void channelz(grpc_end2end_test_config config)
Definition: test/core/end2end/tests/channelz.cc:318
grpc_core::channelz::ChannelTrace::TraceEvent
Definition: channel_trace.h:91
ref_counted_ptr.h
grpc_core::channelz::ChannelTrace::TraceEvent::next
TraceEvent * next() const
Definition: channel_trace.h:108
gpr_timespec
Definition: gpr_types.h:50
grpc_core::channelz::ChannelTrace::Info
@ Info
Definition: channel_trace.h:53
sync.h
grpc_core::channelz::ChannelTrace::ChannelTrace
ChannelTrace(size_t max_event_memory)
Definition: channel_trace.cc:58
grpc_core::channelz::ChannelTrace::TraceEvent::memory_usage_
size_t memory_usage_
Definition: channel_trace.h:120
grpc_core::channelz::ChannelTrace::TraceEvent::data_
grpc_slice data_
Definition: channel_trace.h:115
grpc_core::channelz::ChannelTrace
Definition: channel_trace.h:46
port_platform.h
grpc_core::channelz::ChannelTrace::AddTraceEvent
void AddTraceEvent(Severity severity, const grpc_slice &data)
Definition: channel_trace.cc:105


grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:58:44