mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
chore: fix concurrent CommitQuota transactions for unrelated users/orgs (#15261)
The failure condition being fixed is `w1` and `w2` could belong to different users, organizations, and templates and still cause a serializable failure if run concurrently. This is because the old query did a `seq scan` on the `workspace_builds` table. Since that is the table being updated, we really want to prevent that. So before this would fail for any 2 workspaces. Now it only fails if `w1` and `w2` are owned by the same user and organization.
This commit is contained in:
@@ -66,6 +66,13 @@ func (m queryMetricsStore) Ping(ctx context.Context) (time.Duration, error) {
|
||||
return duration, err
|
||||
}
|
||||
|
||||
func (m queryMetricsStore) PGLocks(ctx context.Context) (database.PGLocks, error) {
|
||||
start := time.Now()
|
||||
locks, err := m.s.PGLocks(ctx)
|
||||
m.queryLatencies.WithLabelValues("PGLocks").Observe(time.Since(start).Seconds())
|
||||
return locks, err
|
||||
}
|
||||
|
||||
func (m queryMetricsStore) InTx(f func(database.Store) error, options *database.TxOptions) error {
|
||||
return m.dbMetrics.InTx(f, options)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user