TAJO-2180: Disable unsetting timezone property in HiveCatalogStore.

Closes #1048

Signed-off-by: Jinho Kim <jhkim@apache.org>
diff --git a/CHANGES b/CHANGES
index 85fccd0..956e0d4 100644
--- a/CHANGES
+++ b/CHANGES
@@ -21,6 +21,9 @@
 
   IMPROVEMENT
 
+    TAJO-2180: Disable unsetting timezone property in HiveCatalogStore.
+    (Lee Dongjin via jinho)
+
     TAJO-2170: Disable unsetting timezone property. (Lee Dongjin via jinho)
 
     TAJO-2175: Fix some glitches in source code. (Lee Dongjin via jihoon)
diff --git a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/CatalogConstants.java b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/CatalogConstants.java
index 6acbc34..9c58815 100644
--- a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/CatalogConstants.java
+++ b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/CatalogConstants.java
@@ -18,6 +18,10 @@
 
 package org.apache.tajo.catalog;
 
+import com.google.common.collect.Sets;
+
+import java.util.Set;
+
 public class CatalogConstants {
   // Linux and BSD's max username length is 32. For compatibility with other systems, we should follow it.
   public final static int MAX_USERNAME_LENGTH = 32;
@@ -58,4 +62,5 @@
   public static final String COL_PARTITION_BYTES = "NUM_BYTES";
 
   public static final String INFORMATION_SCHEMA_DB_NAME = "information_schema";
+  protected static final Set<String> UNREMOVABLE_PROPERTY_SET = Sets.newHashSet("timezone");
 }
diff --git a/tajo-catalog/tajo-catalog-drivers/tajo-hive/src/main/java/org/apache/tajo/catalog/store/HiveCatalogStore.java b/tajo-catalog/tajo-catalog-drivers/tajo-hive/src/main/java/org/apache/tajo/catalog/store/HiveCatalogStore.java
index cecd0f4..755b5d0 100644
--- a/tajo-catalog/tajo-catalog-drivers/tajo-hive/src/main/java/org/apache/tajo/catalog/store/HiveCatalogStore.java
+++ b/tajo-catalog/tajo-catalog-drivers/tajo-hive/src/main/java/org/apache/tajo/catalog/store/HiveCatalogStore.java
@@ -19,6 +19,7 @@
 package org.apache.tajo.catalog.store;
 
 import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
 import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -817,10 +818,18 @@
     try {
       client = clientPool.getClient();
       Table table = client.getHiveClient().getTable(databaseName, tableName);
-      for (String propertyKey : ProtoUtil.convertStrings(propertyKeys)) {
-        table.getParameters().remove(propertyKey);
+
+      Set<String> keys = Sets.newHashSet(propertyKeys.getValuesList());
+      Set<String> violations = Sets.intersection(keys, UNREMOVABLE_PROPERTY_SET);
+
+      if (!violations.isEmpty()) {
+        throw new UnremovableTablePropertyException(violations.toArray(new String[0]));
+      } else {
+        for (String key : keys) {
+          table.getParameters().remove(key);
+        }
+        client.getHiveClient().alter_table(databaseName, tableName, table);
       }
-      client.getHiveClient().alter_table(databaseName, tableName, table);
     } catch (NoSuchObjectException nsoe) {
     } catch (Exception e) {
       throw new TajoInternalError(e);
diff --git a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/AbstractDBStore.java b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/AbstractDBStore.java
index 023dfca..716bbcb 100644
--- a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/AbstractDBStore.java
+++ b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/AbstractDBStore.java
@@ -64,7 +64,6 @@
   protected final String connectionPassword;
   protected final String catalogUri;
 
-  protected final Set<String> unremovablePropertySet = Sets.newHashSet("timezone");
   protected final String insertPartitionSql = "INSERT INTO " + TB_PARTTIONS
     + "(" + COL_TABLES_PK + ", PARTITION_NAME, PATH, " + COL_PARTITION_BYTES
     + ") VALUES (?, ? , ?, ?)";
@@ -1121,7 +1120,7 @@
     PreparedStatement pstmt = null;
 
     Set<String> keys = Sets.newHashSet(propertyKeys.getValuesList());
-    Set<String> violations = Sets.intersection(keys, unremovablePropertySet);
+    Set<String> violations = Sets.intersection(keys, UNREMOVABLE_PROPERTY_SET);
 
     if (!violations.isEmpty()) {
       throw new UnremovableTablePropertyException(violations.toArray(new String[0]));