test/cpp/qps/server.h
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2015 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 TEST_QPS_SERVER_H
20 #define TEST_QPS_SERVER_H
21 
22 #include <vector>
23 
24 #include <grpc/support/cpu.h>
25 #include <grpc/support/log.h>
26 #include <grpcpp/channel.h>
27 #include <grpcpp/resource_quota.h>
29 #include <grpcpp/server_builder.h>
30 
32 #include "src/proto/grpc/testing/control.pb.h"
33 #include "src/proto/grpc/testing/messages.pb.h"
35 #include "test/core/util/port.h"
38 
39 namespace grpc {
40 namespace testing {
41 
42 class Server {
43  public:
44  explicit Server(const ServerConfig& config)
47  if (config.port()) { // positive for a fixed port, negative for inproc
48  port_ = config.port();
49  } else { // zero for dynamic port
51  }
52  }
53  virtual ~Server() {}
54 
55  ServerStats Mark(bool reset) {
56  UsageTimer::Result timer_result;
57  int cur_poll_count = GetPollCount();
58  int poll_count = cur_poll_count - last_reset_poll_count_;
59  if (reset) {
60  std::unique_ptr<UsageTimer> timer(new UsageTimer);
61  timer.swap(timer_);
62  timer_result = timer->Mark();
63  last_reset_poll_count_ = cur_poll_count;
64  } else {
65  timer_result = timer_->Mark();
66  }
67 
68  grpc_stats_data core_stats;
69  grpc_stats_collect(&core_stats);
70 
71  ServerStats stats;
72  stats.set_time_elapsed(timer_result.wall);
73  stats.set_time_system(timer_result.system);
74  stats.set_time_user(timer_result.user);
75  stats.set_total_cpu_time(timer_result.total_cpu_time);
76  stats.set_idle_cpu_time(timer_result.idle_cpu_time);
77  stats.set_cq_poll_count(poll_count);
78  CoreStatsToProto(core_stats, stats.mutable_core_stats());
79  return stats;
80  }
81 
83  // TODO(yangg): Support UNCOMPRESSABLE payload.
85  return false;
86  }
87  payload->set_type(type);
88  // Don't waste time creating a new payload of identical size.
89  if (payload->body().length() != static_cast<size_t>(size)) {
90  std::unique_ptr<char[]> body(new char[size]());
91  payload->set_body(body.get(), size);
92  }
93  return true;
94  }
95 
96  int port() const { return port_; }
97  int cores() const { return cores_; }
98  static std::shared_ptr<ServerCredentials> CreateServerCredentials(
99  const ServerConfig& config) {
100  if (config.has_security_params()) {
102  if (config.security_params().cred_type().empty()) {
104  } else {
105  type = config.security_params().cred_type();
106  }
107 
109  } else {
110  return InsecureServerCredentials();
111  }
112  }
113 
114  virtual int GetPollCount() {
115  // For sync server.
116  return 0;
117  }
118 
119  virtual std::shared_ptr<Channel> InProcessChannel(
120  const ChannelArguments& args) = 0;
121 
122  protected:
123  static void ApplyConfigToBuilder(const ServerConfig& config,
125  if (config.resource_quota_size() > 0) {
126  builder->SetResourceQuota(ResourceQuota("AsyncQpsServerTest")
127  .Resize(config.resource_quota_size()));
128  }
129  for (const auto& channel_arg : config.channel_args()) {
130  switch (channel_arg.value_case()) {
131  case ChannelArg::kStrValue:
132  builder->AddChannelArgument(channel_arg.name(),
133  channel_arg.str_value());
134  break;
135  case ChannelArg::kIntValue:
136  builder->AddChannelArgument(channel_arg.name(),
137  channel_arg.int_value());
138  break;
139  case ChannelArg::VALUE_NOT_SET:
140  gpr_log(GPR_ERROR, "Channel arg '%s' does not have a value",
141  channel_arg.name().c_str());
142  break;
143  }
144  }
145  }
146 
147  private:
148  int port_;
149  int cores_;
150  std::unique_ptr<UsageTimer> timer_;
152 };
153 
154 std::unique_ptr<Server> CreateSynchronousServer(const ServerConfig& config);
155 std::unique_ptr<Server> CreateAsyncServer(const ServerConfig& config);
156 std::unique_ptr<Server> CreateAsyncGenericServer(const ServerConfig& config);
157 std::unique_ptr<Server> CreateCallbackServer(const ServerConfig& config);
158 
159 } // namespace testing
160 } // namespace grpc
161 
162 #endif
test_credentials_provider.h
grpc::testing::kTlsCredentialsType
const char kTlsCredentialsType[]
Definition: test_credentials_provider.h:34
gpr_cpu_num_cores
GPRAPI unsigned gpr_cpu_num_cores(void)
grpc::testing::Server::Server
Server(const ServerConfig &config)
Definition: test/cpp/qps/server.h:44
testing
Definition: aws_request_signer_test.cc:25
grpc::testing::Server::~Server
virtual ~Server()
Definition: test/cpp/qps/server.h:53
log.h
port.h
grpc
Definition: grpcpp/alarm.h:33
testing::internal::string
::std::string string
Definition: bloaty/third_party/protobuf/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:881
grpc::testing::CreateAsyncGenericServer
std::unique_ptr< Server > CreateAsyncGenericServer(const ServerConfig &config)
Definition: server_async.cc:588
grpc::ResourceQuota
Definition: include/grpcpp/resource_quota.h:34
env.new
def new
Definition: env.py:51
messages_pb2.COMPRESSABLE
int COMPRESSABLE
Definition: messages_pb2.py:46
core_stats.h
grpc::testing::Server::cores_
int cores_
Definition: test/cpp/qps/server.h:149
grpc::testing::CredentialsProvider::GetServerCredentials
virtual std::shared_ptr< ServerCredentials > GetServerCredentials(const std::string &type)=0
profile_analyzer.builder
builder
Definition: profile_analyzer.py:159
UsageTimer::Result::wall
double wall
Definition: usage_timer.h:27
asyncio_get_stats.args
args
Definition: asyncio_get_stats.py:40
grpc::ServerBuilder
A builder class for the creation and startup of grpc::Server instances.
Definition: grpcpp/server_builder.h:86
gpr_log
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format,...) GPR_PRINT_FORMAT_CHECK(4
grpc::testing::Server::GetPollCount
virtual int GetPollCount()
Definition: test/cpp/qps/server.h:114
gen_stats_data.stats
list stats
Definition: gen_stats_data.py:58
cpu.h
grpc::testing::Server::ApplyConfigToBuilder
static void ApplyConfigToBuilder(const ServerConfig &config, ServerBuilder *builder)
Definition: test/cpp/qps/server.h:123
channel.h
grpc::testing::CreateCallbackServer
std::unique_ptr< Server > CreateCallbackServer(const ServerConfig &config)
Definition: test/cpp/qps/server_callback.cc:133
UsageTimer::Result::total_cpu_time
unsigned long long total_cpu_time
Definition: usage_timer.h:30
grpc_stats_collect
void grpc_stats_collect(grpc_stats_data *output)
Definition: stats.cc:48
UsageTimer::Result::idle_cpu_time
unsigned long long idle_cpu_time
Definition: usage_timer.h:31
grpc::testing::Server::timer_
std::unique_ptr< UsageTimer > timer_
Definition: test/cpp/qps/server.h:150
GPR_ERROR
#define GPR_ERROR
Definition: include/grpc/impl/codegen/log.h:57
grpc::testing::Server::CreateServerCredentials
static std::shared_ptr< ServerCredentials > CreateServerCredentials(const ServerConfig &config)
Definition: test/cpp/qps/server.h:98
grpc_pick_unused_port_or_die
int grpc_pick_unused_port_or_die(void)
UsageTimer::Result
Definition: usage_timer.h:26
messages_pb2.Payload
Payload
Definition: messages_pb2.py:583
grpc::testing::Server::SetPayload
static bool SetPayload(PayloadType type, int size, Payload *payload)
Definition: test/cpp/qps/server.h:82
grpc::testing::Server
Definition: test/cpp/qps/server.h:42
server_credentials.h
grpc::testing::CreateSynchronousServer
std::unique_ptr< Server > CreateSynchronousServer(const ServerConfig &config)
Definition: server_sync.cc:191
UsageTimer::Result::user
double user
Definition: usage_timer.h:28
grpc::CoreStatsToProto
void CoreStatsToProto(const grpc_stats_data &core, Stats *proto)
Definition: core_stats.cc:39
grpc::ChannelArguments
Definition: grpcpp/support/channel_arguments.h:39
messages_pb2.PayloadType
PayloadType
Definition: messages_pb2.py:45
grpc::testing::GetCredentialsProvider
CredentialsProvider * GetCredentialsProvider()
Definition: test_credentials_provider.cc:169
grpc::testing::Server::last_reset_poll_count_
int last_reset_poll_count_
Definition: test/cpp/qps/server.h:151
grpc::testing::Server::Mark
ServerStats Mark(bool reset)
Definition: test/cpp/qps/server.h:55
grpc_stats_data
Definition: src/core/lib/debug/stats.h:33
grpc::testing::Server::port
int port() const
Definition: test/cpp/qps/server.h:96
grpc::testing::Server::cores
int cores() const
Definition: test/cpp/qps/server.h:97
config_s
Definition: bloaty/third_party/zlib/deflate.c:120
resource_quota.h
grpc::InsecureServerCredentials
std::shared_ptr< ServerCredentials > InsecureServerCredentials()
Definition: insecure_server_credentials.cc:52
grpc::testing::Server::port_
int port_
Definition: test/cpp/qps/server.h:148
UsageTimer::Result::system
double system
Definition: usage_timer.h:29
ssl_test_data.h
asyncio_get_stats.type
type
Definition: asyncio_get_stats.py:37
usage_timer.h
size
voidpf void uLong size
Definition: bloaty/third_party/zlib/contrib/minizip/ioapi.h:136
gen_server_registered_method_bad_client_test_body.payload
list payload
Definition: gen_server_registered_method_bad_client_test_body.py:40
UsageTimer
Definition: usage_timer.h:22
server_builder.h
grpc::testing::CreateAsyncServer
std::unique_ptr< Server > CreateAsyncServer(const ServerConfig &config)
Definition: server_async.cc:575
timer
static uv_timer_t timer
Definition: test-callback-stack.c:34
grpc::testing::Server::InProcessChannel
virtual std::shared_ptr< Channel > InProcessChannel(const ChannelArguments &args)=0


grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:01:16