Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

sql: make the output columns of SHOW TENANT lowercase #95655

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/generated/settings/settings-for-tenants.txt
Original file line number Diff line number Diff line change
Expand Up @@ -297,4 +297,4 @@ trace.jaeger.agent string the address of a Jaeger agent to receive traces using
trace.opentelemetry.collector string address of an OpenTelemetry trace collector to receive traces using the otel gRPC protocol, as <host>:<port>. If no port is specified, 4317 will be used.
trace.span_registry.enabled boolean true if set, ongoing traces can be seen at https://<ui>/#/debug/tracez
trace.zipkin.collector string the address of a Zipkin instance to receive traces, as <host>:<port>. If no port is specified, 9411 will be used.
version version 1000022.2-30 set the active cluster version in the format '<major>.<minor>'
version version 1000022.2-32 set the active cluster version in the format '<major>.<minor>'
2 changes: 1 addition & 1 deletion docs/generated/settings/settings.html
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,6 @@
<tr><td><div id="setting-trace-opentelemetry-collector" class="anchored"><code>trace.opentelemetry.collector</code></div></td><td>string</td><td><code></code></td><td>address of an OpenTelemetry trace collector to receive traces using the otel gRPC protocol, as &lt;host&gt;:&lt;port&gt;. If no port is specified, 4317 will be used.</td></tr>
<tr><td><div id="setting-trace-span-registry-enabled" class="anchored"><code>trace.span_registry.enabled</code></div></td><td>boolean</td><td><code>true</code></td><td>if set, ongoing traces can be seen at https://&lt;ui&gt;/#/debug/tracez</td></tr>
<tr><td><div id="setting-trace-zipkin-collector" class="anchored"><code>trace.zipkin.collector</code></div></td><td>string</td><td><code></code></td><td>the address of a Zipkin instance to receive traces, as &lt;host&gt;:&lt;port&gt;. If no port is specified, 9411 will be used.</td></tr>
<tr><td><div id="setting-version" class="anchored"><code>version</code></div></td><td>version</td><td><code>1000022.2-30</code></td><td>set the active cluster version in the format &#39;&lt;major&gt;.&lt;minor&gt;&#39;</td></tr>
<tr><td><div id="setting-version" class="anchored"><code>version</code></div></td><td>version</td><td><code>1000022.2-32</code></td><td>set the active cluster version in the format &#39;&lt;major&gt;.&lt;minor&gt;&#39;</td></tr>
</tbody>
</table>
3 changes: 3 additions & 0 deletions docs/generated/sql/bnf/stmt_block.bnf
Original file line number Diff line number Diff line change
Expand Up @@ -1338,11 +1338,13 @@ unreserved_keyword ::=
| 'SEQUENCE'
| 'SEQUENCES'
| 'SERVER'
| 'SERVICE'
| 'SESSION'
| 'SESSIONS'
| 'SET'
| 'SETS'
| 'SHARE'
| 'SHARED'
| 'SHOW'
| 'SIMPLE'
| 'SKIP'
Expand All @@ -1361,6 +1363,7 @@ unreserved_keyword ::=
| 'STATEMENTS'
| 'STATISTICS'
| 'STDIN'
| 'STOP'
| 'STORAGE'
| 'STORE'
| 'STORED'
Expand Down
36 changes: 18 additions & 18 deletions pkg/ccl/backupccl/backup_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6885,7 +6885,7 @@ func TestBackupRestoreTenant(t *testing.T) {
{`1`,
`true`,
`system`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "1", "name": "system", "tenantReplicationJobId": "0"}`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "1", "name": "system", "serviceMode": "SHARED", "tenantReplicationJobId": "0"}`,
},
})
restoreDB.Exec(t, `RESTORE TENANT 10 FROM 'nodelocal://1/t10'`)
Expand All @@ -6896,13 +6896,13 @@ func TestBackupRestoreTenant(t *testing.T) {
`1`,
`true`,
`system`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "1", "name": "system", "tenantReplicationJobId": "0"}`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "1", "name": "system", "serviceMode": "SHARED", "tenantReplicationJobId": "0"}`,
},
{
`10`,
`true`,
`tenant-10`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "10", "name": "tenant-10", "tenantReplicationJobId": "0"}`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "10", "name": "tenant-10", "serviceMode": "NONE", "tenantReplicationJobId": "0"}`,
},
},
)
Expand Down Expand Up @@ -6936,13 +6936,13 @@ func TestBackupRestoreTenant(t *testing.T) {
`1`,
`true`,
`system`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "1", "name": "system", "tenantReplicationJobId": "0"}`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "1", "name": "system", "serviceMode": "SHARED", "tenantReplicationJobId": "0"}`,
},
{
`10`,
`false`,
`NULL`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "DROP", "droppedName": "tenant-10", "id": "10", "name": "", "tenantReplicationJobId": "0"}`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "DROP", "droppedName": "tenant-10", "id": "10", "name": "", "serviceMode": "NONE", "tenantReplicationJobId": "0"}`,
},
},
)
Expand Down Expand Up @@ -6971,13 +6971,13 @@ func TestBackupRestoreTenant(t *testing.T) {
`1`,
`true`,
`system`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "1", "name": "system", "tenantReplicationJobId": "0"}`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "1", "name": "system", "serviceMode": "SHARED", "tenantReplicationJobId": "0"}`,
},
{
`10`,
`true`,
`tenant-10`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "10", "name": "tenant-10", "tenantReplicationJobId": "0"}`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "10", "name": "tenant-10", "serviceMode": "NONE", "tenantReplicationJobId": "0"}`,
},
},
)
Expand Down Expand Up @@ -7006,7 +7006,7 @@ func TestBackupRestoreTenant(t *testing.T) {
`1`,
`true`,
`system`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "1", "name": "system", "tenantReplicationJobId": "0"}`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "1", "name": "system", "serviceMode": "SHARED", "tenantReplicationJobId": "0"}`,
},
})
restoreDB.Exec(t, `RESTORE TENANT 10 FROM 'nodelocal://1/t10'`)
Expand All @@ -7017,13 +7017,13 @@ func TestBackupRestoreTenant(t *testing.T) {
`1`,
`true`,
`system`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "1", "name": "system", "tenantReplicationJobId": "0"}`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "1", "name": "system", "serviceMode": "SHARED", "tenantReplicationJobId": "0"}`,
},
{
`10`,
`true`,
`tenant-10`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "10", "name": "tenant-10", "tenantReplicationJobId": "0"}`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "10", "name": "tenant-10", "serviceMode": "NONE", "tenantReplicationJobId": "0"}`,
},
},
)
Expand All @@ -7050,7 +7050,7 @@ func TestBackupRestoreTenant(t *testing.T) {
`1`,
`true`,
`system`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "1", "name": "system", "tenantReplicationJobId": "0"}`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "1", "name": "system", "serviceMode": "SHARED", "tenantReplicationJobId": "0"}`,
},
})
restoreDB.Exec(t, `RESTORE TENANT 10 FROM 'nodelocal://1/clusterwide'`)
Expand All @@ -7061,13 +7061,13 @@ func TestBackupRestoreTenant(t *testing.T) {
`1`,
`true`,
`system`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "1", "name": "system", "tenantReplicationJobId": "0"}`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "1", "name": "system", "serviceMode": "SHARED", "tenantReplicationJobId": "0"}`,
},
{
`10`,
`true`,
`tenant-10`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "10", "name": "tenant-10", "tenantReplicationJobId": "0"}`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "10", "name": "tenant-10", "serviceMode": "NONE", "tenantReplicationJobId": "0"}`,
},
},
)
Expand Down Expand Up @@ -7105,7 +7105,7 @@ func TestBackupRestoreTenant(t *testing.T) {
`1`,
`true`,
`system`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "1", "name": "system", "tenantReplicationJobId": "0"}`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "1", "name": "system", "serviceMode": "SHARED", "tenantReplicationJobId": "0"}`,
},
})
restoreDB.Exec(t, `RESTORE FROM 'nodelocal://1/clusterwide'`)
Expand All @@ -7115,25 +7115,25 @@ func TestBackupRestoreTenant(t *testing.T) {
{
`1`,
`true`, `system`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "1", "name": "system", "tenantReplicationJobId": "0"}`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "1", "name": "system", "serviceMode": "SHARED", "tenantReplicationJobId": "0"}`,
},
{
`10`,
`true`,
`tenant-10`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "10", "name": "tenant-10", "tenantReplicationJobId": "0"}`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "10", "name": "tenant-10", "serviceMode": "NONE", "tenantReplicationJobId": "0"}`,
},
{
`11`,
`true`,
`tenant-11`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "11", "name": "tenant-11", "tenantReplicationJobId": "0"}`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "11", "name": "tenant-11", "serviceMode": "NONE", "tenantReplicationJobId": "0"}`,
},
{
`20`,
`true`,
`tenant-20`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "20", "name": "tenant-20", "tenantReplicationJobId": "0"}`,
`{"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "20", "name": "tenant-20", "serviceMode": "NONE", "tenantReplicationJobId": "0"}`,
},
},
)
Expand Down
13 changes: 7 additions & 6 deletions pkg/ccl/backupccl/restore_job.go
Original file line number Diff line number Diff line change
Expand Up @@ -1198,18 +1198,19 @@ func createImportingDescriptors(
if err != nil {
return err
}
for _, tenant := range details.Tenants {
switch tenant.DataState {
for _, tenantInfoCopy := range details.Tenants {
switch tenantInfoCopy.DataState {
case descpb.TenantInfo_READY:
// If the tenant was backed up in the `READY` state then we create
// the restored record in an `ADD` state and mark it `READY` at
// the end of the restore.
tenant.DataState = descpb.TenantInfo_ADD
tenantInfoCopy.ServiceMode = descpb.TenantInfo_NONE
tenantInfoCopy.DataState = descpb.TenantInfo_ADD
case descpb.TenantInfo_DROP, descpb.TenantInfo_ADD:
// If the tenant was backed up in a `DROP` or `ADD` state then we must
// create the restored tenant record in that state as well.
default:
return errors.AssertionFailedf("unknown tenant data state %v", tenant)
return errors.AssertionFailedf("unknown tenant data state %v", tenantInfoCopy)
}
spanConfigs := p.ExecCfg().SpanConfigKVAccessor.WithTxn(ctx, txn.KV())
if _, err := sql.CreateTenantRecord(
Expand All @@ -1218,7 +1219,7 @@ func createImportingDescriptors(
p.ExecCfg().Settings,
txn,
spanConfigs,
&tenant,
&tenantInfoCopy,
initialTenantZoneConfig,
); err != nil {
return err
Expand Down Expand Up @@ -2197,7 +2198,7 @@ func (r *restoreResumer) publishDescriptors(
// the tenant as the final step of the restore. The tenant has already
// been created at an earlier stage in the restore in an `ADD` state.
if err := sql.ActivateTenant(
ctx, r.execCfg.Settings, r.execCfg.Codec, txn, tenant.ID,
ctx, r.execCfg.Settings, r.execCfg.Codec, txn, tenant.ID, tenant.ServiceMode,
); err != nil {
return err
}
Expand Down
22 changes: 11 additions & 11 deletions pkg/ccl/backupccl/testdata/backup-restore/restore-tenants
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@ SELECT crdb_internal.create_tenant(6);

# Drop one of them.
exec-sql
DROP TENANT [5]
ALTER TENANT [5] STOP SERVICE; DROP TENANT [5]
----

query-sql
SELECT id,active,crdb_internal.pb_to_json('cockroach.sql.sqlbase.TenantInfo', info, true) FROM system.tenants;
----
1 true {"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "1", "name": "system", "tenantReplicationJobId": "0"}
5 false {"capabilities": {"canAdminSplit": false}, "dataState": "DROP", "droppedName": "tenant-5", "id": "5", "name": "", "tenantReplicationJobId": "0"}
6 true {"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "6", "name": "tenant-6", "tenantReplicationJobId": "0"}
1 true {"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "1", "name": "system", "serviceMode": "SHARED", "tenantReplicationJobId": "0"}
5 false {"capabilities": {"canAdminSplit": false}, "dataState": "DROP", "droppedName": "tenant-5", "id": "5", "name": "", "serviceMode": "NONE", "tenantReplicationJobId": "0"}
6 true {"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "6", "name": "tenant-6", "serviceMode": "EXTERNAL", "tenantReplicationJobId": "0"}

exec-sql
BACKUP INTO 'nodelocal://1/cluster'
Expand All @@ -49,9 +49,9 @@ RESTORE FROM LATEST IN 'nodelocal://1/cluster'
query-sql
SELECT id,active,crdb_internal.pb_to_json('cockroach.sql.sqlbase.TenantInfo', info, true) FROM system.tenants;
----
1 true {"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "1", "name": "system", "tenantReplicationJobId": "0"}
5 false {"capabilities": {"canAdminSplit": false}, "dataState": "DROP", "droppedName": "tenant-5", "id": "5", "name": "tenant-5", "tenantReplicationJobId": "0"}
6 true {"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "6", "name": "tenant-6", "tenantReplicationJobId": "0"}
1 true {"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "1", "name": "system", "serviceMode": "SHARED", "tenantReplicationJobId": "0"}
5 false {"capabilities": {"canAdminSplit": false}, "dataState": "DROP", "droppedName": "tenant-5", "id": "5", "name": "tenant-5", "serviceMode": "NONE", "tenantReplicationJobId": "0"}
6 true {"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "6", "name": "tenant-6", "serviceMode": "EXTERNAL", "tenantReplicationJobId": "0"}

exec-sql expect-error-regex=(tenant 6 already exists)
RESTORE TENANT 6 FROM LATEST IN 'nodelocal://1/tenant6';
Expand All @@ -75,7 +75,7 @@ RESTORE TENANT 6 FROM LATEST IN 'nodelocal://1/tenant6' WITH tenant_name = 'newn
query-sql
SELECT id,active,crdb_internal.pb_to_json('cockroach.sql.sqlbase.TenantInfo', info, true) FROM system.tenants;
----
1 true {"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "1", "name": "system", "tenantReplicationJobId": "0"}
2 true {"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "2", "name": "newname", "tenantReplicationJobId": "0"}
5 false {"capabilities": {"canAdminSplit": false}, "dataState": "DROP", "droppedName": "tenant-5", "id": "5", "name": "tenant-5", "tenantReplicationJobId": "0"}
6 true {"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "6", "name": "tenant-6", "tenantReplicationJobId": "0"}
1 true {"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "1", "name": "system", "serviceMode": "SHARED", "tenantReplicationJobId": "0"}
2 true {"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "2", "name": "newname", "serviceMode": "EXTERNAL", "tenantReplicationJobId": "0"}
5 false {"capabilities": {"canAdminSplit": false}, "dataState": "DROP", "droppedName": "tenant-5", "id": "5", "name": "tenant-5", "serviceMode": "NONE", "tenantReplicationJobId": "0"}
6 true {"capabilities": {"canAdminSplit": false}, "dataState": "READY", "droppedName": "", "id": "6", "name": "tenant-6", "serviceMode": "EXTERNAL", "tenantReplicationJobId": "0"}
1 change: 1 addition & 0 deletions pkg/ccl/logictestccl/testdata/logic_test/tenant_usage
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ SELECT crdb_internal.update_tenant_resource_limits(5, 1000, 100, 0, now(), 0)
# Note this marks the tenant as dropped. The GC will not delete the tenant
# until after the ttl expires.
statement ok
ALTER TENANT [5] STOP SERVICE;
DROP TENANT [5]

query error tenant "5" is not active
Expand Down
21 changes: 13 additions & 8 deletions pkg/ccl/sqlproxyccl/tenant/directory_cache_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -405,14 +405,19 @@ func createTenant(tc serverutils.TestClusterInterface, id roachpb.TenantID) erro
func destroyTenant(tc serverutils.TestClusterInterface, id roachpb.TenantID) error {
srv := tc.Server(0)
conn := srv.InternalExecutor().(*sql.InternalExecutor)
if _, err := conn.Exec(
context.Background(),
"testserver-destroy-tenant",
nil, /* txn */
"DROP TENANT [$1] IMMEDIATE",
id.ToUint64(),
); err != nil {
return err
for _, stmt := range []string{
`ALTER TENANT [$1] STOP SERVICE`,
`DROP TENANT [$1] IMMEDIATE`,
} {
if _, err := conn.Exec(
context.Background(),
"testserver-destroy-tenant",
nil, /* txn */
stmt,
id.ToUint64(),
); err != nil {
return err
}
}
return nil
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -909,7 +909,7 @@ func TestTenantStreamingShowTenant(t *testing.T) {
require.Equal(t, "destination", rowStr[0][1])
if rowStr[0][3] == "NULL" {
// There is no source yet, therefore the replication is not fully initialized.
require.Equal(t, "INITIALIZING REPLICATION", rowStr[0][2])
require.Equal(t, "initializing replication", rowStr[0][2])
}

jobutils.WaitForJobToRun(c.T, c.SrcSysSQL, jobspb.JobID(producerJobID))
Expand All @@ -925,6 +925,7 @@ func TestTenantStreamingShowTenant(t *testing.T) {
id int
dest string
status string
serviceMode string
source string
sourceUri string
jobId int
Expand All @@ -933,10 +934,11 @@ func TestTenantStreamingShowTenant(t *testing.T) {
cutoverTime []byte // should be nil
)
row := c.DestSysSQL.QueryRow(t, fmt.Sprintf("SHOW TENANT %s WITH REPLICATION STATUS", args.DestTenantName))
row.Scan(&id, &dest, &status, &source, &sourceUri, &jobId, &maxReplTime, &protectedTime, &cutoverTime)
row.Scan(&id, &dest, &status, &serviceMode, &source, &sourceUri, &jobId, &maxReplTime, &protectedTime, &cutoverTime)
require.Equal(t, 2, id)
require.Equal(t, "destination", dest)
require.Equal(t, "REPLICATING", status)
require.Equal(t, "replicating", status)
require.Equal(t, "none", serviceMode)
require.Equal(t, "source", source)
require.Equal(t, c.SrcURL.String(), sourceUri)
require.Equal(t, ingestionJobID, jobId)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -149,13 +149,14 @@ func ingestionPlanHook(
sourceTenant, dstTenantName, dstTenantID)
}

// Create a new tenant for the replication stream
// Create a new tenant for the replication stream.
jobID := p.ExecCfg().JobRegistry.MakeJobID()
tenantInfo := &descpb.TenantInfoWithUsage{
TenantInfo: descpb.TenantInfo{
// dstTenantID may be zero which will cause auto-allocation.
ID: dstTenantID,
DataState: descpb.TenantInfo_ADD,
ServiceMode: descpb.TenantInfo_NONE,
Name: roachpb.TenantName(dstTenantName),
TenantReplicationJobID: jobID,
},
Expand Down
8 changes: 4 additions & 4 deletions pkg/ccl/streamingccl/streamingest/testdata/simple
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,14 @@ IMPORT INTO d.x CSV DATA ('userfile:///dx/export*-n*.0.csv');
query-sql as=source-system
SHOW TENANTS
----
1 system READY
10 source READY
1 system ready shared
10 source ready none

query-sql as=destination-system
SHOW TENANTS
----
1 system READY
2 destination REPLICATING
1 system ready shared
2 destination replicating none

let $ts as=source-system
SELECT clock_timestamp()::timestamp::string
Expand Down
Loading