[
https://issues.apache.org/jira/browse/PHOENIX-5545?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16974595#comment-16974595
]
Chinmay Kulkarni commented on PHOENIX-5545:
-------------------------------------------
[~larsh] In the v3 patch, I just tried moving the same catch block inside
CQSI#flushParentPhysicalTable so it doesn't skip doing the work after
flushTable.
On re-running all the tests in ViewMetaDataIT, sometimes
_testRecreateDroppedTableWithChildViews_ (wherein we create a view index)
fails, however sometimes this test does not fail. The test never fails when it
is run separately.
Looks like there is some state kept around between tests which we are not
clearing, leading to some race condition with CREATE/DROP VIEW causing tests to
flap.
I'm going to look into whether this flapping is introduced as a result of the
v2/v3 change or if it always existed.
This also explains why my first Hadoop QA run also showed a similar flapping
(the test passed when run separately locally).
> DropChildViews Task fails for a base table when its child view has an index
> ---------------------------------------------------------------------------
>
> Key: PHOENIX-5545
> URL: https://issues.apache.org/jira/browse/PHOENIX-5545
> Project: Phoenix
> Issue Type: Bug
> Affects Versions: 4.15.0, 5.1.0
> Reporter: Chinmay Kulkarni
> Assignee: Chinmay Kulkarni
> Priority: Major
> Fix For: 4.15.0, 5.1.0
>
> Attachments: PHOENIX-5545-4.x-HBase-1.3-v1.patch,
> PHOENIX-5545-4.x-HBase-1.3-v2.patch, PHOENIX-5545-4.x-HBase-1.3-v3.patch
>
> Time Spent: 40m
> Remaining Estimate: 0h
>
> 1) Start the HBase server with 4.15.0 Phoenix
> 2) Connect with a 4.15.0 client
> 3) Create a base table and a view on top of the base table and create an
> index on top of this view:
> {code:sql}
> CREATE TABLE IF NOT EXISTS Z_BASE_TABLE (ID INTEGER NOT NULL PRIMARY KEY,
> HOST VARCHAR(10), FLAG BOOLEAN);
> CREATE VIEW Z_VIEW1 (col1 INTEGER, col2 INTEGER, col3 INTEGER, col4 INTEGER,
> col5 INTEGER) AS SELECT * FROM Z_BASE_TABLE WHERE ID>10;
> CREATE INDEX V_I ON Z_VIEW1(COL4);
> {code}
> 4) Drop the base table with the cascade option:
> {code:sql}
> DROP TABLE Z_BASE_TABLE CASCADE;
> {code}
> 5) DropChildViewsTask gets added to the SYSTEM.TASK table as expected, but
> when it gets scheduled and subsequently executed, it fails with the following
> exception:
> {code:java}
> 2019-10-24 22:44:34,214 ERROR [pool-121-thread-1] tasks.DropChildViewsTask:
> Exception while dropping a child view task. null.Z_BASE_TABLE with tenant id
> IS NULL and timestamp 292278994-08-16 23:12:55.807
> org.apache.phoenix.exception.PhoenixIOException: Z_BASE_TABLE
> at
> org.apache.phoenix.query.ConnectionQueryServicesImpl.flushTable(ConnectionQueryServicesImpl.java:4442)
> at
> org.apache.phoenix.query.ConnectionQueryServicesImpl.flushParentPhysicalTable(ConnectionQueryServicesImpl.java:1922)
> at
> org.apache.phoenix.query.ConnectionQueryServicesImpl.dropTable(ConnectionQueryServicesImpl.java:1888)
> at
> org.apache.phoenix.schema.MetaDataClient.dropTable(MetaDataClient.java:3152)
> at
> org.apache.phoenix.schema.MetaDataClient.dropTable(MetaDataClient.java:3060)
> at org.apache.phoenix.util.ViewUtil.dropChildViews(ViewUtil.java:207)
> at
> org.apache.phoenix.coprocessor.tasks.DropChildViewsTask.run(DropChildViewsTask.java:60)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:498)
> at
> org.apache.phoenix.coprocessor.TaskRegionObserver$SelfHealingTask.run(TaskRegionObserver.java:204)
> at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
> at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
> at
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
> at
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> at java.lang.Thread.run(Thread.java:748)
> Caused by: org.apache.hadoop.hbase.TableNotFoundException: Z_BASE_TABLE
> at
> org.apache.hadoop.hbase.client.HBaseAdmin.checkTableExists(HBaseAdmin.java:2863)
> at org.apache.hadoop.hbase.client.HBaseAdmin.flush(HBaseAdmin.java:1904)
> at org.apache.hadoop.hbase.client.HBaseAdmin.flush(HBaseAdmin.java:1949)
> at
> org.apache.phoenix.query.ConnectionQueryServicesImpl.flushTable(ConnectionQueryServicesImpl.java:4440)
> ... 18 more
> {code}
> Note that this marks the DropChildViews task for the base table as failed and
> so *if the base table has any other views, those views will also not be
> dropped*.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)