[
https://issues.apache.org/jira/browse/PHOENIX-2099?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14622616#comment-14622616
]
Samarth Jain commented on PHOENIX-2099:
---------------------------------------
Thanks for the review [~jamestaylor]. Regarding locking physical table row when
a view is created, we do have the following code in MetadataEndPointImpl:
{code}
byte[] parentTableName = MetaDataUtil.getParentTableName(tableMetadata);
byte[] lockTableName = parentTableName == null ? tableName :
parentTableName;
byte[] lockKey = SchemaUtil.getTableKey(tenantIdBytes, schemaName,
lockTableName);
byte[] key =
parentTableName == null ? lockKey :
SchemaUtil.getTableKey(tenantIdBytes,
schemaName, tableName);
byte[] parentKey = parentTableName == null ? null : lockKey;
HRegion region = env.getRegion();
MetaDataMutationResult result = checkTableKeyInRegion(lockKey,
region);
if (result != null) {
done.run(MetaDataMutationResult.toProto(result));
return;
}
List<RowLock> locks = Lists.newArrayList();
long clientTimeStamp =
MetaDataUtil.getClientTimeStamp(tableMetadata);
try {
acquireLock(region, lockKey, locks);
if (key != lockKey) {
acquireLock(region, key, locks);
}
{code}
On debugging, it seems like there is a bug here where the code is not able to
figure out the parent table row. I will file a separate JIRA to track that
work. Will get this committed first.
> Backward Compatibility - Concurrent modification error on connect
> -----------------------------------------------------------------
>
> Key: PHOENIX-2099
> URL: https://issues.apache.org/jira/browse/PHOENIX-2099
> Project: Phoenix
> Issue Type: Bug
> Affects Versions: 4.5.0
> Reporter: Mujtaba Chohan
> Assignee: Samarth Jain
> Attachments: PHOENIX-2099-v3.patch, PHOENIX-2099.patch,
> PHOENIX-2099.v2.patch, PHOENIX-2099_v4.patch
>
>
> With client/server on v4.3.0. Create few tables. Upgrade client/server to
> latest 4.x-0.98 and connect:
> Exception:
> Error: ERROR 301 (23000): Concurrent modification to table.
> tableName=SYSTEM.CATALOG (state=23000,code=301)
> org.apache.phoenix.schema.ConcurrentTableMutationException: ERROR 301
> (23000): Concurrent modification to table. tableName=SYSTEM.CATALOG
> at
> org.apache.phoenix.schema.MetaDataClient.processMutationResult(MetaDataClient.java:2223)
> at
> org.apache.phoenix.schema.MetaDataClient.addColumn(MetaDataClient.java:2518)
> at
> org.apache.phoenix.jdbc.PhoenixStatement$ExecutableAddColumnStatement$1.execute(PhoenixStatement.java:893)
> at
> org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:303)
> at
> org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:295)
> at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
> at
> org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:293)
> at
> org.apache.phoenix.jdbc.PhoenixStatement.executeUpdate(PhoenixStatement.java:1189)
> at
> org.apache.phoenix.query.ConnectionQueryServicesImpl.addColumn(ConnectionQueryServicesImpl.java:1836)
> at
> org.apache.phoenix.query.ConnectionQueryServicesImpl.access$600(ConnectionQueryServicesImpl.java:174)
> at
> org.apache.phoenix.query.ConnectionQueryServicesImpl$12.call(ConnectionQueryServicesImpl.java:1958)
> at
> org.apache.phoenix.query.ConnectionQueryServicesImpl$12.call(ConnectionQueryServicesImpl.java:1868)
> at
> org.apache.phoenix.util.PhoenixContextExecutor.call(PhoenixContextExecutor.java:77)
> at
> org.apache.phoenix.query.ConnectionQueryServicesImpl.init(ConnectionQueryServicesImpl.java:1868)
> at
> org.apache.phoenix.jdbc.PhoenixDriver.getConnectionQueryServices(PhoenixDriver.java:180)
> at
> org.apache.phoenix.jdbc.PhoenixEmbeddedDriver.connect(PhoenixEmbeddedDriver.java:132)
> at org.apache.phoenix.jdbc.PhoenixDriver.connect(PhoenixDriver.java:151)
> at sqlline.SqlLine$DatabaseConnection.connect(SqlLine.java:4650)
> at sqlline.SqlLine$DatabaseConnection.getConnection(SqlLine.java:4701)
> Also getting the exception when connecting with v4.3.0 on client and latest
> 4.x-0.98 on server:
> 0: jdbc:phoenix:localhost> ALTER TABLE T1 ADD TESTCOL1 VARCHAR, TESTCOL2
> INTEGER;
> Error: ERROR 301 (23000): Concurrent modification to table. tableName=T1
> (state=23000,code=301)
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)