Skip to content

Commit

Permalink
Merge pull request juju#17385 from manadart/dqlite-secret-state-sql
Browse files Browse the repository at this point in the history
juju#17385

The secret domain state has some semantically and algebraically inefficient SQL.

This change includes one example of rectifying this, which should be used to further improve the package.
  • Loading branch information
jujubot committed May 16, 2024
2 parents ff89266 + c5c1dee commit e7341a7
Showing 1 changed file with 21 additions and 26 deletions.
47 changes: 21 additions & 26 deletions domain/secret/state/state.go
Original file line number Diff line number Diff line change
Expand Up @@ -1094,21 +1094,17 @@ func (st State) GetRotationExpiryInfo(ctx context.Context, uri *coresecrets.URI)
input := secretID{ID: uri.ID}
result := secretInfo{}
stmt, err := st.Prepare(`
WITH rev AS (
SELECT uuid, MAX(revision) AS latest_revision
FROM secret_revision
WHERE secret_id = $secretID.id
)
SELECT
sp.policy AS &secretInfo.policy,
sro.next_rotation_time AS &secretInfo.next_rotation_time,
sre.expire_time AS &secretInfo.latest_expire_time,
rev.latest_revision AS &secretInfo.latest_revision
FROM secret_metadata sm, rev
JOIN secret_rotate_policy sp ON sp.id = sm.rotate_policy_id
LEFT JOIN secret_rotation sro ON sro.secret_id = sm.secret_id
LEFT JOIN secret_revision_expire sre ON sre.revision_uuid = rev.uuid
WHERE sm.secret_id = $secretID.id`, input, result)
SELECT sp.policy AS &secretInfo.policy,
sro.next_rotation_time AS &secretInfo.next_rotation_time,
sre.expire_time AS &secretInfo.latest_expire_time,
MAX(sr.revision) AS &secretInfo.latest_revision
FROM secret_metadata sm
JOIN secret_revision sr ON sm.secret_id = sr.secret_id
JOIN secret_rotate_policy sp ON sp.id = sm.rotate_policy_id
LEFT JOIN secret_rotation sro ON sro.secret_id = sm.secret_id
LEFT JOIN secret_revision_expire sre ON sre.revision_uuid = sr.uuid
WHERE sm.secret_id = $secretID.id
GROUP BY sr.secret_id`, input, result)

if err != nil {
return nil, errors.Trace(err)
Expand Down Expand Up @@ -1144,9 +1140,9 @@ func (st State) GetRotatePolicy(ctx context.Context, uri *coresecrets.URI) (core
}
stmt, err := st.Prepare(`
SELECT srp.policy AS &secretInfo.policy
FROM secret_metadata sm
JOIN secret_rotate_policy srp ON srp.id = sm.rotate_policy_id
WHERE sm.secret_id = $secretID.id`, secretID{}, secretInfo{})
FROM secret_metadata sm
JOIN secret_rotate_policy srp ON srp.id = sm.rotate_policy_id
WHERE sm.secret_id = $secretID.id`, secretID{}, secretInfo{})
if err != nil {
return coresecrets.RotateNever, errors.Trace(err)
}
Expand Down Expand Up @@ -1474,14 +1470,13 @@ unit_owned AS
queryParts := []string{strings.Join(preQueryParts, ",\n")}

query := `
SELECT
sm.secret_id AS &secretID.id,
svr.backend_uuid AS &secretExternalRevision.backend_uuid,
svr.revision_id AS &secretExternalRevision.revision_id,
rev.revision AS &secretExternalRevision.revision
FROM secret_metadata sm
JOIN secret_revision rev ON rev.secret_id = sm.secret_id
LEFT JOIN secret_value_ref svr ON svr.revision_uuid = rev.uuid`[1:]
SELECT sm.secret_id AS &secretID.id,
svr.backend_uuid AS &secretExternalRevision.backend_uuid,
svr.revision_id AS &secretExternalRevision.revision_id,
rev.revision AS &secretExternalRevision.revision
FROM secret_metadata sm
JOIN secret_revision rev ON rev.secret_id = sm.secret_id
LEFT JOIN secret_value_ref svr ON svr.revision_uuid = rev.uuid`[1:]

queryParts = append(queryParts, query)

Expand Down

0 comments on commit e7341a7

Please sign in to comment.