You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@phoenix.apache.org by "William Shen (JIRA)" <ji...@apache.org> on 2019/04/30 18:33:00 UTC

[jira] [Comment Edited] (PHOENIX-5101) ScanningResultIterator getScanMetrics throws NPE

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

William Shen edited comment on PHOENIX-5101 at 4/30/19 6:32 PM:
----------------------------------------------------------------

[~tdsilva], I am able to reproduce locally with a sample program running against test dataset size of 1000000 rows generated using Pherf (sorry, not sure where to add an actual test because I've yet to nail down the exact condition):

{code}
package test;

import java.sql.*;
import java.util.Properties;

import org.apache.phoenix.query.QueryServices;

public class NPEExample {
    public static void main(final String[] args) throws SQLException {
        Properties props = new Properties();
        props.setProperty(QueryServices.COLLECT_REQUEST_LEVEL_METRICS, "true");
        Connection conn = DriverManager.getConnection("jdbc:phoenix:localhost:2181", props);
        PreparedStatement stmt = conn.prepareStatement("SELECT * FROM PHERF.KEYWORDS_NOIDX LIMIT 400000");
        ResultSet rs = stmt.executeQuery();

        try {
            while (rs.next()) {
                rs.getObject(1);
            }
        } finally {
            rs.close();
            stmt.close();
            conn.close();
        }
    }
}
{code}

will produce the following error
{code}
Exception in thread "main" org.apache.phoenix.exception.PhoenixIOException
	at org.apache.phoenix.util.ServerUtil.parseServerException(ServerUtil.java:144)
	at org.apache.phoenix.iterate.RoundRobinResultIterator.close(RoundRobinResultIterator.java:128)
	at org.apache.phoenix.iterate.DelegateResultIterator.close(DelegateResultIterator.java:39)
	at org.apache.phoenix.jdbc.PhoenixResultSet.close(PhoenixResultSet.java:176)
	at test.NPEExample.main(NPEExample.java:21)
Caused by: java.lang.NullPointerException
	at org.apache.phoenix.iterate.ScanningResultIterator.getScanMetrics(ScanningResultIterator.java:100)
	at org.apache.phoenix.iterate.ScanningResultIterator.close(ScanningResultIterator.java:80)
	at org.apache.phoenix.iterate.TableResultIterator.close(TableResultIterator.java:144)
	at org.apache.phoenix.iterate.LookAheadResultIterator$1.close(LookAheadResultIterator.java:42)
	at org.apache.phoenix.iterate.BaseResultIterators.close(BaseResultIterators.java:1442)
	at org.apache.phoenix.iterate.RoundRobinResultIterator.close(RoundRobinResultIterator.java:125)
	... 3 more
{code}


was (Author: willshen):
[~tdsilva], I am able to reproduce locally with a sample program running against test dataset size of 1000000 rows generated using Pherf (sorry, not sure where to add an actual test because I've yet to nail down the exact condition):

{code}
package test;

import java.sql.*;
import java.util.Properties;

import org.apache.phoenix.query.QueryServices;

public class NPEExample {
    public static void main(final String[] args) throws SQLException {
        Properties props = new Properties();
        props.setProperty(QueryServices.COLLECT_REQUEST_LEVEL_METRICS, "true");
        Connection conn = DriverManager.getConnection("jdbc:phoenix:localhost:2181", props);
        PreparedStatement stmt = conn.prepareStatement("SELECT * FROM PHERF.KEYWORDS_NOIDX LIMIT 400000");
        ResultSet rs = stmt.executeQuery();

        try {
            while (rs.next()) {
                rs.getObject(0);
            }
        } finally {
            rs.close();
            stmt.close();
            conn.close();
        }
    }
}
{code}

will produce the following error
{code}
Exception in thread "main" org.apache.phoenix.exception.PhoenixIOException
	at org.apache.phoenix.util.ServerUtil.parseServerException(ServerUtil.java:144)
	at org.apache.phoenix.iterate.RoundRobinResultIterator.close(RoundRobinResultIterator.java:128)
	at org.apache.phoenix.iterate.DelegateResultIterator.close(DelegateResultIterator.java:39)
	at org.apache.phoenix.jdbc.PhoenixResultSet.close(PhoenixResultSet.java:176)
	at test.NPEExample.main(NPEExample.java:21)
Caused by: java.lang.NullPointerException
	at org.apache.phoenix.iterate.ScanningResultIterator.getScanMetrics(ScanningResultIterator.java:100)
	at org.apache.phoenix.iterate.ScanningResultIterator.close(ScanningResultIterator.java:80)
	at org.apache.phoenix.iterate.TableResultIterator.close(TableResultIterator.java:144)
	at org.apache.phoenix.iterate.LookAheadResultIterator$1.close(LookAheadResultIterator.java:42)
	at org.apache.phoenix.iterate.BaseResultIterators.close(BaseResultIterators.java:1442)
	at org.apache.phoenix.iterate.RoundRobinResultIterator.close(RoundRobinResultIterator.java:125)
	... 3 more
{code}

> ScanningResultIterator getScanMetrics throws NPE
> ------------------------------------------------
>
>                 Key: PHOENIX-5101
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-5101
>             Project: Phoenix
>          Issue Type: Bug
>    Affects Versions: 4.14.1
>            Reporter: Reid Chan
>            Assignee: Karan Mehta
>            Priority: Blocker
>             Fix For: 4.15.0, 5.1.0, 4.14.2
>
>         Attachments: PHOENIX-5101.414-HBase-1.4.001.patch
>
>          Time Spent: 50m
>  Remaining Estimate: 0h
>
> {code}
> java.lang.NullPointerException
> 	at org.apache.phoenix.iterate.ScanningResultIterator.getScanMetrics(ScanningResultIterator.java:92)
> 	at org.apache.phoenix.iterate.ScanningResultIterator.close(ScanningResultIterator.java:79)
> 	at org.apache.phoenix.iterate.TableResultIterator.close(TableResultIterator.java:144)
> 	at org.apache.phoenix.iterate.LookAheadResultIterator$1.close(LookAheadResultIterator.java:42)
> 	at org.apache.phoenix.iterate.BaseResultIterators.close(BaseResultIterators.java:1439)
> 	at org.apache.phoenix.iterate.MergeSortResultIterator.close(MergeSortResultIterator.java:44)
> 	at org.apache.phoenix.jdbc.PhoenixResultSet.close(PhoenixResultSet.java:176)
> 	at org.apache.phoenix.jdbc.PhoenixResultSet.next(PhoenixResultSet.java:807)
> 	at org.apache.calcite.avatica.jdbc.JdbcResultSet.frame(JdbcResultSet.java:148)
> 	at org.apache.calcite.avatica.jdbc.JdbcResultSet.create(JdbcResultSet.java:101)
> 	at org.apache.calcite.avatica.jdbc.JdbcResultSet.create(JdbcResultSet.java:81)
> 	at org.apache.calcite.avatica.jdbc.JdbcMeta.prepareAndExecute(JdbcMeta.java:759)
> 	at org.apache.calcite.avatica.remote.LocalService.apply(LocalService.java:206)
> 	at org.apache.calcite.avatica.remote.Service$PrepareAndExecuteRequest.accept(Service.java:927)
> 	at org.apache.calcite.avatica.remote.Service$PrepareAndExecuteRequest.accept(Service.java:879)
> 	at org.apache.calcite.avatica.remote.AbstractHandler.apply(AbstractHandler.java:94)
> 	at org.apache.calcite.avatica.remote.ProtobufHandler.apply(ProtobufHandler.java:46)
> 	at org.apache.calcite.avatica.server.AvaticaProtobufHandler$2.call(AvaticaProtobufHandler.java:123)
> 	at org.apache.calcite.avatica.server.AvaticaProtobufHandler$2.call(AvaticaProtobufHandler.java:121)
> 	at org.apache.phoenix.queryserver.server.QueryServer$PhoenixDoAsCallback$1.run(QueryServer.java:500)
> 	at java.security.AccessController.doPrivileged(Native Method)
> 	at javax.security.auth.Subject.doAs(Subject.java:422)
> 	at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1754)
> 	at org.apache.phoenix.queryserver.server.QueryServer$PhoenixDoAsCallback.doAsRemoteUser(QueryServer.java:497)
> 	at org.apache.calcite.avatica.server.HttpServer$Builder$1.doAsRemoteUser(HttpServer.java:884)
> 	at org.apache.calcite.avatica.server.AvaticaProtobufHandler.handle(AvaticaProtobufHandler.java:120)
> 	at org.apache.phoenix.shaded.org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:542)
> 	at org.apache.phoenix.shaded.org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:52)
> 	at org.apache.phoenix.shaded.org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
> 	at org.apache.phoenix.shaded.org.eclipse.jetty.server.Server.handle(Server.java:499)
> 	at org.apache.phoenix.shaded.org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)
> 	at org.apache.phoenix.shaded.org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
> 	at org.apache.phoenix.shaded.org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)
> 	at org.apache.phoenix.shaded.org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
> 	at org.apache.phoenix.shaded.org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
> 	at java.lang.Thread.run(Thread.java:745)
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)