{
  "description": "PriorityLevelConfigurationSpec specifies the configuration of a priority level.",
  "properties": {
    "limited": {
      "description": "LimitedPriorityLevelConfiguration specifies how to handle requests that are subject to limits. It addresses two issues:\n * How are requests for this priority level limited?\n * What should be done with requests that exceed the limit?",
      "properties": {
        "assuredConcurrencyShares": {
          "description": "`assuredConcurrencyShares` (ACS) configures the execution limit, which is a limit on the number of requests of this priority level that may be exeucting at a given time.  ACS must be a positive number. The server's concurrency limit (SCL) is divided among the concurrency-controlled priority levels in proportion to their assured concurrency shares. This produces the assured concurrency value (ACV) --- the number of requests that may be executing at a time --- for each such priority level:\n\n            ACV(l) = ceil( SCL * ACS(l) / ( sum[priority levels k] ACS(k) ) )\n\nbigger numbers of ACS mean more reserved concurrent requests (at the expense of every other PL). This field has a default value of 30.",
          "format": "int32",
          "type": [
            "integer",
            "null"
          ]
        },
        "limitResponse": {
          "description": "LimitResponse defines how to handle requests that can not be executed right now.",
          "properties": {
            "queuing": {
              "description": "QueuingConfiguration holds the configuration parameters for queuing",
              "properties": {
                "handSize": {
                  "description": "`handSize` is a small positive number that configures the shuffle sharding of requests into queues.  When enqueuing a request at this priority level the request's flow identifier (a string pair) is hashed and the hash value is used to shuffle the list of queues and deal a hand of the size specified here.  The request is put into one of the shortest queues in that hand. `handSize` must be no larger than `queues`, and should be significantly smaller (so that a few heavy flows do not saturate most of the queues).  See the user-facing documentation for more extensive guidance on setting this field.  This field has a default value of 8.",
                  "format": "int32",
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "queueLengthLimit": {
                  "description": "`queueLengthLimit` is the maximum number of requests allowed to be waiting in a given queue of this priority level at a time; excess requests are rejected.  This value must be positive.  If not specified, it will be defaulted to 50.",
                  "format": "int32",
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "queues": {
                  "description": "`queues` is the number of queues for this priority level. The queues exist independently at each apiserver. The value must be positive.  Setting it to 1 effectively precludes shufflesharding and thus makes the distinguisher method of associated flow schemas irrelevant.  This field has a default value of 64.",
                  "format": "int32",
                  "type": [
                    "integer",
                    "null"
                  ]
                }
              },
              "type": [
                "object",
                "null"
              ]
            },
            "type": {
              "description": "`type` is \"Queue\" or \"Reject\". \"Queue\" means that requests that can not be executed upon arrival are held in a queue until they can be executed or a queuing limit is reached. \"Reject\" means that requests that can not be executed upon arrival are rejected. Required.",
              "type": "string"
            }
          },
          "required": [
            "type"
          ],
          "type": [
            "object",
            "null"
          ],
          "x-kubernetes-unions": [
            {
              "discriminator": "type",
              "fields-to-discriminateBy": {
                "queuing": "Queuing"
              }
            }
          ]
        }
      },
      "type": [
        "object",
        "null"
      ]
    },
    "type": {
      "description": "`type` indicates whether this priority level is subject to limitation on request execution.  A value of `\"Exempt\"` means that requests of this priority level are not subject to a limit (and thus are never queued) and do not detract from the capacity made available to other priority levels.  A value of `\"Limited\"` means that (a) requests of this priority level _are_ subject to limits and (b) some of the server's limited capacity is made available exclusively to this priority level. Required.",
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "type"
  ],
  "type": "object",
  "x-kubernetes-unions": [
    {
      "discriminator": "type",
      "fields-to-discriminateBy": {
        "limited": "Limited"
      }
    }
  ],
  "$schema": "http://json-schema.org/schema#"
}