/*
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 * 
 *  http://aws.amazon.com/apache2.0
 * 
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */
/*
 * Do not modify this file. This file is generated from the sagemaker-2017-07-24.normal.json service model.
 */
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Text;
using System.IO;
using System.Net;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
namespace Amazon.SageMaker.Model
{
    /// 
    /// Specifies a rolling deployment strategy for updating a SageMaker endpoint.
    /// 
    public partial class RollingUpdatePolicy
    {
        private CapacitySize _maximumBatchSize;
        private int? _maximumExecutionTimeoutInSeconds;
        private CapacitySize _rollbackMaximumBatchSize;
        private int? _waitIntervalInSeconds;
        /// 
        /// Gets and sets the property MaximumBatchSize. 
        /// 
        /// Batch size for each rolling step to provision capacity and turn on traffic on the
        /// new endpoint fleet, and terminate capacity on the old endpoint fleet. Value must be
        /// between 5% to 50% of the variant's total instance count.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public CapacitySize MaximumBatchSize
        {
            get { return this._maximumBatchSize; }
            set { this._maximumBatchSize = value; }
        }
        // Check to see if MaximumBatchSize property is set
        internal bool IsSetMaximumBatchSize()
        {
            return this._maximumBatchSize != null;
        }
        /// 
        /// Gets and sets the property MaximumExecutionTimeoutInSeconds. 
        /// 
        /// The time limit for the total deployment. Exceeding this limit causes a timeout.
        /// 
        /// 
        [AWSProperty(Min=600, Max=28800)]
        public int MaximumExecutionTimeoutInSeconds
        {
            get { return this._maximumExecutionTimeoutInSeconds.GetValueOrDefault(); }
            set { this._maximumExecutionTimeoutInSeconds = value; }
        }
        // Check to see if MaximumExecutionTimeoutInSeconds property is set
        internal bool IsSetMaximumExecutionTimeoutInSeconds()
        {
            return this._maximumExecutionTimeoutInSeconds.HasValue; 
        }
        /// 
        /// Gets and sets the property RollbackMaximumBatchSize. 
        /// 
        /// Batch size for rollback to the old endpoint fleet. Each rolling step to provision
        /// capacity and turn on traffic on the old endpoint fleet, and terminate capacity on
        /// the new endpoint fleet. If this field is absent, the default value will be set to
        /// 100% of total capacity which means to bring up the whole capacity of the old fleet
        /// at once during rollback.
        /// 
        /// 
        public CapacitySize RollbackMaximumBatchSize
        {
            get { return this._rollbackMaximumBatchSize; }
            set { this._rollbackMaximumBatchSize = value; }
        }
        // Check to see if RollbackMaximumBatchSize property is set
        internal bool IsSetRollbackMaximumBatchSize()
        {
            return this._rollbackMaximumBatchSize != null;
        }
        /// 
        /// Gets and sets the property WaitIntervalInSeconds. 
        /// 
        /// The length of the baking period, during which SageMaker monitors alarms for each batch
        /// on the new fleet.
        /// 
        /// 
        [AWSProperty(Required=true, Min=0, Max=3600)]
        public int WaitIntervalInSeconds
        {
            get { return this._waitIntervalInSeconds.GetValueOrDefault(); }
            set { this._waitIntervalInSeconds = value; }
        }
        // Check to see if WaitIntervalInSeconds property is set
        internal bool IsSetWaitIntervalInSeconds()
        {
            return this._waitIntervalInSeconds.HasValue; 
        }
    }
}