[ 
https://issues.apache.org/jira/browse/PHOENIX-7492?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17906751#comment-17906751
 ] 

Abhradeep Kundu commented on PHOENIX-7492:
------------------------------------------

As per my debug the problem is occurring when you have null tuple in 
currentIterator method, it immediately call the close method on the iterator 
object from ConcatResultIterator, leaving the dependency object of the 
WrappedIterator with empty cacheUsingTableMap. Hence in actual closing time of 
ConcatResultIterator, resultIterators.close method invokes another call to 
clear the same cache, which result into null pointer.

For me the solution is to clear the dependencies map once all the values in it 
is closed. So that in future calls it don't try clearing the cache again.

> Subquery with join and union not working together when one side of union 
> finds no result
> ----------------------------------------------------------------------------------------
>
>                 Key: PHOENIX-7492
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-7492
>             Project: Phoenix
>          Issue Type: Bug
>            Reporter: Abhradeep Kundu
>            Assignee: Abhradeep Kundu
>            Priority: Major
>
> Steps to Reproduce
> 1) Create below tables
> {code:java}
> CREATE TABLE ACCOUNT (
> ACCOUNT_IDENTIFIER VARCHAR(100) NOT NULL,
> CRN_NUMBER_TEXT VARCHAR(100),
> ORIGINAL_CURRENCY_CODE VARCHAR(100),
> OUTSTANDING_BALANCE_AMOUNT DECIMAL(20,4),
> SOURCE_SYSTEM_CODE VARCHAR(6) NOT NULL,
> ACCOUNT_TYPE_CODE VARCHAR(100)
> CONSTRAINT pk PRIMARY KEY (ACCOUNT_IDENTIFIER, SOURCE_SYSTEM_CODE)
> ) SALT_BUCKET=4;
> CREATE TABLE EXCHANGE_RATE (
> CURRENCY_CODE VARCHAR(3) NOT NULL,
> SPOT_RATE DECIMAL(15,9),
> EXPANDED_SPOT_RATE DECIMAL(19,9),
> RECORD_LAST_UPDATE_DATE TIMESTAMP
> CONSTRAINT pk PRIMARY KEY (CURRENCY_CODE)
> )SALT_BUCKETS=4;
> CREATE TABLE CUSTOMER (
> CUSTOMER_IDENTIFIER VARCHAR(100),
> SOURCE_SYSTEM_CODE VARCHAR(100) NOT NULL,
> CRN_NUMBER_TEXT VARCHAR(100),
> CONSTRAINT pk PRIMARY KEY (CUSTOMER_IDENTIFIER, SOURCE_SYSTEM_CODE)
> ) SALT_BUCKETS=4;
> {code}
>  
> 2) Upsert values
> {code:java}
> UPSERT INTO ACCOUNT VALUES ('ACC_1', 'CRN_1', 'IDR', 999, 'SRC_1', 'ATC_1');
> UPSERT INTO EXCHANGE_RATE VALUES ('IDR', 0.53233436, 0.198919644, 
> '2024-07-03');
> UPSERT INTO CUSTOMER VALUES ('CUST_1', 'SRC_1','CRN_1');{code}
> 3) Run query
> {code:java}
> SELECT
>     ca1.ORIGINAL_CURRENCY_CODE AS ORIGINAL_CURRENCY_CODE
> FROM
>     ACCOUNT ca1
> LEFT JOIN EXCHANGE_RATE er1 ON
>     ca1.ORIGINAL_CURRENCY_CODE = er1.CURRENCY_CODE
> WHERE
>     (ca1.ACCOUNT_IDENTIFIER,
>     ca1.SOURCE_SYSTEM_CODE) IN (
>     SELECT
>         ca.ACCOUNT_IDENTIFIER,
>         ca.SOURCE_SYSTEM_CODE
>     FROM
>         ACCOUNT ca
>     WHERE
>         ca.CRN_NUMBER_TEXT IN (
>         SELECT
>             CRN_NUMBER_TEXT
>         FROM
>             CUSTOMER
>         WHERE
>             CUSTOMER_IDENTIFIER = 'CUST_2'
>         AND SOURCE_SYSTEM_CODE='SRC_1'))
> AND ca1.ACCOUNT_TYPE_CODE IN ('ATC_1')
> UNION ALL
> SELECT
>     ca1.ORIGINAL_CURRENCY_CODE AS ORIGINAL_CURRENCY_CODE
> FROM
>     ACCOUNT ca1
> WHERE
>     ca1.ACCOUNT_TYPE_CODE IN ('ATC_1');{code}
> 4) Result 
> {code:java}
> Caused by: java.lang.NullPointerException
>     at 
> org.apache.phoenix.cache.ServerCacheClient.removeServerCache(ServerCacheClient.java:380)
>     at 
> org.apache.phoenix.cache.ServerCacheClient.access$000(ServerCacheClient.java:89)
>     at 
> org.apache.phoenix.cache.ServerCacheClient$ServerCache.close(ServerCacheClient.java:211)
>     at 
> org.apache.phoenix.util.SQLCloseables.closeAllQuietly(SQLCloseables.java:59)
>     at org.apache.phoenix.util.SQLCloseables.closeAll(SQLCloseables.java:46)
>     at 
> org.apache.phoenix.execute.BaseQueryPlan$1.close(BaseQueryPlan.java:229)
>     at 
> org.apache.phoenix.iterate.DelegateResultIterator.close(DelegateResultIterator.java:41)
>     at 
> org.apache.phoenix.iterate.LookAheadResultIterator$1.close(LookAheadResultIterator.java:50)
>     at 
> org.apache.phoenix.iterate.UnionResultIterators.close(UnionResultIterators.java:87)
>  
> {code}
>  



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

Reply via email to