Skip to content

Commit

Permalink
Changes to address the review suggestions
Browse files Browse the repository at this point in the history
  • Loading branch information
slahirucd7 committed May 8, 2024
1 parent b71c480 commit 95542b6
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 10 deletions.
13 changes: 7 additions & 6 deletions adapter/internal/discovery/xds/rate_limiter_cache.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ type rateLimitPolicyCache struct {
// org -> vhost -> API-Identifier (i.e. Vhost:API-UUID) -> Rate Limit Configs
apiLevelRateLimitPolicies map[string]map[string]map[string][]*rls_config.RateLimitDescriptor
// metadataBasedPolicies is used to store the rate limit policies which are based on dynamic metadata.
// metadata related to the subscription rate-limiting: subscription -> organization -> rate-limit config
// metadata related rate limit configs: rate limit type (eg: subscription) -> organization -> policy name (eg: Gold, Silver) -> rate-limit config
metadataBasedPolicies map[string]map[string]map[string]*rls_config.RateLimitDescriptor
// mutex for API level
apiLevelMu sync.RWMutex
Expand Down Expand Up @@ -249,7 +249,8 @@ func (r *rateLimitPolicyCache) generateRateLimitConfig(label string) *rls_config
orgDescriptors = append(orgDescriptors, orgDescriptor)
}

//Iterate through the subscription policies and append it to the orgDescriptors
// Iterate through the subscription policies and append it to the orgDescriptors
// Sample Rate Limiter config:
// domain: Default
// descriptors:
// - key: organisation
Expand Down Expand Up @@ -324,6 +325,10 @@ func (r *rateLimitPolicyCache) updateXdsCache(label string) bool {

// AddSubscriptionLevelRateLimitPolicy adds a subscription level rate limit policy to the cache.
func AddSubscriptionLevelRateLimitPolicy(policyList *types.SubscriptionPolicyList) error {
// Check if rlsPolicyCache.metadataBasedPolicies[Subscription] exists and create a new map if not
if _, ok := rlsPolicyCache.metadataBasedPolicies[subscriptionPolicyType]; !ok {
rlsPolicyCache.metadataBasedPolicies[subscriptionPolicyType] = make(map[string]map[string]*rls_config.RateLimitDescriptor)
}
for _, policy := range policyList.List {
// Needs to skip on async policies.
if policy.DefaultLimit == nil || policy.DefaultLimit.QuotaType != "requestCount" || policy.DefaultLimit.RequestCount == nil {
Expand All @@ -348,10 +353,6 @@ func AddSubscriptionLevelRateLimitPolicy(policyList *types.SubscriptionPolicyLis
Value: policy.Name,
RateLimit: &rlPolicyConfig,
}
// Check if rlsPolicyCache.metadataBasedPolicies[Subscription] exists and create a new map if not
if _, ok := rlsPolicyCache.metadataBasedPolicies[subscriptionPolicyType]; !ok {
rlsPolicyCache.metadataBasedPolicies[subscriptionPolicyType] = make(map[string]map[string]*rls_config.RateLimitDescriptor)
}
if _, ok := rlsPolicyCache.metadataBasedPolicies[subscriptionPolicyType][policy.Organization]; !ok {
rlsPolicyCache.metadataBasedPolicies[subscriptionPolicyType][policy.Organization] = make(map[string]*rls_config.RateLimitDescriptor)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,8 @@ public class JWTAuthenticator implements Authenticator {
System.getenv("PROD_TOKEN_NONPROD_ALLOWED_ORGS").split("\\s+"));
}
}
private static String orgList = System.getenv("CUSTOM_SUBSCRIPTION_POLICY_HANDLING_ORG");
private static Set<String> orgSet = Stream.of(orgList.trim().split("\\s*,\\s*")).collect(Collectors.toSet());

public JWTAuthenticator() {
EnforcerConfig enforcerConfig = ConfigHolder.getInstance().getConfig();
Expand Down Expand Up @@ -331,14 +333,11 @@ public AuthenticationContext authenticate(RequestContext requestContext) throws
String subPolicyName = authenticationContext.getTier();
requestContext.addMetadataToMap("ratelimit:subscription", subscriptionId);
requestContext.addMetadataToMap("ratelimit:usage-policy", subPolicyName);
String orgList = System.getenv("CUSTOM_SUBSCRIPTION_POLICY_HANDLING_ORG");
if (datastore.getSubscriptionPolicyByName(subPolicyName) != null &&
StringUtils.isNotEmpty(orgList)) {
SubscriptionPolicy subPolicy = datastore.getSubscriptionPolicyByName(subPolicyName);
Set<String> orgSet = Stream.of(orgList.trim().split("\\s*,\\s*"))
.collect(Collectors.toSet());
if (StringUtils.isNotEmpty(subPolicy.getOrganization()) &&
orgSet.contains(subPolicy.getOrganization()) || orgSet.contains("*")) {
orgSet.contains(subPolicy.getOrganization()) || orgList.equals("*")) {
requestContext.addMetadataToMap("ratelimit:organization", subPolicy.getOrganization());
} else {
requestContext.addMetadataToMap("ratelimit:organization",
Expand Down

0 comments on commit 95542b6

Please sign in to comment.