Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion source/common/protobuf/utility.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ uint64_t fractionalPercentDenominatorToInt(const envoy::type::FractionalPercent&
// @param default_value supplies the default if the field is not present.
#define PROTOBUF_PERCENT_TO_ROUNDED_INTEGER_OR_DEFAULT(message, field_name, max_value, \
default_value) \
((message).has_##field_name() \
((message).has_##field_name() && !std::isnan((message).field_name().value()) \
? ProtobufPercentHelper::convertPercent((message).field_name().value(), max_value) \

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is fine to mitigate the issue today. The clean way to do this is to catch NaN in PGV annotations (i.e. https://github.com/envoyproxy/envoy/blob/master/api/envoy/type/percent.proto#L14, https://github.com/lyft/protoc-gen-validate/blob/master/validate/validate.proto#L98), the same way we validate the [0..100] range.

Can you file an issue for NaN validation at https://github.com/lyft/protoc-gen-validate and add a TODO comment here?

@rodaine @akonradi does this make sense to you?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, this would be a good validation to have in PGV - it's simple, self-contained, and generally useful.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done both 👍

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for filing the issue. I think you need a small change of behavior here. Instead of returning the default in NaN, it should throw EnvoyException(), to allow the NaN to be reflected back to the config pipeline.

: ProtobufPercentHelper::checkAndReturnDefault(default_value, max_value))

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
static_resources {
clusters {
name: "-2353373969551157135775236"
connect_timeout {
seconds: 12884901890
}
hosts {
pipe {
path: "@"
}
}
outlier_detection {
}
common_lb_config {
healthy_panic_threshold {
value: nan
}
}
}
}
admin {
access_log_path: "@r"
address {
pipe {
path: "W"
}
}
}