Skip to content

Commit

Permalink
perf(backend): optimize database query for deployment with latest sta…
Browse files Browse the repository at this point in the history
…tus (#473)

Signed-off-by: Jakob Steiner <[email protected]>
  • Loading branch information
kosmoz authored Feb 13, 2025
1 parent 5459351 commit 88a6f46
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 3 deletions.
32 changes: 32 additions & 0 deletions cmd/hub/generate/status/generate.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package main

import (
"context"
"time"

internalctx "github.com/glasskube/distr/internal/context"
"github.com/glasskube/distr/internal/db"
"github.com/glasskube/distr/internal/svc"
"github.com/glasskube/distr/internal/types"
"github.com/glasskube/distr/internal/util"
)

func main() {
ctx := context.Background()
registry := util.Require(svc.NewDefault(ctx))
defer func() { _ = registry.Shutdown() }()
ctx = internalctx.WithDb(ctx, registry.GetDbPool())

revisionID := "68297e49-b17b-4d32-8111-f8ee678f73da"
statusCount := 500000
statusInterval := 5 * time.Second

now := time.Now().UTC()
createdAt := now.Add(time.Duration(statusCount) * -statusInterval)
var ds []types.DeploymentRevisionStatus
for createdAt.Before(now) {
ds = append(ds, types.DeploymentRevisionStatus{CreatedAt: createdAt, Message: "demo status"})
createdAt = createdAt.Add(statusInterval)
}
util.Must(db.BulkCreateDeploymentRevisionStatusWithCreatedAt(ctx, revisionID, ds))

Check failure on line 31 in cmd/hub/generate/status/generate.go

View workflow job for this annotation

GitHub Actions / Build

cannot use revisionID (variable of type string) as uuid.UUID value in argument to db.BulkCreateDeploymentRevisionStatusWithCreatedAt (typecheck)
}
7 changes: 4 additions & 3 deletions internal/db/deployments.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,9 +83,10 @@ func GetLatestDeploymentForDeploymentTarget(ctx context.Context, deploymentTarge
JOIN ApplicationVersion av ON dr.application_version_id = av.id
JOIN Application a ON av.application_id = a.id
LEFT JOIN (
SELECT deployment_revision_id, max(created_at) AS max_created_at
FROM DeploymentRevisionStatus
GROUP BY deployment_revision_id
SELECT
dr1.id AS deployment_revision_id,
(SELECT max(created_at) FROM DeploymentRevisionStatus WHERE deployment_revision_id = dr1.id) AS max_created_at
FROM DeploymentRevision dr1
) status_max ON dr.id = status_max.deployment_revision_id
LEFT JOIN DeploymentRevisionStatus drs
ON dr.id = drs.deployment_revision_id AND drs.created_at = status_max.max_created_at
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
DROP INDEX DeploymentRevisionStatus_created_at;
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
CREATE INDEX DeploymentRevisionStatus_created_at ON DeploymentRevisionStatus (deployment_revision_id, created_at DESC);

0 comments on commit 88a6f46

Please sign in to comment.