[
https://issues.apache.org/jira/browse/PHOENIX-4382?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Vincent Poon updated PHOENIX-4382:
----------------------------------
Attachment: PHOENIX-4382.v1.master.patch
This turned out to be a column encoding bug. The data is written fine but when
reading, in PArrayDataTypeDecoder there is an optimization that checks for
SEPARATOR_BYTE in the first byte - if it's there, it is assumed the value
length is 0. This makes sense in SORTABLE_SERIALIZATION, but for
IMMUTABLE_SERIALIZATION, there are no separators. If the data just happens to
have a first byte of 0 or -1 (SEPARATOR_BYTE or DESC_SEPARATOR_BYTE), then the
optimization does the wrong thing. For short values > 32511, the first byte is
-1, which is why this bug was appearing.
The fix is to not do the optimization for IMMUTABLE_SERIALIZATION.
[~tdsilva] can you review ?
FYI, [~jamestaylor] [~aertoria]
> Upsert of some big values not correct for immutable tables
> ----------------------------------------------------------
>
> Key: PHOENIX-4382
> URL: https://issues.apache.org/jira/browse/PHOENIX-4382
> Project: Phoenix
> Issue Type: Bug
> Affects Versions: 4.14.0
> Reporter: Vincent Poon
> Assignee: Vincent Poon
> Attachments: PHOENIX-4382.v1.master.patch, UpsertBigValuesIT.java
>
>
> For immutable tables, upsert of some values like Short.MAX_VALUE results in a
> null value in query resultsets. Mutable tables are not affected. I tried
> with BigInt and got the same problem.
> For Short, the breaking point seems to be 32512. Numbers smaller than that
> are fine (until you get closer to Short.MIN_VALUE...)
> See attached test - testShort() , testBigInt()
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)