From bf1fe82c6a4864c87281731c77426ec3b89363ba Mon Sep 17 00:00:00 2001 From: henryswang Date: Thu, 24 Mar 2022 11:39:00 +0800 Subject: [PATCH] support config fs.ofs.data.transfer.endpoint.suffix --- jar/chdfs_hadoop_plugin_network-2.7.jar | Bin 18482 -> 0 bytes jar/chdfs_hadoop_plugin_network-2.8.jar | Bin 0 -> 18953 bytes jar/jar.md5 | 2 +- pom.xml | 2 +- .../fs/CHDFSHadoopFileSystemAdapter.java | 12 +++++-- .../fs/CHDFSHadoopFileSystemJarLoader.java | 30 ++++++++++++++---- 6 files changed, 35 insertions(+), 11 deletions(-) delete mode 100644 jar/chdfs_hadoop_plugin_network-2.7.jar create mode 100644 jar/chdfs_hadoop_plugin_network-2.8.jar diff --git a/jar/chdfs_hadoop_plugin_network-2.7.jar b/jar/chdfs_hadoop_plugin_network-2.7.jar deleted file mode 100644 index d307ec22ccdf91ca327cce4254ff76df56603c77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18482 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.qcloud chdfs_hadoop_plugin_network - 2.7 + 2.8 jar chdfs_hadoop_plugin_network diff --git a/src/main/java/com/qcloud/chdfs/fs/CHDFSHadoopFileSystemAdapter.java b/src/main/java/com/qcloud/chdfs/fs/CHDFSHadoopFileSystemAdapter.java index b9d0aa8..ef978d2 100644 --- a/src/main/java/com/qcloud/chdfs/fs/CHDFSHadoopFileSystemAdapter.java +++ b/src/main/java/com/qcloud/chdfs/fs/CHDFSHadoopFileSystemAdapter.java @@ -45,6 +45,7 @@ public class CHDFSHadoopFileSystemAdapter extends FileSystemWithLockCleaner { private static final String CHDFS_META_SERVER_PORT_KEY = "fs.ofs.meta.server.port"; private static final String CHDFS_META_TRANSFER_USE_TLS_KEY = "fs.ofs.meta.transfer.tls"; private static final String CHDFS_BUCKET_REGION = "fs.ofs.bucket.region"; + private static final String COS_ENDPOINT_SUFFIX = "fs.ofs.data.transfer.endpoint.suffix"; private static final boolean DEFAULT_CHDFS_META_TRANSFER_USE_TLS = true; private static final int DEFAULT_CHDFS_META_SERVER_PORT = 443; @@ -93,8 +94,9 @@ public void initialize(URI name, Configuration conf) throws IOException { int jarPluginServerPort = getJarPluginServerPort(conf); String tmpDirPath = initCacheTmpDir(conf); boolean jarPluginServerHttpsFlag = isJarPluginServerHttps(conf); + String cosEndPointSuffix = getCosEndPointSuffix(conf); - initJarLoadWithRetry(ofsHost, appid, jarPluginServerPort, tmpDirPath, jarPluginServerHttpsFlag); + initJarLoadWithRetry(ofsHost, appid, jarPluginServerPort, tmpDirPath, jarPluginServerHttpsFlag, cosEndPointSuffix); this.actualImplFS = jarLoader.getActualFileSystem(); if (this.actualImplFS == null) { @@ -124,6 +126,10 @@ boolean isValidMountPointAddrCosType(String mountPointAddr) { return Pattern.matches(MOUNT_POINT_ADDR_PATTERN_COS_TYPE, mountPointAddr); } + private String getCosEndPointSuffix(Configuration conf ) throws IOException { + return conf.get(COS_ENDPOINT_SUFFIX); + } + private String getChdfsBucketRegion(Configuration conf) throws IOException { String bucketRegion = conf.get(CHDFS_BUCKET_REGION); if (bucketRegion == null) { @@ -207,11 +213,11 @@ private boolean isJarPluginServerHttps(Configuration conf) { } private void initJarLoadWithRetry(String mountPointAddr, long appid, int jarPluginServerPort, String tmpDirPath, - boolean jarPluginServerHttps) throws IOException { + boolean jarPluginServerHttps, String cosEndPointSuffix) throws IOException { int maxRetry = 5; for (int retryIndex = 0; retryIndex <= maxRetry; retryIndex++) { try { - jarLoader.init(mountPointAddr, appid, jarPluginServerPort, tmpDirPath, jarPluginServerHttps); + jarLoader.init(mountPointAddr, appid, jarPluginServerPort, tmpDirPath, jarPluginServerHttps, cosEndPointSuffix); return; } catch (IOException e) { if (retryIndex < maxRetry) { diff --git a/src/main/java/com/qcloud/chdfs/fs/CHDFSHadoopFileSystemJarLoader.java b/src/main/java/com/qcloud/chdfs/fs/CHDFSHadoopFileSystemJarLoader.java index 9045a0e..33ffa95 100644 --- a/src/main/java/com/qcloud/chdfs/fs/CHDFSHadoopFileSystemJarLoader.java +++ b/src/main/java/com/qcloud/chdfs/fs/CHDFSHadoopFileSystemJarLoader.java @@ -39,10 +39,10 @@ class CHDFSHadoopFileSystemJarLoader { } synchronized void init(String mountPointAddr, long appid, int jarPluginServerPort, String tmpDirPath, - boolean jarPluginServerHttps) throws IOException { + boolean jarPluginServerHttps, String cosEndPointSuffix) throws IOException { if (this.actualFileSystem == null) { long queryStartMs = System.currentTimeMillis(); - queryJarPluginInfo(mountPointAddr, appid, jarPluginServerPort, jarPluginServerHttps); + queryJarPluginInfo(mountPointAddr, appid, jarPluginServerPort, jarPluginServerHttps, cosEndPointSuffix); log.debug("query jar plugin info usedMs: {}", System.currentTimeMillis() - queryStartMs); this.actualFileSystem = getAlreadyLoadedClassInfo(this.getClass().getClassLoader(), this.jarPath, this.versionId, this.jarMd5, tmpDirPath); @@ -53,7 +53,7 @@ synchronized void init(String mountPointAddr, long appid, int jarPluginServerPor } } - private void parseJarPluginInfoResp(String respStr) throws IOException { + private void parseJarPluginInfoResp(String respStr, String cosEndPointSuffix) throws IOException { JsonObject respJson = new JsonParser().parse(respStr).getAsJsonObject(); if (!respJson.has("Response")) { String errMsg = String.format("resp json miss element Response, resp: %s", respStr); @@ -80,7 +80,25 @@ private void parseJarPluginInfoResp(String respStr) throws IOException { log.error(errMsg); throw new IOException(errMsg); } else { - this.jarPath = jarInfoJson.get("JarPath").getAsString(); + if (cosEndPointSuffix != null) { + String jarPath = jarInfoJson.get("JarPath").getAsString(); + int dotIndex = jarPath.indexOf('.'); + if (dotIndex == -1) { + String errMsg = String.format("invalid jar path : %s", jarPath); + log.error(errMsg); + throw new IOException(errMsg); + } + + int slashIndex = jarPath.indexOf('/', dotIndex); + if (slashIndex == -1) { + String errMsg = String.format("invalid jar path : %s", jarPath); + log.error(errMsg); + throw new IOException(errMsg); + } + this.jarPath = jarPath.substring(0, dotIndex+1) + cosEndPointSuffix + jarPath.substring(slashIndex); + } else { + this.jarPath = jarInfoJson.get("JarPath").getAsString(); + } } if (!jarInfoJson.has("JarMd5")) { @@ -93,7 +111,7 @@ private void parseJarPluginInfoResp(String respStr) throws IOException { } private void queryJarPluginInfo(String mountPointAddr, long appid, int jarPluginServerPort, - boolean jarPluginServerHttpsFlag) throws IOException { + boolean jarPluginServerHttpsFlag, String cosEndPointSuffix) throws IOException { String hadoopVersion = VersionInfo.getVersion(); if (hadoopVersion == null) { hadoopVersion = "unknown"; @@ -130,7 +148,7 @@ private void queryJarPluginInfo(String mountPointAddr, long appid, int jarPlugin bos.write(buf, 0, readLen); } String respStr = bos.toString(); - parseJarPluginInfoResp(respStr); + parseJarPluginInfoResp(respStr, cosEndPointSuffix); } catch (IOException e) { String errMsg = "queryJarPluginInfo occur an io exception"; log.error(errMsg, e);