// <auto-generated>
// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is
// regenerated.
// </auto-generated>

namespace k8s.Models
{
    using Newtonsoft.Json;
    using System.Linq;

    /// <summary>
    /// QueuingConfiguration holds the configuration parameters for queuing
    /// </summary>
    public partial class V1beta1QueuingConfiguration
    {
        /// <summary>
        /// Initializes a new instance of the V1beta1QueuingConfiguration
        /// class.
        /// </summary>
        public V1beta1QueuingConfiguration()
        {
            CustomInit();
        }

        /// <summary>
        /// Initializes a new instance of the V1beta1QueuingConfiguration
        /// class.
        /// </summary>
        /// <param name="handSize">`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.</param>
        /// <param name="queueLengthLimit">`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.</param>
        /// <param name="queues">`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.</param>
        public V1beta1QueuingConfiguration(int? handSize = default(int?), int? queueLengthLimit = default(int?), int? queues = default(int?))
        {
            HandSize = handSize;
            QueueLengthLimit = queueLengthLimit;
            Queues = queues;
            CustomInit();
        }

        /// <summary>
        /// An initialization method that performs custom operations like setting defaults
        /// </summary>
        partial void CustomInit();

        /// <summary>
        /// Gets or sets `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.
        /// </summary>
        [JsonProperty(PropertyName = "handSize")]
        public int? HandSize { get; set; }

        /// <summary>
        /// Gets or sets `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.
        /// </summary>
        [JsonProperty(PropertyName = "queueLengthLimit")]
        public int? QueueLengthLimit { get; set; }

        /// <summary>
        /// Gets or sets `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.
        /// </summary>
        [JsonProperty(PropertyName = "queues")]
        public int? Queues { get; set; }

    }
}
