Skip to content

Commit fd5a6cd

Browse files
committed
Ensure NewForHLC returns an error if the incoming decimal is invalid
This shouldn't be possible, but there are some indications it might be
1 parent 58df026 commit fd5a6cd

File tree

5 files changed

+28
-11
lines changed

5 files changed

+28
-11
lines changed

internal/datastore/crdb/crdb.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,7 @@ func readCRDBNow(ctx context.Context, reader pgxcommon.DBFuncQuerier) (datastore
478478
return datastore.NoRevision, fmt.Errorf("unable to read timestamp: %w", err)
479479
}
480480

481-
return revisions.NewForHLC(hlcNow), nil
481+
return revisions.NewForHLC(hlcNow)
482482
}
483483

484484
func readClusterTTLNanos(ctx context.Context, conn pgxcommon.DBFuncQuerier) (int64, error) {

internal/datastore/crdb/stats.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -105,5 +105,5 @@ func updateCounter(ctx context.Context, tx pgx.Tx, change int64) (datastore.Revi
105105
return datastore.NoRevision, fmt.Errorf("unable to executed upsert counter query: %w", err)
106106
}
107107

108-
return revisions.NewForHLC(timestamp), nil
108+
return revisions.NewForHLC(timestamp)
109109
}

internal/datastore/revisions/hlcrevision.go

+7-3
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,13 @@ func HLCRevisionFromString(revisionStr string) (HLCRevision, error) {
7373
}
7474

7575
// NewForHLC creates a new revision for the given hybrid logical clock.
76-
func NewForHLC(decimal decimal.Decimal) HLCRevision {
77-
rev, _ := HLCRevisionFromString(decimal.String())
78-
return rev
76+
func NewForHLC(decimal decimal.Decimal) (HLCRevision, error) {
77+
rev, err := HLCRevisionFromString(decimal.String())
78+
if err != nil {
79+
return zeroHLC, fmt.Errorf("invalid HLC decimal: %v (%s) => %w", decimal, decimal.String(), err)
80+
}
81+
82+
return rev, nil
7983
}
8084

8185
// NewHLCForTime creates a new revision for the given time.

internal/datastore/revisions/hlcrevision_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ func TestNewForHLC(t *testing.T) {
2424
d, err := decimal.NewFromString(tc)
2525
require.NoError(t, err)
2626

27-
rev := NewForHLC(d)
27+
rev, err := NewForHLC(d)
28+
require.NoError(t, err)
2829
require.Equal(t, tc, rev.String())
2930
})
3031
}

pkg/zedtoken/zedtoken_test.go

+17-5
Original file line numberDiff line numberDiff line change
@@ -166,10 +166,16 @@ var hlcDecodeTests = []struct {
166166
expectError bool
167167
}{
168168
{
169-
format: "V1 ZedToken",
170-
token: "CAIaFQoTMTYyMTUzODE4OTAyODkyODAwMA==",
171-
expectedRevision: revisions.NewForHLC(decimal.NewFromInt(1621538189028928000)),
172-
expectError: false,
169+
format: "V1 ZedToken",
170+
token: "CAIaFQoTMTYyMTUzODE4OTAyODkyODAwMA==",
171+
expectedRevision: func() datastore.Revision {
172+
r, err := revisions.NewForHLC(decimal.NewFromInt(1621538189028928000))
173+
if err != nil {
174+
panic(err)
175+
}
176+
return r
177+
}(),
178+
expectError: false,
173179
},
174180
{
175181
format: "V1 ZedToken",
@@ -179,7 +185,13 @@ var hlcDecodeTests = []struct {
179185
if err != nil {
180186
panic(err)
181187
}
182-
return revisions.NewForHLC(v)
188+
189+
r, err := revisions.NewForHLC(v)
190+
if err != nil {
191+
panic(err)
192+
}
193+
194+
return r
183195
})(),
184196
expectError: false,
185197
},

0 commit comments

Comments
 (0)