Skip to content

Commit 10f2ce0

Browse files
committed
Create class based on bound out BDD endpoint engine in crt
1 parent b6c2e4b commit 10f2ce0

9 files changed

Lines changed: 599 additions & 306 deletions

File tree

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/**
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0.
4+
*/
5+
6+
7+
#pragma once
8+
9+
#include <aws/core/endpoint/internal/CrtEndpointProvider.h>
10+
11+
#include <aws/crt/endpoints/BddEngine.h>
12+
13+
namespace Aws
14+
{
15+
namespace Endpoint
16+
{
17+
static const char BDD_ENDPOINT_PROVIDER_TAG[] = "Aws::Endpoint::BDDEndpointProvider";
18+
19+
/**
20+
* Resolves an endpoint using the compiled-bytecode CRT BDD engine.
21+
*/
22+
AWS_CORE_API ResolveEndpointOutcome
23+
ResolveEndpointBddImpl(const Aws::Crt::Endpoints::BddEngine& bddEngine,
24+
const EndpointParameters& builtInParameters,
25+
const EndpointParameters& clientContextParameters,
26+
const EndpointParameters& endpointParameters);
27+
28+
/**
29+
* BDD endpoint provider template. Resolves endpoints from compiled BDD bytecode via the
30+
* CRT Aws::Crt::Endpoints::BddEngine rather than a JSON ruleset. Drop-in replacement for
31+
* DefaultEndpointProvider with improved performance.
32+
*/
33+
template<typename ClientConfigurationT = Aws::Client::GenericClientConfiguration,
34+
typename BuiltInParametersT = Aws::Endpoint::BuiltInParameters,
35+
typename ClientContextParametersT = Aws::Endpoint::ClientContextParameters>
36+
class AWS_CORE_API BDDEndpointProvider : public CrtEndpointProvider<Aws::Crt::Endpoints::BddEngine,
37+
ResolveEndpointBddImpl, ClientConfigurationT, BuiltInParametersT, ClientContextParametersT>
38+
{
39+
public:
40+
using CrtEndpointProvider<Aws::Crt::Endpoints::BddEngine, ResolveEndpointBddImpl,
41+
ClientConfigurationT, BuiltInParametersT, ClientContextParametersT>::CrtEndpointProvider;
42+
43+
virtual ~BDDEndpointProvider() = default;
44+
};
45+
46+
/**
47+
* Export endpoint provider symbols for Windows DLL, otherwise declare as extern
48+
*/
49+
AWS_CORE_EXTERN template class AWS_CORE_API BDDEndpointProvider<Aws::Client::GenericClientConfiguration,
50+
Aws::Endpoint::BuiltInParameters,
51+
Aws::Endpoint::ClientContextParameters>;
52+
} // namespace Endpoint
53+
} // namespace Aws

src/aws-cpp-sdk-core/include/aws/core/endpoint/DefaultEndpointProvider.h

Lines changed: 8 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,10 @@
66

77
#pragma once
88

9-
#include <aws/core/endpoint/AWSPartitions.h>
10-
#include <aws/core/endpoint/EndpointProviderBase.h>
11-
#include <aws/core/endpoint/EndpointParameter.h>
12-
#include <aws/core/endpoint/ClientContextParameters.h>
13-
#include <aws/core/endpoint/BuiltInParameters.h>
14-
#include <aws/core/utils/memory/stl/AWSArray.h>
9+
#include <aws/core/endpoint/internal/CrtEndpointProvider.h>
1510

1611
#include <aws/crt/endpoints/RuleEngine.h>
1712

