James Taylor created PHOENIX-2110:
-------------------------------------
Summary: Diverged view should not block adding of column to base
table
Key: PHOENIX-2110
URL: https://issues.apache.org/jira/browse/PHOENIX-2110
Project: Phoenix
Issue Type: Bug
Reporter: James Taylor
Assignee: Samarth Jain
If a view is diverged, we should not abort the adding of a column to the base
table. Instead, we should add it if it's a PK (as otherwise the view will
become unusable) and not add it otherwise. If that's problematic, then perhaps
we can just block it if a PK column is being added.
The code is in MetaDataEndPointImpl here:
{code}
private MetaDataMutationResult addRowsToChildViews(List<Mutation>
tableMetadata, List<Mutation> mutationsForAddingColumnsToViews, byte[]
schemaName, byte[] tableName,
List<ImmutableBytesPtr> invalidateList, long clientTimeStamp,
TableViewFinderResult childViewsResult,
Region region, List<RowLock> locks) throws IOException,
SQLException {
for (Result viewResult : childViewsResult.getResults()) {
byte[][] rowViewKeyMetaData = new byte[3][];
getVarChars(viewResult.getRow(), 3, rowViewKeyMetaData);
byte[] viewTenantId =
rowViewKeyMetaData[PhoenixDatabaseMetaData.TENANT_ID_INDEX];
byte[] viewSchemaName =
rowViewKeyMetaData[PhoenixDatabaseMetaData.SCHEMA_NAME_INDEX];
byte[] viewName =
rowViewKeyMetaData[PhoenixDatabaseMetaData.TABLE_NAME_INDEX];
byte[] viewKey = SchemaUtil.getTableKey(viewTenantId,
viewSchemaName, viewName);
// lock the rows corresponding to views so that no other thread can
modify the view meta-data
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
// to be propagated to it.
return new
MetaDataMutationResult(MutationCode.UNALLOWED_TABLE_MUTATION,
EnvironmentEdgeManager.currentTimeMillis(), null);
}
{code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)