Skip to content

Commit 01d72a1

Browse files
authored
chore: Add additional zedtoken construction functions (#2631)
1 parent 0ecaf13 commit 01d72a1

File tree

1 file changed

+17
-7
lines changed

1 file changed

+17
-7
lines changed

pkg/zedtoken/zedtoken.go

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,15 @@ const (
4646
StatusMismatchedDatastoreID
4747
)
4848

49+
// RevisionHolder is an interface for types that can provide a unique ID and revision information.
50+
type RevisionHolder interface {
51+
// UniqueID returns the unique ID of the holder (typically: a datastore).
52+
UniqueID(context.Context) (string, error)
53+
54+
// RevisionFromString converts a string representation of a revision to a Revision.
55+
RevisionFromString(string) (datastore.Revision, error)
56+
}
57+
4958
const uniqueIDPrefixLength = 8
5059

5160
// MustNewFromRevisionForTesting generates an encoded zedtoken from an integral revision.
@@ -58,7 +67,7 @@ func MustNewFromRevisionForTesting(revision datastore.Revision) *v1.ZedToken {
5867
}
5968

6069
// NewFromRevision generates an encoded zedtoken from an integral revision.
61-
func NewFromRevision(ctx context.Context, revision datastore.Revision, ds datastore.Datastore) (*v1.ZedToken, error) {
70+
func NewFromRevision(ctx context.Context, revision datastore.Revision, ds RevisionHolder) (*v1.ZedToken, error) {
6271
datastoreUniqueID, err := ds.UniqueID(ctx)
6372
if err != nil {
6473
return nil, fmt.Errorf(errEncodeError, err)
@@ -67,6 +76,12 @@ func NewFromRevision(ctx context.Context, revision datastore.Revision, ds datast
6776
return newFromRevision(revision, datastoreUniqueID)
6877
}
6978

79+
// NewFromRevisionNoDatastoreID generates an encoded zedtoken from an integral revision without a datastore ID.
80+
// This is only for use in legacy scenarios. Most callers should use NewFromRevision.
81+
func NewFromRevisionNoDatastoreID(revision datastore.Revision) (*v1.ZedToken, error) {
82+
return newFromRevision(revision, legacyEmptyDatastoreID)
83+
}
84+
7085
func newFromRevision(revision datastore.Revision, datastoreUniqueID string) (*v1.ZedToken, error) {
7186
datastoreUniqueIDPrefix := datastoreUniqueID
7287
if len(datastoreUniqueIDPrefix) > uniqueIDPrefixLength {
@@ -118,7 +133,7 @@ func Decode(encoded *v1.ZedToken) (*zedtoken.DecodedZedToken, error) {
118133
}
119134

120135
// DecodeRevision converts and extracts the revision from a zedtoken or legacy zookie.
121-
func DecodeRevision(encoded *v1.ZedToken, ds revisionDecoder) (datastore.Revision, TokenStatus, error) {
136+
func DecodeRevision(encoded *v1.ZedToken, ds RevisionHolder) (datastore.Revision, TokenStatus, error) {
122137
decoded, err := Decode(encoded)
123138
if err != nil {
124139
return datastore.NoRevision, StatusUnknown, err
@@ -162,8 +177,3 @@ func DecodeRevision(encoded *v1.ZedToken, ds revisionDecoder) (datastore.Revisio
162177
return datastore.NoRevision, StatusUnknown, fmt.Errorf(errDecodeError, fmt.Errorf("unknown zookie version: %T", decoded.VersionOneof))
163178
}
164179
}
165-
166-
type revisionDecoder interface {
167-
UniqueID(context.Context) (string, error)
168-
RevisionFromString(string) (datastore.Revision, error)
169-
}

0 commit comments

Comments
 (0)