Search in sources :

Example 1 with SFTPHandler

use of com.dtstack.taier.common.sftp.SFTPHandler in project Taier by DTStack.

the class DataSourceUtils method downloadFileFromSftp.

/**
 * 从 SFTP 上下载 kerberos 配置文件到本地。
 * 先比较传入时间戳与 本地 lock 文件的时间戳,如果传入时间戳大于本地文件时间戳则重新下载
 * 如果传入时间戳为 null,则比较本地 kerberos 文件路径下的 lock 时间戳与 sftp lock 文件时间戳判断是否需要重新下载
 *
 * @param sftpDir       SFTP 上 kerberos 配置文件相对路径
 * @param localPath     本地 kerberos 目录
 * @param sftpMap       sftp 配置getLocalTimeLock
 * @param fileTimestamp 本地时间戳
 */
public static void downloadFileFromSftp(String sftpDir, String localPath, Map<String, String> sftpMap, Timestamp fileTimestamp) {
    // 需要读取配置文件
    // 本地kerberos文件
    Long localTimeLock = getLocalTimeLock(localPath);
    if (fileTimestamp != null && localTimeLock >= fileTimestamp.getTime()) {
        return;
    }
    String sftpPath = sftpMap.get("path") + SEPARATE + sftpDir;
    SFTPHandler handler = null;
    try {
        handler = SFTPHandler.getInstance(sftpMap);
        // sftp服务器文件
        Long timeLock = getSftpTimeLock(handler, sftpPath);
        // 如果 timeLock 为空,则说明不存在 .lock 文件,则
        if (timeLock == 0L || localTimeLock < timeLock) {
            // 对文件本地删除和sftp下载进行加锁
            synchronized (sftpDir.intern()) {
                // 需要下载替换当时的配置
                delFile(new File(localPath));
                handler.downloadDir(sftpPath, localPath);
                // 如果 SFTP 不存在 .lock 文件,则手动创建一个
                createIfNotExistLockFile(localPath);
            }
        }
    } catch (Exception e) {
        throw new DtCenterDefException(String.format("从 SFTP 下载配置文件异常: %s", e.getMessage()), e);
    } finally {
        if (handler != null) {
            handler.close();
        }
    }
}
Also used : DtCenterDefException(com.dtstack.taier.common.exception.DtCenterDefException) SFTPHandler(com.dtstack.taier.common.sftp.SFTPHandler) File(java.io.File) URISyntaxException(java.net.URISyntaxException) RdosDefineException(com.dtstack.taier.common.exception.RdosDefineException) IOException(java.io.IOException) SQLException(java.sql.SQLException) SftpException(com.jcraft.jsch.SftpException) DtCenterDefException(com.dtstack.taier.common.exception.DtCenterDefException)

Example 2 with SFTPHandler

use of com.dtstack.taier.common.sftp.SFTPHandler in project Taier by DTStack.

the class KerberosConfigVerify method downloadKerberosFromSftp.

/**
 * @param sourceKey
 * @param localKerberosConf
 * @param sftpMap
 * @param kerberosFileTimestamp
 * @throws SftpException
 */
public static void downloadKerberosFromSftp(String sourceKey, String localKerberosConf, Map<String, String> sftpMap, Timestamp kerberosFileTimestamp) throws SftpException {
    // 需要读取配置文件
    // 本地kerberos文件
    Long localTimeLock = getLocalTimeLock(localKerberosConf);
    if (kerberosFileTimestamp != null && localTimeLock > kerberosFileTimestamp.getTime()) {
        return;
    }
    SFTPHandler handler = null;
    try {
        handler = SFTPHandler.getInstance(sftpMap);
        String sourceSftpPath = sftpMap.get("path") + SEPARATE + sourceKey;
        // sftp服务器kerberos文件
        Long timeLock = getSftpTimeLock(handler, sourceSftpPath);
        // 如果 timeLock 为空,则说明不存在 .lock 文件,则
        if (timeLock == 0L || localTimeLock < timeLock) {
            // 对统一数据源的kerberos文件本地删除和sftp下载进行加锁
            synchronized (sourceKey.intern()) {
                // 需要下载替换当时的配置
                delFile(new File(localKerberosConf));
                handler.downloadDir(sourceSftpPath, localKerberosConf);
                // 如果 SFTP 不存在 .lock 文件,则手动创建一个
                createIfNotExistLockFile(localKerberosConf, true);
            }
        }
    } catch (Exception e) {
        logger.warn("下载kerberos配置失败 {}", e);
    } finally {
        if (handler != null) {
            handler.close();
        }
    }
}
Also used : SFTPHandler(com.dtstack.taier.common.sftp.SFTPHandler) File(java.io.File) IOException(java.io.IOException) UnknownHostException(java.net.UnknownHostException) SftpException(com.jcraft.jsch.SftpException) DtCenterDefException(com.dtstack.taier.common.exception.DtCenterDefException)

Example 3 with SFTPHandler

use of com.dtstack.taier.common.sftp.SFTPHandler in project Taier by DTStack.

the class KerberosService method uploadDirFinal.

/**
 * 上传本地配置目录到sftp
 * @param configMap
 * @param srcDir
 * @param dataSourceKey
 */
public static void uploadDirFinal(Map<String, String> configMap, String srcDir, String dataSourceKey) {
    SFTPHandler handler = SFTPHandler.getInstance(configMap);
    String dstDir = configMap.get("path");
    String dstDirPath = getSftpPath(configMap, dataSourceKey);
    try {
        KerberosConfigVerify.uploadLockFile(srcDir, dstDirPath, handler);
        handler.uploadDir(dstDir, srcDir);
    } catch (Exception e) {
        LOGGER.error(e.getMessage(), e);
        throw new RuntimeException(e);
    } finally {
        handler.close();
    }
}
Also used : SFTPHandler(com.dtstack.taier.common.sftp.SFTPHandler) SftpException(com.jcraft.jsch.SftpException) DtCenterDefException(com.dtstack.taier.common.exception.DtCenterDefException) PubSvcDefineException(com.dtstack.taier.common.exception.PubSvcDefineException)

Aggregations

DtCenterDefException (com.dtstack.taier.common.exception.DtCenterDefException)3 SFTPHandler (com.dtstack.taier.common.sftp.SFTPHandler)3 SftpException (com.jcraft.jsch.SftpException)3 File (java.io.File)2 IOException (java.io.IOException)2 PubSvcDefineException (com.dtstack.taier.common.exception.PubSvcDefineException)1 RdosDefineException (com.dtstack.taier.common.exception.RdosDefineException)1 URISyntaxException (java.net.URISyntaxException)1 UnknownHostException (java.net.UnknownHostException)1 SQLException (java.sql.SQLException)1