Skip to content

Commit 350fe31

Browse files
authored
sa: check for sql.ErrNoRows on Get() (#8732)
This pulls in the latest borp, including letsencrypt/borp#13, which makes `Get()` return `sql.ErrNoRows` instead of a `nil` object. This fixes the lagFactor check in `sa.GetAuthorization2`, which was expecting `sql.ErrNoRows` but never received it (because `Get()` was returning `nil, nil`). `GetAuthorization2` is not touched in this PR because we're updating the dependency to match its existing behavior. Change the behavior of all the other SA calls to `Get()` to look for `sql.ErrNoRows` instead of `obj == nil`.
1 parent 4ea4524 commit 350fe31

7 files changed

Lines changed: 17 additions & 21 deletions

File tree

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ require (
1515
github.com/google/certificate-transparency-go v1.3.2-0.20250507091337-0eddb39e94f8
1616
github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1
1717
github.com/jmhodges/clock v1.2.0
18-
github.com/letsencrypt/borp v0.0.0-20251118150929-89c6927051ae
18+
github.com/letsencrypt/borp v0.0.0-20260428182343-7962eada420f
1919
github.com/letsencrypt/challtestsrv v1.4.2
2020
github.com/letsencrypt/pkcs11key/v4 v4.0.1
2121
github.com/letsencrypt/validator/v10 v10.0.0-20230215210743-a0c7dfc17158

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,8 +151,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
151151
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
152152
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
153153
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
154-
github.com/letsencrypt/borp v0.0.0-20251118150929-89c6927051ae h1:yFuF5yRIwaandcuNMi1A4he4FMWJsGRv38rsizIaxJA=
155-
github.com/letsencrypt/borp v0.0.0-20251118150929-89c6927051ae/go.mod h1:gMSMCNKhxox/ccR923EJsIvHeVVYfCABGbirqa0EwuM=
154+
github.com/letsencrypt/borp v0.0.0-20260428182343-7962eada420f h1:ka12vhO0JLDmdER25Wrzdp3fHNi2SpCoIEGOELIR2I0=
155+
github.com/letsencrypt/borp v0.0.0-20260428182343-7962eada420f/go.mod h1:gMSMCNKhxox/ccR923EJsIvHeVVYfCABGbirqa0EwuM=
156156
github.com/letsencrypt/challtestsrv v1.4.2 h1:0ON3ldMhZyWlfVNYYpFuWRTmZNnyfiL9Hh5YzC3JVwU=
157157
github.com/letsencrypt/challtestsrv v1.4.2/go.mod h1:GhqMqcSoeGpYd5zX5TgwA6er/1MbWzx/o7yuuVya+Wk=
158158
github.com/letsencrypt/pkcs11key/v4 v4.0.1 h1:XIXFxOnQJS5QYBlMnHhnlOBVcfylh7m3fjOJmVcEV88=

sa/saro.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -350,12 +350,12 @@ func (ssa *SQLStorageAuthorityRO) GetOrder(ctx context.Context, req *sapb.OrderR
350350

351351
txn := func(tx db.Executor) (any, error) {
352352
omObj, err := tx.Get(ctx, orderModel{}, req.Id)
353+
if errors.Is(err, sql.ErrNoRows) {
354+
return nil, berrors.NotFoundError("no order found for ID %d", req.Id)
355+
}
353356
if err != nil {
354357
return nil, err
355358
}
356-
if omObj == nil {
357-
return nil, berrors.NotFoundError("no order found for ID %d", req.Id)
358-
}
359359

360360
order, err := modelToOrder(omObj.(*orderModel))
361361
if err != nil {
@@ -537,12 +537,12 @@ func (ssa *SQLStorageAuthorityRO) GetAuthorization2(ctx context.Context, req *sa
537537
ssa.lagFactorCounter.WithLabelValues("GetAuthorization2", "found").Inc()
538538
}
539539
}
540+
if errors.Is(err, sql.ErrNoRows) {
541+
return nil, berrors.NotFoundError("authorization %d not found", req.Id)
542+
}
540543
if err != nil {
541544
return nil, err
542545
}
543-
if obj == nil {
544-
return nil, berrors.NotFoundError("authorization %d not found", req.Id)
545-
}
546546
return modelToAuthzPB(*(obj.(*authzModel)))
547547
}
548548

@@ -583,13 +583,13 @@ func (ssa *SQLStorageAuthorityRO) GetOrderAuthorizations(ctx context.Context, re
583583
}
584584

585585
om, err := ssa.dbReadOnlyMap.Get(ctx, &orderModel{}, req.Id)
586-
if err != nil {
587-
return nil, err
588-
}
589586
// Nonexistent orders should return no error, with an empty list of authorizations
590-
if om == nil {
587+
if errors.Is(err, sql.ErrNoRows) {
591588
return &sapb.Authorizations{}, nil
592589
}
590+
if err != nil {
591+
return nil, err
592+
}
593593

594594
order, err := modelToOrder(om.(*orderModel))
595595
if err != nil {

vendor/github.com/letsencrypt/borp/README.md

Lines changed: 1 addition & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/letsencrypt/borp/db.go

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/letsencrypt/borp/gorp.go

Lines changed: 0 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/modules.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ github.com/grpc-ecosystem/grpc-gateway/v2/utilities
211211
# github.com/jmhodges/clock v1.2.0
212212
## explicit; go 1.17
213213
github.com/jmhodges/clock
214-
# github.com/letsencrypt/borp v0.0.0-20251118150929-89c6927051ae
214+
# github.com/letsencrypt/borp v0.0.0-20260428182343-7962eada420f
215215
## explicit; go 1.20
216216
github.com/letsencrypt/borp
217217
# github.com/letsencrypt/challtestsrv v1.4.2

0 commit comments

Comments
 (0)