You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@phoenix.apache.org by "Thomas D'Silva (JIRA)" <ji...@apache.org> on 2018/09/14 02:49:00 UTC

[jira] [Comment Edited] (PHOENIX-4849) UPSERT SELECT fails with stale region boundary exception after a split

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

Thomas D'Silva edited comment on PHOENIX-4849 at 9/14/18 2:48 AM:
------------------------------------------------------------------

[~lhofhansl]

The test [~akshita.malhotra] added fails because its running a LIMIT query. It fails even if you split the table before running the SELECT with a limit. When we do a limit it run the querying serially which does not call peek on the serial iterators in submitWork(). 
If I change it to call peek  also for serial iterators then the exception is thrown and handled in BaseResultIterators (see the attached diff). 
In ParallelIterators.submitWork() we always call iterator.peek() unless we are doing a limit and the estimated data being scanned is within the configured threshold (in which case we will call peek only for the first or last scan). See https://issues.apache.org/jira/browse/PHOENIX-3023?focusedCommentId=15347191&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-15347191


was (Author: tdsilva):
[~lhofhansl]

The test [~akshita.malhotra] added fails because its running a LIMIT query. It fails even if you split the table before running the SELECT with a limit. When we do a limit it run the querying serially which does not call peek on the serial iterators in submitWork(). 
If I change it to call peek  also for serial iterators then the exception is thrown and handled in BaseResultIterators (see the attached diff). 
In ParallelIterators.submitWork() we always call iterator.peek() unless we are doing a limit and the estimated data being scanned is with the configured threshold (in which case we will call peek only for the first or last scan). See https://issues.apache.org/jira/browse/PHOENIX-3023?focusedCommentId=15347191&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-15347191

> UPSERT SELECT fails with stale region boundary exception after a split
> ----------------------------------------------------------------------
>
>                 Key: PHOENIX-4849
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-4849
>             Project: Phoenix
>          Issue Type: Bug
>            Reporter: Akshita Malhotra
>            Assignee: Lars Hofhansl
>            Priority: Critical
>         Attachments: PHOENIX-4849-complete-1.4.txt, PHOENIX-4849-fix.txt, PHOENIX-4849-v2.patch, PHOENIX-4849-v3.patch, PHOENIX-4849-v4.patch, PHOENIX-4849.patch, SerialIterators.diff
>
>
> UPSERT SELECT throws a StaleRegionBoundaryCacheException immediately after a split. On the other hand, an upsert followed by a select for example works absolutely fine
> org.apache.phoenix.schema.StaleRegionBoundaryCacheException: ERROR 1108 (XCL08): Cache of region boundaries are out of date.
> at org.apache.phoenix.exception.SQLExceptionCode$14.newException(SQLExceptionCode.java:365)
>  at org.apache.phoenix.exception.SQLExceptionInfo.buildException(SQLExceptionInfo.java:150)
>  at org.apache.phoenix.util.ServerUtil.parseRemoteException(ServerUtil.java:183)
>  at org.apache.phoenix.util.ServerUtil.parseServerExceptionOrNull(ServerUtil.java:167)
>  at org.apache.phoenix.util.ServerUtil.parseServerException(ServerUtil.java:134)
>  at org.apache.phoenix.iterate.ScanningResultIterator.next(ScanningResultIterator.java:153)
>  at org.apache.phoenix.iterate.TableResultIterator.next(TableResultIterator.java:228)
>  at org.apache.phoenix.iterate.LookAheadResultIterator$1.advance(LookAheadResultIterator.java:47)
>  at org.apache.phoenix.iterate.LookAheadResultIterator.init(LookAheadResultIterator.java:59)
>  at org.apache.phoenix.iterate.LookAheadResultIterator.peek(LookAheadResultIterator.java:73)
>  at org.apache.phoenix.iterate.SerialIterators$SerialIterator.nextIterator(SerialIterators.java:187)
>  at org.apache.phoenix.iterate.SerialIterators$SerialIterator.currentIterator(SerialIterators.java:160)
>  at org.apache.phoenix.iterate.SerialIterators$SerialIterator.peek(SerialIterators.java:218)
>  at org.apache.phoenix.iterate.ConcatResultIterator.currentIterator(ConcatResultIterator.java:100)
>  at org.apache.phoenix.iterate.ConcatResultIterator.next(ConcatResultIterator.java:117)
>  at org.apache.phoenix.iterate.DelegateResultIterator.next(DelegateResultIterator.java:44)
>  at org.apache.phoenix.iterate.LimitingResultIterator.next(LimitingResultIterator.java:47)
>  at org.apache.phoenix.jdbc.PhoenixResultSet.next(PhoenixResultSet.java:805)
>  at org.apache.phoenix.compile.UpsertCompiler.upsertSelect(UpsertCompiler.java:219)
>  at org.apache.phoenix.compile.UpsertCompiler$ClientUpsertSelectMutationPlan.execute(UpsertCompiler.java:1292)
>  at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:408)
>  at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:391)
>  at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
>  at org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:390)
>  at org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:378)
>  at org.apache.phoenix.jdbc.PhoenixPreparedStatement.execute(PhoenixPreparedStatement.java:173)
>  at org.apache.phoenix.jdbc.PhoenixPreparedStatement.execute(PhoenixPreparedStatement.java:183)
>  at org.apache.phoenix.end2end.UpsertSelectAfterSplitTest.upsertSelectData1(UpsertSelectAfterSplitTest.java:109)
>  at org.apache.phoenix.end2end.UpsertSelectAfterSplitTest.testUpsertSelect(UpsertSelectAfterSplitTest.java:59)
>  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.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
>  at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
>  at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
>  at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
>  at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
>  at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
>  at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
>  at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
>  at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
>  at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
>  at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
>  at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
>  at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
>  at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48)
>  at org.junit.rules.RunRules.evaluate(RunRules.java:20)
>  at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
>  at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
>  at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:119)
>  at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)
>  at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234)
>  at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74)
>  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 com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)



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