HIVE-17385: incremental repl error for non-native tables

Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/45f3fac5
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/45f3fac5
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/45f3fac5

Branch: refs/heads/hive-14535
Commit: 45f3fac554ada3cd4b15a7bf3c9f0047c65fa616
Parents: 601c764
Author: Daniel Dai <da...@hortonworks.com>
Authored: Thu Aug 31 21:08:02 2017 -0700
Committer: Daniel Dai <da...@hortonworks.com>
Committed: Thu Aug 31 21:08:02 2017 -0700

----------------------------------------------------------------------
 .../apache/hadoop/hive/ql/parse/EximUtil.java   | 30 ++++++++++++++++++++
 .../hive/ql/parse/ImportSemanticAnalyzer.java   |  5 ++++
 .../hive/ql/parse/repl/dump/TableExport.java    |  7 +----
 .../repl/dump/events/CreateTableHandler.java    |  8 ++++--
 .../ql/parse/repl/dump/io/TableSerializer.java  |  7 ++---
 5 files changed, 44 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/45f3fac5/ql/src/java/org/apache/hadoop/hive/ql/parse/EximUtil.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/EximUtil.java 
b/ql/src/java/org/apache/hadoop/hive/ql/parse/EximUtil.java
index 22094c0..40c34bf 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/EximUtil.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/EximUtil.java
@@ -32,6 +32,7 @@ import org.apache.hadoop.hive.ql.exec.Task;
 import org.apache.hadoop.hive.ql.hooks.ReadEntity;
 import org.apache.hadoop.hive.ql.hooks.WriteEntity;
 import org.apache.hadoop.hive.ql.metadata.Hive;
+import org.apache.hadoop.hive.ql.metadata.Table;
 import org.apache.hadoop.hive.ql.parse.repl.dump.io.DBSerializer;
 import org.apache.hadoop.hive.ql.parse.repl.dump.io.JsonWriter;
 import org.apache.hadoop.hive.ql.parse.repl.dump.io.ReplicationSpecSerializer;
@@ -385,4 +386,33 @@ public class EximUtil {
     };
   }
 
+  /**
+   * Verify if a table should be exported or not
+   */
+  public static Boolean shouldExportTable(ReplicationSpec replicationSpec, 
Table tableHandle) throws SemanticException {
+    if (replicationSpec == null)
+    {
+      replicationSpec = new ReplicationSpec();
+    }
+
+    if (replicationSpec.isNoop())
+    {
+      return false;
+    }
+
+    if (tableHandle == null)
+    {
+      return false;
+    }
+
+    if (replicationSpec.isInReplicationScope()) {
+      return !(tableHandle == null || tableHandle.isTemporary() || 
tableHandle.isNonNative());
+    }
+
+    if (tableHandle.isNonNative()) {
+      throw new SemanticException(ErrorMsg.EXIM_FOR_NON_NATIVE.getMsg());
+    }
+
+    return true;
+  }
 }

http://git-wip-us.apache.org/repos/asf/hive/blob/45f3fac5/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
----------------------------------------------------------------------
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java 
b/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
index f8d5c8d..7f3460f 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
@@ -197,6 +197,11 @@ public class ImportSemanticAnalyzer extends 
BaseSemanticAnalyzer {
       throw new SemanticException(ErrorMsg.INVALID_PATH.getMsg(), e);
     }
 
