
com.huaweicloud.dws.client.action.AbstractAction Maven / Gradle / Ivy
package com.huaweicloud.dws.client.action;
import com.huaweicloud.dws.client.DwsConfig;
import com.huaweicloud.dws.client.exception.DwsClientException;
import com.huaweicloud.dws.client.exception.ExceptionCode;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
/**
* @ProjectName: dws-connector
* @ClassName: AbstractAction
* @Description: action公用能力封装
* @Date: 2023/1/9 17:46
* @Version: 1.0
*/
public abstract class AbstractAction {
/**
* 任务超时时间 == 数据库超时时间 * 该参数
*/
public static final int TIME_OUT_RATIO = 2;
private final DwsConfig config;
/**
* 操作完成后获取结果, 失败了会在这里抛出异常
*/
protected CompletableFuture future;
public AbstractAction(DwsConfig config) {
this.future = new CompletableFuture<>();
this.config = config;
}
public CompletableFuture getFuture() {
return future;
}
public T getResult() throws DwsClientException {
try {
return future.get(config.getTimeOutMs() * config.getMaxFlushRetryTimes() * TIME_OUT_RATIO, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
throw new DwsClientException(ExceptionCode.INTERNAL_ERROR, "interrupt", e);
} catch (ExecutionException e) {
Throwable cause = e.getCause();
throw DwsClientException.fromException(cause);
} catch (TimeoutException e) {
throw DwsClientException.fromException(e);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy