Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix metadata listing failure in case of concurrent table deletion in Phoenix #11134

Merged
merged 1 commit into from
Feb 24, 2022

Conversation

ebyhr
Copy link
Member

@ebyhr ebyhr commented Feb 22, 2022

Description

Fix metadata listing failure in case of concurrent table deletion in Phoenix

Related issues, pull requests, and links

Documentation

(x) No documentation is needed.

Release notes

(x) Release notes entries required with the following suggested text:

# Phoenix
* Fix metadata listing failure in case of concurrent table deletion. ({issue}`10904`)

@cla-bot cla-bot bot added the cla-signed label Feb 22, 2022
@ebyhr ebyhr requested a review from hashhar February 22, 2022 05:52
@hashhar
Copy link
Member

hashhar commented Feb 22, 2022

Would the test added to BaseConnectorTest in #10844 have caught this issue?

@ebyhr
Copy link
Member Author

ebyhr commented Feb 24, 2022

@hashhar @findepi I removed a catch block from TestPhoenixConnectorTest.testReadMetadataWithRelationsConcurrentModifications() and ran the test without this commit more than 300 invocations, but it didn't fail in my laptop. Does this test fail in your environment?

@hashhar
Copy link
Member

hashhar commented Feb 24, 2022

@hashhar @findepi I removed a catch block from TestPhoenixConnectorTest.testReadMetadataWithRelationsConcurrentModifications() and ran the test without this commit more than 300 invocations, but it didn't fail in my laptop. Does this test fail in your environment?

Didn't fail for me either.

@ebyhr
Copy link
Member Author

ebyhr commented Feb 24, 2022

@hashhar Thanks for your confirmation. I will leave a comment in that PR.

@ebyhr ebyhr merged commit 612b7db into trinodb:master Feb 24, 2022
@ebyhr ebyhr deleted the ebi/phoenix-metadata-listing-failure branch February 24, 2022 23:53
@ebyhr ebyhr mentioned this pull request Feb 24, 2022
@github-actions github-actions bot added this to the 372 milestone Feb 25, 2022
@findepi
Copy link
Member

findepi commented Feb 26, 2022

i rebased #10844 and in https://github.com/trinodb/trino/runs/5339727936?check_suite_focus=true got

Error:  io.trino.plugin.phoenix5.TestPhoenixConnectorTest.testReadMetadataWithRelationsConcurrentModifications  Time elapsed: 5.005 s  <<< FAILURE!
java.util.concurrent.ExecutionException: java.lang.RuntimeException: ERROR 1012 (42M03): Table undefined. tableName=TPCH.CONCUR_TABLE_1WQYSPXRHS
	at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
	at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
	at io.trino.testing.BaseConnectorTest.testReadMetadataWithRelationsConcurrentModifications(BaseConnectorTest.java:969)
	at io.trino.testing.BaseConnectorTest.testReadMetadataWithRelationsConcurrentModifications(BaseConnectorTest.java:908)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:104)
	at org.testng.internal.InvokeMethodRunnable.runOne(InvokeMethodRunnable.java:54)
	at org.testng.internal.InvokeMethodRunnable.run(InvokeMethodRunnable.java:44)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.lang.RuntimeException: ERROR 1012 (42M03): Table undefined. tableName=TPCH.CONCUR_TABLE_1WQYSPXRHS
	at io.trino.testing.AbstractTestingTrinoClient.execute(AbstractTestingTrinoClient.java:122)
	at io.trino.testing.DistributedQueryRunner.execute(DistributedQueryRunner.java:505)
	at io.trino.testing.AbstractTestQueryFramework.computeActual(AbstractTestQueryFramework.java:175)
	at io.trino.testing.AbstractTestQueryFramework.computeActual(AbstractTestQueryFramework.java:170)
	at io.trino.testing.BaseConnectorTest$1.call(BaseConnectorTest.java:991)
	at io.trino.testing.BaseConnectorTest$1.call(BaseConnectorTest.java:985)
	at io.trino.testing.BaseConnectorTest$3.call(BaseConnectorTest.java:1059)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	... 5 more
	Suppressed: java.lang.Exception: SQL: SELECT * FROM system.jdbc.columns WHERE table_cat = CURRENT_CATALOG AND table_schem = CURRENT_SCHEMA
		at io.trino.testing.DistributedQueryRunner.execute(DistributedQueryRunner.java:508)
		... 11 more
	Suppressed: java.lang.Exception: Task: Query(SELECT * FROM system.jdbc.columns WHERE table_cat = CURRENT_CATALOG AND table_schem = CURRENT_SCHEMA)
		at io.trino.testing.BaseConnectorTest$3.call(BaseConnectorTest.java:1062)
		... 6 more
