[ 
https://issues.apache.org/jira/browse/PHOENIX-7955?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Dávid Paksy reassigned PHOENIX-7955:
------------------------------------

    Assignee: Dávid Paksy

> Create table if not exists changes existing table properties in HBase
> ---------------------------------------------------------------------
>
>                 Key: PHOENIX-7955
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-7955
>             Project: Phoenix
>          Issue Type: Bug
>          Components: core
>            Reporter: Dávid Paksy
>            Assignee: Dávid Paksy
>            Priority: Major
>
> h2. Summary
> IF NOT EXISTS clause in create table failed to guard the existing table 
> properties from being changed
> h2. Actual Behavior:
> The table configuration is mutated. The REGION_REPLICATION property is 
> modified on the existing table, bypassing the safety check of the IF NOT 
> EXISTS clause.
> h2. Expected Behavior:
> If the table exists, the entire statement should be skipped safely without 
> modifying any structural or operational HBase properties.
> h2. Steps to Reproduce:
> 1. Create a standard Phoenix table with default properties.
> 2. Execute a CREATE TABLE IF NOT EXISTS statement on that same table, but 
> append modified properties (e.g., set REGION_REPLICATION=2).
> 3. Check the underlying HBase table descriptor using the HBase shell 
> (describe 'TABLE_NAME').
> h2. Steps to Reproduce (detailed):
> 1. Create table:
> {noformat}
> 0: jdbc:phoenix:node-1.example.com> CREATE TABLE IF NOT EXISTS TEST_PRTY (
> . . . . . . . . . . . . . . . . . . . . . . )> PRTY_ACNT_REL_KEY VARCHAR NOT 
> NULL,
> . . . . . . . . . . . . . . . . . . . . . . )> PRTY_IDENT_NUM VARCHAR,
> . . . . . . . . . . . . . . . . . . . . . . )> ACNT_ID_NUM VARCHAR,
> . . . . . . . . . . . . . . . . . . . . . . )> PRTY_IDENT_TYP_CD VARCHAR,
> . . . . . . . . . . . . . . . . . . . . . . )> AGMT_IDENT_TYP_CD VARCHAR,
> . . . . . . . . . . . . . . . . . . . . . . )> REL_TYP_CD VARCHAR,
> . . . . . . . . . . . . . . . . . . . . . . )> ACNT_ID_TYP_CD VARCHAR,
> . . . . . . . . . . . . . . . . . . . . . . )> DATA_SRC_CD VARCHAR,
> . . . . . . . . . . . . . . . . . . . . . . )> DATA_SRC_QLFR VARCHAR,
> . . . . . . . . . . . . . . . . . . . . . . )> ACNT_DATA_SRC_CD VARCHAR,
> . . . . . . . . . . . . . . . . . . . . . . )> PRTY_ID_QUAL VARCHAR,
> . . . . . . . . . . . . . . . . . . . . . . )> RECORD_DELETED_FLAG TINYINT,
> . . . . . . . . . . . . . . . . . . . . . . )> START_DATE TIMESTAMP,
> . . . . . . . . . . . . . . . . . . . . . . )> LAST_UPDT_DATE TIMESTAMP,
> . . . . . . . . . . . . . . . . . . . . . . )> CONSTRAINT PK PRIMARY KEY 
> (PRTY_ACNT_REL_KEY)
> . . . . . . . . . . . . . . . . . . . . . . )> )
> . . . . . . . . . . . . . . . . . . semicolon> SALT_BUCKETS=10,
> . . . . . . . . . . . . . . . . . . semicolon> COMPRESSION='SNAPPY',
> . . . . . . . . . . . . . . . . . . semicolon> VERSIONS=1,
> . . . . . . . . . . . . . . . . . . semicolon> REGION_REPLICATION=3;
> No rows affected (1.48 seconds)
> {noformat}
> 2. Then verify the table is visible in hbase shell
> {noformat}
> hbase:006:0> describe "TEST_PRTY"
> Table TEST_PRTY is ENABLED
> TEST_PRTY, \{TABLE_ATTRIBUTES => {REGION_REPLICATION => '3', coprocessor$1 => 
> '|org.apache.phoenix.coprocessor.ScanRegionObserver|805306366|', 
> coprocessor$2 => 
> '|org.apache.phoenix.coprocessor.UngroupedAggregateRegionObserver|805306366|',
>  coprocessor$3 => 
> '|org.apache.phoenix.coprocessor.GroupedAggregateRegionObserver|805306366|', 
> coprocessor$4 => 
> '|org.apache.phoenix.coprocessor.ServerCachingEndpointImpl|805306366|', 
> coprocessor$5 => 
> '|org.apache.phoenix.hbase.index.IndexRegionObserver|805306366|index.builder=org.apache.phoenix.index.PhoenixIndexBuilder,org.apache.hadoop.hbase.index.codec.class=org.apache.phoenix.index.PhoenixIndexCodec',
>  METADATA => {'hbase.store.file-tracker.impl' => 'DEFAULT'}}}
> COLUMN FAMILIES DESCRIPTION
> {NAME => '0', INDEX_BLOCK_ENCODING => 'NONE', VERSIONS => '1', 
> KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'FAST_DIFF', TTL => 
> 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 
> 'ROW', IN_MEMORY => 'false', COMPRESSION => 'SNAPPY', BLOCKCACHE => 'true', 
> BLOCKSIZE => '65536 B (64KB)'}
> 1 row(s)
> Quota is disabled
> Took 0.0876 seconds
> {noformat}
> 3. Now execute CREATE TABLE IF NOT EXISTS command with changed properties 
> (ex: REGION_REPLICATION from 3 to 2):
> {noformat}
> 0: jdbc:phoenix:node-1.example.com> CREATE TABLE IF NOT EXISTS TEST_PRTY (
> . . . . . . . . . . . . . . . . . . . . . . )> PRTY_ACNT_REL_KEY VARCHAR NOT 
> NULL,
> . . . . . . . . . . . . . . . . . . . . . . )> PRTY_IDENT_NUM VARCHAR,
> . . . . . . . . . . . . . . . . . . . . . . )> ACNT_ID_NUM VARCHAR,
> . . . . . . . . . . . . . . . . . . . . . . )> PRTY_IDENT_TYP_CD VARCHAR,
> . . . . . . . . . . . . . . . . . . . . . . )> AGMT_IDENT_TYP_CD VARCHAR,
> . . . . . . . . . . . . . . . . . . . . . . )> REL_TYP_CD VARCHAR,
> . . . . . . . . . . . . . . . . . . . . . . )> ACNT_ID_TYP_CD VARCHAR,
> . . . . . . . . . . . . . . . . . . . . . . )> DATA_SRC_CD VARCHAR,
> . . . . . . . . . . . . . . . . . . . . . . )> DATA_SRC_QLFR VARCHAR,
> . . . . . . . . . . . . . . . . . . . . . . )> ACNT_DATA_SRC_CD VARCHAR,
> . . . . . . . . . . . . . . . . . . . . . . )> PRTY_ID_QUAL VARCHAR,
> . . . . . . . . . . . . . . . . . . . . . . )> RECORD_DELETED_FLAG TINYINT,
> . . . . . . . . . . . . . . . . . . . . . . )> START_DATE TIMESTAMP,
> . . . . . . . . . . . . . . . . . . . . . . )> LAST_UPDT_DATE TIMESTAMP, -- 
> <-- Added missing comma here
> . . . . . . . . . . . . . . . . . . . . . . )> CONSTRAINT PK PRIMARY KEY 
> (PRTY_ACNT_REL_KEY)
> . . . . . . . . . . . . . . . . . . . . . . )> ) -- <-- Removed premature 
> semicolon here
> . . . . . . . . . . . . . . . . . . semicolon> SALT_BUCKETS=10,
> . . . . . . . . . . . . . . . . . . semicolon> COMPRESSION='SNAPPY',
> . . . . . . . . . . . . . . . . . . semicolon> VERSIONS=1,
> . . . . . . . . . . . . . . . . . . semicolon> REGION_REPLICATION=2;
> {noformat}
> -> Table properties changed - *NOK* (x)
> 4. We can see the changes in Hbase shell too
> {noformat}
> hbase:007:0> describe "TEST_PRTY"
> Table TEST_PRTY is ENABLED
> TEST_PRTY, \{TABLE_ATTRIBUTES => {REGION_REPLICATION => '2', coprocessor$1 => 
> '|org.apache.phoenix.coprocessor.ScanRegionObserver|805306366|', 
> coprocessor$2 => 
> '|org.apache.phoenix.coprocessor.UngroupedAggregateRegionObserver|805306366|',
>  coprocessor$3 => 
> '|org.apache.phoenix.coprocessor.GroupedAggregateRegionObserver|805306366|', 
> coprocessor$4 => 
> '|org.apache.phoenix.coprocessor.ServerCachingEndpointImpl|805306366|', 
> coprocessor$5 => 
> '|org.apache.phoenix.hbase.index.IndexRegionObserver|805306366|index.builder=org.apache.phoenix.index.PhoenixIndexBuilder,org.apache.hadoop.hbase.index.codec.class=org.apache.phoenix.index.PhoenixIndexCodec',
>  METADATA => {'hbase.store.file-tracker.impl' => 'DEFAULT'}}}
> COLUMN FAMILIES DESCRIPTION
> {NAME => '0', INDEX_BLOCK_ENCODING => 'NONE', VERSIONS => '1', 
> KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'FAST_DIFF', TTL => 
> 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 
> 'ROW', IN_MEMORY => 'false', COMPRESSION => 'SNAPPY', BLOCKCACHE => 'true', 
> BLOCKSIZE => '65536 B (64KB)'}
> 1 row(s)
> Quota is disabled
> {noformat}



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

Reply via email to