public static int getNewShardCount()

in src/main/java/com/amazonaws/services/kinesis/scaling/StreamScalingUtils.java [394:450]


	public static int getNewShardCount(int currentShardCount, Integer scaleCount, Integer scalePct,
			ScaleDirection scalingDirection, Integer minShardsAllowed, Integer maxShardsAllowed) {
		int newShardCount = 0;

		if (scalingDirection.equals(ScaleDirection.UP)) {
			if (scaleCount != null) {
				newShardCount = currentShardCount + scaleCount;
			} else {
				// convert the scaling factor to a % above 100 if below - many customers use
				// values above or below as the config value is an int
				Double scalingFactor = 0D;
				if (scalePct < 100) {
					scalingFactor = Double.valueOf(100 + scalePct) / 100D;
				} else {
					scalingFactor = Double.valueOf(scalePct) / 100D;
				}

				newShardCount = Double.valueOf(Math.ceil(Double.valueOf(currentShardCount) * scalingFactor)).intValue();

				if (maxShardsAllowed != null && newShardCount > maxShardsAllowed) {
					newShardCount = maxShardsAllowed;
				}
			}
		} else {
			if (scaleCount != null) {
				newShardCount = currentShardCount - scaleCount;
			} else {
				// scaling by %
				Double scalingFactor = 0D;

				// reduce the scaling factor by 100, if above 100 - many customers use either as
				// the config value is an int
				if (scalePct > 100) {
					scalingFactor = Double.valueOf(scalePct) / 100D;
					newShardCount = Double.valueOf(Math.floor(Double.valueOf(currentShardCount) / scalingFactor))
							.intValue();
				} else {
					scalingFactor = Double.valueOf(scalePct) / 100D;
					newShardCount = currentShardCount
							- Double.valueOf(Math.floor(Double.valueOf(currentShardCount) * scalingFactor)).intValue();
				}

				// add a guard against any decision going below 1

				// guard against going below min
				if (minShardsAllowed != null && newShardCount < minShardsAllowed) {
					newShardCount = minShardsAllowed;
				} else {
					if (newShardCount < 1) {
						newShardCount = 1;
					}
				}
			}
		}

		return newShardCount;
	}