18-
#include <aws/core/utils/Outcome.h>
19-
#include <aws/core/client/AWSError.h>
20-
#include <aws/core/client/CoreErrors.h>
21-
#include "aws/core/utils/logging/LogMacros.h"
22-
2313
namespace Aws
2414
{
2515
namespace Endpoint
@@ -33,6 +23,7 @@ namespace Aws
3323
* @param clientContextParameters
3424
* @param endpointParameters
3525
* @return
26+
* Resolves an endpoint using the JSON-ruleset CRT rule engine.
3627
*/
3728
AWS_CORE_API ResolveEndpointOutcome
3829
ResolveEndpointDefaultImpl(const Aws::Crt::Endpoints::RuleEngine& ruleEngine,
@@ -41,78 +32,19 @@ namespace Aws
4132
const EndpointParameters& endpointParameters);
4233

4334
/**
44-
* Default endpoint provider template used in this SDK.
35+
* Resolves endpoints from a JSON ruleset blob via the CRT Aws::Crt::Endpoints::RuleEngine.
4536
*/
4637
template<typename ClientConfigurationT = Aws::Client::GenericClientConfiguration,
4738
typename BuiltInParametersT = Aws::Endpoint::BuiltInParameters,
4839
typename ClientContextParametersT = Aws::Endpoint::ClientContextParameters>
49-
class AWS_CORE_API DefaultEndpointProvider : public EndpointProviderBase<ClientConfigurationT, BuiltInParametersT, ClientContextParametersT>
40+
class AWS_CORE_API DefaultEndpointProvider : public CrtEndpointProvider<Aws::Crt::Endpoints::RuleEngine,
41+
ResolveEndpointDefaultImpl, ClientConfigurationT, BuiltInParametersT, ClientContextParametersT>
5042
{
5143
public:
52-
DefaultEndpointProvider(const char* endpointRulesBlob, const size_t endpointRulesBlobSz)
53-
: m_crtRuleEngine(Aws::Crt::ByteCursorFromArray((const uint8_t*) endpointRulesBlob, endpointRulesBlobSz),
54-
Aws::Crt::ByteCursorFromArray((const uint8_t*) AWSPartitions::GetPartitionsBlob(), AWSPartitions::PartitionsBlobSize))
55-
{
56-
if(!m_crtRuleEngine) {
57-
AWS_LOGSTREAM_FATAL(DEFAULT_ENDPOINT_PROVIDER_TAG, "Invalid CRT Rule Engine state");
58-
}
59-
}
60-
61-
virtual ~DefaultEndpointProvider()
62-
{
63-
}
64-
65-
void InitBuiltInParameters(const ClientConfigurationT& config) override
66-
{
67-
m_builtInParameters.SetFromClientConfiguration(config);
68-
}
69-
70-
void InitBuiltInParameters(const ClientConfigurationT& config, const Aws::String& serviceName) override
71-
{
72-
m_builtInParameters.SetFromClientConfiguration(config, serviceName);
73-
}
74-
75-
/**
76-
* Default implementation of the ResolveEndpoint
77-
*/
78-
ResolveEndpointOutcome ResolveEndpoint(const EndpointParameters& endpointParameters) const override
79-
{
80-
auto ResolveEndpointDefaultImpl = Aws::Endpoint::ResolveEndpointDefaultImpl;
81-
return ResolveEndpointDefaultImpl(m_crtRuleEngine, m_builtInParameters.GetAllParameters(), m_clientContextParameters.GetAllParameters(), endpointParameters);
82-
};
83-
84-
const ClientContextParametersT& GetClientContextParameters() const override
85-
{
86-
return m_clientContextParameters;
87-
}
88-
ClientContextParametersT& AccessClientContextParameters() override
89-
{
90-
return m_clientContextParameters;
91-
}
92-
93-
const BuiltInParametersT& GetBuiltInParameters() const
94-
{
95-
return m_builtInParameters;
96-
}
97-
BuiltInParametersT& AccessBuiltInParameters()
98-
{
99-
return m_builtInParameters;
100-
}
101-
102-
void OverrideEndpoint(const Aws::String& endpoint) override
103-
{
104-
m_builtInParameters.OverrideEndpoint(endpoint);
105-
}
106-
107-
protected:
108-
/* Crt RuleEngine evaluator built using the service's Rule engine */
109-
Aws::Crt::Endpoints::RuleEngine m_crtRuleEngine;
110-
111-
/* Also known as a configurable parameters defined by the AWS Service in their c2j/smithy model definition */
112-
ClientContextParametersT m_clientContextParameters;
44+
using CrtEndpointProvider<Aws::Crt::Endpoints::RuleEngine, ResolveEndpointDefaultImpl,
45+
ClientConfigurationT, BuiltInParametersT, ClientContextParametersT>::CrtEndpointProvider;
11346

114-
/* Also known as parameters on the ClientConfiguration in this SDK */
115-
BuiltInParametersT m_builtInParameters;
47+
virtual ~DefaultEndpointProvider() = default;
11648
};
11749

11850
/**
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
/**
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0.
4+
*/
5+
6+
7+
#pragma once
8+
9+
#include <aws/core/endpoint/AWSPartitions.h>
10+
#include <aws/core/endpoint/EndpointProviderBase.h>
11+
#include <aws/core/endpoint/EndpointParameter.h>
12+
#include <aws/core/endpoint/ClientContextParameters.h>
13+
#include <aws/core/endpoint/BuiltInParameters.h>
14+
15+
#include <aws/crt/Types.h>
16+
17+
#include <aws/core/utils/Outcome.h>
18+
#include <aws/core/client/AWSError.h>
19+
#include <aws/core/utils/logging/LogMacros.h>
20+
21+
namespace Aws {
22+
namespace Endpoint {
23+
/**
24+
* Endpoint provider backed by a CRT endpoint engine. The two things that differ between
25+
* the JSON-ruleset and BDD-bytecode providers are captured as template parameters:
26+
* - RulesEngineT: the CRT engine type (Aws::Crt::Endpoints::RuleEngine or BddEngine),
27+
* both constructed from a ruleset blob plus the partitions blob.
28+
* - ResolveFn: the resolution entry point for that engine. It is an out-of-line exported
29+
* symbol (ResolveEndpointDefaultImpl / ResolveEndpointBddImpl) so the resolution body
30+
* lives once in aws-cpp-sdk-core rather than inlined into every service binary.
31+
* Everything else (parameter storage, init, override, accessors) is shared here.
32+
*/
33+
template<typename RulesEngineT,
34+
ResolveEndpointOutcome(*ResolveFn)(const RulesEngineT &,
35+
const EndpointParameters &,
36+
const EndpointParameters &,
37+
const EndpointParameters &),
38+
typename ClientConfigurationT = Aws::Client::GenericClientConfiguration,
39+
typename BuiltInParametersT = Aws::Endpoint::BuiltInParameters,
40+
typename ClientContextParametersT = Aws::Endpoint::ClientContextParameters>
41+
class CrtEndpointProvider : public EndpointProviderBase<ClientConfigurationT, BuiltInParametersT,
42+
ClientContextParametersT> {
43+
public:
44+
CrtEndpointProvider(const char *endpointRulesBlob, const size_t endpointRulesBlobSz)
45+
: m_crtEngine(Aws::Crt::ByteCursorFromArray((const uint8_t *) endpointRulesBlob, endpointRulesBlobSz),
46+
Aws::Crt::ByteCursorFromArray((const uint8_t *) AWSPartitions::GetPartitionsBlob(),
47+
AWSPartitions::PartitionsBlobSize)) {
48+
if (!m_crtEngine) {
49+
AWS_LOGSTREAM_FATAL("CrtEndpointProvider", "Invalid CRT endpoint engine state");
50+
}
51+
}
52+
53+
virtual ~CrtEndpointProvider() = default;
54+
55+
void InitBuiltInParameters(const ClientConfigurationT &config) override {
56+
m_builtInParameters.SetFromClientConfiguration(config);
57+
}
58+
59+
void InitBuiltInParameters(const ClientConfigurationT &config, const Aws::String &serviceName) override {
60+
m_builtInParameters.SetFromClientConfiguration(config, serviceName);
61+
}
62+
63+
ResolveEndpointOutcome ResolveEndpoint(const EndpointParameters &endpointParameters) const override {
64+
return ResolveFn(m_crtEngine, m_builtInParameters.GetAllParameters(),
65+
m_clientContextParameters.GetAllParameters(), endpointParameters);
66+
};
67+
68+
const ClientContextParametersT &GetClientContextParameters() const override {
69+
return m_clientContextParameters;
70+
}
71+
72+
ClientContextParametersT &AccessClientContextParameters() override {
73+
return m_clientContextParameters;
74+
}
75+
76+
const BuiltInParametersT &GetBuiltInParameters() const {
77+
return m_builtInParameters;
78+
}
79+
80+
BuiltInParametersT &AccessBuiltInParameters() {
81+
return m_builtInParameters;
82+
}
83+
84+
void OverrideEndpoint(const Aws::String &endpoint) override {
85+
m_builtInParameters.OverrideEndpoint(endpoint);
86+
}
87+
88+
protected:
89+
/* Crt endpoint engine (RuleEngine or BddEngine) built from the service's ruleset blob */
90+
RulesEngineT m_crtEngine;
91+
92+
/* Also known as a configurable parameters defined by the AWS Service in their c2j/smithy model definition */
93+
ClientContextParametersT m_clientContextParameters;
94+
95+
/* Also known as parameters on the ClientConfiguration in this SDK */
96+
BuiltInParametersT m_builtInParameters;
97+
};
98+
} // namespace Endpoint
99+
} // namespace Aws

0 commit comments

Comments
 (0)