Skip to content

Commit ca575c5

Browse files
authored
impl(bigtable): add benchmark command line arg to set metrics period (#16338)
1 parent e61bec7 commit ca575c5

5 files changed

Lines changed: 39 additions & 1 deletion

File tree

google/cloud/bigtable/benchmarks/benchmark.cc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,9 @@ void Benchmark::DeleteTable() {
129129

130130
Table Benchmark::MakeTable(Options connection_opts) const {
131131
auto connection_options = MergeOptions(std::move(connection_opts), opts_);
132+
if (options_.metrics_period.has_value()) {
133+
connection_options.set<MetricsPeriodOption>(*options_.metrics_period);
134+
}
132135
auto table_opts = Options{}.set<AppProfileIdOption>(options_.app_profile_id);
133136
return Table(
134137
MakeDataConnection({InstanceResource(Project(options_.project_id),

google/cloud/bigtable/benchmarks/benchmark_options.cc

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,11 @@ google::cloud::StatusOr<BenchmarkOptions> ParseBenchmarkOptions(
100100
[&options](std::string const& val) {
101101
options.enable_metrics = ParseBoolean(val).value_or(true);
102102
}},
103+
{"--metrics-period",
104+
"the frequency at which client-side metrics are exported",
105+
[&options](std::string const& val) {
106+
options.metrics_period = ParseDuration(val);
107+
}},
103108
};
104109

105110
auto usage = BuildUsage(desc, argv[0]);
@@ -164,6 +169,12 @@ google::cloud::StatusOr<BenchmarkOptions> ParseBenchmarkOptions(
164169
<< "). Check your --test-duration option.\n";
165170
return make_status(os, GCP_ERROR_INFO());
166171
}
172+
if (options.metrics_period && options.metrics_period->count() <= 0) {
173+
std::ostringstream os;
174+
os << "Invalid metrics period seconds (" << options.metrics_period->count()
175+
<< "). Check your --metrics-period option.\n";
176+
return make_status(os, GCP_ERROR_INFO());
177+
}
167178
return options;
168179
}
169180

google/cloud/bigtable/benchmarks/benchmark_options.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "google/cloud/bigtable/benchmarks/constants.h"
1919
#include "google/cloud/status_or.h"
2020
#include <chrono>
21+
#include <optional>
2122
#include <string>
2223
#include <vector>
2324

@@ -42,6 +43,7 @@ struct BenchmarkOptions {
4243
bool exit_after_parse = false;
4344
bool include_read_rows = false;
4445
bool enable_metrics = true;
46+
std::optional<std::chrono::seconds> metrics_period;
4547
};
4648

4749
google::cloud::StatusOr<BenchmarkOptions> ParseBenchmarkOptions(

google/cloud/bigtable/benchmarks/benchmark_options_test.cc

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ TEST(BenchmarkOptions, Basic) {
3535
{"self-test", "--project-id=test-project", "--instance-id=test-instance",
3636
"--app-profile-id=test-app-profile-id", "--table-size=10000",
3737
"--test-duration=300s", "--use-embedded-server=true",
38-
"--include-read-rows=true"},
38+
"--include-read-rows=true", "--metrics-period=10s"},
3939
"");
4040
ASSERT_STATUS_OK(options);
4141
EXPECT_FALSE(options->exit_after_parse);
@@ -46,6 +46,8 @@ TEST(BenchmarkOptions, Basic) {
4646
EXPECT_EQ(300, options->test_duration.count());
4747
EXPECT_EQ(true, options->use_embedded_server);
4848
EXPECT_EQ(true, options->include_read_rows);
49+
EXPECT_THAT(options->metrics_period,
50+
::testing::Optional(std::chrono::seconds(10)));
4951
}
5052

5153
TEST(BenchmarkOptions, Defaults) {
@@ -64,6 +66,7 @@ TEST(BenchmarkOptions, Defaults) {
6466
options->test_duration.count());
6567
EXPECT_EQ(false, options->use_embedded_server);
6668
EXPECT_EQ(10, options->parallel_requests);
69+
EXPECT_FALSE(options->metrics_period.has_value());
6770
}
6871

6972
TEST(BenchmarkOptions, Initialization) {
@@ -105,6 +108,13 @@ TEST(BenchmarkOptions, Validate) {
105108
EXPECT_FALSE(ParseBenchmarkOptions(
106109
{"self-test", "--project-id=a", "--instance-id=b", "--test-duration=0"},
107110
""));
111+
EXPECT_FALSE(ParseBenchmarkOptions(
112+
{"self-test", "--project-id=a", "--instance-id=b", "--metrics-period=0s"},
113+
""));
114+
EXPECT_FALSE(
115+
ParseBenchmarkOptions({"self-test", "--project-id=a", "--instance-id=b",
116+
"--metrics-period=-5s"},
117+
""));
108118
}
109119

110120
} // namespace

google/cloud/bigtable/benchmarks/bigtable_benchmark_test.cc

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,18 @@ TEST(BenchmarkTest, Create) {
5353
SUCCEED() << "Benchmark object successfully destroyed";
5454
}
5555

56+
TEST(BenchmarkTest, MakeTableWithMetricsPeriod) {
57+
char arg8[] = "--metrics-period=10s";
58+
char* argv[] = {arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8};
59+
int argc = sizeof(argv) / sizeof(argv[0]);
60+
auto options = ParseArgs(argc, argv, "");
61+
ASSERT_STATUS_OK(options);
62+
63+
Benchmark bm(*options);
64+
auto table = bm.MakeTable();
65+
SUCCEED();
66+
}
67+
5668
TEST(BenchmarkTest, Populate) {
5769
char* argv[] = {arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7};
5870
int argc = sizeof(argv) / sizeof(argv[0]);

0 commit comments

Comments
 (0)