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

com.huaweicloud.dws.client.op.Operate Maven / Gradle / Ivy

There is a newer version: 2.0.0-r0
Show newest version
package com.huaweicloud.dws.client.op;

import com.huaweicloud.dws.client.action.PutAction;
import com.huaweicloud.dws.client.collector.ActionCollector;
import com.huaweicloud.dws.client.exception.DwsClientException;
import com.huaweicloud.dws.client.exception.InvalidException;
import com.huaweicloud.dws.client.model.OperationType;
import com.huaweicloud.dws.client.model.Record;
import com.huaweicloud.dws.client.model.TableSchema;
import com.huaweicloud.dws.client.util.AssertUtil;
import com.huaweicloud.dws.client.util.LogUtil;
import com.huaweicloud.dws.client.worker.ExecutionPool;
import lombok.extern.slf4j.Slf4j;

import java.util.Collections;
import java.util.List;

/**
 * @ProjectName: dws-connector
 * @ClassName: Operate
 * @Description: 操作接口定义
 * @Date: 2023/1/16 9:27
 * @Version: 1.0
 */
@Slf4j
public abstract class Operate {
    protected final Record record;
    protected final ActionCollector collector;

    protected Operate(TableSchema schema, ActionCollector collector, OperationType type) {
        this.record = new Record(schema, type);
        this.collector = collector;
    }

    /**
     * 获取当前操作对应的record
     */
    public Record getRecord() {
        return this.record;
    }

    /**
     * 设置字段 columnName的字为value, 如果ignoreUpdate == true
     * 那么该字段只有在insert时写入数据库,主键冲突时该字段不更新
     */
    public Operate setObject(String columnName, Object value, boolean ignoreUpdate) {
        Integer index = record.getTableSchema().getColumnIndex(columnName);
        AssertUtil.nonNull(index, new InvalidException("can not found column " + columnName));
        record.setValue(index, value, ignoreUpdate);
        return this;
    }

    /**
     * 相当于 setObject(String columnName, Object value, boolean ignoreUpdate) 接口 ignoreUpdate=false
     */
    public Operate setObject(String columnName, Object value) {
        return setObject(columnName, value, false);
    }

    /**
     * 异步提交入库
     */
    public void commit() throws DwsClientException {
        AssertUtil.isTrue(record.getColumnBit().length() != 0, new InvalidException("must set column"));
        collector.collector(record);
        collector.getPool().tryException();
    }

    /**
     * 同步提交
     */
    public void syncCommit() throws DwsClientException {
        List records = Collections.singletonList(record);
        PutAction action = new PutAction(records, collector.getConfig());
        ExecutionPool pool = collector.getPool();
        pool.tryException();
        while (!collector.getPool().submit(action)) {
            LogUtil.withLogSwitch(collector.getConfig(), () -> log.warn("try submit."));
        }
        // 等待结果响应后返回
        action.getResult();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy