# LogicTest: multiregion-9node-3region-3azs multiregion-9node-3region-3azs-tenant

query TTTTT rowsort
SHOW REGIONS
----
ap-southeast-2  {ap-az1,ap-az2,ap-az3}  {}  {}  {}
ca-central-1    {ca-az1,ca-az2,ca-az3}  {}  {}  {}
us-east-1       {us-az1,us-az2,us-az3}  {}  {}  {}

statement ok
SELECT crdb_internal.validate_multi_region_zone_configs()

statement ok
CREATE DATABASE "mr-zone-configs"
  primary region "ca-central-1"
  regions "ap-southeast-2", "us-east-1"
  survive region failure

statement ok
use "mr-zone-configs"

statement ok
CREATE TABLE tbl (pk INT PRIMARY KEY, i INT)

query TT
SHOW ZONE CONFIGURATION FOR DATABASE "mr-zone-configs"
----
DATABASE "mr-zone-configs"  ALTER DATABASE "mr-zone-configs" CONFIGURE ZONE USING
                              range_min_bytes = 134217728,
                              range_max_bytes = 536870912,
                              gc.ttlseconds = 14400,
                              num_replicas = 5,
                              num_voters = 5,
                              constraints = '{+region=ap-southeast-2: 1, +region=ca-central-1: 1, +region=us-east-1: 1}',
                              voter_constraints = '{+region=ca-central-1: 2}',
                              lease_preferences = '[[+region=ca-central-1]]'

query TT
SHOW ZONE CONFIGURATION FOR TABLE tbl
----
DATABASE "mr-zone-configs"  ALTER DATABASE "mr-zone-configs" CONFIGURE ZONE USING
                              range_min_bytes = 134217728,
                              range_max_bytes = 536870912,
                              gc.ttlseconds = 14400,
                              num_replicas = 5,
                              num_voters = 5,
                              constraints = '{+region=ap-southeast-2: 1, +region=ca-central-1: 1, +region=us-east-1: 1}',
                              voter_constraints = '{+region=ca-central-1: 2}',
                              lease_preferences = '[[+region=ca-central-1]]'


# REGIONAL zone config extensions.

statement ok
ALTER DATABASE "mr-zone-configs" ALTER LOCALITY REGIONAL CONFIGURE ZONE USING num_replicas = 9

query TT
SHOW ZONE CONFIGURATION FOR DATABASE "mr-zone-configs"
----
DATABASE "mr-zone-configs"  ALTER DATABASE "mr-zone-configs" CONFIGURE ZONE USING
                              range_min_bytes = 134217728,
                              range_max_bytes = 536870912,
                              gc.ttlseconds = 14400,
                              num_replicas = 9,
                              num_voters = 5,
                              constraints = '{+region=ap-southeast-2: 1, +region=ca-central-1: 1, +region=us-east-1: 1}',
                              voter_constraints = '{+region=ca-central-1: 2}',
                              lease_preferences = '[[+region=ca-central-1]]'

query TT
SHOW ZONE CONFIGURATION FOR TABLE tbl
----
DATABASE "mr-zone-configs"  ALTER DATABASE "mr-zone-configs" CONFIGURE ZONE USING
                              range_min_bytes = 134217728,
                              range_max_bytes = 536870912,
                              gc.ttlseconds = 14400,
                              num_replicas = 9,
                              num_voters = 5,
                              constraints = '{+region=ap-southeast-2: 1, +region=ca-central-1: 1, +region=us-east-1: 1}',
                              voter_constraints = '{+region=ca-central-1: 2}',
                              lease_preferences = '[[+region=ca-central-1]]'


# REGIONAL IN zone config extensions.

statement ok
ALTER DATABASE "mr-zone-configs" ALTER LOCALITY REGIONAL IN "ca-central-1" CONFIGURE ZONE USING
  lease_preferences = '[[+region=ca-central-1], [+region=ap-southeast-2]]'

statement ok
ALTER DATABASE "mr-zone-configs" ALTER LOCALITY REGIONAL IN "ap-southeast-2" CONFIGURE ZONE USING
  lease_preferences = '[[+region=ap-southeast-2], [+region=us-east-1]]'

query TT
SHOW ZONE CONFIGURATION FOR DATABASE "mr-zone-configs"
----
DATABASE "mr-zone-configs"  ALTER DATABASE "mr-zone-configs" CONFIGURE ZONE USING
                              range_min_bytes = 134217728,
                              range_max_bytes = 536870912,
                              gc.ttlseconds = 14400,
                              num_replicas = 9,
                              num_voters = 5,
                              constraints = '{+region=ap-southeast-2: 1, +region=ca-central-1: 1, +region=us-east-1: 1}',
                              voter_constraints = '{+region=ca-central-1: 2}',
                              lease_preferences = '[[+region=ca-central-1], [+region=ap-southeast-2]]'

query TT
SHOW ZONE CONFIGURATION FOR TABLE tbl
----
DATABASE "mr-zone-configs"  ALTER DATABASE "mr-zone-configs" CONFIGURE ZONE USING
                              range_min_bytes = 134217728,
                              range_max_bytes = 536870912,
                              gc.ttlseconds = 14400,
                              num_replicas = 9,
                              num_voters = 5,
                              constraints = '{+region=ap-southeast-2: 1, +region=ca-central-1: 1, +region=us-east-1: 1}',
                              voter_constraints = '{+region=ca-central-1: 2}',
                              lease_preferences = '[[+region=ca-central-1], [+region=ap-southeast-2]]'

statement ok
ALTER TABLE tbl SET LOCALITY REGIONAL IN "ca-central-1"

query TT
SHOW ZONE CONFIGURATION FOR TABLE tbl
----
TABLE tbl  ALTER TABLE tbl CONFIGURE ZONE USING
             range_min_bytes = 134217728,
             range_max_bytes = 536870912,
             gc.ttlseconds = 14400,
             num_replicas = 9,
             num_voters = 5,
             constraints = '{+region=ap-southeast-2: 1, +region=ca-central-1: 1, +region=us-east-1: 1}',
             voter_constraints = '{+region=ca-central-1: 2}',
             lease_preferences = '[[+region=ca-central-1], [+region=ap-southeast-2]]'

statement ok
ALTER TABLE tbl SET LOCALITY REGIONAL IN "ap-southeast-2"

query TT
SHOW ZONE CONFIGURATION FOR TABLE tbl
----
TABLE tbl  ALTER TABLE tbl CONFIGURE ZONE USING
             range_min_bytes = 134217728,
             range_max_bytes = 536870912,
             gc.ttlseconds = 14400,
             num_replicas = 9,
             num_voters = 5,
             constraints = '{+region=ap-southeast-2: 1, +region=ca-central-1: 1, +region=us-east-1: 1}',
             voter_constraints = '{+region=ap-southeast-2: 2}',
             lease_preferences = '[[+region=ap-southeast-2], [+region=us-east-1]]'

statement ok
ALTER TABLE tbl SET LOCALITY REGIONAL IN "us-east-1"

query TT
SHOW ZONE CONFIGURATION FOR TABLE tbl
----
TABLE tbl  ALTER TABLE tbl CONFIGURE ZONE USING
             range_min_bytes = 134217728,
             range_max_bytes = 536870912,
             gc.ttlseconds = 14400,
             num_replicas = 9,
             num_voters = 5,
             constraints = '{+region=ap-southeast-2: 1, +region=ca-central-1: 1, +region=us-east-1: 1}',
             voter_constraints = '{+region=us-east-1: 2}',
             lease_preferences = '[[+region=us-east-1]]'

# GLOBAL zone config extensions.

statement ok
ALTER TABLE tbl SET LOCALITY GLOBAL

query TT
SHOW ZONE CONFIGURATION FOR TABLE tbl
----
TABLE tbl  ALTER TABLE tbl CONFIGURE ZONE USING
             range_min_bytes = 134217728,
             range_max_bytes = 536870912,
             gc.ttlseconds = 14400,
             global_reads = true,
             num_replicas = 5,
             num_voters = 5,
             constraints = '{+region=ap-southeast-2: 1, +region=ca-central-1: 1, +region=us-east-1: 1}',
             voter_constraints = '{+region=ca-central-1: 2}',
             lease_preferences = '[[+region=ca-central-1]]'


statement ok
ALTER DATABASE "mr-zone-configs" ALTER LOCALITY GLOBAL CONFIGURE ZONE USING
  num_replicas = 6,
  num_voters = 6,
  lease_preferences = '[[+region=ca-central-1], [+region=ap-southeast-2], [+region=us-east-1]]'

query TT
SHOW ZONE CONFIGURATION FOR DATABASE "mr-zone-configs"
----
DATABASE "mr-zone-configs"  ALTER DATABASE "mr-zone-configs" CONFIGURE ZONE USING
                              range_min_bytes = 134217728,
                              range_max_bytes = 536870912,
                              gc.ttlseconds = 14400,
                              num_replicas = 9,
                              num_voters = 5,
                              constraints = '{+region=ap-southeast-2: 1, +region=ca-central-1: 1, +region=us-east-1: 1}',
                              voter_constraints = '{+region=ca-central-1: 2}',
                              lease_preferences = '[[+region=ca-central-1], [+region=ap-southeast-2]]'

query TT
SHOW ZONE CONFIGURATION FOR TABLE tbl
----
TABLE tbl  ALTER TABLE tbl CONFIGURE ZONE USING
             range_min_bytes = 134217728,
             range_max_bytes = 536870912,
             gc.ttlseconds = 14400,
             global_reads = true,
             num_replicas = 6,
             num_voters = 6,
             constraints = '{+region=ap-southeast-2: 1, +region=ca-central-1: 1, +region=us-east-1: 1}',
             voter_constraints = '{+region=ca-central-1: 2}',
             lease_preferences = '[[+region=ca-central-1], [+region=ap-southeast-2], [+region=us-east-1]]'

statement ok
ALTER DATABASE "mr-zone-configs" ALTER LOCALITY GLOBAL CONFIGURE ZONE DISCARD

query TT
SHOW ZONE CONFIGURATION FOR DATABASE "mr-zone-configs"
----
DATABASE "mr-zone-configs"  ALTER DATABASE "mr-zone-configs" CONFIGURE ZONE USING
                              range_min_bytes = 134217728,
                              range_max_bytes = 536870912,
                              gc.ttlseconds = 14400,
                              num_replicas = 9,
                              num_voters = 5,
                              constraints = '{+region=ap-southeast-2: 1, +region=ca-central-1: 1, +region=us-east-1: 1}',
                              voter_constraints = '{+region=ca-central-1: 2}',
                              lease_preferences = '[[+region=ca-central-1], [+region=ap-southeast-2]]'

query TT
SHOW ZONE CONFIGURATION FOR TABLE tbl
----
TABLE tbl  ALTER TABLE tbl CONFIGURE ZONE USING
             range_min_bytes = 134217728,
             range_max_bytes = 536870912,
             gc.ttlseconds = 14400,
             global_reads = true,
             num_replicas = 5,
             num_voters = 5,
             constraints = '{+region=ap-southeast-2: 1, +region=ca-central-1: 1, +region=us-east-1: 1}',
             voter_constraints = '{+region=ca-central-1: 2}',
             lease_preferences = '[[+region=ca-central-1]]'

subtest conflicting_zone_config_extension

statement error pq: REGIONAL zone config extensions are not allowed to set lease_preferences
ALTER DATABASE "mr-zone-configs" ALTER LOCALITY REGIONAL CONFIGURE ZONE USING
  lease_preferences = '[[+region=ap-southeast-2], [+region=ca-central-1]]'

statement error pq: zone config extension's lease preference \{\[-region=ca-central-1\]\} violates the home region \(ca-central-1\) lease preference: \{\[\+region=ca-central-1\]\}
ALTER DATABASE "mr-zone-configs" ALTER LOCALITY REGIONAL IN "ca-central-1" CONFIGURE ZONE USING
  lease_preferences = '[[-region=ca-central-1], [+region=ap-southeast-2]]'

statement error pq: zone config extension cannot change priority of lease preference for the home region: \{\[\+region=ca-central-1\]\}
ALTER DATABASE "mr-zone-configs" ALTER LOCALITY REGIONAL IN "ca-central-1" CONFIGURE ZONE USING
  lease_preferences = '[[+region=ap-southeast-2], [+region=ca-central-1]]'

statement error pq: zone config extension cannot unset the home region \(ca-central-1\) lease preference: \{\[\+region=ca-central-1\]\}
ALTER DATABASE "mr-zone-configs" ALTER LOCALITY REGIONAL IN "ca-central-1" CONFIGURE ZONE USING
  lease_preferences = '[[+region=ap-southeast-2]]'

statement error pq: zone config extension cannot set num_replicas 4 that is lower than the one required for the survival goal: 5 with goal REGION_FAILURE
ALTER DATABASE "mr-zone-configs" ALTER LOCALITY GLOBAL CONFIGURE ZONE USING
  num_replicas = 4

statement error pq: zone config extension cannot set num_voters 4 that is lower than the one required for the survival goal: 5 with goal REGION_FAILURE
ALTER DATABASE "mr-zone-configs" ALTER LOCALITY GLOBAL CONFIGURE ZONE USING
  num_voters = 4
