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();
}
}
}
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();
}
}
}
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();
}
}
Aggregations