KYLIN-2676 Allow backup operation copying UUID
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/071f3b92 Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/071f3b92 Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/071f3b92 Branch: refs/heads/master Commit: 071f3b92caccf56ed70c15147da32a9ef2538bff Parents: 57c1d5e Author: auphyroc99 <[email protected]> Authored: Thu Jun 22 17:10:58 2017 +0800 Committer: Hongbin Ma <[email protected]> Committed: Thu Jun 22 18:05:21 2017 +0800 ---------------------------------------------------------------------- .../kylin/common/persistence/ResourceTool.java | 40 ++++++++++++++------ .../apache/kylin/tool/CubeMetaExtractor.java | 4 +- 2 files changed, 31 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/071f3b92/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceTool.java ---------------------------------------------------------------------- diff --git a/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceTool.java b/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceTool.java index 6a73e12..2571c91 100644 --- a/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceTool.java +++ b/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceTool.java @@ -72,10 +72,10 @@ public class ResourceTool { list(KylinConfig.getInstanceFromEnv(), args[1]); break; case "download": - copy(KylinConfig.getInstanceFromEnv(), KylinConfig.createInstanceFromUri(args[1])); + copy(KylinConfig.getInstanceFromEnv(), KylinConfig.createInstanceFromUri(args[1]), true); break; case "fetch": - copy(KylinConfig.getInstanceFromEnv(), KylinConfig.createInstanceFromUri(args[1]), args[2]); + copy(KylinConfig.getInstanceFromEnv(), KylinConfig.createInstanceFromUri(args[1]), args[2], true); break; case "upload": copy(KylinConfig.createInstanceFromUri(args[1]), KylinConfig.getInstanceFromEnv()); @@ -150,37 +150,54 @@ public class ResourceTool { System.out.println("" + result); return result; } + + public static void copy(KylinConfig srcConfig, KylinConfig dstConfig, String path) throws IOException { + copy(srcConfig, dstConfig, path, false); + } - public static void copy(KylinConfig srcConfig, KylinConfig dstConfig, String path) throws IOException { + //Do NOT invoke this method directly, unless you want to copy and possibly overwrite immutable resources such as UUID. + public static void copy(KylinConfig srcConfig, KylinConfig dstConfig, String path, boolean copyImmutableResource) throws IOException { ResourceStore src = ResourceStore.getStore(srcConfig); ResourceStore dst = ResourceStore.getStore(dstConfig); logger.info("Copy from {} to {}", src, dst); - copyR(src, dst, path); + copyR(src, dst, path, copyImmutableResource); } - public static void copy(KylinConfig srcConfig, KylinConfig dstConfig, List<String> paths) throws IOException { + public static void copy(KylinConfig srcConfig, KylinConfig dstConfig, List<String> paths) throws IOException { + copy(srcConfig, dstConfig, paths, false); + } + + //Do NOT invoke this method directly, unless you want to copy and possibly overwrite immutable resources such as UUID. + public static void copy(KylinConfig srcConfig, KylinConfig dstConfig, List<String> paths, boolean copyImmutableResource) throws IOException { ResourceStore src = ResourceStore.getStore(srcConfig); ResourceStore dst = ResourceStore.getStore(dstConfig); logger.info("Copy from {} to {}", src, dst); for (String path : paths) { - copyR(src, dst, path); + copyR(src, dst, path, copyImmutableResource); } } + public static void copy(KylinConfig srcConfig, KylinConfig dstConfig) throws IOException { - copy(srcConfig, dstConfig, "/"); + copy(srcConfig, dstConfig, false); } - - public static void copyR(ResourceStore src, ResourceStore dst, String path) throws IOException { + + //Do NOT invoke this method directly, unless you want to copy and possibly overwrite immutable resources such as UUID. + public static void copy(KylinConfig srcConfig, KylinConfig dstConfig, boolean copyImmutableResource) throws IOException { + copy(srcConfig, dstConfig, "/", copyImmutableResource); + } + + public static void copyR(ResourceStore src, ResourceStore dst, String path, boolean copyImmutableResource) throws IOException { + NavigableSet<String> children = src.listResources(path); if (children == null) { // case of resource (not a folder) - if (matchFilter(path)) { + if (copyImmutableResource || matchFilter(path)) { try { RawResource res = src.getResource(path); if (res != null) { @@ -197,8 +214,9 @@ public class ResourceTool { } else { // case of folder for (String child : children) - copyR(src, dst, child); + copyR(src, dst, child, copyImmutableResource); } + } private static boolean matchFilter(String path) { http://git-wip-us.apache.org/repos/asf/kylin/blob/071f3b92/tool/src/main/java/org/apache/kylin/tool/CubeMetaExtractor.java ---------------------------------------------------------------------- diff --git a/tool/src/main/java/org/apache/kylin/tool/CubeMetaExtractor.java b/tool/src/main/java/org/apache/kylin/tool/CubeMetaExtractor.java index 30bbb5e..bc8f34f 100644 --- a/tool/src/main/java/org/apache/kylin/tool/CubeMetaExtractor.java +++ b/tool/src/main/java/org/apache/kylin/tool/CubeMetaExtractor.java @@ -232,11 +232,11 @@ public class CubeMetaExtractor extends AbstractInfoExtractor { KylinConfig srcConfig = KylinConfig.getInstanceFromEnv(); KylinConfig dstConfig = KylinConfig.createInstanceFromUri(dest); - ResourceTool.copy(srcConfig, dstConfig, Lists.newArrayList(requiredResources)); + ResourceTool.copy(srcConfig, dstConfig, Lists.newArrayList(requiredResources), true); for (String r : optionalResources) { try { - ResourceTool.copy(srcConfig, dstConfig, Lists.newArrayList(r)); + ResourceTool.copy(srcConfig, dstConfig, Lists.newArrayList(r), true); } catch (Exception e) { logger.warn("Exception when copying optional resource {}. May be caused by resource missing. skip it.", r); }
