|
|
|
@ -40,20 +40,12 @@ require_relative '../src/proto/grpc/testing/messages_pb' |
|
|
|
|
require_relative '../src/proto/grpc/testing/test_services_pb' |
|
|
|
|
|
|
|
|
|
class RpcConfig |
|
|
|
|
attr_reader :rpcs_to_send, :metadata_to_send, :timeout_sec |
|
|
|
|
def init(rpcs_to_send, metadata_to_send, timeout_sec = 0) |
|
|
|
|
@rpcs_to_send = rpcs_to_send |
|
|
|
|
@metadata_to_send = metadata_to_send |
|
|
|
|
@timeout_sec = timeout_sec |
|
|
|
|
end |
|
|
|
|
def rpcs_to_send |
|
|
|
|
@rpcs_to_send |
|
|
|
|
end |
|
|
|
|
def metadata_to_send |
|
|
|
|
@metadata_to_send |
|
|
|
|
end |
|
|
|
|
def timeout_sec |
|
|
|
|
@timeout_sec |
|
|
|
|
end |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
# Some global constant mappings |
|
|
|
@ -104,16 +96,11 @@ def create_stub(opts) |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
class StatsPerMethod |
|
|
|
|
attr_reader :rpcs_started, :result |
|
|
|
|
def initialize() |
|
|
|
|
@rpcs_started = 0 |
|
|
|
|
@result = Hash.new(0) |
|
|
|
|
end |
|
|
|
|
def rpcs_started |
|
|
|
|
@rpcs_started |
|
|
|
|
end |
|
|
|
|
def result |
|
|
|
|
@result |
|
|
|
|
end |
|
|
|
|
def increment_rpcs_started() |
|
|
|
|
@rpcs_started += 1 |
|
|
|
|
end |
|
|
|
@ -126,7 +113,6 @@ class ConfigureTarget < Grpc::Testing::XdsUpdateClientConfigureService::Service |
|
|
|
|
include Grpc::Testing |
|
|
|
|
|
|
|
|
|
def configure(req, _call) |
|
|
|
|
rpcs_to_send = req['types'] |
|
|
|
|
metadata_to_send = {} |
|
|
|
|
req['metadata'].each do |m| |
|
|
|
|
rpc = m.type |
|
|
|
@ -138,7 +124,7 @@ class ConfigureTarget < Grpc::Testing::XdsUpdateClientConfigureService::Service |
|
|
|
|
metadata_to_send[rpc][metadata_key] = metadata_value |
|
|
|
|
end |
|
|
|
|
new_rpc_config = RpcConfig.new |
|
|
|
|
new_rpc_config.init(rpcs_to_send, metadata_to_send, req['timeout_sec']) |
|
|
|
|
new_rpc_config.init(req['types'], metadata_to_send, req['timeout_sec']) |
|
|
|
|
$rpc_config = new_rpc_config |
|
|
|
|
ClientConfigureResponse.new() |
|
|
|
|
end |
|
|
|
@ -185,14 +171,13 @@ class TestTarget < Grpc::Testing::LoadBalancerStatsService::Service |
|
|
|
|
|
|
|
|
|
def get_client_accumulated_stats(req, _call) |
|
|
|
|
$accumulated_stats_mu.synchronize do |
|
|
|
|
all_stats_per_method = {} |
|
|
|
|
$accumulated_method_stats.each do |rpc, stats_per_method| |
|
|
|
|
one_stats_per_method = LoadBalancerAccumulatedStatsResponse::MethodStats.new( |
|
|
|
|
all_stats_per_method = $accumulated_method_stats.map { |rpc, stats_per_method| |
|
|
|
|
[rpc, |
|
|
|
|
LoadBalancerAccumulatedStatsResponse::MethodStats.new( |
|
|
|
|
rpcs_started: stats_per_method.rpcs_started, |
|
|
|
|
result: stats_per_method.result |
|
|
|
|
) |
|
|
|
|
all_stats_per_method[rpc] = one_stats_per_method |
|
|
|
|
end |
|
|
|
|
)] |
|
|
|
|
}.to_h |
|
|
|
|
LoadBalancerAccumulatedStatsResponse.new( |
|
|
|
|
num_rpcs_started_by_method: $num_rpcs_started_by_method, |
|
|
|
|
num_rpcs_succeeded_by_method: $num_rpcs_succeeded_by_method, |
|
|
|
@ -203,10 +188,6 @@ class TestTarget < Grpc::Testing::LoadBalancerStatsService::Service |
|
|
|
|
end |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
def add_stats_per_method(rpc_stats_key, status_code) |
|
|
|
|
$accumulated_method_stats[rpc_stats_key].add_result(status_code) |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
# execute 1 RPC and return remote hostname |
|
|
|
|
def execute_rpc(op, fail_on_failed_rpcs, rpc_stats_key) |
|
|
|
|
remote_peer = "" |
|
|
|
@ -223,7 +204,7 @@ def execute_rpc(op, fail_on_failed_rpcs, rpc_stats_key) |
|
|
|
|
status_code = e.code |
|
|
|
|
end |
|
|
|
|
$accumulated_stats_mu.synchronize do |
|
|
|
|
add_stats_per_method(rpc_stats_key, status_code) |
|
|
|
|
$accumulated_method_stats[rpc_stats_key].add_result(status_code) |
|
|
|
|
if remote_peer.empty? |
|
|
|
|
$num_rpcs_failed_by_method[rpc_stats_key] += 1 |
|
|
|
|
else |
|
|
|
@ -244,7 +225,7 @@ def execute_rpc_in_thread(op, rpc_stats_key) |
|
|
|
|
# Doing this for consistency |
|
|
|
|
$accumulated_stats_mu.synchronize do |
|
|
|
|
$num_rpcs_succeeded_by_method[rpc_stats_key] += 1 |
|
|
|
|
add_stats_per_method(rpc_stats_key, 0) |
|
|
|
|
$accumulated_method_stats[rpc_stats_key].add_result(0) |
|
|
|
|
end |
|
|
|
|
rescue GRPC::BadStatus => e |
|
|
|
|
# Normal execution arrives here, |
|
|
|
@ -252,7 +233,7 @@ def execute_rpc_in_thread(op, rpc_stats_key) |
|
|
|
|
# balancing policy" |
|
|
|
|
$accumulated_stats_mu.synchronize do |
|
|
|
|
$num_rpcs_failed_by_method[rpc_stats_key] += 1 |
|
|
|
|
add_stats_per_method(rpc_stats_key, e.code) |
|
|
|
|
$accumulated_method_stats[rpc_stats_key].add_result(e.code) |
|
|
|
|
end |
|
|
|
|
end |
|
|
|
|
} |
|
|
|
|