Skip to content

Commit

Permalink
Update ratelimitv3
Browse files Browse the repository at this point in the history
  • Loading branch information
Krishanx92 committed Sep 8, 2024
1 parent 73f1199 commit 41b50d4
Show file tree
Hide file tree
Showing 24 changed files with 175 additions and 223 deletions.
5 changes: 3 additions & 2 deletions adapter/internal/oasparser/model/adapter_internal_api.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import (
"github.com/wso2/apk/adapter/internal/operator/utils"
dpv1alpha1 "github.com/wso2/apk/common-go-libs/apis/dp/v1alpha1"
dpv1alpha2 "github.com/wso2/apk/common-go-libs/apis/dp/v1alpha2"
dpv1alpha3 "github.com/wso2/apk/common-go-libs/apis/dp/v1alpha3"
"golang.org/x/exp/maps"
"k8s.io/apimachinery/pkg/types"
gwapiv1 "sigs.k8s.io/gateway-api/apis/v1"
Expand Down Expand Up @@ -463,7 +464,7 @@ func (adapterInternalAPI *AdapterInternalAPI) SetInfoHTTPRouteCR(httpRoute *gwap
if outputAPIPolicy != nil {
apiPolicy = *outputAPIPolicy
}
var ratelimitPolicy *dpv1alpha1.RateLimitPolicy
var ratelimitPolicy *dpv1alpha3.RateLimitPolicy
if outputRatelimitPolicy != nil {
ratelimitPolicy = *outputRatelimitPolicy
}
Expand Down Expand Up @@ -946,7 +947,7 @@ func (adapterInternalAPI *AdapterInternalAPI) SetInfoGQLRouteCR(gqlRoute *dpv1al
if outputAPIPolicy != nil {
apiPolicy = *outputAPIPolicy
}
var ratelimitPolicy *dpv1alpha1.RateLimitPolicy
var ratelimitPolicy *dpv1alpha3.RateLimitPolicy
if outputRatelimitPolicy != nil {
ratelimitPolicy = *outputRatelimitPolicy
}
Expand Down
6 changes: 4 additions & 2 deletions adapter/internal/oasparser/model/custom_ratelimit_policy.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@

package model

import dpv1alpha1 "github.com/wso2/apk/common-go-libs/apis/dp/v1alpha1"
import (
dpv1alpha3 "github.com/wso2/apk/common-go-libs/apis/dp/v1alpha3"
)

// RateLimit is the rate limit values for a policy
type RateLimit struct {
Expand All @@ -39,7 +41,7 @@ type CustomRateLimitPolicy struct {
}

// ParseCustomRateLimitPolicy parses the custom rate limit policy
func ParseCustomRateLimitPolicy(customRateLimitCR dpv1alpha1.RateLimitPolicy) *CustomRateLimitPolicy {
func ParseCustomRateLimitPolicy(customRateLimitCR dpv1alpha3.RateLimitPolicy) *CustomRateLimitPolicy {
rlPolicy := concatRateLimitPolicies(&customRateLimitCR, nil)
return &CustomRateLimitPolicy{
Key: rlPolicy.Spec.Override.Custom.Key,
Expand Down
11 changes: 6 additions & 5 deletions adapter/internal/oasparser/model/http_route.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (
"github.com/wso2/apk/adapter/internal/operator/utils"
dpv1alpha1 "github.com/wso2/apk/common-go-libs/apis/dp/v1alpha1"
dpv1alpha2 "github.com/wso2/apk/common-go-libs/apis/dp/v1alpha2"
dpv1alpha3 "github.com/wso2/apk/common-go-libs/apis/dp/v1alpha3"
"k8s.io/apimachinery/pkg/types"
gwapiv1 "sigs.k8s.io/gateway-api/apis/v1"
)
Expand All @@ -38,8 +39,8 @@ type ResourceParams struct {
BackendJWTMapping map[string]dpv1alpha1.BackendJWT
BackendMapping map[string]*dpv1alpha2.ResolvedBackend
ResourceScopes map[string]dpv1alpha1.Scope
RateLimitPolicies map[string]dpv1alpha1.RateLimitPolicy
ResourceRateLimitPolicies map[string]dpv1alpha1.RateLimitPolicy
RateLimitPolicies map[string]dpv1alpha3.RateLimitPolicy
ResourceRateLimitPolicies map[string]dpv1alpha3.RateLimitPolicy
}

func parseBackendJWTTokenToInternal(backendJWTToken dpv1alpha1.BackendJWTSpec) *BackendJWTTokenInfo {
Expand Down Expand Up @@ -96,7 +97,7 @@ func getCorsConfigFromAPIPolicy(apiPolicy *dpv1alpha2.APIPolicy) *CorsConfig {
return &corsConfig
}

func parseRateLimitPolicyToInternal(ratelimitPolicy *dpv1alpha1.RateLimitPolicy) *RateLimitPolicy {
func parseRateLimitPolicyToInternal(ratelimitPolicy *dpv1alpha3.RateLimitPolicy) *RateLimitPolicy {
var rateLimitPolicyInternal *RateLimitPolicy
if ratelimitPolicy != nil && ratelimitPolicy.Spec.Override != nil {
if ratelimitPolicy.Spec.Override.API.RequestsPerUnit > 0 {
Expand Down Expand Up @@ -191,8 +192,8 @@ func GetBackendBasePath(backendName types.NamespacedName, backendMapping map[str
return ""
}

func concatRateLimitPolicies(schemeUp *dpv1alpha1.RateLimitPolicy, schemeDown *dpv1alpha1.RateLimitPolicy) *dpv1alpha1.RateLimitPolicy {
finalRateLimit := dpv1alpha1.RateLimitPolicy{}
func concatRateLimitPolicies(schemeUp *dpv1alpha3.RateLimitPolicy, schemeDown *dpv1alpha3.RateLimitPolicy) *dpv1alpha3.RateLimitPolicy {
finalRateLimit := dpv1alpha3.RateLimitPolicy{}
if schemeUp != nil && schemeDown != nil {
finalRateLimit.Spec.Override = utils.SelectPolicy(&schemeUp.Spec.Override, &schemeUp.Spec.Default, &schemeDown.Spec.Override, &schemeDown.Spec.Default)
} else if schemeUp != nil {
Expand Down
112 changes: 56 additions & 56 deletions adapter/internal/oasparser/model/http_route_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,43 +21,43 @@ import (
"testing"

"github.com/stretchr/testify/assert"
dpv1alpha1 "github.com/wso2/apk/common-go-libs/apis/dp/v1alpha1"
dpv1alpha2 "github.com/wso2/apk/common-go-libs/apis/dp/v1alpha2"
dpv1alpha3 "github.com/wso2/apk/common-go-libs/apis/dp/v1alpha3"
)

func TestConcatRateLimitPolicies(t *testing.T) {
type testItem struct {
schemeUpSpec dpv1alpha1.RateLimitPolicySpec
schemeDownSpec dpv1alpha1.RateLimitPolicySpec
result dpv1alpha1.RateLimitPolicySpec
schemeUpSpec dpv1alpha3.RateLimitPolicySpec
schemeDownSpec dpv1alpha3.RateLimitPolicySpec
result dpv1alpha3.RateLimitPolicySpec
message string
}

schemeUp := &dpv1alpha1.RateLimitPolicy{}
schemeDown := &dpv1alpha1.RateLimitPolicy{}
resultScheme := &dpv1alpha1.RateLimitPolicy{}
schemeUp := &dpv1alpha3.RateLimitPolicy{}
schemeDown := &dpv1alpha3.RateLimitPolicy{}
resultScheme := &dpv1alpha3.RateLimitPolicy{}

dataItems := []testItem{
{
schemeUpSpec: dpv1alpha1.RateLimitPolicySpec{
Override: &dpv1alpha1.RateLimitAPIPolicy{
API: &dpv1alpha1.APIRateLimitPolicy{
schemeUpSpec: dpv1alpha3.RateLimitPolicySpec{
Override: &dpv1alpha3.RateLimitAPIPolicy{
API: &dpv1alpha3.APIRateLimitPolicy{
RequestsPerUnit: 10,
Unit: "Minute",
},
},
},
schemeDownSpec: dpv1alpha1.RateLimitPolicySpec{
Override: &dpv1alpha1.RateLimitAPIPolicy{
API: &dpv1alpha1.APIRateLimitPolicy{
schemeDownSpec: dpv1alpha3.RateLimitPolicySpec{
Override: &dpv1alpha3.RateLimitAPIPolicy{
API: &dpv1alpha3.APIRateLimitPolicy{
RequestsPerUnit: 20,
Unit: "Day",
},
},
},
result: dpv1alpha1.RateLimitPolicySpec{
Override: &dpv1alpha1.RateLimitAPIPolicy{
API: &dpv1alpha1.APIRateLimitPolicy{
result: dpv1alpha3.RateLimitPolicySpec{
Override: &dpv1alpha3.RateLimitAPIPolicy{
API: &dpv1alpha3.APIRateLimitPolicy{
RequestsPerUnit: 10,
Unit: "Minute",
},
Expand All @@ -66,25 +66,25 @@ func TestConcatRateLimitPolicies(t *testing.T) {
message: "When API level override and Resource level override policies both provided",
},
{
schemeUpSpec: dpv1alpha1.RateLimitPolicySpec{
Override: &dpv1alpha1.RateLimitAPIPolicy{
API: &dpv1alpha1.APIRateLimitPolicy{
schemeUpSpec: dpv1alpha3.RateLimitPolicySpec{
Override: &dpv1alpha3.RateLimitAPIPolicy{
API: &dpv1alpha3.APIRateLimitPolicy{
RequestsPerUnit: 10,
Unit: "Minute",
},
},
},
schemeDownSpec: dpv1alpha1.RateLimitPolicySpec{
Default: &dpv1alpha1.RateLimitAPIPolicy{
API: &dpv1alpha1.APIRateLimitPolicy{
schemeDownSpec: dpv1alpha3.RateLimitPolicySpec{
Default: &dpv1alpha3.RateLimitAPIPolicy{
API: &dpv1alpha3.APIRateLimitPolicy{
RequestsPerUnit: 20,
Unit: "Day",
},
},
},
result: dpv1alpha1.RateLimitPolicySpec{
Override: &dpv1alpha1.RateLimitAPIPolicy{
API: &dpv1alpha1.APIRateLimitPolicy{
result: dpv1alpha3.RateLimitPolicySpec{
Override: &dpv1alpha3.RateLimitAPIPolicy{
API: &dpv1alpha3.APIRateLimitPolicy{
RequestsPerUnit: 10,
Unit: "Minute",
},
Expand All @@ -93,25 +93,25 @@ func TestConcatRateLimitPolicies(t *testing.T) {
message: "When API level override and Resource level default policies both provided",
},
{
schemeUpSpec: dpv1alpha1.RateLimitPolicySpec{
Default: &dpv1alpha1.RateLimitAPIPolicy{
API: &dpv1alpha1.APIRateLimitPolicy{
schemeUpSpec: dpv1alpha3.RateLimitPolicySpec{
Default: &dpv1alpha3.RateLimitAPIPolicy{
API: &dpv1alpha3.APIRateLimitPolicy{
RequestsPerUnit: 10,
Unit: "Minute",
},
},
},
schemeDownSpec: dpv1alpha1.RateLimitPolicySpec{
Override: &dpv1alpha1.RateLimitAPIPolicy{
API: &dpv1alpha1.APIRateLimitPolicy{
schemeDownSpec: dpv1alpha3.RateLimitPolicySpec{
Override: &dpv1alpha3.RateLimitAPIPolicy{
API: &dpv1alpha3.APIRateLimitPolicy{
RequestsPerUnit: 20,
Unit: "Day",
},
},
},
result: dpv1alpha1.RateLimitPolicySpec{
Override: &dpv1alpha1.RateLimitAPIPolicy{
API: &dpv1alpha1.APIRateLimitPolicy{
result: dpv1alpha3.RateLimitPolicySpec{
Override: &dpv1alpha3.RateLimitAPIPolicy{
API: &dpv1alpha3.APIRateLimitPolicy{
RequestsPerUnit: 20,
Unit: "Day",
},
Expand All @@ -120,25 +120,25 @@ func TestConcatRateLimitPolicies(t *testing.T) {
message: "When API level default and Resource level override policies both provided",
},
{
schemeUpSpec: dpv1alpha1.RateLimitPolicySpec{
Default: &dpv1alpha1.RateLimitAPIPolicy{
API: &dpv1alpha1.APIRateLimitPolicy{
schemeUpSpec: dpv1alpha3.RateLimitPolicySpec{
Default: &dpv1alpha3.RateLimitAPIPolicy{
API: &dpv1alpha3.APIRateLimitPolicy{
RequestsPerUnit: 10,
Unit: "Minute",
},
},
},
schemeDownSpec: dpv1alpha1.RateLimitPolicySpec{
Default: &dpv1alpha1.RateLimitAPIPolicy{
API: &dpv1alpha1.APIRateLimitPolicy{
schemeDownSpec: dpv1alpha3.RateLimitPolicySpec{
Default: &dpv1alpha3.RateLimitAPIPolicy{
API: &dpv1alpha3.APIRateLimitPolicy{
RequestsPerUnit: 20,
Unit: "Day",
},
},
},
result: dpv1alpha1.RateLimitPolicySpec{
Override: &dpv1alpha1.RateLimitAPIPolicy{
API: &dpv1alpha1.APIRateLimitPolicy{
result: dpv1alpha3.RateLimitPolicySpec{
Override: &dpv1alpha3.RateLimitAPIPolicy{
API: &dpv1alpha3.APIRateLimitPolicy{
RequestsPerUnit: 20,
Unit: "Day",
},
Expand All @@ -147,37 +147,37 @@ func TestConcatRateLimitPolicies(t *testing.T) {
message: "When API level default and Resource level default policies both provided",
},
{
schemeUpSpec: dpv1alpha1.RateLimitPolicySpec{
Default: &dpv1alpha1.RateLimitAPIPolicy{
API: &dpv1alpha1.APIRateLimitPolicy{
schemeUpSpec: dpv1alpha3.RateLimitPolicySpec{
Default: &dpv1alpha3.RateLimitAPIPolicy{
API: &dpv1alpha3.APIRateLimitPolicy{
RequestsPerUnit: 10,
Unit: "Minute",
},
},
Override: &dpv1alpha1.RateLimitAPIPolicy{
API: &dpv1alpha1.APIRateLimitPolicy{
Override: &dpv1alpha3.RateLimitAPIPolicy{
API: &dpv1alpha3.APIRateLimitPolicy{
RequestsPerUnit: 20,
Unit: "Second",
},
},
},
schemeDownSpec: dpv1alpha1.RateLimitPolicySpec{
Default: &dpv1alpha1.RateLimitAPIPolicy{
API: &dpv1alpha1.APIRateLimitPolicy{
schemeDownSpec: dpv1alpha3.RateLimitPolicySpec{
Default: &dpv1alpha3.RateLimitAPIPolicy{
API: &dpv1alpha3.APIRateLimitPolicy{
RequestsPerUnit: 30,
Unit: "Day",
},
},
Override: &dpv1alpha1.RateLimitAPIPolicy{
API: &dpv1alpha1.APIRateLimitPolicy{
Override: &dpv1alpha3.RateLimitAPIPolicy{
API: &dpv1alpha3.APIRateLimitPolicy{
RequestsPerUnit: 40,
Unit: "Hour",
},
},
},
result: dpv1alpha1.RateLimitPolicySpec{
Override: &dpv1alpha1.RateLimitAPIPolicy{
API: &dpv1alpha1.APIRateLimitPolicy{
result: dpv1alpha3.RateLimitPolicySpec{
Override: &dpv1alpha3.RateLimitAPIPolicy{
API: &dpv1alpha3.APIRateLimitPolicy{
RequestsPerUnit: 20,
Unit: "Second",
},
Expand Down
29 changes: 15 additions & 14 deletions adapter/internal/operator/controllers/dp/api_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ import (
dpv1alpha1 "github.com/wso2/apk/common-go-libs/apis/dp/v1alpha1"
"github.com/wso2/apk/common-go-libs/apis/dp/v1alpha2"
dpv1alpha2 "github.com/wso2/apk/common-go-libs/apis/dp/v1alpha2"
dpv1alpha3 "github.com/wso2/apk/common-go-libs/apis/dp/v1alpha3"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
Expand Down Expand Up @@ -192,7 +193,7 @@ func NewAPIController(mgr manager.Manager, operatorDataStore *synchronizer.Opera
return err
}

if err := c.Watch(source.Kind(mgr.GetCache(), &dpv1alpha1.RateLimitPolicy{}), handler.EnqueueRequestsFromMapFunc(apiReconciler.populateAPIReconcileRequestsForRateLimitPolicy),
if err := c.Watch(source.Kind(mgr.GetCache(), &dpv1alpha3.RateLimitPolicy{}), handler.EnqueueRequestsFromMapFunc(apiReconciler.populateAPIReconcileRequestsForRateLimitPolicy),
predicates...); err != nil {
loggers.LoggerAPKOperator.ErrorC(logging.PrintError(logging.Error2639, logging.BLOCKER, "Error watching Ratelimit resources: %v", err))
return err
Expand Down Expand Up @@ -607,10 +608,10 @@ func (apiReconciler *APIReconciler) getAuthenticationsForAPI(ctx context.Context
}

func (apiReconciler *APIReconciler) getRatelimitPoliciesForAPI(ctx context.Context,
api dpv1alpha2.API) (map[string]dpv1alpha1.RateLimitPolicy, error) {
api dpv1alpha2.API) (map[string]dpv1alpha3.RateLimitPolicy, error) {
nameSpacedName := utils.NamespacedName(&api).String()
ratelimitPolicies := make(map[string]dpv1alpha1.RateLimitPolicy)
ratelimitPolicyList := &dpv1alpha1.RateLimitPolicyList{}
ratelimitPolicies := make(map[string]dpv1alpha3.RateLimitPolicy)
ratelimitPolicyList := &dpv1alpha3.RateLimitPolicyList{}
if err := apiReconciler.client.List(ctx, ratelimitPolicyList, &k8client.ListOptions{
FieldSelector: fields.OneTermEqualSelector(apiRateLimitIndex, nameSpacedName),
}); err != nil {
Expand Down Expand Up @@ -683,10 +684,10 @@ func (apiReconciler *APIReconciler) getAuthenticationsForResources(ctx context.C
}

func (apiReconciler *APIReconciler) getRatelimitPoliciesForResources(ctx context.Context,
api dpv1alpha2.API) (map[string]dpv1alpha1.RateLimitPolicy, error) {
api dpv1alpha2.API) (map[string]dpv1alpha3.RateLimitPolicy, error) {
nameSpacedName := utils.NamespacedName(&api).String()
ratelimitpolicies := make(map[string]dpv1alpha1.RateLimitPolicy)
ratelimitPolicyList := &dpv1alpha1.RateLimitPolicyList{}
ratelimitpolicies := make(map[string]dpv1alpha3.RateLimitPolicy)
ratelimitPolicyList := &dpv1alpha3.RateLimitPolicyList{}
if err := apiReconciler.client.List(ctx, ratelimitPolicyList, &k8client.ListOptions{
FieldSelector: fields.OneTermEqualSelector(apiRateLimitResourceIndex, nameSpacedName),
}); err != nil {
Expand Down Expand Up @@ -1085,8 +1086,8 @@ func (apiReconciler *APIReconciler) retriveParentAPIsAndUpdateOwnerReferene(ctx
}
requests = apiReconciler.getAPIsForScope(ctx, &scope)
apiReconciler.handleOwnerReference(ctx, &scope, &requests)
case *dpv1alpha1.RateLimitPolicy:
var rl dpv1alpha1.RateLimitPolicy
case *dpv1alpha3.RateLimitPolicy:
var rl dpv1alpha3.RateLimitPolicy
namesapcedName := types.NamespacedName{
Name: string(obj.GetName()),
Namespace: string(obj.GetNamespace()),
Expand Down Expand Up @@ -1464,7 +1465,7 @@ func (apiReconciler *APIReconciler) getAPIsForBackendJWT(ctx context.Context, ob
// from RateLimitPolicy objects. If the changes are done for an API stored in the Operator Data store,
// a new reconcile event will be created and added to the reconcile event queue.
func (apiReconciler *APIReconciler) getAPIsForRateLimitPolicy(ctx context.Context, obj k8client.Object) []reconcile.Request {
ratelimitPolicy, ok := obj.(*dpv1alpha1.RateLimitPolicy)
ratelimitPolicy, ok := obj.(*dpv1alpha3.RateLimitPolicy)
requests := []reconcile.Request{}
if !ok {
loggers.LoggerAPKOperator.ErrorC(logging.PrintError(logging.Error2622, logging.TRIVIAL, "Unexpected object type, bypassing reconciliation: %v", ratelimitPolicy))
Expand Down Expand Up @@ -1994,9 +1995,9 @@ func addIndexes(ctx context.Context, mgr manager.Manager) error {
}

// ratelimit policy to API indexer
if err := mgr.GetFieldIndexer().IndexField(ctx, &dpv1alpha1.RateLimitPolicy{}, apiRateLimitIndex,
if err := mgr.GetFieldIndexer().IndexField(ctx, &dpv1alpha3.RateLimitPolicy{}, apiRateLimitIndex,
func(rawObj k8client.Object) []string {
ratelimitPolicy := rawObj.(*dpv1alpha1.RateLimitPolicy)
ratelimitPolicy := rawObj.(*dpv1alpha3.RateLimitPolicy)
var apis []string
if ratelimitPolicy.Spec.TargetRef.Kind == constants.KindAPI {

Expand All @@ -2023,9 +2024,9 @@ func addIndexes(ctx context.Context, mgr manager.Manager) error {
// https://gateway-api.sigs.k8s.io/geps/gep-713/?h=multiple+targetrefs#apply-policies-to-sections-of-a-resource-future-extension
// we will use a temporary kindName called Resource for policy attachments
// TODO(amali) Fix after the official support is available
if err := mgr.GetFieldIndexer().IndexField(ctx, &dpv1alpha1.RateLimitPolicy{}, apiRateLimitResourceIndex,
if err := mgr.GetFieldIndexer().IndexField(ctx, &dpv1alpha3.RateLimitPolicy{}, apiRateLimitResourceIndex,
func(rawObj k8client.Object) []string {
ratelimitPolicy := rawObj.(*dpv1alpha1.RateLimitPolicy)
ratelimitPolicy := rawObj.(*dpv1alpha3.RateLimitPolicy)
var apis []string
if ratelimitPolicy.Spec.TargetRef.Kind == constants.KindResource {

Expand Down
Loading

0 comments on commit 41b50d4

Please sign in to comment.