phoenix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Samarth Jain (JIRA)" <j...@apache.org>
Subject [jira] [Resolved] (PHOENIX-2110) Primary key changes should be pushed to diverged views
Date Wed, 22 Jul 2015 18:47:05 GMT

     [ https://issues.apache.org/jira/browse/PHOENIX-2110?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Samarth Jain resolved PHOENIX-2110.
-----------------------------------
    Resolution: Fixed

> Primary key changes should be pushed to diverged views
> ------------------------------------------------------
>
>                 Key: PHOENIX-2110
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-2110
>             Project: Phoenix
>          Issue Type: Improvement
>            Reporter: James Taylor
>            Assignee: Samarth Jain
>             Fix For: 4.5.0
>
>         Attachments: PHOENIX-2110.patch
>
>
> 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)

Mime
View raw message