/*
 * 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 kinesis-2013-12-02.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.Kinesis.Model
{
    /// 
    /// Container for the parameters to the PutRecords operation.
    /// Writes multiple data records into a Kinesis data stream in a single call (also referred
    /// to as a PutRecords request). Use this operation to send data into the
    /// stream for data ingestion and processing. 
    /// 
    ///   
    /// 
    /// When invoking this API, it is recommended you use the StreamARN input
    /// parameter rather than the StreamName input parameter.
    /// 
    ///   
    /// 
    /// Each PutRecords request can support up to 500 records. Each record in
    /// the request can be as large as 1 MiB, up to a limit of 5 MiB for the entire request,
    /// including partition keys. Each shard can support writes up to 1,000 records per second,
    /// up to a maximum data write total of 1 MiB per second.
    /// 
    ///  
    /// 
    /// You must specify the name of the stream that captures, stores, and transports the
    /// data; and an array of request Records, with each record in the array
    /// requiring a partition key and data blob. The record size limit applies to the total
    /// size of the partition key and data blob.
    /// 
    ///  
    /// 
    /// The data blob can be any type of data; for example, a segment from a log file, geographic/location
    /// data, website clickstream data, and so on.
    /// 
    ///  
    /// 
    /// The partition key is used by Kinesis Data Streams as input to a hash function that
    /// maps the partition key and associated data to a specific shard. An MD5 hash function
    /// is used to map partition keys to 128-bit integer values and to map associated data
    /// records to shards. As a result of this hashing mechanism, all data records with the
    /// same partition key map to the same shard within the stream. For more information,
    /// see Adding
    /// Data to a Stream in the Amazon Kinesis Data Streams Developer Guide.
    /// 
    ///  
    /// 
    /// Each record in the Records array may include an optional parameter, ExplicitHashKey,
    /// which overrides the partition key to shard mapping. This parameter allows a data producer
    /// to determine explicitly the shard where the record is stored. For more information,
    /// see Adding
    /// Multiple Records with PutRecords in the Amazon Kinesis Data Streams Developer
    /// Guide.
    /// 
    ///  
    /// 
    /// The PutRecords response includes an array of response Records.
    /// Each record in the response array directly correlates with a record in the request
    /// array using natural ordering, from the top to the bottom of the request and response.
    /// The response Records array always includes the same number of records
    /// as the request array.
    /// 
    ///  
    /// 
    /// The response Records array includes both successfully and unsuccessfully
    /// processed records. Kinesis Data Streams attempts to process all records in each PutRecords
    /// request. A single record failure does not stop the processing of subsequent records.
    /// As a result, PutRecords doesn't guarantee the ordering of records. If you need to
    /// read records in the same order they are written to the stream, use PutRecord
    /// instead of PutRecords, and write to the same shard.
    /// 
    ///  
    /// 
    /// A successfully processed record includes ShardId and SequenceNumber
    /// values. The ShardId parameter identifies the shard in the stream where
    /// the record is stored. The SequenceNumber parameter is an identifier assigned
    /// to the put record, unique to all records in the stream.
    /// 
    ///  
    /// 
    /// An unsuccessfully processed record includes ErrorCode and ErrorMessage
    /// values. ErrorCode reflects the type of error and can be one of the following
    /// values: ProvisionedThroughputExceededException or InternalFailure.
    /// ErrorMessage provides more detailed information about the ProvisionedThroughputExceededException
    /// exception including the account ID, stream name, and shard ID of the record that was
    /// throttled. For more information about partially successful responses, see Adding
    /// Multiple Records with PutRecords in the Amazon Kinesis Data Streams Developer
    /// Guide.
    /// 
    ///   
    /// 
    /// After you write a record to a stream, you cannot modify that record or its order within
    /// the stream.
    /// 
    ///   
    /// 
    /// By default, data records are accessible for 24 hours from the time that they are added
    /// to a stream. You can use IncreaseStreamRetentionPeriod or DecreaseStreamRetentionPeriod
    /// to modify this retention period.
    /// 
    /// 
    public partial class PutRecordsRequest : AmazonKinesisRequest
    {
        private List _records = new List();
        private string _streamARN;
        private string _streamName;
        /// 
        /// Gets and sets the property Records. 
        /// 
        /// The records associated with the request.
        /// 
        /// 
        [AWSProperty(Required=true, Min=1, Max=500)]
        public List Records
        {
            get { return this._records; }
            set { this._records = value; }
        }
        // Check to see if Records property is set
        internal bool IsSetRecords()
        {
            return this._records != null && this._records.Count > 0; 
        }
        /// 
        /// Gets and sets the property StreamARN. 
        /// 
        /// The ARN of the stream.
        /// 
        /// 
        [AWSProperty(Min=1, Max=2048)]
        public string StreamARN
        {
            get { return this._streamARN; }
            set { this._streamARN = value; }
        }
        // Check to see if StreamARN property is set
        internal bool IsSetStreamARN()
        {
            return this._streamARN != null;
        }
        /// 
        /// Gets and sets the property StreamName. 
        /// 
        /// The stream name associated with the request.
        /// 
        /// 
        [AWSProperty(Min=1, Max=128)]
        public string StreamName
        {
            get { return this._streamName; }
            set { this._streamName = value; }
        }
        // Check to see if StreamName property is set
        internal bool IsSetStreamName()
        {
            return this._streamName != null;
        }
    }
}