Skip to content

Commit 8647faf

Browse files
authored
Merge pull request #102 from bianpengyuan/random-sampling
fix random sample fraction percent
2 parents 6577606 + 827eec6 commit 8647faf

File tree

2 files changed

+38
-3
lines changed
  • source/extensions/filters/network/http_connection_manager
  • test/extensions/filters/network/http_connection_manager

2 files changed

+38
-3
lines changed

source/extensions/filters/network/http_connection_manager/config.cc

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -266,8 +266,9 @@ HttpConnectionManagerConfig::HttpConnectionManagerConfig(
266266
envoy::type::FractionalPercent random_sampling;
267267
// TODO: Random sampling historically was an integer and default to out of 10,000. We should
268268
// deprecate that and move to a straight fractional percent config.
269-
random_sampling.set_numerator(
270-
tracing_config.has_random_sampling() ? tracing_config.random_sampling().value() : 10000);
269+
uint64_t random_sampling_numerator{PROTOBUF_PERCENT_TO_ROUNDED_INTEGER_OR_DEFAULT(
270+
tracing_config, random_sampling, 10000, 10000)};
271+
random_sampling.set_numerator(random_sampling_numerator);
271272
random_sampling.set_denominator(envoy::type::FractionalPercent::TEN_THOUSAND);
272273
envoy::type::FractionalPercent overall_sampling;
273274
overall_sampling.set_numerator(

test/extensions/filters/network/http_connection_manager/config_test.cc

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -294,14 +294,48 @@ TEST_F(HttpConnectionManagerConfigTest, SamplingConfigured) {
294294
EXPECT_EQ(1, config.tracingConfig()->client_sampling_.numerator());
295295
EXPECT_EQ(envoy::type::FractionalPercent::HUNDRED,
296296
config.tracingConfig()->client_sampling_.denominator());
297-
EXPECT_EQ(2, config.tracingConfig()->random_sampling_.numerator());
297+
EXPECT_EQ(200, config.tracingConfig()->random_sampling_.numerator());
298298
EXPECT_EQ(envoy::type::FractionalPercent::TEN_THOUSAND,
299299
config.tracingConfig()->random_sampling_.denominator());
300300
EXPECT_EQ(3, config.tracingConfig()->overall_sampling_.numerator());
301301
EXPECT_EQ(envoy::type::FractionalPercent::HUNDRED,
302302
config.tracingConfig()->overall_sampling_.denominator());
303303
}
304304

305+
TEST_F(HttpConnectionManagerConfigTest, FractionalSamplingConfigured) {
306+
const std::string yaml_string = R"EOF(
307+
stat_prefix: ingress_http
308+
internal_address_config:
309+
unix_sockets: true
310+
route_config:
311+
name: local_route
312+
tracing:
313+
operation_name: ingress
314+
client_sampling:
315+
value: 0.1
316+
random_sampling:
317+
value: 0.2
318+
overall_sampling:
319+
value: 0.3
320+
http_filters:
321+
- name: envoy.router
322+
)EOF";
323+
324+
HttpConnectionManagerConfig config(parseHttpConnectionManagerFromV2Yaml(yaml_string), context_,
325+
date_provider_, route_config_provider_manager_,
326+
scoped_routes_config_provider_manager_);
327+
328+
EXPECT_EQ(0, config.tracingConfig()->client_sampling_.numerator());
329+
EXPECT_EQ(envoy::type::FractionalPercent::HUNDRED,
330+
config.tracingConfig()->client_sampling_.denominator());
331+
EXPECT_EQ(20, config.tracingConfig()->random_sampling_.numerator());
332+
EXPECT_EQ(envoy::type::FractionalPercent::TEN_THOUSAND,
333+
config.tracingConfig()->random_sampling_.denominator());
334+
EXPECT_EQ(0, config.tracingConfig()->overall_sampling_.numerator());
335+
EXPECT_EQ(envoy::type::FractionalPercent::HUNDRED,
336+
config.tracingConfig()->overall_sampling_.denominator());
337+
}
338+
305339
TEST_F(HttpConnectionManagerConfigTest, UnixSocketInternalAddress) {
306340
const std::string yaml_string = R"EOF(
307341
stat_prefix: ingress_http

0 commit comments

Comments
 (0)