+    if (rv.getTable() == null) {
+      // nothing to do here, silently return.
+      return false;
+    }
+
     ReplicationSpec replicationSpec = rv.getReplicationSpec();
     if (replicationSpec.isNoop()){
       // nothing to do here, silently return.

http://git-wip-us.apache.org/repos/asf/hive/blob/45f3fac5/ql/src/java/org/apache/hadoop/hive/ql/parse/repl/dump/TableExport.java
----------------------------------------------------------------------
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/parse/repl/dump/TableExport.java 
b/ql/src/java/org/apache/hadoop/hive/ql/parse/repl/dump/TableExport.java
index 7533a39..e490633 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/repl/dump/TableExport.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/repl/dump/TableExport.java
@@ -156,12 +156,7 @@ public class TableExport {
   }
 
   private boolean shouldExport() throws SemanticException {
-    if (replicationSpec.isInReplicationScope()) {
-      return !(tableSpec.tableHandle.isTemporary() || 
tableSpec.tableHandle.isNonNative());
-    } else if (tableSpec.tableHandle.isNonNative()) {
-      throw new SemanticException(ErrorMsg.EXIM_FOR_NON_NATIVE.getMsg());
-    }
-    return true;
+    return EximUtil.shouldExportTable(replicationSpec, tableSpec.tableHandle);
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/hive/blob/45f3fac5/ql/src/java/org/apache/hadoop/hive/ql/parse/repl/dump/events/CreateTableHandler.java
----------------------------------------------------------------------
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/parse/repl/dump/events/CreateTableHandler.java
 
b/ql/src/java/org/apache/hadoop/hive/ql/parse/repl/dump/events/CreateTableHandler.java
index 8737d50..ef6f340 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/parse/repl/dump/events/CreateTableHandler.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/parse/repl/dump/events/CreateTableHandler.java
@@ -23,13 +23,12 @@ import 
org.apache.hadoop.hive.metastore.api.NotificationEvent;
 import org.apache.hadoop.hive.metastore.messaging.CreateTableMessage;
 import org.apache.hadoop.hive.ql.metadata.Table;
 import org.apache.hadoop.hive.ql.parse.EximUtil;
+import org.apache.hadoop.hive.ql.parse.repl.DumpType;
 
 import java.io.BufferedWriter;
 import java.io.IOException;
 import java.io.OutputStreamWriter;
 
-import org.apache.hadoop.hive.ql.parse.repl.DumpType;
-
 class CreateTableHandler extends AbstractEventHandler {
 
   CreateTableHandler(NotificationEvent event) {
@@ -48,6 +47,11 @@ class CreateTableHandler extends AbstractEventHandler {
     }
 
     Table qlMdTable = new Table(tobj);
+
+    if (!EximUtil.shouldExportTable(withinContext.replicationSpec, qlMdTable)) 
{
+      return;
+    }
+
     if (qlMdTable.isView()) {
       withinContext.replicationSpec.setIsMetadataOnly(true);
     }

http://git-wip-us.apache.org/repos/asf/hive/blob/45f3fac5/ql/src/java/org/apache/hadoop/hive/ql/parse/repl/dump/io/TableSerializer.java
----------------------------------------------------------------------
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/parse/repl/dump/io/TableSerializer.java 
b/ql/src/java/org/apache/hadoop/hive/ql/parse/repl/dump/io/TableSerializer.java
index 92408a4..c3a70cc 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/parse/repl/dump/io/TableSerializer.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/parse/repl/dump/io/TableSerializer.java
@@ -21,6 +21,7 @@ import org.apache.hadoop.hive.metastore.TableType;
 import org.apache.hadoop.hive.metastore.api.Table;
 import org.apache.hadoop.hive.ql.ErrorMsg;
 import org.apache.hadoop.hive.ql.metadata.Partition;
+import org.apache.hadoop.hive.ql.parse.EximUtil;
 import org.apache.hadoop.hive.ql.parse.ReplicationSpec;
 import org.apache.hadoop.hive.ql.parse.SemanticException;
 import org.apache.thrift.TException;
@@ -44,7 +45,7 @@ public class TableSerializer implements JsonWriter.Serializer 
{
   @Override
   public void writeTo(JsonWriter writer, ReplicationSpec 
additionalPropertiesProvider)
       throws SemanticException, IOException {
-    if (cannotReplicateTable(additionalPropertiesProvider)) {
+    if (!EximUtil.shouldExportTable(additionalPropertiesProvider, 
tableHandle)) {
       return;
     }
 
@@ -61,10 +62,6 @@ public class TableSerializer implements 
JsonWriter.Serializer {
     }
   }
 
-  private boolean cannotReplicateTable(ReplicationSpec 
additionalPropertiesProvider) {
-    return tableHandle == null || additionalPropertiesProvider.isNoop();
-  }
-
   private Table addPropertiesToTable(Table table, ReplicationSpec 
additionalPropertiesProvider)
       throws SemanticException, IOException {
     if (additionalPropertiesProvider.isInReplicationScope()) {

Reply via email to