package com.dianping.pigeon.remoting.invoker.concurrent;
import com.dianping.pigeon.log.Logger;
import com.dianping.pigeon.log.LoggerLoader;
import com.dianping.pigeon.remoting.common.monitor.trace.InvokerMonitorData;
import com.dianping.pigeon.remoting.invoker.domain.InvokerContext;
import com.dianping.pigeon.remoting.invoker.proxy.MockProxyWrapper;
import java.util.concurrent.ExecutionException;
/**
* Created by chenchongze on 16/9/26.
*/
public class MockCallbackFuture extends ServiceFutureImpl {
private static final Logger logger = LoggerLoader.getLogger(MockCallbackFuture.class);
private final MockProxyWrapper mockProxyWrapper;
public MockCallbackFuture(MockProxyWrapper mockProxyWrapper, InvokerContext invokerContext, long timeout) {
super(invokerContext, timeout);
this.mockProxyWrapper = mockProxyWrapper;
}
@Override
public Object get(long timeoutMillis) throws InterruptedException, ExecutionException {
// 此刻执行mock逻辑或脚本
boolean isSuccess = true;
try {
return mockProxyWrapper.invoke(
invocationContext.getMethodName(),
invocationContext.getParameterTypes(),
invocationContext.getArguments());
} catch (Throwable t) {
isSuccess = false;
if (!(t instanceof RuntimeException)) {
t = new RuntimeException(t);
}
throw (RuntimeException) t;
} finally {
InvokerMonitorData monitorData = (InvokerMonitorData) invocationContext.getMonitorData();
if (monitorData != null) {
monitorData.setIsSuccess(isSuccess);
monitorData.complete();
}
}
}
}