[
https://issues.apache.org/jira/browse/PHOENIX-7238?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Hari Krishna Dara updated PHOENIX-7238:
---------------------------------------
Description:
I have not done extensive testing on it, but when I specified
{{SALT_BUCKETS=0}} while creating an index, I get no error and this is a valid
use case to disable salting on index when the data table is salted:
{{create table tsalt (k INTEGER PRIMARY KEY, v1 INTEGER) SALT_BUCKETS=4;}}
{{upsert into tsalt (k, v1) VALUES (1, 100);}}
{{create uncovered index tsaltidx on tsalt (PHOENIX_ROW_TIMESTAMP())
SALT_BUCKETS=0;}}
>From schema and hbase regions, it is correctly treated as no salting scenario.
{\{{}0: jdbc:phoenix:localhost> select salt_buckets from system.catalog where
table_name = 'TSALTIDX' and salt_buckets is not null;
+--------------+
|SALT_BUCKETS|
+--------------+
{+}--------------{+}{}}}\{{{}hbase:001:0> list_regions 'TSALTIDX'
SERVER_NAME |
REGION_NAME | START_KEY | END_KEY | SIZE | REQ | LOCALITY |
----------------------------- |
--------------------------------------------------------- | ---------- |
---------- | ----- | ----- | ---------- |
localhost,16020,1708958003582 |
TSALTIDX,,1708958225506.a72b20c15cecba23289a03cd6956ec15. | |
| 0 | 3 | 0.0 |
1 rows{}}}
However, when I query through the index, I get an {{ArithmeticError}} for
divide by zero.
{{{}0: jdbc:phoenix:localhost> select /*+ INDEX(TSALT TSALTIDX) */ * from
TSALT;{}}}{\{{}Caused by: java.lang.ArithmeticException: / by zero
at
org.apache.phoenix.schema.SaltingUtil.getSaltingByte(SaltingUtil.java:79)
at
org.apache.phoenix.index.IndexMaintainer.buildDataRowKey(IndexMaintainer.java:916)
at
org.apache.phoenix.coprocessor.UncoveredIndexRegionScanner.scanIndexTableRows(UncoveredIndexRegionScanner.java:253)
at
org.apache.phoenix.coprocessor.UncoveredIndexRegionScanner.scanIndexTableRows(UncoveredIndexRegionScanner.java:274)
at
org.apache.phoenix.coprocessor.UncoveredIndexRegionScanner.next(UncoveredIndexRegionScanner.java:382)
at
org.apache.phoenix.coprocessor.BaseRegionScanner.nextRaw(BaseRegionScanner.java:56)
at
org.apache.phoenix.iterate.RegionScannerFactory$1.nextRaw(RegionScannerFactory.java:257){}}}
My suspicion is that table cells have number buckets stored as zero, so
PTableImpl for the index gets constructed to return 0 from {{getBucketNum()}}
and this is causing the divide by 0 error.
was:
I have not done extensive testing on it, but when I specified
{{SALT_BUCKETS=0}} while creating an index, I get no error and this is a valid
use case to disable salting on index when the data table is salted:
{{create table tsalt (k INTEGER PRIMARY KEY, v1 INTEGER) SALT_BUCKETS=4;}}
{{upsert into tsalt (k, v1) VALUES (1, 100);}}
{{create uncovered index tsaltidx on tsalt (PHOENIX_ROW_TIMESTAMP())
SALT_BUCKETS=0;}}
>From schema and hbase regions, it appears to be treated like no salting.
{{{}0: jdbc:phoenix:localhost> select salt_buckets from system.catalog where
table_name = 'TSALTIDX' and salt_buckets is not null;
+--------------+
| SALT_BUCKETS |
+--------------+
+--------------+{}}}{{{}hbase:001:0> list_regions 'TSALTIDX'
SERVER_NAME |
REGION_NAME | START_KEY | END_KEY | SIZE | REQ | LOCALITY |
----------------------------- |
--------------------------------------------------------- | ---------- |
---------- | ----- | ----- | ---------- |
localhost,16020,1708958003582 |
TSALTIDX,,1708958225506.a72b20c15cecba23289a03cd6956ec15. | |
| 0 | 3 | 0.0 |
1 rows{}}}
However, when I query through the index, I get an {{ArithmeticError}} for
divide by zero.
{{{}0: jdbc:phoenix:localhost> select /*+ INDEX(TSALT TSALTIDX) */ * from
TSALT;{}}}{{{}Caused by: java.lang.ArithmeticException: / by zero
at
org.apache.phoenix.schema.SaltingUtil.getSaltingByte(SaltingUtil.java:79)
at
org.apache.phoenix.index.IndexMaintainer.buildDataRowKey(IndexMaintainer.java:916)
at
org.apache.phoenix.coprocessor.UncoveredIndexRegionScanner.scanIndexTableRows(UncoveredIndexRegionScanner.java:253)
at
org.apache.phoenix.coprocessor.UncoveredIndexRegionScanner.scanIndexTableRows(UncoveredIndexRegionScanner.java:274)
at
org.apache.phoenix.coprocessor.UncoveredIndexRegionScanner.next(UncoveredIndexRegionScanner.java:382)
at
org.apache.phoenix.coprocessor.BaseRegionScanner.nextRaw(BaseRegionScanner.java:56)
at
org.apache.phoenix.iterate.RegionScannerFactory$1.nextRaw(RegionScannerFactory.java:257){}}}
My suspicion is that table cells have number buckets stored as zero, so
PTableImpl for the index gets constructed to return 0 from {{getBucketNum()}}
and this is causing the divide by 0 error.
> Zero is accepted for SALT_BUCKETS, but queries fail
> ---------------------------------------------------
>
> Key: PHOENIX-7238
> URL: https://issues.apache.org/jira/browse/PHOENIX-7238
> Project: Phoenix
> Issue Type: Bug
> Reporter: Hari Krishna Dara
> Priority: Minor
>
> I have not done extensive testing on it, but when I specified
> {{SALT_BUCKETS=0}} while creating an index, I get no error and this is a
> valid use case to disable salting on index when the data table is salted:
> {{create table tsalt (k INTEGER PRIMARY KEY, v1 INTEGER) SALT_BUCKETS=4;}}
> {{upsert into tsalt (k, v1) VALUES (1, 100);}}
> {{create uncovered index tsaltidx on tsalt (PHOENIX_ROW_TIMESTAMP())
> SALT_BUCKETS=0;}}
>
> From schema and hbase regions, it is correctly treated as no salting scenario.
>
> {\{{}0: jdbc:phoenix:localhost> select salt_buckets from system.catalog where
> table_name = 'TSALTIDX' and salt_buckets is not null;
> +--------------+
> |SALT_BUCKETS|
> +--------------+
> {+}--------------{+}{}}}\{{{}hbase:001:0> list_regions 'TSALTIDX'
> SERVER_NAME |
> REGION_NAME | START_KEY | END_KEY | SIZE | REQ | LOCALITY |
> ----------------------------- |
> --------------------------------------------------------- | ---------- |
> ---------- | ----- | ----- | ---------- |
> localhost,16020,1708958003582 |
> TSALTIDX,,1708958225506.a72b20c15cecba23289a03cd6956ec15. | |
> | 0 | 3 | 0.0 |
> 1 rows{}}}
> However, when I query through the index, I get an {{ArithmeticError}} for
> divide by zero.
> {{{}0: jdbc:phoenix:localhost> select /*+ INDEX(TSALT TSALTIDX) */ * from
> TSALT;{}}}{\{{}Caused by: java.lang.ArithmeticException: / by zero
> at
> org.apache.phoenix.schema.SaltingUtil.getSaltingByte(SaltingUtil.java:79)
> at
> org.apache.phoenix.index.IndexMaintainer.buildDataRowKey(IndexMaintainer.java:916)
> at
> org.apache.phoenix.coprocessor.UncoveredIndexRegionScanner.scanIndexTableRows(UncoveredIndexRegionScanner.java:253)
> at
> org.apache.phoenix.coprocessor.UncoveredIndexRegionScanner.scanIndexTableRows(UncoveredIndexRegionScanner.java:274)
> at
> org.apache.phoenix.coprocessor.UncoveredIndexRegionScanner.next(UncoveredIndexRegionScanner.java:382)
> at
> org.apache.phoenix.coprocessor.BaseRegionScanner.nextRaw(BaseRegionScanner.java:56)
> at
> org.apache.phoenix.iterate.RegionScannerFactory$1.nextRaw(RegionScannerFactory.java:257){}}}
> My suspicion is that table cells have number buckets stored as zero, so
> PTableImpl for the index gets constructed to return 0 from {{getBucketNum()}}
> and this is causing the divide by 0 error.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)