You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by jh...@apache.org on 2016/08/28 07:40:13 UTC

tajo git commit: TAJO-2170: Disable unsetting timezone property.

Repository: tajo
Updated Branches:
  refs/heads/master d5ffbe645 -> 1858c968c


TAJO-2170: Disable unsetting timezone property.

Closes #1045

Signed-off-by: Jinho Kim <jh...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/1858c968
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/1858c968
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/1858c968

Branch: refs/heads/master
Commit: 1858c968c6376ea312fcd6459a080e29a9f1641a
Parents: d5ffbe6
Author: Lee Dongjin <do...@apache.org>
Authored: Sun Aug 28 16:37:11 2016 +0900
Committer: Jinho Kim <jh...@apache.org>
Committed: Sun Aug 28 16:37:11 2016 +0900

----------------------------------------------------------------------
 CHANGES                                         |  2 ++
 .../tajo/catalog/store/AbstractDBStore.java     | 15 +++++++--
 .../apache/tajo/catalog/store/CatalogStore.java |  3 +-
 .../org/apache/tajo/catalog/TestCatalog.java    |  4 +--
 .../apache/tajo/exception/ErrorMessages.java    |  1 +
 .../UnremovableTablePropertyException.java      | 33 ++++++++++++++++++++
 tajo-common/src/main/proto/errors.proto         |  1 +
 7 files changed, 54 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tajo/blob/1858c968/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index ec9320e..d7f7c20 100644
--- a/CHANGES
+++ b/CHANGES
@@ -21,6 +21,8 @@ Release 0.12.0 - unreleased
 
   IMPROVEMENT
 
+    TAJO-2170: Disable unsetting timezone property. (Lee Dongjin via jinho)
+
     TAJO-2175: Fix some glitches in source code. (Lee Dongjin via jihoon)
 
     TAJO-2146: Fragment interface cleanup. (jihoon)

http://git-wip-us.apache.org/repos/asf/tajo/blob/1858c968/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/AbstractDBStore.java
----------------------------------------------------------------------
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 c37889a..023dfca 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
@@ -21,7 +21,9 @@
  */
 package org.apache.tajo.catalog.store;
 
+import com.google.common.collect.Sets;
 import com.google.protobuf.InvalidProtocolBufferException;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;
@@ -62,6 +64,7 @@ public abstract class AbstractDBStore extends CatalogConstants implements Catalo
   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 (?, ? , ?, ?)";
@@ -978,7 +981,7 @@ public abstract class AbstractDBStore extends CatalogConstants implements Catalo
   public void alterTable(CatalogProtos.AlterTableDescProto alterTableDescProto)
       throws UndefinedDatabaseException, DuplicateTableException, DuplicateColumnException,
       DuplicatePartitionException, UndefinedPartitionException, UndefinedColumnException, UndefinedTableException,
-      UndefinedPartitionMethodException, AmbiguousTableException {
+      UndefinedPartitionMethodException, AmbiguousTableException, UnremovableTablePropertyException {
 
     String[] splitted = IdentifierUtil.splitTableName(alterTableDescProto.getTableName());
     if (splitted.length == 1) {
@@ -1110,12 +1113,20 @@ public abstract class AbstractDBStore extends CatalogConstants implements Catalo
     }
   }
 
-  private void unsetProperties(final int tableId, final PrimitiveProtos.StringListProto propertyKeys) {
+  private void unsetProperties(final int tableId, final PrimitiveProtos.StringListProto propertyKeys)
+      throws UnremovableTablePropertyException {
     final String deleteSql = "DELETE FROM " + TB_OPTIONS + " WHERE TID=? AND KEY_=?";
 
     Connection conn;
     PreparedStatement pstmt = null;
 
+    Set<String> keys = Sets.newHashSet(propertyKeys.getValuesList());
+    Set<String> violations = Sets.intersection(keys, unremovablePropertySet);
+
+    if (!violations.isEmpty()) {
+      throw new UnremovableTablePropertyException(violations.toArray(new String[0]));
+    }
+
     Map<String, String> oldProperties = getTableOptions(tableId);
 
     try {

http://git-wip-us.apache.org/repos/asf/tajo/blob/1858c968/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/CatalogStore.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/CatalogStore.java b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/CatalogStore.java
index 5288979..221fd6e 100644
--- a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/CatalogStore.java
+++ b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/CatalogStore.java
@@ -71,7 +71,8 @@ public interface CatalogStore extends Closeable {
 
   void alterTable(CatalogProtos.AlterTableDescProto alterTableDescProto) throws UndefinedDatabaseException,
       DuplicateTableException, DuplicateColumnException, DuplicatePartitionException, UndefinedPartitionException,
-      UndefinedTableException, UndefinedColumnException, UndefinedPartitionMethodException, AmbiguousTableException;
+      UndefinedTableException, UndefinedColumnException, UndefinedPartitionMethodException, AmbiguousTableException,
+      UnremovableTablePropertyException;
 
   List<TableDescriptorProto> getAllTables();
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/1858c968/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalog.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalog.java b/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalog.java
index e385765..1b82e63 100644
--- a/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalog.java
+++ b/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalog.java
@@ -1003,9 +1003,9 @@ public class TestCatalog {
     assertEquals(newTimeZone, setPropertyDesc.getMeta().getProperty("timezone"));
 
     //UNSET_PROPERTY
-    catalog.alterTable(createMockAlterTableUnsetProperty(Sets.newHashSet("timezone", "dummy")));
+    catalog.alterTable(createMockAlterTableUnsetProperty(Sets.newHashSet("dummy")));
     setPropertyDesc = catalog.getTableDesc("default","mynewcooltable");
-    assertFalse(setPropertyDesc.getMeta().getPropertySet().containsKey("timezone"));
+    assertTrue(setPropertyDesc.getMeta().getPropertySet().containsKey("timezone"));
     assertFalse(setPropertyDesc.getMeta().getPropertySet().containsKey("dummy"));
   }
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/1858c968/tajo-common/src/main/java/org/apache/tajo/exception/ErrorMessages.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/exception/ErrorMessages.java b/tajo-common/src/main/java/org/apache/tajo/exception/ErrorMessages.java
index 8f45bdd..24aba52 100644
--- a/tajo-common/src/main/java/org/apache/tajo/exception/ErrorMessages.java
+++ b/tajo-common/src/main/java/org/apache/tajo/exception/ErrorMessages.java
@@ -113,6 +113,7 @@ public class ErrorMessages {
     ADD_MESSAGE(INVALID_TABLE_PROPERTY, "invalid table property '%s': '%s'", 2);
     ADD_MESSAGE(MISSING_TABLE_PROPERTY, "table property '%s' required for '%s'", 2);
     ADD_MESSAGE(INVALID_TABLESPACE_URI, "Invalid tablespace '%s' for table '%s'", 2);
+    ADD_MESSAGE(UNREMOVABLE_TABLE_PROPERTY, "Removing following properties is disabled: %s", 1);
 
     ADD_MESSAGE(AMBIGUOUS_PARTITION_DIRECTORY, "There is a directory which is assumed to be a partitioned directory" +
       " : '%s'", 1);

http://git-wip-us.apache.org/repos/asf/tajo/blob/1858c968/tajo-common/src/main/java/org/apache/tajo/exception/UnremovableTablePropertyException.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/exception/UnremovableTablePropertyException.java b/tajo-common/src/main/java/org/apache/tajo/exception/UnremovableTablePropertyException.java
new file mode 100644
index 0000000..0a8a9dd
--- /dev/null
+++ b/tajo-common/src/main/java/org/apache/tajo/exception/UnremovableTablePropertyException.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tajo.exception;
+
+import org.apache.tajo.error.Errors.ResultCode;
+import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos.ReturnState;
+
+public class UnremovableTablePropertyException extends TajoException {
+
+  public UnremovableTablePropertyException(ReturnState e) {
+    super(e);
+  }
+
+  public UnremovableTablePropertyException(String... keys) {
+    super(ResultCode.UNREMOVABLE_TABLE_PROPERTY, ErrorMessages.concat(keys));
+  }
+}

http://git-wip-us.apache.org/repos/asf/tajo/blob/1858c968/tajo-common/src/main/proto/errors.proto
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/proto/errors.proto b/tajo-common/src/main/proto/errors.proto
index cfb7242..2a7ec98 100644
--- a/tajo-common/src/main/proto/errors.proto
+++ b/tajo-common/src/main/proto/errors.proto
@@ -173,6 +173,7 @@ enum ResultCode {
   INVALID_TABLE_PROPERTY                = 1004; // SQLState: ? - Invalid Table Property
   MISSING_TABLE_PROPERTY                = 1005; // SQLState: ? - Missing table property
   INVALID_TABLESPACE_URI                = 1006;
+  UNREMOVABLE_TABLE_PROPERTY            = 1007;
 
   // Client Connection
   CLIENT_CONNECTION_EXCEPTION           = 1101; // SQLState: 08000 - Client connection error