package postgresqlqm
import "github.com/google/trillian/quota/postgresqlqm"
Package postgresqlqm defines a PostgreSQL-based quota.Manager implementation.
Index ¶
Constants ¶
const ( // DefaultMaxUnsequenced is a suggested value for MaxUnsequencedRows. // Note that this is a Global/Write quota suggestion, so it applies across trees. DefaultMaxUnsequenced = 500000 // About 2h of non-stop signing at 70QPS. )
const QuotaManagerName = "postgresql"
QuotaManagerName identifies the PostgreSQL quota implementation.
Variables ¶
ErrTooManyUnsequencedRows is returned when tokens are requested but Unsequenced has grown beyond the configured limit.
Types ¶
type QuotaManager ¶
QuotaManager is a PostgreSQL-based quota.Manager implementation.
QuotaManager only implements Global/Write quotas, which is based on the number of Unsequenced rows (to be exact, tokens = MaxUnsequencedRows - actualUnsequencedRows). Other quotas are considered infinite. In other words, it attempts to protect the MMD SLO of all logs in the instance, but it does not make any attempt to ensure fairness, whether per-tree, per-intermediate-CA (in the case of Certificate Transparency), or any other dimension.
It has two working modes: one estimates the number of Unsequenced rows by collecting information from EXPLAIN output; the other does a select count(*) on the Unsequenced table. Estimates are default, even though they are approximate, as they're constant time (select count(*) on PostgreSQL needs to traverse the index and may take quite a while to complete). Other estimation methods exist (see https://wiki.postgresql.org/wiki/Count_estimate), but using EXPLAIN output is the most accurate because it "fetches the actual current number of pages in the table (this is a cheap operation, not requiring a table scan). If that is different from relpages then reltuples is scaled accordingly to arrive at a current number-of-rows estimate." (quoting https://www.postgresql.org/docs/current/row-estimation-examples.html)
func (*QuotaManager) GetTokens ¶
GetTokens implements quota.Manager.GetTokens. It doesn't actually reserve or retrieve tokens, instead it allows access based on the number of rows in the Unsequenced table.
func (*QuotaManager) PutTokens ¶
PutTokens implements quota.Manager.PutTokens. It's a noop for QuotaManager.
func (*QuotaManager) ResetQuota ¶
ResetQuota implements quota.Manager.ResetQuota. It's a noop for QuotaManager.
Source Files ¶
postgresql_quota.go quota_provider.go
- Version
- v1.7.1 (latest)
- Published
- Jan 9, 2025
- Platform
- linux/amd64
- Imports
- 7 packages
- Last checked
- 5 days ago –
Tools for package owners.