diff --git a/cmd/ocsp-updater/main.go b/cmd/ocsp-updater/main.go index 5616f358c..e846322d8 100644 --- a/cmd/ocsp-updater/main.go +++ b/cmd/ocsp-updater/main.go @@ -142,21 +142,12 @@ func newUpdater( } func (updater *OCSPUpdater) findStaleOCSPResponses(oldestLastUpdatedTime time.Time, batchSize int) ([]core.CertificateStatus, error) { - var statuses []core.CertificateStatus - - certStatusFields := "cs.serial, cs.status, cs.revokedDate, cs.notAfter, cs.revokedReason" - if features.Enabled(features.StoreIssuerInfo) { - certStatusFields += ", cs.issuerID" - } - _, err := updater.dbMap.Select( - &statuses, - fmt.Sprintf(`SELECT - %s - FROM certificateStatus AS cs - WHERE cs.ocspLastUpdated < :lastUpdate - AND NOT cs.isExpired - ORDER BY cs.ocspLastUpdated ASC - LIMIT :limit`, certStatusFields), + statuses, err := sa.SelectCertificateStatuses( + updater.dbMap, + `WHERE ocspLastUpdated < :lastUpdate + AND NOT isExpired + ORDER BY ocspLastUpdated ASC + LIMIT :limit`, map[string]interface{}{ "lastUpdate": oldestLastUpdatedTime, "limit": batchSize, diff --git a/sa/model.go b/sa/model.go index 7ed36077a..bf9b943a0 100644 --- a/sa/model.go +++ b/sa/model.go @@ -113,19 +113,34 @@ func certStatusFields() []string { return []string{"serial", "status", "ocspLastUpdated", "revokedDate", "revokedReason", "lastExpirationNagSent", "ocspResponse", "notAfter", "isExpired", "issuerID"} } +func certStatusFieldsSelect(restOfQuery string) string { + fields := strings.Join(certStatusFields(), ",") + return fmt.Sprintf("SELECT %s FROM certificateStatus %s", fields, restOfQuery) +} + // SelectCertificateStatus selects all fields of one certificate status model func SelectCertificateStatus(s db.OneSelector, q string, args ...interface{}) (certStatusModel, error) { var model certStatusModel - fields := strings.Join(certStatusFields(), ",") err := s.SelectOne( &model, - `SELECT `+fields+ - ` FROM certificateStatus `+q, + certStatusFieldsSelect(q), args..., ) return model, err } +// SelectCertificateStatuses selects all fields of multiple certificate status +// objects +func SelectCertificateStatuses(s db.Selector, q string, args ...interface{}) ([]core.CertificateStatus, error) { + var models []core.CertificateStatus + _, err := s.Select( + &models, + certStatusFieldsSelect(q), + args..., + ) + return models, err +} + var mediumBlobSize = int(math.Pow(2, 24)) type issuedNameModel struct {