Skip to content

Commit 61ca4c8

Browse files
authored
Provide action limit configuration for each namespace (#5229)
* Provide action limit config for namespace * Check namespace default limit * Validate system limits and namespace default limits * Fix test code * Add system limit test * Refactor code * Reject message in invoker reactive * Change config key * Refactor code * Add ansible config * Update annotation for maxConcurrent * Add test case for limit api * Rename limit config key * Update swagger * Update document * Add parameter size limit * Refactor code * Update limits API * Rename allowedDuration -> allowedActionDuration * Add test case for parameter limit * Refactor code * Add request payload limit for namespace * Check activation result size with namespace payload limit * Provide truncation size option for namespace * Support scheduler * Supports backwards compatibility for new limit config * Update wskadmin * Add parameter annotation for truncation * Fix test code for KubernetesContainerTests * Fix test code for DockerContainerTests * Fix test cases * Fix build error * Fix build error
1 parent 4bc4c3b commit 61ca4c8

File tree

53 files changed

+1350
-287
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+1350
-287
lines changed

ansible/environments/jenkins/group_vars/openwhisk-vm1-he-de

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,5 +49,7 @@ container_pool_akka_client: true
4949
runtimes_enable_concurrency: true
5050
limit_action_concurrency_max: 500
5151

52+
namespace_default_limit_action_concurrency_max: 500
53+
5254
invoker1_machine: openwhisk-vm3-he-de
5355
invoker_use_runc: false

ansible/environments/jenkins/group_vars/openwhisk-vm2-he-de

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,7 @@ runtimes_enable_concurrency: true
5050
limit_action_concurrency_max: 500
5151
limit_invocations_per_minute: 120
5252

53+
namespace_default_limit_action_concurrency_max: 500
54+
5355
invoker1_machine: openwhisk-vm1-he-de
5456
invoker_use_runc: false

ansible/environments/jenkins/group_vars/openwhisk-vm3-he-de

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,5 +49,7 @@ container_pool_akka_client: true
4949
runtimes_enable_concurrency: true
5050
limit_action_concurrency_max: 500
5151

52+
namespace_default_limit_action_concurrency_max: 500
53+
5254
invoker1_machine: openwhisk-vm2-he-de
5355
invoker_use_runc: false

ansible/environments/local/group_vars/all

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,4 @@ env_hosts_dir: "{{ playbook_dir }}/environments/local"
4848
container_pool_akka_client: true
4949
runtimes_enable_concurrency: true
5050
limit_action_concurrency_max: 500
51+
namespace_default_limit_action_concurrency_max: 500

ansible/roles/controller/tasks/deploy.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,15 @@
227227
"CONFIG_whisk_concurrencyLimit_max": "{{ limit_action_concurrency_max | default() }}"
228228
"CONFIG_whisk_concurrencyLimit_std": "{{ limit_action_concurrency_std | default() }}"
229229

230+
"CONFIG_whisk_namespaceDefaultLimit_memory_min": "{{ namespace_default_limit_action_memory_min | default() }}"
231+
"CONFIG_whisk_namespaceDefaultLimit_memory_max": "{{ namespace_default_limit_action_memory_max | default() }}"
232+
233+
"CONFIG_whisk_namespaceDefaultLimit_timeLimit_min": "{{ namespace_default_limit_action_time_min | default() }}"
234+
"CONFIG_whisk_namespaceDefaultLimit_timeLimit_max": "{{ namespace_default_limit_action_time_max | default() }}"
235+
236+
"CONFIG_whisk_namespaceDefaultLimit_concurrencyLimit_min": "{{ namespace_default_limit_action_concurrency_min | default() }}"
237+
"CONFIG_whisk_namespaceDefaultLimit_concurrencyLimit_max": "{{ namespace_default_limit_action_concurrency_max | default() }}"
238+
230239
"CONFIG_whisk_featureFlags_requireApiKeyAnnotation": "{{ whisk.feature_flags.require_api_key_annotation | default(true) | lower }}"
231240
"CONFIG_whisk_featureFlags_requireResponsePayload": "{{ whisk.feature_flags.require_response_payload | default(true) | lower }}"
232241

ansible/roles/invoker/tasks/deploy.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,12 @@
279279
"CONFIG_whisk_concurrencyLimit_min": "{{ limit_action_concurrency_min | default() }}"
280280
"CONFIG_whisk_concurrencyLimit_max": "{{ limit_action_concurrency_max | default() }}"
281281
"CONFIG_whisk_concurrencyLimit_std": "{{ limit_action_concurrency_std | default() }}"
282+
"CONFIG_whisk_namespaceDefaultLimit_memory_min": "{{ namespace_default_limit_action_memory_min | default() }}"
283+
"CONFIG_whisk_namespaceDefaultLimit_memory_max": "{{ namespace_default_limit_action_memory_max | default() }}"
284+
"CONFIG_whisk_namespaceDefaultLimit_timeLimit_min": "{{ namespace_default_limit_action_time_min | default() }}"
285+
"CONFIG_whisk_namespaceDefaultLimit_timeLimit_max": "{{ namespace_default_limit_action_time_max | default() }}"
286+
"CONFIG_whisk_namespaceDefaultLimit_concurrencyLimit_min": "{{ namespace_default_limit_action_concurrency_min | default() }}"
287+
"CONFIG_whisk_namespaceDefaultLimit_concurrencyLimit_max": "{{ namespace_default_limit_action_concurrency_max | default() }}"
282288
"CONFIG_whisk_activation_payload_max": "{{ limit_activation_payload | default() }}"
283289
"CONFIG_whisk_transactions_header": "{{ transactions.header }}"
284290
"CONFIG_whisk_containerPool_akkaClient": "{{ container_pool_akka_client | default('false') | lower }}"

ansible/roles/schedulers/tasks/deploy.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,15 @@
191191
"CONFIG_whisk_concurrencyLimit_max": "{{ limit_action_concurrency_max | default() }}"
192192
"CONFIG_whisk_concurrencyLimit_std": "{{ limit_action_concurrency_std | default() }}"
193193

194+
"CONFIG_whisk_namespaceDefaultLimit_memory_min": "{{ namespace_default_limit_action_memory_min | default() }}"
195+
"CONFIG_whisk_namespaceDefaultLimit_memory_max": "{{ namespace_default_limit_action_memory_max | default() }}"
196+
197+
"CONFIG_whisk_namespaceDefaultLimit_timeLimit_min": "{{ namespace_default_limit_action_time_min | default() }}"
198+
"CONFIG_whisk_namespaceDefaultLimit_timeLimit_max": "{{ namespace_default_limit_action_time_max | default() }}"
199+
200+
"CONFIG_whisk_namespaceDefaultLimit_concurrencyLimit_min": "{{ namespace_default_limit_action_concurrency_min | default() }}"
201+
"CONFIG_whisk_namespaceDefaultLimit_concurrencyLimit_max": "{{ namespace_default_limit_action_concurrency_max | default() }}"
202+
194203
"RUNTIMES_MANIFEST": "{{ runtimesManifest | to_json }}"
195204
"CONFIG_whisk_runtimes_defaultImagePrefix":
196205
"{{ runtimes_default_image_prefix | default() }}"

common/scala/src/main/resources/application.conf

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,9 @@ whisk {
509509
std = 1
510510
}
511511

512+
# maximum size of the action parameter
513+
parameter-size-limit = 1 m
514+
512515
# maximum size of the action code
513516
exec-size-limit = 48 m
514517

@@ -517,6 +520,34 @@ whisk {
517520
default-list-limit = 30 # default limit on number of entities returned from a collection on a list operation
518521
}
519522

523+
# default namespace limit settings
524+
# Disabled for backwards compatibility. If you want to use it, either uncomment it or add the setting at deployment time.
525+
# namespace-default-limit {
526+
# memory {
527+
# min = 128 m
528+
# max = 512 m
529+
# }
530+
# time-limit {
531+
# min = 100 ms
532+
# max = 5 m
533+
# }
534+
# log-limit {
535+
# min = 0 m
536+
# max = 10 m
537+
# }
538+
# concurrency-limit {
539+
# min = 1
540+
# max = 1
541+
# }
542+
# parameter-size-limit = 1 m
543+
# activation {
544+
# payload {
545+
# max = 1 m
546+
# truncation = 1 m
547+
# }
548+
# }
549+
# }
550+
520551
yarn {
521552
master-url="http://localhost:8088" //YARN Resource Manager endpoint to be accessed from the invoker
522553
yarn-link-log-message=true //If true, display a link to YARN in the static log message, otherwise do not include a link to YARN.

common/scala/src/main/scala/org/apache/openwhisk/core/WhiskConfig.scala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,15 @@ object ConfigKeys {
222222
val timeLimit = "whisk.time-limit"
223223
val logLimit = "whisk.log-limit"
224224
val concurrencyLimit = "whisk.concurrency-limit"
225+
val parameterSizeLimit = "whisk.parameter-size-limit"
226+
227+
val namespaceMemoryLimit = "whisk.namespace-default-limit.memory"
228+
val namespaceTimeLimit = "whisk.namespace-default-limit.time-limit"
229+
val namespaceLogLimit = "whisk.namespace-default-limit.log-limit"
230+
val namespaceConcurrencyLimit = "whisk.namespace-default-limit.concurrency-limit"
231+
val namespaceParameterSizeLimit = "whisk.namespace-default-limit.parameter-size-limit"
232+
val namespaceActivationPayloadLimit = "whisk.namespace-default-limit.activation.payload"
233+
225234
val activation = "whisk.activation"
226235
val userEvents = "whisk.user-events"
227236

common/scala/src/main/scala/org/apache/openwhisk/core/connector/Message.scala

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -682,6 +682,8 @@ object ContainerCreationError extends Enumeration {
682682

683683
case object TooManyConcurrentRequests extends ContainerCreationError
684684

685+
case object InvalidActionLimitError extends ContainerCreationError
686+
685687
val whiskErrors: Set[ContainerCreationError] =
686688
Set(
687689
NoAvailableInvokersError,
@@ -705,6 +707,7 @@ object ContainerCreationError extends Enumeration {
705707
case "ZERONAMESPACELIMIT" => ZeroNamespaceLimit
706708
case "TOOMANYCONCURRENTREQUESTS" => TooManyConcurrentRequests
707709
case "UNKNOWNERROR" => UnknownError
710+
case "INVALIDACTIONLIMITERROR" => InvalidActionLimitError
708711
}
709712

710713
implicit val serds = new RootJsonFormat[ContainerCreationError] {

0 commit comments

Comments
 (0)