* Fix #5602: Ensure controller status update triggers update_time
Rework and fix the logic of #5602 query split. Initial implementation failed to update controller status within `server_controller` as `w.Update` did not trigger `update_time` if `address` or `description` were not updated. Now using `w.Exec` with `updateController` query to always set `update_time` to `now()`.
Additional Notes:
- Updated `repository_controller` tests to verify `update_time` updates even when controller values don't change.
- Added `cleanupFunc` to test cases to remove inserted controllers after each test.
- Verified via `boundary dev` that `worker.upstreamDialerFunc` errors are not present.
Refs: 6c0b3a8a1c
* Resolve Comments
235 lines
6.8 KiB
Go
235 lines
6.8 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: BUSL-1.1
|
|
|
|
package server
|
|
|
|
const (
|
|
listWorkersQuery = `
|
|
with connection_count (worker_id, count) as (
|
|
select worker_id,
|
|
count(1) as count
|
|
from session_connection
|
|
where closed_reason is null
|
|
group by worker_id
|
|
)
|
|
select w.public_id,
|
|
w.scope_id,
|
|
w.description,
|
|
w.name,
|
|
w.address,
|
|
w.create_time,
|
|
w.update_time,
|
|
w.version,
|
|
w.last_status_time,
|
|
w.type,
|
|
w.release_version,
|
|
w.operational_state,
|
|
w.local_storage_state,
|
|
cc.count as active_connection_count,
|
|
wt.tags as api_tags,
|
|
ct.tags as config_tags
|
|
from server_worker w
|
|
left join ( select worker_id,
|
|
json_agg(json_build_object('key', key, 'value', value)) as tags
|
|
from server_worker_api_tag
|
|
group by worker_id) wt
|
|
on w.public_id = wt.worker_id
|
|
left join ( select worker_id,
|
|
json_agg(json_build_object('key', key, 'value', value)) as tags
|
|
from server_worker_config_tag group by worker_id) ct
|
|
on w.public_id = ct.worker_id
|
|
left join connection_count as cc
|
|
on w.public_id = cc.worker_id
|
|
`
|
|
|
|
lookupWorkerQuery = `
|
|
with connection_count (worker_id, count) as (
|
|
select worker_id,
|
|
count(1) as count
|
|
from session_connection
|
|
where closed_reason is null
|
|
group by worker_id
|
|
)
|
|
select w.public_id,
|
|
w.scope_id,
|
|
w.description,
|
|
w.name,
|
|
w.address,
|
|
w.create_time,
|
|
w.update_time,
|
|
w.version,
|
|
w.last_status_time,
|
|
w.type,
|
|
w.release_version,
|
|
w.operational_state,
|
|
w.local_storage_state,
|
|
cc.count as active_connection_count,
|
|
wt.tags as api_tags,
|
|
ct.tags as config_tags
|
|
from server_worker w
|
|
left join ( select worker_id,
|
|
json_agg(json_build_object('key', key, 'value', value)) as tags
|
|
from server_worker_api_tag
|
|
group by worker_id) wt
|
|
on w.public_id = wt.worker_id
|
|
left join ( select worker_id,
|
|
json_agg(json_build_object('key', key, 'value', value)) as tags
|
|
from server_worker_config_tag group by worker_id) ct
|
|
on w.public_id = ct.worker_id
|
|
left join connection_count as cc
|
|
on w.public_id = cc.worker_id
|
|
where w.public_id = @worker_id
|
|
`
|
|
getStorageBucketCredentialStatesByWorkerId = `
|
|
select spsb.public_id as storage_bucket_id,
|
|
wsbcs.permission_type, wsbcs.state,
|
|
wsbcs.checked_at, wsbcs.error_details
|
|
from worker_storage_bucket_credential_state wsbcs
|
|
join storage_plugin_storage_bucket spsb
|
|
on spsb.storage_bucket_credential_id = wsbcs.storage_bucket_credential_id
|
|
where wsbcs.worker_id = @worker_id;
|
|
`
|
|
|
|
deleteWhereCreateTimeSql = `create_time < ?`
|
|
|
|
deleteApiTagsByWorkerIdSql = `
|
|
delete
|
|
from server_worker_api_tag
|
|
where worker_id = ?
|
|
`
|
|
|
|
deleteConfigTagsByWorkerIdSql = `
|
|
delete
|
|
from server_worker_config_tag
|
|
where worker_id = ?
|
|
`
|
|
|
|
deleteWorkerAuthQuery = `
|
|
delete from worker_auth_authorized
|
|
where worker_key_identifier = @worker_key_identifier;
|
|
`
|
|
deleteWorkerCertBundlesQuery = `
|
|
delete from worker_auth_certificate_bundle
|
|
where worker_key_identifier = @worker_key_identifier;
|
|
`
|
|
deleteRootCertificateQuery = `
|
|
delete from worker_auth_ca_certificate
|
|
where state = @state;
|
|
`
|
|
|
|
getWorkerAuthsByWorkerKeyIdQuery = `
|
|
with key_id_to_worker_id as (
|
|
select worker_id
|
|
from worker_auth_authorized
|
|
where worker_key_identifier = @worker_key_identifier
|
|
)
|
|
select *
|
|
from worker_auth_authorized
|
|
where worker_id in (select *
|
|
from key_id_to_worker_id)
|
|
`
|
|
|
|
getWorkerAuthStateByKeyIdQuery = `
|
|
select state
|
|
from worker_auth_authorized
|
|
where worker_key_identifier = @worker_key_identifier
|
|
`
|
|
|
|
deleteWorkerAuthByKeyId = `
|
|
with key_id_to_worker_id as (
|
|
select worker_id
|
|
from worker_auth_authorized
|
|
where worker_key_identifier = @worker_key_identifier
|
|
)
|
|
delete
|
|
from worker_auth_authorized
|
|
where state = 'current' and worker_id in (select *
|
|
from key_id_to_worker_id)
|
|
`
|
|
|
|
updateWorkerAuthStateByKeyId = `
|
|
update worker_auth_authorized
|
|
set state = 'current'
|
|
where worker_key_identifier = @worker_key_identifier
|
|
`
|
|
|
|
verifyKnownWorkersQuery = `
|
|
select public_id
|
|
from server_worker
|
|
where public_id in (?);
|
|
`
|
|
|
|
getWorkerAuthsByWorkerIdQuery = `
|
|
select *
|
|
from worker_auth_authorized
|
|
where worker_id = @worker_id
|
|
`
|
|
|
|
authorizedWorkerQuery = `
|
|
select distinct w.worker_key_identifier
|
|
from
|
|
worker_auth_certificate_bundle as w
|
|
where
|
|
w.worker_key_identifier in (?)
|
|
`
|
|
|
|
workerAuthRewrapQuery = `
|
|
select distinct
|
|
auth.worker_key_identifier,
|
|
auth.controller_encryption_priv_key,
|
|
auth.key_id
|
|
from server_worker worker
|
|
inner join worker_auth_authorized auth
|
|
on auth.worker_id = worker.public_id
|
|
where worker.scope_id = ?
|
|
and auth.key_id = ?
|
|
`
|
|
workerAuthServerLedActivationTokenRewrapQuery = `
|
|
select distinct
|
|
auth_token.worker_id,
|
|
auth_token.creation_time_encrypted,
|
|
auth_token.key_id
|
|
from server_worker worker
|
|
inner join worker_auth_server_led_activation_token auth_token
|
|
on auth_token.worker_id = worker.public_id
|
|
where worker.scope_id = ?
|
|
and auth_token.key_id = ?
|
|
`
|
|
|
|
listHcpbManagedWorkersQuery = `
|
|
select w.public_id,
|
|
w.address
|
|
from server_worker as w
|
|
left join server_worker_config_tag as t
|
|
on w.public_id = t.worker_id
|
|
where last_status_time > now() - interval '%d seconds'
|
|
and t.key = 'boundary.cloud.hashicorp.com:managed'
|
|
and t.value = 'true';
|
|
`
|
|
|
|
listSelectSessionWorkers = `
|
|
select w.public_id,
|
|
w.name,
|
|
w.address,
|
|
w.release_version,
|
|
w.local_storage_state,
|
|
wt.tags as api_tags,
|
|
ct.tags as config_tags
|
|
from server_worker w
|
|
left join (select worker_id, json_agg(json_build_object('key', key, 'value', value)) as tags from server_worker_api_tag group by worker_id) wt
|
|
on w.public_id = wt.worker_id
|
|
left join (select worker_id, json_agg(json_build_object('key', key, 'value', value)) as tags from server_worker_config_tag group by worker_id) ct
|
|
on w.public_id = ct.worker_id
|
|
where last_status_time > now() - interval '%d seconds'
|
|
and operational_state = 'active';
|
|
`
|
|
|
|
updateController = `
|
|
update server_controller
|
|
set address = @controller_address,
|
|
description = @controller_description,
|
|
update_time = now()
|
|
where private_id = @controller_private_id;
|
|
`
|
|
)
|