All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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 lombok.extern.slf4j.Slf4j;

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
 */
@Slf4j
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);
        }
    }

    /**
     * 重试时调用
     */
    public void reTry() {
        log.info("re try.");
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy