You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by sa...@apache.org on 2015/07/15 22:33:00 UTC
phoenix git commit: PHOENIX-2113 Diverged view prevents schema
propagation to the entire view hierarchy
Repository: phoenix
Updated Branches:
refs/heads/4.x-HBase-0.98 b95398bf4 -> 9e0598c0b
PHOENIX-2113 Diverged view prevents schema propagation to the entire view hierarchy
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/9e0598c0
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/9e0598c0
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/9e0598c0
Branch: refs/heads/4.x-HBase-0.98
Commit: 9e0598c0bbd629efd0ad1eec8e87f664793e68b7
Parents: b95398b
Author: Samarth <sa...@salesforce.com>
Authored: Wed Jul 15 13:32:50 2015 -0700
Committer: Samarth <sa...@salesforce.com>
Committed: Wed Jul 15 13:32:50 2015 -0700
----------------------------------------------------------------------
.../apache/phoenix/end2end/AlterTableIT.java | 34 +++++++++++---------
.../coprocessor/MetaDataEndpointImpl.java | 7 ++--
.../org/apache/phoenix/util/UpgradeUtil.java | 6 ++--
3 files changed, 24 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/phoenix/blob/9e0598c0/phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterTableIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterTableIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterTableIT.java
index 607f52a..1758dd4 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterTableIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterTableIT.java
@@ -2575,36 +2575,38 @@ public class AlterTableIT extends BaseOwnClusterHBaseManagedTimeIT {
}
@Test
- public void testDivorcedViewsStayDivorced() throws Exception {
- String baseTable = "testDivorcedViewsStayDivorced";
- String viewName = baseTable + "_view";
+ public void testDivergedViewsStayDiverged() throws Exception {
+ String baseTable = "testDivergedViewsStayDiverged";
+ String view1 = baseTable + "_view1";
+ String view2 = baseTable + "_view2";
try (Connection conn = DriverManager.getConnection(getUrl())) {
String tableDDL = "CREATE TABLE " + baseTable + " (PK1 VARCHAR NOT NULL PRIMARY KEY, V1 VARCHAR, V2 VARCHAR)";
conn.createStatement().execute(tableDDL);
- String viewDDL = "CREATE VIEW " + viewName + " AS SELECT * FROM " + baseTable;
+ String viewDDL = "CREATE VIEW " + view1 + " AS SELECT * FROM " + baseTable;
+ conn.createStatement().execute(viewDDL);
+
+ viewDDL = "CREATE VIEW " + view2 + " AS SELECT * FROM " + baseTable;
conn.createStatement().execute(viewDDL);
- // Drop the column inherited from base table to divorce the view
- String dropColumn = "ALTER VIEW " + viewName + " DROP COLUMN V2";
+ // Drop the column inherited from base table to make it diverged
+ String dropColumn = "ALTER VIEW " + view1 + " DROP COLUMN V2";
conn.createStatement().execute(dropColumn);
String alterBaseTable = "ALTER TABLE " + baseTable + " ADD V3 VARCHAR";
- try {
- conn.createStatement().execute(alterBaseTable);
- fail();
- }
- catch (SQLException e) {
- assertEquals("Unexpected exception", CANNOT_MUTATE_TABLE.getErrorCode(), e.getErrorCode());
- }
-
- // Column V3 shouldn't have propagated to the divorced view.
- String sql = "SELECT V3 FROM " + viewName;
+ conn.createStatement().execute(alterBaseTable);
+
+ // Column V3 shouldn't have propagated to the diverged view.
+ String sql = "SELECT V3 FROM " + view1;
try {
conn.createStatement().execute(sql);
} catch (SQLException e) {
assertEquals(SQLExceptionCode.COLUMN_NOT_FOUND.getErrorCode(), e.getErrorCode());
}
+
+ // However, column V3 should have propagated to the non-diverged view.
+ sql = "SELECT V3 FROM " + view2;
+ conn.createStatement().execute(sql);
}
}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/9e0598c0/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
index da8110c..3f43399 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
@@ -1693,11 +1693,10 @@ public class MetaDataEndpointImpl extends MetaDataProtocol implements Coprocesso
RowLock viewRowLock = acquireLock(region, viewKey, locks);
PTable view = doGetTable(viewKey, clientTimeStamp, viewRowLock);
if (view.getBaseColumnCount() == QueryConstants.DIVERGED_VIEW_BASE_COLUMN_COUNT) {
- // if a view has divorced itself from the base table, we don't allow schema changes
+ // if a view has diverged from the base table, we don't allow schema changes
// to be propagated to it.
- // FIXME: we should allow the update, but just not propagate it to this view
- // The one exception is PK changes which need to be propagated to diverged views as well
- return new MetaDataMutationResult(MutationCode.UNALLOWED_TABLE_MUTATION, EnvironmentEdgeManager.currentTimeMillis(), null);
+ // FIXME: We should allow PK changes to be propagated to a diverged view See PHOENIX-2110
+ continue;
}
int numColsAddedToBaseTable = 0;
int numColsAddedToView = 0;
http://git-wip-us.apache.org/repos/asf/phoenix/blob/9e0598c0/phoenix-core/src/main/java/org/apache/phoenix/util/UpgradeUtil.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/util/UpgradeUtil.java b/phoenix-core/src/main/java/org/apache/phoenix/util/UpgradeUtil.java
index d7e74ca..46a70f2 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/util/UpgradeUtil.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/util/UpgradeUtil.java
@@ -637,9 +637,9 @@ public class UpgradeUtil {
* two till one of the following happens:
*
* 1) We run into a view column which is different from column in the base physical table.
- * This means that the view has divorced itself from the base physical table. In such a case
+ * This means that the view has diverged from the base physical table. In such a case
* we will set a special value for the base column count. That special value will also be used
- * on the server side to filter out the divorced view so that meta-data changes on the base
+ * on the server side to filter out the diverged view so that meta-data changes on the base
* physical table are not propagated to it.
*
* 2) Every physical table column is present in the view. In that case we set the base column count
@@ -667,7 +667,7 @@ public class UpgradeUtil {
clearCache = true;
}
} else {
- // special value to denote that the view has divorced itself from the base physical table.
+ // special value to denote that the view has diverged from the base physical table.
upsertBaseColumnCountInHeaderRow(metaConnection, viewTenantId, viewSchema, viewName, DIVERGED_VIEW_BASE_COLUMN_COUNT);
baseColumnCountUpserted = true;
clearCache = true;