Skip to content

Commit b17aca2

Browse files
authored
Merge pull request #7 from DataDog/david.goffredo/abseil-for-bazel-build
Support conditional use of Abseil's string_view and optional, for Envoy.
2 parents 523f704 + 8484da9 commit b17aca2

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+394
-275
lines changed

BUILD.bazel

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ cc_library(
2424
"src/datadog/msgpack.cpp",
2525
"src/datadog/net_util.cpp",
2626
"src/datadog/null_collector.cpp",
27+
"src/datadog/optional.cpp",
2728
"src/datadog/parse_util.cpp",
2829
"src/datadog/propagation_styles.cpp",
2930
"src/datadog/rate.cpp",
@@ -38,6 +39,7 @@ cc_library(
3839
"src/datadog/span_matcher.cpp",
3940
"src/datadog/span_sampler_config.cpp",
4041
"src/datadog/span_sampler.cpp",
42+
"src/datadog/string_view.cpp",
4143
"src/datadog/tag_propagation.cpp",
4244
"src/datadog/tags.cpp",
4345
"src/datadog/threaded_event_scheduler.cpp",
@@ -73,6 +75,7 @@ cc_library(
7375
"src/datadog/msgpack.h",
7476
"src/datadog/net_util.h",
7577
"src/datadog/null_collector.h",
78+
"src/datadog/optional.h",
7679
"src/datadog/parse_util.h",
7780
"src/datadog/propagation_styles.h",
7881
"src/datadog/rate.h",
@@ -87,6 +90,7 @@ cc_library(
8790
"src/datadog/span_matcher.h",
8891
"src/datadog/span_sampler_config.h",
8992
"src/datadog/span_sampler.h",
93+
"src/datadog/string_view.h",
9094
"src/datadog/tag_propagation.h",
9195
"src/datadog/tags.h",
9296
"src/datadog/threaded_event_scheduler.h",
@@ -103,7 +107,12 @@ cc_library(
103107
"-Werror",
104108
"-pedantic",
105109
"-std=c++17",
110+
"-DDD_USE_ABSEIL_FOR_ENVOY",
106111
],
107112
strip_include_prefix = "src/",
108113
visibility = ["//visibility:public"],
114+
deps = [
115+
"@com_google_absl//absl/strings",
116+
"@com_google_absl//absl/types:optional",
117+
],
109118
)

CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ target_sources(dd_trace_cpp PRIVATE
7676
src/datadog/msgpack.cpp
7777
src/datadog/net_util.cpp
7878
src/datadog/null_collector.cpp
79+
src/datadog/optional.cpp
7980
src/datadog/parse_util.cpp
8081
src/datadog/propagation_styles.cpp
8182
src/datadog/rate.cpp
@@ -90,6 +91,7 @@ target_sources(dd_trace_cpp PRIVATE
9091
src/datadog/span_matcher.cpp
9192
src/datadog/span_sampler_config.cpp
9293
src/datadog/span_sampler.cpp
94+
src/datadog/string_view.cpp
9395
src/datadog/tag_propagation.cpp
9496
src/datadog/tags.cpp
9597
src/datadog/threaded_event_scheduler.cpp
@@ -131,6 +133,7 @@ target_sources(dd_trace_cpp PUBLIC
131133
src/datadog/msgpack.h
132134
src/datadog/net_util.h
133135
src/datadog/null_collector.h
136+
src/datadog/optional.h
134137
src/datadog/parse_util.h
135138
src/datadog/propagation_styles.h
136139
src/datadog/rate.h
@@ -145,6 +148,7 @@ target_sources(dd_trace_cpp PUBLIC
145148
src/datadog/span_matcher.h
146149
src/datadog/span_sampler_config.h
147150
src/datadog/span_sampler.h
151+
src/datadog/string_view.h
148152
src/datadog/tag_propagation.h
149153
src/datadog/tags.h
150154
src/datadog/threaded_event_scheduler.h

WORKSPACE

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# The Bazel build is primarily for use by Envoy.
2+
#
3+
# Envoy forbids use of std::string_view and std::optional, preferring use of
4+
# Abseil's absl::string_view and absl::optional instead.
5+
#
6+
# In the context of an Envoy build, the Abseil libraries point to whatever
7+
# versions Envoy uses.
8+
#
9+
# To test this library's Bazel build independent of Envoy, we need to specify
10+
# versions of the Abseil libraries. That is what this file is for.
11+
12+
# These rules are based on <https://abseil.io/docs/cpp/quickstart>,
13+
# accessed December 6, 2022.
14+
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
15+
16+
http_archive(
17+
name = "com_google_absl",
18+
urls = ["https://github.com/abseil/abseil-cpp/archive/98eb410c93ad059f9bba1bf43f5bb916fc92a5ea.zip"],
19+
sha256 = "aabf6c57e3834f8dc3873a927f37eaf69975d4b28117fc7427dfb1c661542a87",
20+
strip_prefix = "abseil-cpp-98eb410c93ad059f9bba1bf43f5bb916fc92a5ea",
21+
)
22+
23+
http_archive(
24+
name = "bazel_skylib",
25+
urls = ["https://github.com/bazelbuild/bazel-skylib/releases/download/1.2.1/bazel-skylib-1.2.1.tar.gz"],
26+
sha256 = "f7be3474d42aae265405a592bb7da8e171919d74c16f082a5457840f06054728",
27+
)

WORKSPACE.bazel

Whitespace-only changes.

src/datadog/collector.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@
1111
// `response_handler` parameter to `Collector::send`.
1212

1313
#include <memory>
14-
#include <optional>
1514
#include <vector>
1615

1716
#include "expected.h"
1817
#include "json_fwd.hpp"
18+
#include "optional.h"
1919

2020
namespace datadog {
2121
namespace tracing {

src/datadog/collector_response.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
namespace datadog {
44
namespace tracing {
55

6-
std::string CollectorResponse::key(std::string_view service,
7-
std::string_view environment) {
6+
std::string CollectorResponse::key(StringView service, StringView environment) {
87
std::string result;
98
result += "service:";
109
result += service;

src/datadog/collector_response.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,16 @@
1414
// information.
1515

1616
#include <string>
17-
#include <string_view>
1817
#include <unordered_map>
1918

2019
#include "rate.h"
20+
#include "string_view.h"
2121

2222
namespace datadog {
2323
namespace tracing {
2424

2525
struct CollectorResponse {
26-
static std::string key(std::string_view service,
27-
std::string_view environment);
26+
static std::string key(StringView service, StringView environment);
2827
static const std::string key_of_default_rate;
2928
std::unordered_map<std::string, Rate> sample_rate_by_key;
3029
};

src/datadog/curl.cpp

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
#include <list>
1212
#include <memory>
1313
#include <mutex>
14-
#include <string_view>
1514
#include <thread>
1615
#include <unordered_map>
1716
#include <unordered_set>
@@ -22,6 +21,7 @@
2221
#include "json.hpp"
2322
#include "logger.h"
2423
#include "parse_util.h"
24+
#include "string_view.h"
2525

2626
namespace datadog {
2727
namespace tracing {
@@ -61,7 +61,7 @@ class CurlImpl {
6161
public:
6262
~HeaderWriter();
6363
curl_slist *release();
64-
void set(std::string_view key, std::string_view value) override;
64+
void set(StringView key, StringView value) override;
6565
};
6666

6767
class HeaderReader : public DictReader {
@@ -71,10 +71,9 @@ class CurlImpl {
7171
public:
7272
explicit HeaderReader(
7373
std::unordered_map<std::string, std::string> *response_headers_lower);
74-
std::optional<std::string_view> lookup(std::string_view key) const override;
75-
void visit(
76-
const std::function<void(std::string_view key, std::string_view value)>
77-
&visitor) const override;
74+
Optional<StringView> lookup(StringView key) const override;
75+
void visit(const std::function<void(StringView key, StringView value)>
76+
&visitor) const override;
7877
};
7978

8079
void run();
@@ -88,7 +87,7 @@ class CurlImpl {
8887
void *user_data);
8988
static bool is_non_whitespace(unsigned char);
9089
static char to_lower(unsigned char);
91-
static std::string_view trim(std::string_view);
90+
static StringView trim(StringView);
9291

9392
public:
9493
explicit CurlImpl(const std::shared_ptr<Logger> &logger);
@@ -426,7 +425,7 @@ curl_slist *CurlImpl::HeaderWriter::release() {
426425
return list;
427426
}
428427

429-
void CurlImpl::HeaderWriter::set(std::string_view key, std::string_view value) {
428+
void CurlImpl::HeaderWriter::set(StringView key, StringView value) {
430429
buffer_.clear();
431430
buffer_ += key;
432431
buffer_ += ": ";
@@ -439,8 +438,7 @@ CurlImpl::HeaderReader::HeaderReader(
439438
std::unordered_map<std::string, std::string> *response_headers_lower)
440439
: response_headers_lower_(response_headers_lower) {}
441440

442-
std::optional<std::string_view> CurlImpl::HeaderReader::lookup(
443-
std::string_view key) const {
441+
Optional<StringView> CurlImpl::HeaderReader::lookup(StringView key) const {
444442
buffer_.clear();
445443
std::transform(key.begin(), key.end(), std::back_inserter(buffer_),
446444
&to_lower);
@@ -453,8 +451,8 @@ std::optional<std::string_view> CurlImpl::HeaderReader::lookup(
453451
}
454452

455453
void CurlImpl::HeaderReader::visit(
456-
const std::function<void(std::string_view key, std::string_view value)>
457-
&visitor) const {
454+
const std::function<void(StringView key, StringView value)> &visitor)
455+
const {
458456
for (const auto &[key, value] : *response_headers_lower_) {
459457
visitor(key, value);
460458
}

src/datadog/datadog_agent.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ namespace datadog {
2121
namespace tracing {
2222
namespace {
2323

24-
const std::string_view traces_api_path = "/v0.4/traces";
24+
const StringView traces_api_path = "/v0.4/traces";
2525

2626
HTTPClient::URL traces_endpoint(const HTTPClient::URL& agent_url) {
2727
auto traces_url = agent_url;
@@ -49,10 +49,10 @@ Expected<void> msgpack_encode(
4949
}
5050

5151
std::variant<CollectorResponse, std::string> parse_agent_traces_response(
52-
std::string_view body) try {
52+
StringView body) try {
5353
nlohmann::json response = nlohmann::json::parse(body);
5454

55-
std::string_view type = response.type_name();
55+
StringView type = response.type_name();
5656
if (type != "object") {
5757
std::string message;
5858
message +=
@@ -66,7 +66,7 @@ std::variant<CollectorResponse, std::string> parse_agent_traces_response(
6666
return message;
6767
}
6868

69-
const std::string_view sample_rates_property = "rate_by_service";
69+
const StringView sample_rates_property = "rate_by_service";
7070
const auto found = response.find(sample_rates_property);
7171
if (found == response.end()) {
7272
return CollectorResponse{};

src/datadog/datadog_agent_config.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
namespace datadog {
1212
namespace tracing {
1313

14-
Expected<HTTPClient::URL> DatadogAgentConfig::parse(std::string_view input) {
15-
const std::string_view separator = "://";
14+
Expected<HTTPClient::URL> DatadogAgentConfig::parse(StringView input) {
15+
const StringView separator = "://";
1616
const auto after_scheme = std::search(input.begin(), input.end(),
1717
separator.begin(), separator.end());
1818
if (after_scheme == input.end()) {
@@ -23,9 +23,9 @@ Expected<HTTPClient::URL> DatadogAgentConfig::parse(std::string_view input) {
2323
return Error{Error::URL_MISSING_SEPARATOR, std::move(message)};
2424
}
2525

26-
const std::string_view scheme = range(input.begin(), after_scheme);
27-
const std::string_view supported[] = {"http", "https", "unix", "http+unix",
28-
"https+unix"};
26+
const StringView scheme = range(input.begin(), after_scheme);
27+
const StringView supported[] = {"http", "https", "unix", "http+unix",
28+
"https+unix"};
2929
const auto found =
3030
std::find(std::begin(supported), std::end(supported), scheme);
3131
if (found == std::end(supported)) {
@@ -42,7 +42,7 @@ Expected<HTTPClient::URL> DatadogAgentConfig::parse(std::string_view input) {
4242
return Error{Error::URL_UNSUPPORTED_SCHEME, std::move(message)};
4343
}
4444

45-
const std::string_view authority_and_path =
45+
const StringView authority_and_path =
4646
range(after_scheme + separator.size(), input.end());
4747
// If the scheme is for unix domain sockets, then there's no way to
4848
// distinguish the path-to-socket from the path-to-resource. Some

0 commit comments

Comments
 (0)