envoyproxy / envoyproxy/envoy

stats: inconsistent handling of multiple consecutive dots in stat-names produced via join vs direct encoding

Open
#10,008 1 comment 0 reactions 1 assignee Claimed by @jmarantz View on GitHub
area/stats help wanted
Dominant language
C++
Stars
28.9k
Forks
5.6k
Avg merge
1d 22h
Merged PRs (30d)
430

Description

You can create a multi-segment stat-name by directly encoding it into the table, or by joining multiple existing stat names.

When you encode directly, you can wind up with multiple consecutive dots. When you construct by joining, you can't. The testcase in this commit illustrates the problem:

https://github.com/jmarantz/envoy/commit/6e7367c522c2fb5e77bb1d59cb54817e039bd9c3

```
TEST_P(StatNameTest, TestIgnoreTrailingDots) {
EXPECT_EQ("foo.bar", encodeDecode("foo.bar."));
EXPECT_EQ("foo.bar", encodeDecode("foo.bar..."));
EXPECT_EQ("foo..bar", encodeDecode("foo..bar"));
EXPECT_EQ("foo...bar", encodeDecode("foo...bar"));

StatNamePool pool(*table_);
SymbolTable::StoragePtr joined = table_->join({makeStat("a"), makeStat(""), makeStat("b")});
EXPECT_EQ("a..b", table_->toString(StatName(joined.get()))); // FAILS, will be "a.b".

EXPECT_EQ("", encodeDecode("."));
EXPECT_EQ("", encodeDecode(".."));
}
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.