-
Notifications
You must be signed in to change notification settings - Fork 3.9k
Description
Is your feature request related to a problem? Please describe.
Customer made a typo and parser/cli did not notify the customer, causing them to believe the replication zone was correctly configured while in reality it was not.
Describe the solution you'd like
Customer would like to have strict enforcement of semantics and syntax for replication zone configurations. Customer would also like the parser to error out if the syntax is incorrect for replication zone configurations.
Describe alternatives you've considered
Not applicable
Additional context
Full scenario showing the differences when customer made a typo / used wrong syntax:
admin@crdbserver:443/defaultdb> create table test(id int);
CREATE TABLE
Time: 100ms total (execution 28ms / network 72ms)
The following caused the incorrect lease_preference
although no error was thrown:
lease_preferences = '[[+region=us-east-2]], [[+region=us-east-1]], [[-region=us-west-2]]]';
and this is the correct syntax:
lease_preferences = '[[+region=us-east-2], [+region=us-east-1], [-region=us-west-2]]';
Full examples below
Bad Syntax
admin@crdbserver:443/defaultdb> ALTER TABLE test CONFIGURE ZONE USING
range_min_bytes = 134217728,
range_max_bytes = 536870912,
gc.ttlseconds = 90000,
num_replicas = 5,
num_voters = 5,
constraints = '{+region=us-east-1: 2, +region=us-east-2: 2, +region=us-west-2: 1}',
voter_constraints = '{+region=us-east-2: 2}',
lease_preferences = '[[+region=us-east-2]], [[+region=us-east-1]], [[-region=us-west-2]]]';
CONFIGURE ZONE 1
Time: 100ms total (execution 27ms / network 73ms)
admin@crdbserver:443/defaultdb> show create table test;
table_name | create_statement
-------------+------------------------------------------------------------------------------------------
test | CREATE TABLE public.test (
| id INT8 NULL,
| rowid INT8 NOT VISIBLE NOT NULL DEFAULT unique_rowid(),
| CONSTRAINT test_pkey PRIMARY KEY (rowid ASC)
| );
| ALTER TABLE defaultdb.public.test CONFIGURE ZONE USING
| range_min_bytes = 134217728,
| range_max_bytes = 536870912,
| gc.ttlseconds = 90000,
| num_replicas = 5,
| num_voters = 5,
| constraints = '{+region=us-east-1: 2, +region=us-east-2: 2, +region=us-west-2: 1}',
| voter_constraints = '{+region=us-east-2: 2}',
| lease_preferences = '[[+region=us-east-2]]'
(1 row)
Time: 120ms total (execution 49ms / network 71ms)
admin@crdbserver:443/defaultdb> ALTER TABLE test CONFIGURE ZONE USING
range_min_bytes = 134217728,
range_max_bytes = 536870912,
gc.ttlseconds = 90000,
num_replicas = 5,
num_voters = 5,
constraints = '{+region=us-east-1: 2, +region=us-east-2: 2, +region=us-west-2: 1}',
voter_constraints = '{+region=us-east-2: 5}',
lease_preferences = '[[+region=us-east-2]], [[+region=us-east-1]], [[-region=us-west-2]]]';
CONFIGURE ZONE 1
Time: 99ms total (execution 27ms / network 72ms)
admin@crdbserver:443/defaultdb> show create table test;
table_name | create_statement
-------------+------------------------------------------------------------------------------------------
test | CREATE TABLE public.test (
| id INT8 NULL,
| rowid INT8 NOT VISIBLE NOT NULL DEFAULT unique_rowid(),
| CONSTRAINT test_pkey PRIMARY KEY (rowid ASC)
| );
| ALTER TABLE defaultdb.public.test CONFIGURE ZONE USING
| range_min_bytes = 134217728,
| range_max_bytes = 536870912,
| gc.ttlseconds = 90000,
| num_replicas = 5,
| num_voters = 5,
| constraints = '{+region=us-east-1: 2, +region=us-east-2: 2, +region=us-west-2: 1}',
| voter_constraints = '{+region=us-east-2: 5}',
| lease_preferences = '[[+region=us-east-2]]'
(1 row)
Time: 119ms total (execution 46ms / network 74ms)
Good Syntax
admin@crdbserver:443/defaultdb> ALTER TABLE test CONFIGURE ZONE USING
range_min_bytes = 134217728,
range_max_bytes = 536870912,
gc.ttlseconds = 90000,
num_replicas = 5,
num_voters = 5,
constraints = '{+region=us-east-1: 2, +region=us-east-2: 2, +region=us-west-2: 1}',
voter_constraints = '{+region=us-east-2: 2}',
lease_preferences = '[[+region=us-east-2], [+region=us-east-1], [-region=us-west-2]]';
CONFIGURE ZONE 1
Time: 99ms total (execution 28ms / network 71ms)
admin@crdbserver:443/defaultdb> show create table test;
table_name | create_statement
-------------+--------------------------------------------------------------------------------------------
test | CREATE TABLE public.test (
| id INT8 NULL,
| rowid INT8 NOT VISIBLE NOT NULL DEFAULT unique_rowid(),
| CONSTRAINT test_pkey PRIMARY KEY (rowid ASC)
| );
| ALTER TABLE defaultdb.public.test CONFIGURE ZONE USING
| range_min_bytes = 134217728,
| range_max_bytes = 536870912,
| gc.ttlseconds = 90000,
| num_replicas = 5,
| num_voters = 5,
| constraints = '{+region=us-east-1: 2, +region=us-east-2: 2, +region=us-west-2: 1}',
| voter_constraints = '{+region=us-east-2: 2}',
| lease_preferences = '[[+region=us-east-2], [+region=us-east-1], [-region=us-west-2]]'
(1 row)
Time: 116ms total (execution 46ms / network 71ms)
Jira issue: CRDB-38941