Jacob Isaac created PHOENIX-7590:
------------------------------------

             Summary: Threads deadlock when dropping column on view with 
partial indexes
                 Key: PHOENIX-7590
                 URL: https://issues.apache.org/jira/browse/PHOENIX-7590
             Project: Phoenix
          Issue Type: Bug
    Affects Versions: 5.2.0
            Reporter: Jacob Isaac


To reproduce the scenario run the following test -

{{@Test}}
{{public void testDropColumnForMultiTenantTableWithIndex() throws Exception {}}
{{String table = generateUniqueName();}}
{{String view = generateUniqueName();}}
{{String index = generateUniqueName();}}

{{try (Connection conn = DriverManager.getConnection(getUrl())) {}}
{{conn.setAutoCommit(true);}}
{{try (Statement stmt = conn.createStatement()) {}}
{{stmt.execute("CREATE TABLE IF NOT EXISTS " + table +}}
{{" (ID CHAR(10) NOT NULL,KEY_PREFIX CHAR(3) NOT NULL, NON_PK3 CHAR(15)," +}}
{{" CONSTRAINT PK PRIMARY KEY (ID,KEY_PREFIX)) MULTI_TENANT=TRUE");}}
{{// create view}}
{{stmt.execute(}}
{{"CREATE VIEW IF NOT EXISTS " + view +}}
{{" (PK1 DATE NOT NULL,PK2 CHAR(15) NOT NULL," +}}
{{"NON_PK1 CHAR(15),NON_PK2 CHAR(15) CONSTRAINT PKVIEW PRIMARY KEY (PK1,PK2)) " 
+}}
{{"AS SELECT * FROM " + table + " WHERE KEY_PREFIX = '123'");}}

{{stmt.execute("CREATE INDEX " + index + " ON " + view +}}
{{" (PK2, PK1) INCLUDE (NON_PK1, NON_PK2) WHERE KEY_PREFIX = '123'");}}
{{// drop column}}
{{stmt.execute("ALTER VIEW " + view + " DROP COLUMN NON_PK3");}}
{{}}}
{{}}}
{{}}}

{{sample log output}}

{{2025-04-25T09:57:27,361 DEBUG [master/localhost:0.Chore.1] 
hbase.ScheduledChore(165): CatalogJanitor-localhost:51389 execution time: 32 
ms.}}
{{2025-04-25T09:57:27,373 ERROR 
[RpcServer.Metadata.Fifo.handler=1,queue=0,port=51391] 
coprocessor.MetaDataEndpointImpl(767): getTable failed}}
{{java.io.IOException: Timed out waiting for lock for row: \x00\x00N000002 in 
region 2d1454d78354b8b37e3da10a834b2b1d}}
{{    at 
org.apache.hadoop.hbase.regionserver.HRegion.getRowLockInternal(HRegion.java:6496)
 ~[hbase-server-2.5.11-hadoop3.jar:2.5.11-hadoop3]}}
{{    at 
org.apache.hadoop.hbase.regionserver.HRegion.lambda$getRowLock$21(HRegion.java:6526)
 ~[hbase-server-2.5.11-hadoop3.jar:2.5.11-hadoop3]}}
{{    at org.apache.hadoop.hbase.trace.TraceUtil.trace(TraceUtil.java:216) 
~[hbase-common-2.5.11-hadoop3.jar:2.5.11-hadoop3]}}
{{    at 
org.apache.hadoop.hbase.regionserver.HRegion.getRowLock(HRegion.java:6526) 
~[hbase-server-2.5.11-hadoop3.jar:2.5.11-hadoop3]}}
{{    at 
org.apache.hadoop.hbase.regionserver.HRegion.getRowLock(HRegion.java:6433) 
~[hbase-server-2.5.11-hadoop3.jar:2.5.11-hadoop3]}}
{{    at 
org.apache.phoenix.coprocessor.MetaDataEndpointImpl.acquireLock(MetaDataEndpointImpl.java:3245)
 ~[classes/:?]}}
{{    at 
org.apache.phoenix.coprocessor.MetaDataEndpointImpl.doGetTable(MetaDataEndpointImpl.java:3972)
 ~[classes/:?]}}
{{    at 
org.apache.phoenix.coprocessor.MetaDataEndpointImpl.getTable(MetaDataEndpointImpl.java:717)
 ~[classes/:?]}}
{{    at 
org.apache.phoenix.coprocessor.generated.MetaDataProtos$MetaDataService.callMethod(MetaDataProtos.java:17524)
 ~[classes/:?]}}
{{    at 
org.apache.hadoop.hbase.regionserver.HRegion.execService(HRegion.java:7930) 
~[hbase-server-2.5.11-hadoop3.jar:2.5.11-hadoop3]}}
{{    at 
org.apache.hadoop.hbase.regionserver.RSRpcServices.execServiceOnRegion(RSRpcServices.java:2538)
 ~[hbase-server-2.5.11-hadoop3.jar:2.5.11-hadoop3]}}
{{    at 
org.apache.hadoop.hbase.regionserver.RSRpcServices.execService(RSRpcServices.java:2512)
 ~[hbase-server-2.5.11-hadoop3.jar:2.5.11-hadoop3]}}
{{    at 
org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:45014)
 ~[hbase-protocol-shaded-2.5.11-hadoop3.jar:2.5.11-hadoop3]}}
{{    at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:415) 
~[hbase-server-2.5.11-hadoop3.jar:?]}}
{{    at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:124) 
~[hbase-server-2.5.11-hadoop3.jar:?]}}
{{    at org.apache.hadoop.hbase.ipc.RpcHandler.run(RpcHandler.java:102) 
~[hbase-server-2.5.11-hadoop3.jar:?]}}
{{    at org.apache.hadoop.hbase.ipc.RpcHandler.run(RpcHandler.java:82) 
~[hbase-server-2.5.11-hadoop3.jar:?]}}
{{2025-04-25T09:57:27,379 DEBUG 
[RpcServer.Metadata.Fifo.handler=1,queue=0,port=51391] 
ipc.MetricsHBaseServer(144): Unknown exception type}}
{{ja}}

{{jstack reveals -}}

 
"RpcServer.Metadata.Fifo.handler=0,queue=0,port=50960" #253 daemon prio=5 
os_prio=31 tid=0x00007f9391451000 nid=0x2412b waiting on condition 
[0x0000000317365000]
   java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for  <0x00000006ce6b4000> (a java.util.concurrent.FutureTask)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.FutureTask.awaitDone(FutureTask.java:429)
at java.util.concurrent.FutureTask.get(FutureTask.java:191)
at 
org.apache.hadoop.hbase.client.HTable.lambda$coprocessorService$23(HTable.java:1151)
at org.apache.hadoop.hbase.client.HTable$$Lambda$667/1170482099.run(Unknown 
Source)
at org.apache.hadoop.hbase.trace.TraceUtil.trace(TraceUtil.java:187)
at org.apache.hadoop.hbase.client.HTable.coprocessorService(HTable.java:1128)
at org.apache.hadoop.hbase.client.HTable.coprocessorService(HTable.java:1114)
at 
org.apache.phoenix.query.ConnectionQueryServicesImpl.metaDataCoprocessorExec(ConnectionQueryServicesImpl.java:2214)
at 
org.apache.phoenix.query.ConnectionQueryServicesImpl.metaDataCoprocessorExec(ConnectionQueryServicesImpl.java:2192)
at 
org.apache.phoenix.query.ConnectionQueryServicesImpl.getTable(ConnectionQueryServicesImpl.java:2465)
at 
org.apache.phoenix.query.DelegateConnectionQueryServices.getTable(DelegateConnectionQueryServices.java:152)
at org.apache.phoenix.schema.MetaDataClient.updateCache(MetaDataClient.java:694)
at org.apache.phoenix.schema.MetaDataClient.updateCache(MetaDataClient.java:576)
at 
org.apache.phoenix.compile.FromCompiler$BaseColumnResolver.createTableRef(FromCompiler.java:801)
at 
org.apache.phoenix.compile.FromCompiler$SingleTableColumnResolver.<init>(FromCompiler.java:455)
at 
org.apache.phoenix.compile.FromCompiler.getResolverForQuery(FromCompiler.java:234)
at 
org.apache.phoenix.compile.FromCompiler.getResolverForQuery(FromCompiler.java:212)
at org.apache.phoenix.util.ParseNodeUtil.rewrite(ParseNodeUtil.java:177)
at 
org.apache.phoenix.jdbc.PhoenixStatement$ExecutableSelectStatement.compilePlan(PhoenixStatement.java:841)
at 
org.apache.phoenix.jdbc.PhoenixStatement$ExecutableSelectStatement.compilePlan(PhoenixStatement.java:814)
at 
org.apache.phoenix.jdbc.PhoenixStatement.compileQuery(PhoenixStatement.java:2392)
at 
org.apache.phoenix.jdbc.PhoenixPreparedStatement.compileQuery(PhoenixPreparedStatement.java:157)
at 
org.apache.phoenix.schema.PTableImpl.buildIndexWhereExpression(PTableImpl.java:2535)
at 
org.apache.phoenix.schema.PTableImpl.getIndexWhereExpression(PTableImpl.java:2548)
at org.apache.phoenix.index.IndexMaintainer.<init>(IndexMaintainer.java:699)
at org.apache.phoenix.index.IndexMaintainer.create(IndexMaintainer.java:161)
at org.apache.phoenix.schema.PTableImpl.getIndexMaintainer(PTableImpl.java:1809)
- locked <0x00000006cf120d00> (a org.apache.phoenix.schema.PTableImpl)
at org.apache.phoenix.schema.PTableImpl.getIndexMaintainer(PTableImpl.java:1802)
- locked <0x00000006cf120d00> (a org.apache.phoenix.schema.PTableImpl)
at 
org.apache.phoenix.coprocessor.MetaDataEndpointImpl.dropIndexes(MetaDataEndpointImpl.java:4130)
at 
org.apache.phoenix.coprocessor.MetaDataEndpointImpl.mutateColumn(MetaDataEndpointImpl.java:3680)
at 
org.apache.phoenix.coprocessor.MetaDataEndpointImpl.dropColumn(MetaDataEndpointImpl.java:4092)
at 
org.apache.phoenix.coprocessor.generated.MetaDataProtos$MetaDataService.callMethod(MetaDataProtos.java:17574)
at org.apache.hadoop.hbase.regionserver.HRegion.execService(HRegion.java:7930)
at 
org.apache.hadoop.hbase.regionserver.RSRpcServices.execServiceOnRegion(RSRpcServices.java:2538)
at 
org.apache.hadoop.hbase.regionserver.RSRpcServices.execService(RSRpcServices.java:2512)
at 
org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:45014)
at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:415)
at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:124)
at org.apache.hadoop.hbase.ipc.RpcHandler.run(RpcHandler.java:102)
at org.apache.hadoop.hbase.ipc.RpcHandler.run(RpcHandler.java:82)
 
   Locked ownable synchronizers:
