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

Kiran Kumar Maturi commented on PHOENIX-5073:
---------------------------------------------

[~vincentpoon] [~tdsilva] thanks for the review.

[~vincentpoon] I will make the changes as suggested and submit another patch.

[~tdsilva] currently in the getTable we are considering if the request comes 
from older client it is being handled, if we don't use the cached table it 
builds the PTable considering the clientVersion which works fine. Please let me 
know if i am missing something here.
{code:java}
private PTable getTable(RegionScanner scanner, long clientTimeStamp, long 
tableTimeStamp,
int clientVersion, boolean skipAddingIndexes, boolean skipAddingParentColumns)
....
// If client is not yet up to 4.12, then translate PENDING_ACTIVE to ACTIVE (as 
would have been
// the value in those versions) since the client won't have this index state in 
its enum.
if (indexState == PIndexState.PENDING_ACTIVE && clientVersion < 
MetaDataProtocol.MIN_PENDING_ACTIVE_INDEX) {
indexState = PIndexState.ACTIVE;
}
// If client is not yet up to 4.14, then translate PENDING_DISABLE to DISABLE
// since the client won't have this index state in its enum.
if (indexState == PIndexState.PENDING_DISABLE && clientVersion < 
MetaDataProtocol.MIN_PENDING_DISABLE_INDEX) {
// note: for older clients, we have to rely on the rebuilder to transition 
PENDING_DISABLE -> DISABLE
indexState = PIndexState.DISABLE;
}
{code}

> Invalid PIndexState during rolling upgrade from 4.13 to 4.14
> ------------------------------------------------------------
>
>                 Key: PHOENIX-5073
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-5073
>             Project: Phoenix
>          Issue Type: Bug
>    Affects Versions: 4.14.0
>            Reporter: Kiran Kumar Maturi
>            Assignee: Kiran Kumar Maturi
>            Priority: Major
>         Attachments: PHOENIX-5073-4.x-HBase-1.3.001.patch
>
>
> While doing a rolling upgrade from 4.13 to 4.14 we are seeing this exception. 
> {code:java}
> 2018-08-20 09:00:34,980 WARN  [pool-1-thread-1] workload.WriteWorkload - 
> java.util.concurrent.ExecutionException: java.sql.SQLException: 
> java.lang.IllegalArgumentException: Unable to PIndexState enum for serialized 
> value of 'w'
>     at java.util.concurrent.FutureTask.report(FutureTask.java:122)
>     at java.util.concurrent.FutureTask.get(FutureTask.java:192)
>     at 
> org.apache.phoenix.pherf.workload.WriteWorkload.waitForBatches(WriteWorkload.java:233)
>     at 
> org.apache.phoenix.pherf.workload.WriteWorkload.exec(WriteWorkload.java:183)
>     at 
> org.apache.phoenix.pherf.workload.WriteWorkload.access$100(WriteWorkload.java:56)
>     at 
> org.apache.phoenix.pherf.workload.WriteWorkload$1.run(WriteWorkload.java:159)
>     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
>     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>     at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>     at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>     at java.lang.Thread.run(Thread.java:745)
> Caused by: java.sql.SQLException: java.lang.IllegalArgumentException: Unable 
> to PIndexState enum for serialized value of 'w'
>     at 
> org.apache.phoenix.query.ConnectionQueryServicesImpl.metaDataCoprocessorExec(ConnectionQueryServicesImpl.java:1322)
>     at 
> org.apache.phoenix.query.ConnectionQueryServicesImpl.metaDataCoprocessorExec(ConnectionQueryServicesImpl.java:1284)
>     at 
> org.apache.phoenix.query.ConnectionQueryServicesImpl.getTable(ConnectionQueryServicesImpl.java:1501)
>     at 
> org.apache.phoenix.schema.MetaDataClient.updateCache(MetaDataClient.java:581)
>     at 
> org.apache.phoenix.schema.MetaDataClient.updateCache(MetaDataClient.java:504)
>     at 
> org.apache.phoenix.schema.MetaDataClient.updateCache(MetaDataClient.java:496)
>     at 
> org.apache.phoenix.schema.MetaDataClient.updateCache(MetaDataClient.java:492)
>     at 
> org.apache.phoenix.execute.MutationState.validate(MutationState.java:780)
>     at 
> org.apache.phoenix.execute.MutationState.validateAll(MutationState.java:768)
>     at org.apache.phoenix.execute.MutationState.send(MutationState.java:980)
>     at org.apache.phoenix.execute.MutationState.send(MutationState.java:1469)
>     at 
> org.apache.phoenix.execute.MutationState.commit(MutationState.java:1301)
>     at 
> org.apache.phoenix.jdbc.PhoenixConnection$3.call(PhoenixConnection.java:539)
>     at 
> org.apache.phoenix.jdbc.PhoenixConnection$3.call(PhoenixConnection.java:536)
>     at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
>     at 
> org.apache.phoenix.jdbc.PhoenixConnection.commit(PhoenixConnection.java:536)
>     at 
> org.apache.phoenix.pherf.workload.WriteWorkload$2.call(WriteWorkload.java:291)
>     at 
> org.apache.phoenix.pherf.workload.WriteWorkload$2.call(WriteWorkload.java:250)
>     ... 4 more
> Caused by: java.lang.IllegalArgumentException: Unable to PIndexState enum for 
> serialized value of 'w'
>     at 
> org.apache.phoenix.schema.PIndexState.fromSerializedValue(PIndexState.java:81)
>     at 
> org.apache.phoenix.schema.PTableImpl.createFromProto(PTableImpl.java:1222)
>     at 
> org.apache.phoenix.schema.PTableImpl.createFromProto(PTableImpl.java:1246)
>     at 
> org.apache.phoenix.coprocessor.MetaDataProtocol$MetaDataMutationResult.constructFromProto(MetaDataProtocol.java:330)
>     at 
> org.apache.phoenix.query.ConnectionQueryServicesImpl.metaDataCoprocessorExec(ConnectionQueryServicesImpl.java:1314){code}
>  
> Steps to reproduce.
>  # Start the server on 4.14
>  # Start load with both 4.13 and 4.14 clients
>  # 4.13 client will show the above error (it will only when Index state 
> transtition to PENDING_DISABLE , this state is not defined in 4.13) 
>  



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

Reply via email to