@@ -64,7 +64,7 @@ Metrics readAllMetricsFromStatFile(ReadBufferFromFile & buf)
6464 return metrics;
6565}
6666
67- uint64_t readMetricsFromStatFile (ReadBufferFromFile & buf, std::initializer_list<std::string_view> keys, bool * warnings_printed)
67+ uint64_t readMetricsFromStatFile (ReadBufferFromFile & buf, std::initializer_list<std::string_view> keys, std::initializer_list<std::string_view> optional_keys, bool * warnings_printed)
6868{
6969 uint64_t sum = 0 ;
7070 uint64_t found_mask = 0 ;
@@ -79,9 +79,10 @@ uint64_t readMetricsFromStatFile(ReadBufferFromFile & buf, std::initializer_list
7979 {
8080 std::string dummy;
8181 readStringUntilNewlineInto (dummy, buf);
82- buf.ignore ();
82+ buf.tryIgnore ( 1 ); // / skip EOL (if not EOF)
8383 continue ;
8484 }
85+
8586 if (print_warnings && (found_mask & (1l << (it - keys.begin ()))))
8687 {
8788 *warnings_printed = true ;
@@ -93,16 +94,18 @@ uint64_t readMetricsFromStatFile(ReadBufferFromFile & buf, std::initializer_list
9394 uint64_t value = 0 ;
9495 readIntText (value, buf);
9596 sum += value;
97+ buf.tryIgnore (1 ); // / skip EOL (if not EOF)
9698 }
97- if (found_mask != (1l << keys.size ()) - 1 )
99+
100+ // / Did we see all keys?
101+ for (const auto * it = keys.begin (); it != keys.end (); ++it)
98102 {
99- for (const auto * it = keys.begin (); it != keys.end (); ++it)
103+ if (print_warnings
104+ && !(found_mask & (1l << (it - keys.begin ())))
105+ && std::find (optional_keys.begin (), optional_keys.end (), *it) == optional_keys.end ())
100106 {
101- if (print_warnings && (!(found_mask & (1l << (it - keys.begin ())))))
102- {
103- *warnings_printed = true ;
104- LOG_ERROR (getLogger (" CgroupsReader" ), " Cannot find '{}' in '{}'" , *it, buf.getFileName ());
105- }
107+ *warnings_printed = true ;
108+ LOG_ERROR (getLogger (" CgroupsReader" ), " Cannot find '{}' in '{}'" , *it, buf.getFileName ());
106109 }
107110 }
108111 return sum;
@@ -116,7 +119,7 @@ struct CgroupsV1Reader : ICgroupsReader
116119 {
117120 std::lock_guard lock (mutex);
118121 buf.rewind ();
119- return readMetricsFromStatFile (buf, {" rss" }, &warnings_printed);
122+ return readMetricsFromStatFile (buf, {" rss" }, {}, &warnings_printed);
120123 }
121124
122125 std::string dumpAllStats () override
@@ -140,7 +143,7 @@ struct CgroupsV2Reader : ICgroupsReader
140143 {
141144 std::lock_guard lock (mutex);
142145 stat_buf.rewind ();
143- return readMetricsFromStatFile (stat_buf, {" anon" , " sock" , " kernel" }, &warnings_printed);
146+ return readMetricsFromStatFile (stat_buf, {" anon" , " sock" , " kernel" }, { " kernel " }, &warnings_printed);
144147 }
145148
146149 std::string dumpAllStats () override
0 commit comments