/** * */ package com.ganji.as.thrift.protocol.client.policy.session.retry; import java.util.concurrent.TimeUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.ganji.as.thrift.protocol.client.future.Future; import com.ganji.as.thrift.protocol.client.intf.ThriftProtocolClientRetryPolicy; /** * @author yikangfeng * @date 2015年7月22日 * @ThreadSafe */ public class ThriftProtocolSessionRetryPolicy implements ThriftProtocolClientRetryPolicy { final private Logger LOGGER_ = LoggerFactory.getLogger(this.getClass()); public ThriftProtocolSessionRetryPolicy() { } @Override public void retry(final Future<?> future, final int retries, final long timeout, final TimeUnit unit) { // TODO Auto-generated method stub int _retries = 0; if (LOGGER_ != null) { if (LOGGER_.isInfoEnabled()) LOGGER_.info(String .format("Session failed,begin to try again,config retries=(%d)", retries)); } while (_retries < retries) { if (LOGGER_ != null) { if (LOGGER_.isInfoEnabled()) LOGGER_.info(String.format("Session failed,try again (%d)", ++_retries)); } try { if (timeout == -1 && unit == null) ((Future<?>) future.flatMap(future.getCallbackFunction())) .getFutureSession().get(); else ((Future<?>) future.flatMap(future.getCallbackFunction())) .getFutureSession().get(timeout, unit); } catch (final Throwable _t) { continue;// try again. } if (LOGGER_ != null) { if (LOGGER_.isInfoEnabled()) LOGGER_.info("try successfully."); } break;// try successfully. } } }