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

Reply via email to