- <0x00000006ce8f3e88> (a 
java.util.concurrent.locks.ReentrantReadWriteLock$FairSync)
 
 
"RpcServer.Metadata.Fifo.handler=2,queue=0,port=50960" #255 daemon prio=5 
os_prio=31 tid=0x00007f935f0fa000 nid=0x26b03 waiting on condition 
[0x000000031756c000]
   java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for  <0x00000006ce8f3e88> (a 
java.util.concurrent.locks.ReentrantReadWriteLock$FairSync)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
at 
java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedNanos(AbstractQueuedSynchronizer.java:1037)
at 
java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(AbstractQueuedSynchronizer.java:1328)
at 
java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.tryLock(ReentrantReadWriteLock.java:871)
at 
org.apache.hadoop.hbase.regionserver.HRegion.getRowLockInternal(HRegion.java:6489)
at 
org.apache.hadoop.hbase.regionserver.HRegion.lambda$getRowLock$21(HRegion.java:6526)
at 
org.apache.hadoop.hbase.regionserver.HRegion$$Lambda$418/1918809096.call(Unknown
 Source)
at org.apache.hadoop.hbase.trace.TraceUtil.trace(TraceUtil.java:216)
at org.apache.hadoop.hbase.regionserver.HRegion.getRowLock(HRegion.java:6526)
at org.apache.hadoop.hbase.regionserver.HRegion.getRowLock(HRegion.java:6433)
at 
org.apache.phoenix.coprocessor.MetaDataEndpointImpl.acquireLock(MetaDataEndpointImpl.java:3245)
at 
org.apache.phoenix.coprocessor.MetaDataEndpointImpl.doGetTable(MetaDataEndpointImpl.java:3972)
at 
org.apache.phoenix.coprocessor.MetaDataEndpointImpl.getTable(MetaDataEndpointImpl.java:717)
at 
org.apache.phoenix.coprocessor.generated.MetaDataProtos$MetaDataService.callMethod(MetaDataProtos.java:17524)
at org.apache.hadoop.hbase.regionserver.HRegion.execService(HRegion.java:7930)
at 
org.apache.hadoop.hbase.regionserver.RSRpcServices.execServiceOnRegion(RSRpcServices.java:2538)
at 
org.apache.hadoop.hbase.regionserver.RSRpcServices.execService(RSRpcServices.java:2512)
at 
org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:45014)
at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:415)
at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:124)
at org.apache.hadoop.hbase.ipc.RpcHandler.run(RpcHandler.java:102)
at org.apache.hadoop.hbase.ipc.RpcHandler.run(RpcHandler.java:82)
 
   Locked ownable synchronizers:
- None
 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to