Caused by: io.trino.spi.TrinoException: ERROR 1012 (42M03): Table undefined. tableName=TPCH.CONCUR_TABLE_1WQYSPXRHS
	at io.trino.plugin.jdbc.BaseJdbcClient.getColumns(BaseJdbcClient.java:282)
	at io.trino.plugin.phoenix5.PhoenixMetadata.getColumnMetadata(PhoenixMetadata.java:131)
	at io.trino.plugin.phoenix5.PhoenixMetadata.getTableMetadata(PhoenixMetadata.java:125)
	at io.trino.plugin.jdbc.DefaultJdbcMetadata.lambda$listTableColumns$10(DefaultJdbcMetadata.java:587)
	at java.base/java.util.Optional.ifPresent(Optional.java:183)
	at io.trino.plugin.jdbc.DefaultJdbcMetadata.listTableColumns(DefaultJdbcMetadata.java:587)
	at io.trino.spi.connector.ConnectorMetadata.streamTableColumns(ConnectorMetadata.java:255)
	at io.trino.plugin.base.classloader.ClassLoaderSafeConnectorMetadata.streamTableColumns(ClassLoaderSafeConnectorMetadata.java:302)
	at io.trino.metadata.MetadataManager.listTableColumns(MetadataManager.java:610)
	at io.trino.metadata.MetadataListing.listTableColumns(MetadataListing.java:177)
	at io.trino.connector.system.jdbc.ColumnJdbcTable.cursor(ColumnJdbcTable.java:263)
	at io.trino.connector.system.SystemPageSourceProvider$1.cursor(SystemPageSourceProvider.java:129)
	at io.trino.split.MappedRecordSet.cursor(MappedRecordSet.java:53)
	at io.trino.spi.connector.RecordPageSource.<init>(RecordPageSource.java:37)
	at io.trino.connector.system.SystemPageSourceProvider.createPageSource(SystemPageSourceProvider.java:108)
	at io.trino.split.PageSourceManager.createPageSource(PageSourceManager.java:68)
	at io.trino.operator.ScanFilterAndProjectOperator$SplitToPages.process(ScanFilterAndProjectOperator.java:268)
	at io.trino.operator.ScanFilterAndProjectOperator$SplitToPages.process(ScanFilterAndProjectOperator.java:196)
	at io.trino.operator.WorkProcessorUtils$3.process(WorkProcessorUtils.java:338)
	at io.trino.operator.WorkProcessorUtils$ProcessWorkProcessor.process(WorkProcessorUtils.java:391)
	at io.trino.operator.WorkProcessorUtils$3.process(WorkProcessorUtils.java:325)
	at io.trino.operator.WorkProcessorUtils$ProcessWorkProcessor.process(WorkProcessorUtils.java:391)
	at io.trino.operator.WorkProcessorUtils$3.process(WorkProcessorUtils.java:325)
	at io.trino.operator.WorkProcessorUtils$ProcessWorkProcessor.process(WorkProcessorUtils.java:391)
	at io.trino.operator.WorkProcessorUtils.getNextState(WorkProcessorUtils.java:240)
	at io.trino.operator.WorkProcessorUtils.lambda$processStateMonitor$3(WorkProcessorUtils.java:219)
	at io.trino.operator.WorkProcessorUtils$ProcessWorkProcessor.process(WorkProcessorUtils.java:391)
	at io.trino.operator.WorkProcessorUtils.getNextState(WorkProcessorUtils.java:240)
	at io.trino.operator.WorkProcessorUtils.lambda$finishWhen$4(WorkProcessorUtils.java:234)
	at io.trino.operator.WorkProcessorUtils$ProcessWorkProcessor.process(WorkProcessorUtils.java:391)
	at io.trino.operator.WorkProcessorSourceOperatorAdapter.getOutput(WorkProcessorSourceOperatorAdapter.java:150)
	at io.trino.operator.Driver.processInternal(Driver.java:388)
	at io.trino.operator.Driver.lambda$processFor$9(Driver.java:292)
	at io.trino.operator.Driver.tryWithLock(Driver.java:693)
	at io.trino.operator.Driver.processFor(Driver.java:285)
	at io.trino.execution.SqlTaskExecution$DriverSplitRunner.processFor(SqlTaskExecution.java:1092)
	at io.trino.execution.executor.PrioritizedSplitRunner.process(PrioritizedSplitRunner.java:163)
	at io.trino.execution.executor.TaskExecutor$TaskRunner.run(TaskExecutor.java:488)
	at io.trino.$gen.Trino_testversion____20220226_025335_3.run(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: org.apache.phoenix.schema.TableNotFoundException: ERROR 1012 (42M03): Table undefined. tableName=TPCH.CONCUR_TABLE_1WQYSPXRHS
	at org.apache.phoenix.util.PhoenixRuntime.getTableNoCache(PhoenixRuntime.java:428)
	at org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.getColumns(PhoenixDatabaseMetaData.java:747)
	at io.trino.plugin.jdbc.BaseJdbcClient.getColumns(BaseJdbcClient.java:300)
	at io.trino.plugin.jdbc.BaseJdbcClient.getColumns(BaseJdbcClient.java:234)
	... 41 more

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
4 participants