You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "Hari Krishna Dara (Jira)" <ji...@apache.org> on 2024/02/26 14:47:00 UTC

[jira] [Created] (PHOENIX-7238) Zero is accepted for SALT_BUCKETS, but queries fail

Hari Krishna Dara created PHOENIX-7238:
------------------------------------------

             Summary: 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


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.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)