/**
* Copyright 2016 Yahoo Inc.
*
* 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.
*/
package com.yahoo.pulsar.storm;
import java.util.concurrent.TimeUnit;
import com.google.common.base.Preconditions;
/**
* Class used to specify pulsar spout configuration
*
*
*/
public class PulsarSpoutConfiguration extends PulsarStormConfiguration {
/**
*
*/
private static final long serialVersionUID = 1L;
public static final long DEFAULT_FAILED_RETRIES_TIMEOUT_NANO = TimeUnit.SECONDS.toNanos(60);
public static final int DEFAULT_MAX_FAILED_RETRIES = -1;
private String subscriptionName = null;
private MessageToValuesMapper messageToValuesMapper = null;
private long failedRetriesTimeoutNano = DEFAULT_FAILED_RETRIES_TIMEOUT_NANO;
private int maxFailedRetries = DEFAULT_MAX_FAILED_RETRIES;
private boolean sharedConsumerEnabled = false;
/**
* @return the subscription name for the consumer in the spout
*/
public String getSubscriptionName() {
return subscriptionName;
}
/**
* Sets the subscription name for the consumer in the spout
*
* @param subscriptionName
*/
public void setSubscriptionName(String subscriptionName) {
this.subscriptionName = subscriptionName;
}
/**
* @return the mapper to convert pulsar message to a storm tuple
*/
public MessageToValuesMapper getMessageToValuesMapper() {
return messageToValuesMapper;
}
/**
* Sets the mapper to convert pulsar message to a storm tuple.
* <p>
* Note: If the mapper returns null, the message is not emitted to the collector and is acked immediately
* </p>
*
* @param mapper
*/
public void setMessageToValuesMapper(MessageToValuesMapper mapper) {
this.messageToValuesMapper = Preconditions.checkNotNull(mapper);
}
/**
*
* @param unit
* @return the timeout for retrying failed messages
*/
public long getFailedRetriesTimeout(TimeUnit unit) {
return unit.convert(failedRetriesTimeoutNano, TimeUnit.NANOSECONDS);
}
/**
* Sets the timeout within which the spout will re-inject failed messages with an exponential backoff <i>(default:
* 60 seconds)</i> Note: If set to 0, the message will not be retried when failed. If set to < 0, the message will
* be retried forever till it is successfully processed or max message retry count is reached, whichever comes
* first.
*
* @param failedRetriesTimeout
* @param unit
*/
public void setFailedRetriesTimeout(long failedRetriesTimeout, TimeUnit unit) {
this.failedRetriesTimeoutNano = unit.toNanos(failedRetriesTimeout);
}
/**
*
* @return the maximum number of times a failed message will be retried
*/
public int getMaxFailedRetries() {
return maxFailedRetries;
}
/**
* Sets the maximum number of times the spout will re-inject failed messages with an exponential backoff
* <i>(default: -1)</i> Note: If set to 0, the message will not be retried when failed. If set to < 0, the message
* will be retried forever till it is successfully processed or configured timeout expires, whichever comes first.
*
* @param maxFailedRetries
*/
public void setMaxFailedRetries(int maxFailedRetries) {
this.maxFailedRetries = maxFailedRetries;
}
/**
*
* @return if the consumer is shared across different executors of a spout
*/
public boolean isSharedConsumerEnabled() {
return sharedConsumerEnabled;
}
/**
* Sets whether the consumer will be shared across different executors of a spout. <i>(default: false)</i>
*
* @param sharedConsumerEnabled
*/
public void setSharedConsumerEnabled(boolean sharedConsumerEnabled) {
this.sharedConsumerEnabled = sharedConsumerEnabled;
}
}