aws-kinesis-0.1.5: src/Aws/Kinesis/Commands/SplitShard.hs
-- Copyright (c) 2013-2015 PivotCloud, Inc.
--
-- Aws.Kinesis.Commands.SplitShard
--
-- Please feel free to contact us at licensing@pivotmail.com with any
-- contributions, additions, or other feedback; we would love to hear from
-- you.
--
-- Licensed under the Apache License, Version 2.0 (the "License"); you may
-- not use this file except in compliance with the License. You may obtain a
-- copy of the License at http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License 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.
-- |
-- Module: Aws.Kinesis.Commands.SplitShard
-- Copyright: Copyright (c) 2013-2015 PivotCloud, Inc.
-- license: Apache License, Version 2.0
-- Maintainer: Lars Kuhtz <lars@alephcloud.com>
-- Stability: experimental
--
-- /API Version: 2013-03-31/
-- This operation splits a shard into two new shards in the stream, to increase
-- the stream's capacity to ingest and transport data. SplitShard is called
-- when there is a need to increase the overall capacity of stream because of
-- an expected increase in the volume of data records being ingested.
--
-- SplitShard can also be used when a given shard appears to be approaching its
-- maximum utilization, for example, when the set of producers sending data
-- into the specific shard are suddenly sending more than previously
-- anticipated. You can also call the SplitShard operation to increase stream
-- capacity, so that more Amazon Kinesis applications can simultaneously read
-- data from the stream for real-time processing.
--
-- The SplitShard operation requires that you specify the shard to be split and
-- the new hash key, which is the position in the shard where the shard gets
-- split in two. In many cases, the new hash key might simply be the average of
-- the beginning and ending hash key, but it can be any hash key value in the
-- range being mapped into the shard. For more information about splitting
-- shards, see the Amazon Kinesis Developer Guide.
--
-- You can use the DescribeStream operation to determine the shard ID and hash
-- key values for the ShardToSplit and NewStartingHashKey parameters that are
-- specified in the SplitShard request.
--
-- SplitShard is an asynchronous operation. Upon receiving a SplitShard
-- request, Amazon Kinesis immediately returns a response and sets the stream
-- status to UPDATING. After the operation is completed, Amazon Kinesis sets
-- the stream status to ACTIVE. Read and write operations continue to work
-- while the stream is in the UPDATING state.
--
-- You can use DescribeStream to check the status of the stream, which is
-- returned in StreamStatus. If the stream is in the ACTIVE state, you can call
-- SplitShard. If a stream is in CREATING or UPDATING or DELETING states, then
-- Amazon Kinesis returns a ResourceInUseException.
--
-- If the specified stream does not exist, Amazon Kinesis returns a
-- ResourceNotFoundException. If you try to create more shards than are
-- authorized for your account, you receive a LimitExceededException.
--
-- Note: The default limit for an AWS account is 10 shards per stream. If you
-- need to create a stream with more than 10 shards, contact AWS Support to
-- increase the limit on your account.
--
-- If you try to operate on too many streams in parallel using CreateStream,
-- DeleteStream, MergeShards or SplitShard, you will receive a
-- LimitExceededException.
--
-- SplitShard has limit of 5 transactions per second per account.
--
-- <http://docs.aws.amazon.com/kinesis/2013-12-02/APIReference/API_SplitShard.html>
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE MultiParamTypeClasses #-}
module Aws.Kinesis.Commands.SplitShard
( SplitShard(..)
, SplitShardResponse(..)
, SplitShardExceptions(..)
) where
import Aws.Core
import Aws.Kinesis.Core
import Aws.Kinesis.Types
import Control.DeepSeq
import Data.Aeson
import qualified Data.ByteString.Lazy as LB
import Data.Typeable
import GHC.Generics
splitShardAction :: KinesisAction
splitShardAction = KinesisSplitShard
data SplitShard = SplitShard
{ splitShardNewStartingHashKey :: !PartitionHash
-- ^ A hash key value for the starting hash key of one of the child shards
-- created by the split. The hash key range for a given shard constitutes a
-- set of ordered contiguous positive integers. The value for
-- NewStartingHashKey must be in the range of hash keys being mapped into
-- the shard. The NewStartingHashKey hash key value and all higher hash key
-- values in hash key range are distributed to one of the child shards. All
-- the lower hash key values in the range are distributed to the other
-- child shard.
, splitShardShardToSplit :: !ShardId
-- ^ The shard ID of the shard to split.
, splitShardStreamName :: !StreamName
-- ^ The name of the stream for the shard split.
}
deriving (Show, Read, Eq, Ord, Typeable, Generic)
instance NFData SplitShard
instance ToJSON SplitShard where
toJSON SplitShard{..} = object
[ "NewStartingHashKey" .= splitShardNewStartingHashKey
, "ShardToSplit" .= splitShardShardToSplit
, "StreamName" .= splitShardStreamName
]
data SplitShardResponse = SplitShardResponse
deriving (Show, Read, Eq, Ord, Typeable, Generic)
instance NFData SplitShardResponse
instance ResponseConsumer r SplitShardResponse where
type ResponseMetadata SplitShardResponse = KinesisMetadata
responseConsumer _ = kinesisResponseConsumer
instance FromJSON SplitShardResponse where
parseJSON _ = return SplitShardResponse
instance SignQuery SplitShard where
type ServiceConfiguration SplitShard = KinesisConfiguration
signQuery cmd = kinesisSignQuery KinesisQuery
{ kinesisQueryAction = splitShardAction
, kinesisQueryBody = Just $ LB.toStrict $ encode cmd
}
instance Transaction SplitShard SplitShardResponse
instance AsMemoryResponse SplitShardResponse where
type MemoryResponse SplitShardResponse = SplitShardResponse
loadToMemory = return
-- -------------------------------------------------------------------------- --
-- Exceptions
--
-- Currently not used for requests. It's included for future usage
-- and as reference.
data SplitShardExceptions
= SplitShardInvalidArgumentException
-- ^ /Code 400/
| SplitShardLimitExceededException
-- ^ /Code 400/
| SplitShardResourceInUseException
-- ^ /Code 400/
| SplitShardResourceNotFoundException
-- ^ /Code 400/
deriving (Show, Read, Eq, Ord, Enum, Bounded, Typeable, Generic)
instance NFData SplitShardExceptions