Skip to content

Commit 51633b6

Browse files
committed
Fix subscription burst control
1 parent 3254778 commit 51633b6

File tree

4 files changed

+58
-18
lines changed

4 files changed

+58
-18
lines changed

apim-apk-agent/internal/k8sClient/k8s_client.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -476,6 +476,10 @@ func DeploySubscriptionRateLimitPolicyCR(policy eventhubTypes.SubscriptionPolicy
476476
RequestsPerUnit: uint32(policy.DefaultLimit.RequestCount.RequestCount),
477477
Unit: policy.DefaultLimit.RequestCount.TimeUnit,
478478
},
479+
BurstControl: &dpv1alpha3.BurstControl{
480+
RequestsPerUnit: uint32(policy.RateLimitCount),
481+
Unit: policy.RateLimitTimeUnit,
482+
},
479483
},
480484
},
481485
TargetRef: gwapiv1b1.NamespacedPolicyTargetReference{Group: constants.GatewayGroup, Kind: "Subscription", Name: "default"},
@@ -489,8 +493,16 @@ func DeploySubscriptionRateLimitPolicyCR(policy eventhubTypes.SubscriptionPolicy
489493
} else {
490494
crRateLimitPolicy.Spec.Override.Subscription.StopOnQuotaReach = policy.StopOnQuotaReach
491495
crRateLimitPolicy.Spec.Override.Subscription.Organization = policy.TenantDomain
496+
if crRateLimitPolicy.Spec.Override.Subscription.RequestCount == nil {
497+
crRateLimitPolicy.Spec.Override.Subscription.RequestCount = &dpv1alpha3.RequestCount{}
498+
}
492499
crRateLimitPolicy.Spec.Override.Subscription.RequestCount.RequestsPerUnit = uint32(policy.DefaultLimit.RequestCount.RequestCount)
493500
crRateLimitPolicy.Spec.Override.Subscription.RequestCount.Unit = policy.DefaultLimit.RequestCount.TimeUnit
501+
if crRateLimitPolicy.Spec.Override.Subscription.BurstControl == nil {
502+
crRateLimitPolicy.Spec.Override.Subscription.BurstControl = &dpv1alpha3.BurstControl{}
503+
}
504+
crRateLimitPolicy.Spec.Override.Subscription.BurstControl.RequestsPerUnit = uint32(policy.RateLimitCount)
505+
crRateLimitPolicy.Spec.Override.Subscription.BurstControl.Unit = policy.RateLimitTimeUnit
494506
if err := k8sClient.Update(context.Background(), &crRateLimitPolicy); err != nil {
495507
loggers.LoggerK8sClient.Error("Unable to update RateLimitPolicies CR: " + err.Error())
496508
} else {

apim-apk-agent/internal/synchronizer/ratelimit_policy_fetcher.go

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -141,12 +141,25 @@ func FetchRateLimitPoliciesOnEvent(ratelimitName string, organization string, c
141141
logger.LoggerSynchronizer.Debugf("Policies received: %v", rateLimitPolicyList.List)
142142
var rateLimitPolicies []eventhubTypes.RateLimitPolicy = rateLimitPolicyList.List
143143
for _, policy := range rateLimitPolicies {
144-
if policy.DefaultLimit.RequestCount.TimeUnit == "min" {
144+
switch policy.DefaultLimit.RequestCount.TimeUnit {
145+
case "min":
145146
policy.DefaultLimit.RequestCount.TimeUnit = "Minute"
146-
} else if policy.DefaultLimit.RequestCount.TimeUnit == "hour" {
147+
case "hour":
147148
policy.DefaultLimit.RequestCount.TimeUnit = "Hour"
148-
} else if policy.DefaultLimit.RequestCount.TimeUnit == "day" {
149+
case "day":
149150
policy.DefaultLimit.RequestCount.TimeUnit = "Day"
151+
default:
152+
logger.LoggerSynchronizer.Errorf("Unsupported timeunit %s", policy.DefaultLimit.RequestCount.TimeUnit)
153+
continue
154+
}
155+
switch policy.RateLimitTimeUnit {
156+
case "min":
157+
policy.RateLimitTimeUnit = "Minute"
158+
case "sec":
159+
policy.RateLimitTimeUnit = "Second"
160+
default:
161+
logger.LoggerSynchronizer.Errorf("Unsupported timeunit %s", policy.RateLimitTimeUnit)
162+
continue
150163
}
151164
managementserver.AddRateLimitPolicy(policy)
152165
logger.LoggerSynchronizer.Infof("RateLimit Policy added to internal map: %v", policy)
@@ -317,12 +330,25 @@ func FetchSubscriptionRateLimitPoliciesOnEvent(ratelimitName string, organizatio
317330
logger.LoggerSynchronizer.Errorf("AIQuota type response recieved but no data found. %+v", policy.DefaultLimit)
318331
}
319332
} else {
320-
if policy.DefaultLimit.RequestCount.TimeUnit == "min" {
333+
switch policy.DefaultLimit.RequestCount.TimeUnit {
334+
case "min":
321335
policy.DefaultLimit.RequestCount.TimeUnit = "Minute"
322-
} else if policy.DefaultLimit.RequestCount.TimeUnit == "hours" {
336+
case "hours":
323337
policy.DefaultLimit.RequestCount.TimeUnit = "Hour"
324-
} else if policy.DefaultLimit.RequestCount.TimeUnit == "days" {
338+
case "days":
325339
policy.DefaultLimit.RequestCount.TimeUnit = "Day"
340+
default:
341+
logger.LoggerSynchronizer.Errorf("Unsupported timeunit %s", policy.DefaultLimit.RequestCount.TimeUnit)
342+
continue
343+
}
344+
switch policy.RateLimitTimeUnit {
345+
case "min":
346+
policy.RateLimitTimeUnit = "Minute"
347+
case "sec":
348+
policy.RateLimitTimeUnit = "Second"
349+
default:
350+
logger.LoggerSynchronizer.Errorf("Unsupported timeunit %s", policy.RateLimitTimeUnit)
351+
continue
326352
}
327353
managementserver.AddSubscriptionPolicy(policy)
328354
logger.LoggerSynchronizer.Infof("RateLimit Policy added to internal map: %v", policy)

apim-apk-agent/pkg/eventhub/types/types.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -178,12 +178,14 @@ type RateLimitPolicyList struct {
178178

179179
// RateLimitPolicy for struct RateLimitPolicy Info events
180180
type RateLimitPolicy struct {
181-
TenantDomain string `json:"tenantDomain"`
182-
Name string `json:"name"`
183-
QuotaType string `json:"quotaType"`
184-
ConditionGroups []ConditionGroup `json:"conditionGroups"`
185-
ApplicableLevel string `json:"applicableLevel"`
186-
DefaultLimit DefaultLimit `json:"defaultLimit"`
181+
TenantDomain string `json:"tenantDomain"`
182+
Name string `json:"name"`
183+
QuotaType string `json:"quotaType"`
184+
ConditionGroups []ConditionGroup `json:"conditionGroups"`
185+
ApplicableLevel string `json:"applicableLevel"`
186+
DefaultLimit DefaultLimit `json:"defaultLimit"`
187+
RateLimitCount int `json:"rateLimitCount"`
188+
RateLimitTimeUnit string `json:"rateLimitTimeUnit"`
187189
}
188190

189191
// ConditionGroup represents the condition group within the response.

helm-charts/values.yaml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,9 @@ serviceAccount:
5656
enableClusterRoleCreation: true
5757
serviceAccountName: wso2agent-platform
5858
roleName: wso2agent-role
59-
configs:
60-
tls:
61-
secretName: "keys-certs"
62-
certKeyFilename: "tls.key"
63-
certFilename: "tls.crt"
64-
certCAFilename: "ca.crt"
59+
# configs:
60+
# tls:
61+
# secretName: "apk-agent-tls-secret"
62+
# certKeyFilename: "tls.key"
63+
# certFilename: "tls.crt"
64+
# certCAFilename: "ca.crt"

0 commit comments

Comments
 (0)