From 39d4aaf22496ff245a3a4f132b8f485f0f39ba15 Mon Sep 17 00:00:00 2001 From: Dhia Ayachi Date: Wed, 7 Jun 2023 14:50:22 -0400 Subject: [PATCH] fix rate limiting mapping to be the same between api and struct packages (#17599) --- agent/consul/rate/handler.go | 6 ++-- agent/rpc/middleware/rate_limit_mappings.go | 5 +++ api/config_entry_rate_limit_ip.go | 36 +++++++++++++-------- 3 files changed, 31 insertions(+), 16 deletions(-) diff --git a/agent/consul/rate/handler.go b/agent/consul/rate/handler.go index 84faefb6c3..c18ec85edd 100644 --- a/agent/consul/rate/handler.go +++ b/agent/consul/rate/handler.go @@ -119,15 +119,15 @@ const ( OperationCategoryKV OperationCategory = "KV" OperationCategoryPreparedQuery OperationCategory = "PreparedQuery" OperationCategorySession OperationCategory = "Session" - OperationCategoryStatus OperationCategory = "Status" + OperationCategoryStatus OperationCategory = "Status" // not limited OperationCategoryTxn OperationCategory = "Txn" OperationCategoryAutoConfig OperationCategory = "AutoConfig" OperationCategoryFederationState OperationCategory = "FederationState" OperationCategoryInternal OperationCategory = "Internal" - OperationCategoryOperator OperationCategory = "Operator" + OperationCategoryOperator OperationCategory = "Operator" // not limited OperationCategoryPeerStream OperationCategory = "PeerStream" OperationCategoryPeering OperationCategory = "Peering" - OperationCategoryPartition OperationCategory = "Partition" + OperationCategoryPartition OperationCategory = "Tenancy" OperationCategoryDataPlane OperationCategory = "DataPlane" OperationCategoryDNS OperationCategory = "DNS" OperationCategorySubscribe OperationCategory = "Subscribe" diff --git a/agent/rpc/middleware/rate_limit_mappings.go b/agent/rpc/middleware/rate_limit_mappings.go index a31343bb23..0df249c932 100644 --- a/agent/rpc/middleware/rate_limit_mappings.go +++ b/agent/rpc/middleware/rate_limit_mappings.go @@ -144,4 +144,9 @@ var rpcRateLimitSpecs = map[string]rate.OperationSpec{ "Txn.Apply": {Type: rate.OperationTypeWrite, Category: rate.OperationCategoryTxn}, "Txn.Read": {Type: rate.OperationTypeRead, Category: rate.OperationCategoryTxn}, + + "Namespace.Write": {Type: rate.OperationTypeWrite, Category: rate.OperationCategoryPartition}, + "Namespace.Delete": {Type: rate.OperationTypeWrite, Category: rate.OperationCategoryPartition}, + "Namespace.List": {Type: rate.OperationTypeRead, Category: rate.OperationCategoryPartition}, + "Namespace.Read": {Type: rate.OperationTypeRead, Category: rate.OperationCategoryPartition}, } diff --git a/api/config_entry_rate_limit_ip.go b/api/config_entry_rate_limit_ip.go index 1c91b811a9..8df7d4c98e 100644 --- a/api/config_entry_rate_limit_ip.go +++ b/api/config_entry_rate_limit_ip.go @@ -20,19 +20,29 @@ type RateLimitIPConfigEntry struct { WriteRate float64 //limits specific to a type of call - ACL *ReadWriteRatesConfig `json:",omitempty"` - Catalog *ReadWriteRatesConfig `json:",omitempty"` - ConfigEntry *ReadWriteRatesConfig `json:",omitempty"` - ConnectCA *ReadWriteRatesConfig `json:",omitempty"` - Coordinate *ReadWriteRatesConfig `json:",omitempty"` - DiscoveryChain *ReadWriteRatesConfig `json:",omitempty"` - Health *ReadWriteRatesConfig `json:",omitempty"` - Intention *ReadWriteRatesConfig `json:",omitempty"` - KV *ReadWriteRatesConfig `json:",omitempty"` - Tenancy *ReadWriteRatesConfig `json:",omitempty"` - PreparedQuery *ReadWriteRatesConfig `json:",omitempty"` - Session *ReadWriteRatesConfig `json:",omitempty"` - Txn *ReadWriteRatesConfig `json:",omitempty"` + ACL *ReadWriteRatesConfig `json:",omitempty"` // OperationCategoryACL OperationCategory = "ACL" + Catalog *ReadWriteRatesConfig `json:",omitempty"` // OperationCategoryCatalog OperationCategory = "Catalog" + ConfigEntry *ReadWriteRatesConfig `json:",omitempty"` // OperationCategoryConfigEntry OperationCategory = "ConfigEntry" + ConnectCA *ReadWriteRatesConfig `json:",omitempty"` // OperationCategoryConnectCA OperationCategory = "ConnectCA" + Coordinate *ReadWriteRatesConfig `json:",omitempty"` // OperationCategoryCoordinate OperationCategory = "Coordinate" + DiscoveryChain *ReadWriteRatesConfig `json:",omitempty"` // OperationCategoryDiscoveryChain OperationCategory = "DiscoveryChain" + ServerDiscovery *ReadWriteRatesConfig `json:",omitempty"` // OperationCategoryServerDiscovery OperationCategory = "ServerDiscovery" + Health *ReadWriteRatesConfig `json:",omitempty"` // OperationCategoryHealth OperationCategory = "Health" + Intention *ReadWriteRatesConfig `json:",omitempty"` // OperationCategoryIntention OperationCategory = "Intention" + KV *ReadWriteRatesConfig `json:",omitempty"` // OperationCategoryKV OperationCategory = "KV" + Tenancy *ReadWriteRatesConfig `json:",omitempty"` // OperationCategoryPartition OperationCategory = "Tenancy" + PreparedQuery *ReadWriteRatesConfig `json:",omitempty"` // OperationCategoryPreparedQuery OperationCategory = "PreparedQuery" + Session *ReadWriteRatesConfig `json:",omitempty"` // OperationCategorySession OperationCategory = "Session" + Txn *ReadWriteRatesConfig `json:",omitempty"` // OperationCategoryTxn OperationCategory = "Txn" + AutoConfig *ReadWriteRatesConfig `json:",omitempty"` // OperationCategoryAutoConfig OperationCategory = "AutoConfig" + FederationState *ReadWriteRatesConfig `json:",omitempty"` // OperationCategoryFederationState OperationCategory = "FederationState" + Internal *ReadWriteRatesConfig `json:",omitempty"` // OperationCategoryInternal OperationCategory = "Internal" + PeerStream *ReadWriteRatesConfig `json:",omitempty"` // OperationCategoryPeerStream OperationCategory = "PeerStream" + Peering *ReadWriteRatesConfig `json:",omitempty"` // OperationCategoryPeering OperationCategory = "Peering" + DataPlane *ReadWriteRatesConfig `json:",omitempty"` // OperationCategoryDataPlane OperationCategory = "DataPlane" + DNS *ReadWriteRatesConfig `json:",omitempty"` // OperationCategoryDNS OperationCategory = "DNS" + Subscribe *ReadWriteRatesConfig `json:",omitempty"` // OperationCategorySubscribe OperationCategory = "Subscribe" + Resource *ReadWriteRatesConfig `json:",omitempty"` // OperationCategoryResource OperationCategory = "Resource" // Partition is the partition the config entry is associated with. // Partitioning is a Consul Enterprise feature.