content: /*******************************************************************************
   * Copyright 2014 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.
   ******************************************************************************/
  package com.amazonaws.services.kinesis.log4j.helpers;
  
  import java.util.concurrent.RejectedExecutionException;
  import java.util.concurrent.RejectedExecutionHandler;
  import java.util.concurrent.ThreadPoolExecutor;
  
  /**
   * Policy that implements producer thread blocking indefinitely whenever a new
   * task cannot be scheduled in the threadpool for AWS SDK's async Kinesis
   * client. Using this policy, the produce thread will unblock only after there
   * is space in the threadpool's processing queue.
   */
  public final class BlockFastProducerPolicy implements RejectedExecutionHandler {
    @Override
    public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
      if (executor.isShutdown()) {
        throw new RejectedExecutionException("Threadpoolexecutor already shutdown");
      } else {
        try {
          executor.getQueue().put(r);
        } catch (InterruptedException e) {
          throw new RejectedExecutionException(
              "Thread was interrupted while waiting for space to be available in the threadpool", e);
        }
      }
    }
  }
  