cockroachdb / cockroachdb/cockroach
ua: system database in application tenant has lower replication factor than non-UA system database.
- Dominant language
- Go
- Stars
- 32.5k
- Forks
- 4.1k
- PR merge metrics
- PR metrics pending
Description
**Describe the problem**
The system database in a non-UA cluster (and in the system cluster in a UA cluster) has a replication factor of 5:
```
demo@localhost:26257/system/defaultdb> show zone configurations;
target | raw_config_sql
---------------------------------------------------+------------------------------------------------------------------------------
RANGE default | ALTER RANGE default CONFIGURE ZONE USING
| range_min_bytes = 134217728,
| range_max_bytes = 536870912,
| gc.ttlseconds = 14400,
| num_replicas = 3,
| constraints = '[]',
| lease_preferences = '[]'
DATABASE system | ALTER DATABASE system CONFIGURE ZONE USING
| range_min_bytes = 134217728,
| range_max_bytes = 536870912,
| gc.ttlseconds = 14400,
| num_replicas = 5,
| constraints = '[]',
| lease_preferences = '[]'
TABLE system.public.lease | ALTER TABLE system.public.lease CONFIGURE ZONE USING
| gc.ttlseconds = 600
RANGE meta | ALTER RANGE meta CONFIGURE ZONE USING
| range_min_bytes = 134217728,
| range_max_bytes = 536870912,
| gc.ttlseconds = 3600,
| num_replicas = 5,
| constraints = '[]',
| lease_preferences = '[]'
RANGE system | ALTER RANGE system CONFIGURE ZONE USING
| range_min_bytes = 134217728,
| range_max_bytes = 536870912,
| gc.ttlseconds = 14400,
| num_replicas = 5,
| constraints = '[]',
| lease_preferences = '[]'
RANGE timeseries | ALTER RANGE timeseries CONFIGURE ZONE USING
| gc.ttlseconds = 14400
RANGE liveness | ALTER RANGE liveness CONFIGURE ZONE USING
| range_min_bytes = 134217728,
| range_max_bytes = 536870912,
| gc.ttlseconds = 600,
| num_replicas = 5,
| constraints = '[]',
| lease_preferences = '[]'
TABLE system.public.replication_constraint_stats | ALTER TABLE system.public.replication_constraint_stats CONFIGURE ZONE USING
| gc.ttlseconds = 600
TABLE system.public.replication_stats | ALTER TABLE system.public.replication_stats CONFIGURE ZONE USING
| gc.ttlseconds = 600
TABLE system.public.statement_statistics | ALTER TABLE system.public.statement_statistics CONFIGURE ZONE USING
| gc.ttlseconds = 3600
TABLE system.public.transaction_statistics | ALTER TABLE system.public.transaction_statistics CONFIGURE ZONE USING
| gc.ttlseconds = 3600
TABLE system.public.tenant_usage | ALTER TABLE system.public.tenant_usage CONFIGURE ZONE USING
| gc.ttlseconds = 7200
TABLE system.public.span_stats_tenant_boundaries | ALTER TABLE system.public.span_stats_tenant_boundaries CONFIGURE ZONE USING
| gc.ttlseconds = 3600
TABLE system.public.statement_activity | ALTER TABLE system.public.statement_activity CONFIGURE ZONE USING
| gc.ttlseconds = 3600
TABLE system.public.transaction_activity | ALTER TABLE system.public.transaction_activity CONFIGURE ZONE USING
| gc.ttlseconds = 3600
(15 rows)
Time: 18ms total (execution 17ms / network 1ms)
```
In a UA-cluster's application tenant, however, no system database zone configuration is in place:
```
demo@127.0.0.1:26257/demoapp/movr> SHOW ZONE CONFIGURATIONS;
target | raw_config_sql
---------------------------------------------+------------------------------------------------------------------------
RANGE default | ALTER RANGE default CONFIGURE ZONE USING
| range_min_bytes = 134217728,
| range_max_bytes = 536870912,
| gc.ttlseconds = 14400,
| num_replicas = 3,
| constraints = '[]',
| lease_preferences = '[]'
TABLE system.public.statement_statistics | ALTER TABLE system.public.statement_statistics CONFIGURE ZONE USING
| gc.ttlseconds = 3600
TABLE system.public.transaction_statistics | ALTER TABLE system.public.transaction_statistics CONFIGURE ZONE USING
| gc.ttlseconds = 3600
TABLE system.public.statement_activity | ALTER TABLE system.public.statement_activity CONFIGURE ZONE USING
| gc.ttlseconds = 3600
TABLE system.public.transaction_activity | ALTER TABLE system.public.transaction_activity CONFIGURE ZONE USING
| gc.ttlseconds = 3600
(5 rows)
Time: 14ms total (execution 13ms / network 1ms)
```
Note also the difference in the gc.ttlseconds for the public.leases table.
This difference is also reflected in the final span configurations for the system tables:
NumReplicas According to Span Config
```
demo@localhost:26257/system/defaultdb> select crdb_internal.pretty_key(start_key), crdb_internal.pretty_key(end_key), crdb_internal.pb_to_json('cockroach.roachpb.SpanConfig', config)->>'numReplicas' from system.span_configurations;
crdb_internal.pretty_key | crdb_internal.pretty_key | ?column?
-------------------------------+-------------------------------+-----------
/Min | /System/NodeLiveness | 5
/System/NodeLiveness | /System/NodeLivenessMax | 5
/System/NodeLivenessMax | /System/tsd | 5
/System/tsd | /System/"tse" | 3
/System/"tse" | /System/SystemSpanConfigKeys | 5
/Table/0 | /Table/4 | 5
/Table/4 | /Table/5 | 5
/Table/5 | /Table/6 | 5
/Table/6 | /Table/7 | 5
/Table/7 | /Table/8 | 5
/Table/8 | /Table/9 | 5
/Table/9 | /Table/10 | 5
/Table/11 | /Table/12 | 5
/Table/12 | /Table/13 | 5
/Table/13 | /Table/14 | 5
/Table/14 | /Table/15 | 5
/Table/15 | /Table/16 | 5
/Table/16 | /Table/17 | 5
/Table/17 | /Table/18 | 5
/Table/18 | /Table/19 | 5
/Table/19 | /Table/20 | 5
/Table/20 | /Table/21 | 5
/Table/21 | /Table/22 | 5
/Table/22 | /Table/23 | 5
/Table/23 | /Table/24 | 5
/Table/24 | /Table/25 | 5
/Table/25 | /Table/26 | 5
/Table/26 | /Table/27 | 5
/Table/27 | /Table/28 | 5
/Table/28 | /Table/29 | 5
/Table/29 | /NamespaceTable/30 | 5
/NamespaceTable/30 | /NamespaceTable/Max | 5
/NamespaceTable/Max | /Table/32 | 5
/Table/32 | /Table/33 | 5
/Table/33 | /Table/34 | 5
/Table/34 | /Table/35 | 5
/Table/35 | /Table/36 | 5
/Table/36 | /Table/37 | 5
/Table/37 | /Table/38 | 5
/Table/38 | /Table/39 | 5
/Table/39 | /Table/40 | 5
/Table/40 | /Table/41 | 5
/Table/41 | /Table/42 | 5
/Table/42 | /Table/43 | 5
/Table/43 | /Table/44 | 5
/Table/44 | /Table/45 | 5
/Table/45 | /Table/46 | 5
/Table/46 | /Table/47 | 5
/Table/47 | /Table/48 | 5
/Table/48 | /Table/49 | 5
/Table/50 | /Table/51 | 5
/Table/51 | /Table/52 | 5
/Table/52 | /Table/53 | 5
/Table/53 | /Table/54 | 5
/Table/54 | /Table/55 | 5
/Table/55 | /Table/56 | 5
/Table/56 | /Table/57 | 5
/Table/57 | /Table/58 | 5
/Table/58 | /Table/59 | 5
/Table/59 | /Table/60 | 5
/Table/60 | /Table/61 | 5
/Table/61 | /Table/62 | 5
/Table/62 | /Table/63 | 5
/Table/63 | /Table/64 | 5
/Table/64 | /Table/65 | 5
/Table/65 | /Table/66 | 5
/Table/66 | /Table/67 | 5
/Table/67 | /Table/68 | 5
/Table/68 | /Table/69 | 5
/Table/69 | /Table/70 | 5
/Table/70 | /Table/71 | 5
/Table/71 | /Table/72 | 5
/Table/72 | /Table/73 | 5
/Table/73 | /Table/74 | 5
/Table/74 | /Table/75 | 5
/Table/75 | /Table/76 | 5
/Table/76 | /Table/77 | 5
/Tenant/3 | /Tenant/3/Table/4 | 3
/Tenant/3/Table/4 | /Tenant/3/Table/5 | 3
/Tenant/3/Table/5 | /Tenant/3/Table/6 | 3
/Tenant/3/Table/6 | /Tenant/3/Table/7 | 3
/Tenant/3/Table/7 | /Tenant/3/Table/8 | 3
/Tenant/3/Table/8 | /Tenant/3/Table/9 | 3
/Tenant/3/Table/9 | /Tenant/3/Table/10 | 3
/Tenant/3/Table/11 | /Tenant/3/Table/12 | 3
/Tenant/3/Table/12 | /Tenant/3/Table/13 | 3
/Tenant/3/Table/13 | /Tenant/3/Table/14 | 3
/Tenant/3/Table/14 | /Tenant/3/Table/15 | 3
/Tenant/3/Table/15 | /Tenant/3/Table/16 | 3
/Tenant/3/Table/19 | /Tenant/3/Table/20 | 3
/Tenant/3/Table/20 | /Tenant/3/Table/21 | 3
/Tenant/3/Table/21 | /Tenant/3/Table/22 | 3
/Tenant/3/Table/23 | /Tenant/3/Table/24 | 3
/Tenant/3/Table/24 | /Tenant/3/Table/25 | 3
/Tenant/3/Table/25 | /Tenant/3/Table/26 | 3
/Tenant/3/Table/26 | /Tenant/3/Table/27 | 3
/Tenant/3/Table/27 | /Tenant/3/Table/28 | 3
/Tenant/3/Table/28 | /Tenant/3/Table/29 | 3
/Tenant/3/NamespaceTable/30 | /Tenant/3/NamespaceTable/Max | 3
/Tenant/3/NamespaceTable/Max | /Tenant/3/Table/32 | 3
/Tenant/3/Table/32 | /Tenant/3/Table/33 | 3
/Tenant/3/Table/33 | /Tenant/3/Table/34 | 3
/Tenant/3/Table/34 | /Tenant/3/Table/35 | 3
/Tenant/3/Table/35 | /Tenant/3/Table/36 | 3
/Tenant/3/Table/36 | /Tenant/3/Table/37 | 3
/Tenant/3/Table/37 | /Tenant/3/Table/38 | 3
/Tenant/3/Table/39 | /Tenant/3/Table/40 | 3
/Tenant/3/Table/40 | /Tenant/3/Table/41 | 3
/Tenant/3/Table/41 | /Tenant/3/Table/42 | 3
/Tenant/3/Table/42 | /Tenant/3/Table/43 | 3
/Tenant/3/Table/43 | /Tenant/3/Table/44 | 3
/Tenant/3/Table/44 | /Tenant/3/Table/45 | 3
/Tenant/3/Table/45 | /Tenant/3/Table/46 | 3
/Tenant/3/Table/46 | /Tenant/3/Table/47 | 3
/Tenant/3/Table/47 | /Tenant/3/Table/48 | 3
/Tenant/3/Table/48 | /Tenant/3/Table/49 | 3
/Tenant/3/Table/50 | /Tenant/3/Table/51 | 3
/Tenant/3/Table/51 | /Tenant/3/Table/52 | 3
/Tenant/3/Table/52 | /Tenant/3/Table/53 | 3
/Tenant/3/Table/53 | /Tenant/3/Table/54 | 3
/Tenant/3/Table/54 | /Tenant/3/Table/55 | 3
/Tenant/3/Table/55 | /Tenant/3/Table/56 | 3
/Tenant/3/Table/56 | /Tenant/3/Table/57 | 3
/Tenant/3/Table/57 | /Tenant/3/Table/58 | 3
/Tenant/3/Table/58 | /Tenant/3/Table/59 | 3
/Tenant/3/Table/59 | /Tenant/3/Table/60 | 3
/Tenant/3/Table/60 | /Tenant/3/Table/61 | 3
/Tenant/3/Table/61 | /Tenant/3/Table/62 | 3
/Tenant/3/Table/62 | /Tenant/3/Table/63 | 3
/Tenant/3/Table/63 | /Tenant/3/Table/64 | 3
/Tenant/3/Table/64 | /Tenant/3/Table/65 | 3
/Tenant/3/Table/65 | /Tenant/3/Table/66 | 3
/Tenant/3/Table/66 | /Tenant/3/Table/67 | 3
/Tenant/3/Table/67 | /Tenant/3/Table/68 | 3
/Tenant/3/Table/68 | /Tenant/3/Table/69 | 3
/Tenant/3/Table/69 | /Tenant/3/Table/70 | 3
/Tenant/3/Table/70 | /Tenant/3/Table/71 | 3
/Tenant/3/Table/71 | /Tenant/3/Table/72 | 3
/Tenant/3/Table/72 | /Tenant/3/Table/73 | 3
/Tenant/3/Table/73 | /Tenant/3/Table/74 | 3
/Tenant/3/Table/74 | /Tenant/3/Table/75 | 3
/Tenant/3/Table/75 | /Tenant/3/Table/76 | 3
/Tenant/3/Table/76 | /Tenant/3/Table/77 | 3
/Tenant/3/Table/106 | /Tenant/3/Table/107 | 3
/Tenant/3/Table/107 | /Tenant/3/Table/108 | 3
/Tenant/3/Table/108 | /Tenant/3/Table/109 | 3
/Tenant/3/Table/109 | /Tenant/3/Table/109/PrefixEnd | 3
/Tenant/3/Table/110 | /Tenant/3/Table/111 | 3
/Tenant/3/Table/111 | /Tenant/3/Table/112 | 3
/Tenant/4 | /Tenant/4"\x00" | 3
(150 rows)
Time: 6ms total (execution 5ms / network 1ms)
```
We expect a UA cluster to provide users the same experience as a non-UA cluster, so these zone configuration differences are likely undersirable.
The core of the issue is here:
https://github.com/cockroachdb/cockroach/blob/54e9027656552387b727b1087896f7eae0509115/pkg/sql/catalog/bootstrap/metadata.go#L521
The initialization of both the system database and lease table zone configuration is below this early exit.
We may additionally consider an upgrade migration to fix this for existing clusters.
Jira issue: CRDB-55255
Contributor guide
Assessment
This issue has not been assessed yet.