You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "James Taylor (JIRA)" <ji...@apache.org> on 2015/06/19 01:54:00 UTC
[jira] [Created] (PHOENIX-2057) Acquire lock in
MetaDataEndPointImpl.addRowsToChildViews() before calling doGetTable()
James Taylor created PHOENIX-2057:
-------------------------------------
Summary: Acquire lock in MetaDataEndPointImpl.addRowsToChildViews() before calling doGetTable()
Key: PHOENIX-2057
URL: https://issues.apache.org/jira/browse/PHOENIX-2057
Project: Phoenix
Issue Type: Bug
Reporter: James Taylor
Assignee: Samarth Jain
Rather than acquiring the row lock in doGetTable and then letting the lock be released and then getting it again right afterwards, it'd be better to acquire the lock upfront and pass it into doGetTable, like this:
{code}
private void 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];
// lock the rows corresponding to views so that no other thread can modify the view meta-data
// TODO: modify acquireLock to return the RowLock
RowLock rowLock = acquireLock(region, viewKey, locks);
byte[] viewKey = SchemaUtil.getTableKey(viewTenantId, viewSchemaName, viewName);
PTable view = doGetTable(viewKey, clientTimeStamp, rowLock);
if (view.getBaseColumnCount() == QueryConstants.DIVORCED_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;
}
{code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)