Skip to content

Commit cd2f72c

Browse files
authored
router: support random value for cluster specifier plugin (#39979)
Now, the cluster specifier plugin could also use the random value to select cluster. Risk Level: low. Testing: n/a. Docs Changes: n/a. Release Notes: n/a. Platform Specific Features: [Optional Runtime guard:] [Optional Fixes #Issue] [Optional Fixes commit #PR or SHA] [Optional Deprecated:] [Optional [API Considerations](https://github.com/envoyproxy/envoy/blob/main/api/review_checklist.md):] --------- Signed-off-by: wangbaiping(wbpcode) <[email protected]>
1 parent 58fce3a commit cd2f72c

File tree

18 files changed

+56
-47
lines changed

18 files changed

+56
-47
lines changed

contrib/golang/router/cluster_specifier/source/BUILD

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ envoy_cc_library(
2525
"//envoy/router:cluster_specifier_plugin_interface",
2626
"//source/common/common:utility_lib",
2727
"//source/common/http:utility_lib",
28-
"//source/common/router:config_lib",
28+
"//source/common/router:delegating_route_lib",
2929
"@envoy_api//contrib/envoy/extensions/router/cluster_specifier/golang/v3alpha:pkg_cc_proto",
3030
],
3131
)

contrib/golang/router/cluster_specifier/source/golang_cluster_specifier.cc

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
#include <chrono>
44

5-
#include "source/common/router/config_impl.h"
5+
#include "source/common/router/delegating_route_impl.h"
66

77
namespace Envoy {
88
namespace Router {
@@ -46,7 +46,8 @@ ClusterConfig::ClusterConfig(const GolangClusterProto& config)
4646

4747
RouteConstSharedPtr GolangClusterSpecifierPlugin::route(RouteEntryAndRouteConstSharedPtr parent,
4848
const Http::RequestHeaderMap& header,
49-
const StreamInfo::StreamInfo&) const {
49+
const StreamInfo::StreamInfo&,
50+
uint64_t) const {
5051
int buffer_len = 256;
5152
std::string buffer;
5253
std::string cluster;
@@ -77,7 +78,7 @@ RouteConstSharedPtr GolangClusterSpecifierPlugin::route(RouteEntryAndRouteConstS
7778
}
7879
}
7980

80-
return std::make_shared<RouteEntryImplBase::DynamicRouteEntry>(std::move(parent), cluster);
81+
return std::make_shared<Router::DynamicRouteEntry>(std::move(parent), std::move(cluster));
8182
}
8283

8384
void GolangClusterSpecifierPlugin::log(absl::string_view& msg) const {

contrib/golang/router/cluster_specifier/source/golang_cluster_specifier.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ class GolangClusterSpecifierPlugin : public ClusterSpecifierPlugin,
3838

3939
RouteConstSharedPtr route(RouteEntryAndRouteConstSharedPtr parent,
4040
const Http::RequestHeaderMap& header,
41-
const StreamInfo::StreamInfo& stream_info) const override;
41+
const StreamInfo::StreamInfo& stream_info,
42+
uint64_t random) const override;
4243

4344
void log(absl::string_view& msg) const;
4445

envoy/router/cluster_specifier_plugin.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,13 @@ class ClusterSpecifierPlugin {
2525
* @param parent related route.
2626
* @param headers request headers.
2727
* @param stream_info stream info of the downstream request.
28+
* @param random random value for cluster selection.
2829
* @return RouteConstSharedPtr final route with specific cluster.
2930
*/
3031
virtual RouteConstSharedPtr route(RouteEntryAndRouteConstSharedPtr parent,
3132
const Http::RequestHeaderMap& headers,
32-
const StreamInfo::StreamInfo& stream_info) const PURE;
33+
const StreamInfo::StreamInfo& stream_info,
34+
uint64_t random) const PURE;
3335
};
3436

3537
using ClusterSpecifierPluginSharedPtr = std::shared_ptr<ClusterSpecifierPlugin>;

source/common/router/config_impl.cc

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ getHeaderParsers(const HeaderParser* global_route_config_header_parser,
174174
class NullClusterSpecifierPlugin : public ClusterSpecifierPlugin {
175175
public:
176176
RouteConstSharedPtr route(RouteEntryAndRouteConstSharedPtr, const Http::RequestHeaderMap&,
177-
const StreamInfo::StreamInfo&) const override {
177+
const StreamInfo::StreamInfo&, uint64_t) const override {
178178
return nullptr;
179179
}
180180
};
@@ -1390,7 +1390,8 @@ RouteConstSharedPtr RouteEntryImplBase::clusterEntry(const Http::RequestHeaderMa
13901390
// TODO(wbpcode): make the weighted clusters an implementation of the
13911391
// cluster specifier plugin.
13921392
ASSERT(cluster_specifier_plugin_ != nullptr);
1393-
return cluster_specifier_plugin_->route(shared_from_this(), headers, stream_info);
1393+
return cluster_specifier_plugin_->route(shared_from_this(), headers, stream_info,
1394+
random_value);
13941395
}
13951396
}
13961397
return pickWeightedCluster(headers, random_value);

source/common/router/header_cluster_specifier.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ HeaderClusterSpecifierPlugin::HeaderClusterSpecifierPlugin(absl::string_view clu
1010

1111
RouteConstSharedPtr HeaderClusterSpecifierPlugin::route(RouteEntryAndRouteConstSharedPtr parent,
1212
const Http::RequestHeaderMap& headers,
13-
const StreamInfo::StreamInfo&) const {
13+
const StreamInfo::StreamInfo&,
14+
uint64_t) const {
1415

1516
const auto entry = headers.get(cluster_header_);
1617
absl::string_view cluster_name;

source/common/router/header_cluster_specifier.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ class HeaderClusterSpecifierPlugin : public ClusterSpecifierPlugin {
1111

1212
RouteConstSharedPtr route(RouteEntryAndRouteConstSharedPtr parent,
1313
const Http::RequestHeaderMap& headers,
14-
const StreamInfo::StreamInfo& stream_info) const override;
14+
const StreamInfo::StreamInfo& stream_info,
15+
uint64_t random) const override;
1516

1617
private:
1718
const Http::LowerCaseString cluster_header_;

source/extensions/router/cluster_specifiers/lua/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ envoy_cc_library(
2424
"//source/common/common:utility_lib",
2525
"//source/common/http:utility_lib",
2626
"//source/common/router:config_lib",
27+
"//source/common/router:delegating_route_lib",
2728
"//source/common/runtime:runtime_features_lib",
2829
"//source/extensions/filters/common/lua:lua_lib",
2930
"//source/extensions/filters/common/lua:wrappers_lib",

source/extensions/router/cluster_specifiers/lua/lua_cluster_specifier.cc

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include "source/extensions/router/cluster_specifiers/lua/lua_cluster_specifier.h"
22

3-
#include "source/common/router/config_impl.h"
3+
#include "source/common/http/header_utility.h"
4+
#include "source/common/router/delegating_route_impl.h"
45

56
namespace Envoy {
67
namespace Extensions {
@@ -123,10 +124,10 @@ std::string LuaClusterSpecifierPlugin::startLua(const Http::HeaderMap& headers)
123124
Envoy::Router::RouteConstSharedPtr
124125
LuaClusterSpecifierPlugin::route(Envoy::Router::RouteEntryAndRouteConstSharedPtr parent,
125126
const Http::RequestHeaderMap& headers,
126-
const StreamInfo::StreamInfo&) const {
127-
return std::make_shared<Envoy::Router::RouteEntryImplBase::DynamicRouteEntry>(std::move(parent),
128-
startLua(headers));
127+
const StreamInfo::StreamInfo&, uint64_t) const {
128+
return std::make_shared<Envoy::Router::DynamicRouteEntry>(std::move(parent), startLua(headers));
129129
}
130+
130131
} // namespace Lua
131132
} // namespace Router
132133
} // namespace Extensions

source/extensions/router/cluster_specifiers/lua/lua_cluster_specifier.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -134,10 +134,9 @@ class LuaClusterSpecifierPlugin : public Envoy::Router::ClusterSpecifierPlugin,
134134
Logger::Loggable<Logger::Id::lua> {
135135
public:
136136
LuaClusterSpecifierPlugin(LuaClusterSpecifierConfigSharedPtr config);
137-
Envoy::Router::RouteConstSharedPtr
138-
route(Envoy::Router::RouteEntryAndRouteConstSharedPtr parent,
139-
const Http::RequestHeaderMap& header,
140-
const StreamInfo::StreamInfo& stream_info) const override;
137+
Envoy::Router::RouteConstSharedPtr route(Envoy::Router::RouteEntryAndRouteConstSharedPtr parent,
138+
const Http::RequestHeaderMap& header,
139+
const StreamInfo::StreamInfo&, uint64_t) const override;
141140

142141
private:
143142
std::string startLua(const Http::HeaderMap& headers) const;

0 commit comments

Comments
 (0)