treewide: errors variables should be prefixed with Err
Change-Id: Ic277f98ebcd03356500ce7daba199738e701e81c
Reviewed-on: https://review.monogon.dev/c/monogon/+/3025
Tested-by: Jenkins CI
Reviewed-by: Serge Bazanski <serge@monogon.tech>
Vouch-Run-CI: Tim Windelschmidt <tim@monogon.tech>
diff --git a/cloud/shepherd/provider/equinix/provider.go b/cloud/shepherd/provider/equinix/provider.go
index f642eaf..1752349 100644
--- a/cloud/shepherd/provider/equinix/provider.go
+++ b/cloud/shepherd/provider/equinix/provider.go
@@ -292,7 +292,7 @@
return &k, nil
}
}
- return nil, NoSuchKey
+ return nil, ErrNoSuchKey
}
// sshEquinixId looks up the Equinix key identified by providerConfig.KeyLabel,
@@ -344,7 +344,7 @@
func (ep *equinixProvider) SSHEquinixEnsure(ctx context.Context) error {
k, err := ep.sshEquinix(ctx)
switch {
- case errors.Is(err, NoSuchKey):
+ case errors.Is(err, ErrNoSuchKey):
if err := ep.sshEquinixUpload(ctx); err != nil {
return fmt.Errorf("while uploading key: %w", err)
}
diff --git a/cloud/shepherd/provider/equinix/provider_config.go b/cloud/shepherd/provider/equinix/provider_config.go
index be3bc27..b54488f 100644
--- a/cloud/shepherd/provider/equinix/provider_config.go
+++ b/cloud/shepherd/provider/equinix/provider_config.go
@@ -12,7 +12,7 @@
)
var (
- NoSuchKey = errors.New("no such key")
+ ErrNoSuchKey = errors.New("no such key")
)
// providerConfig contains configuration options used by both the Initializer and
diff --git a/metropolis/cli/metroctl/cmd_certs.go b/metropolis/cli/metroctl/cmd_certs.go
index 075a0d0..d914c83 100644
--- a/metropolis/cli/metroctl/cmd_certs.go
+++ b/metropolis/cli/metroctl/cmd_certs.go
@@ -29,7 +29,7 @@
Example: "metroctl cert export",
Run: func(cmd *cobra.Command, args []string) {
ocert, opkey, err := core.GetOwnerCredentials(flags.configPath)
- if errors.Is(err, core.NoCredentialsError) {
+ if errors.Is(err, core.ErrNoCredentials) {
log.Fatalf("You have to take ownership of the cluster first: %v", err)
}
diff --git a/metropolis/cli/metroctl/cmd_k8scredplugin.go b/metropolis/cli/metroctl/cmd_k8scredplugin.go
index adc3fe8..0d1f318 100644
--- a/metropolis/cli/metroctl/cmd_k8scredplugin.go
+++ b/metropolis/cli/metroctl/cmd_k8scredplugin.go
@@ -28,7 +28,7 @@
func doK8sCredPlugin(cmd *cobra.Command, args []string) {
cert, key, err := core.GetOwnerCredentials(flags.configPath)
- if errors.Is(err, core.NoCredentialsError) {
+ if errors.Is(err, core.ErrNoCredentials) {
log.Fatal("No credentials found on your machine")
}
if err != nil {
diff --git a/metropolis/cli/metroctl/cmd_takeownership.go b/metropolis/cli/metroctl/cmd_takeownership.go
index adad3cf..5161dc9 100644
--- a/metropolis/cli/metroctl/cmd_takeownership.go
+++ b/metropolis/cli/metroctl/cmd_takeownership.go
@@ -47,7 +47,7 @@
// Retrieve the cluster owner's private key, and use it to construct
// ephemeral credentials. Then, dial the cluster.
opk, err := core.GetOwnerKey(flags.configPath)
- if errors.Is(err, core.NoCredentialsError) {
+ if errors.Is(err, core.ErrNoCredentials) {
log.Fatalf("Owner key does not exist. takeownership needs to be executed on the same system that has previously installed the cluster using metroctl install.")
}
if err != nil {
diff --git a/metropolis/cli/metroctl/core/ca_tofu.go b/metropolis/cli/metroctl/core/ca_tofu.go
index 9df9957..b578aa6 100644
--- a/metropolis/cli/metroctl/core/ca_tofu.go
+++ b/metropolis/cli/metroctl/core/ca_tofu.go
@@ -114,7 +114,7 @@
if err == nil {
return ca, nil
}
- if !errors.Is(err, NoCACertificateError) {
+ if !errors.Is(err, ErrNoCACertificate) {
return nil, err
}
@@ -128,7 +128,7 @@
// against it, and don't ask the user.
var ocert *x509.Certificate
if err != nil {
- if errors.Is(err, NoCredentialsError) {
+ if errors.Is(err, ErrNoCredentials) {
okey, err := GetOwnerKey(c.ConfigPath)
if err != nil {
return nil, err
diff --git a/metropolis/cli/metroctl/core/config.go b/metropolis/cli/metroctl/core/config.go
index f3ca8b3..d119883 100644
--- a/metropolis/cli/metroctl/core/config.go
+++ b/metropolis/cli/metroctl/core/config.go
@@ -35,11 +35,13 @@
CACertificateFileName = "ca.pem"
)
-// NoCredentialsError indicates that the requested datum (eg. owner key or owner
-// certificate) is not present in the requested directory.
-var NoCredentialsError = errors.New("owner certificate or key does not exist")
+var (
+ // ErrNoCredentials indicates that the requested datum (eg. owner key or owner
+ // certificate) is not present in the requested directory.
+ ErrNoCredentials = errors.New("owner certificate or key does not exist")
-var NoCACertificateError = errors.New("no cluster CA certificate while secure connection was requested")
+ ErrNoCACertificate = errors.New("no cluster CA certificate while secure connection was requested")
+)
// A PEM block type for a Metropolis initial owner private key
const ownerKeyType = "METROPOLIS INITIAL OWNER PRIVATE KEY"
@@ -51,7 +53,7 @@
switch {
case err == nil:
return existing, nil
- case errors.Is(err, NoCredentialsError):
+ case errors.Is(err, ErrNoCredentials):
default:
return nil, err
}
@@ -88,11 +90,11 @@
// GetOwnerKey loads and returns a raw ED25519 private key from the saved owner
// key in a given metroctl configuration directory path. If the owner key doesn't
-// exist, NoCredentialsError will be returned.
+// exist, ErrNoCredentials will be returned.
func GetOwnerKey(path string) (ed25519.PrivateKey, error) {
ownerPrivateKeyPEM, err := os.ReadFile(filepath.Join(path, OwnerKeyFileName))
if os.IsNotExist(err) {
- return nil, NoCredentialsError
+ return nil, ErrNoCredentials
} else if err != nil {
return nil, fmt.Errorf("failed to load owner private key: %w", err)
}
@@ -125,7 +127,7 @@
// GetOwnerCredentials loads and returns a raw ED25519 private key alongside a
// DER-encoded X509 certificate from the saved owner key and certificate in a
// given metroctl configuration directory path. If either the key or certificate
-// doesn't exist, NoCredentialsError will be returned.
+// doesn't exist, ErrNoCredentials will be returned.
func GetOwnerCredentials(path string) (cert *x509.Certificate, key ed25519.PrivateKey, err error) {
key, err = GetOwnerKey(path)
if err != nil {
@@ -134,7 +136,7 @@
ownerCertPEM, err := os.ReadFile(filepath.Join(path, OwnerCertificateFileName))
if os.IsNotExist(err) {
- return nil, nil, NoCredentialsError
+ return nil, nil, ErrNoCredentials
} else if err != nil {
return nil, nil, fmt.Errorf("failed to load owner certificate: %w", err)
}
@@ -171,7 +173,7 @@
func GetClusterCA(path string) (cert *x509.Certificate, err error) {
caCertPEM, err := os.ReadFile(filepath.Join(path, CACertificateFileName))
if os.IsNotExist(err) {
- return nil, NoCACertificateError
+ return nil, ErrNoCACertificate
} else if err != nil {
return nil, fmt.Errorf("failed to load CA certificate: %w", err)
}
diff --git a/metropolis/cli/metroctl/rpc.go b/metropolis/cli/metroctl/rpc.go
index 06008e3..cab6d4f 100644
--- a/metropolis/cli/metroctl/rpc.go
+++ b/metropolis/cli/metroctl/rpc.go
@@ -18,7 +18,7 @@
// Collect credentials, validate command parameters, and try dialing the
// cluster.
ocert, opkey, err := core.GetOwnerCredentials(flags.configPath)
- if errors.Is(err, core.NoCredentialsError) {
+ if errors.Is(err, core.ErrNoCredentials) {
log.Fatalf("You have to take ownership of the cluster first: %v", err)
}
if len(flags.clusterEndpoints) == 0 {
@@ -52,7 +52,7 @@
// Collect credentials, validate command parameters, and try dialing the
// cluster.
ocert, opkey, err := core.GetOwnerCredentials(flags.configPath)
- if errors.Is(err, core.NoCredentialsError) {
+ if errors.Is(err, core.ErrNoCredentials) {
log.Fatalf("You have to take ownership of the cluster first: %v", err)
}
cc, err := core.DialNode(ctx, opkey, ocert, cacert, flags.proxyAddr, id, address)
diff --git a/metropolis/node/core/consensus/client/unimplemented.go b/metropolis/node/core/consensus/client/unimplemented.go
index 047e8ee..9b146eb 100644
--- a/metropolis/node/core/consensus/client/unimplemented.go
+++ b/metropolis/node/core/consensus/client/unimplemented.go
@@ -9,10 +9,10 @@
)
var (
- // UnimplementedInNamespaced will be raised by panic() any time a method
+ // ErrUnimplementedInNamespaced will be raised by panic() any time a method
// from the Cluster, Auth and Maintenance APIs gets called on a
// clientv3.Client returned by ThinClient or Namespaced.ThinClient.
- UnimplementedInNamespaced = errors.New("interface not implemented in Namespaced etcd client")
+ ErrUnimplementedInNamespaced = errors.New("interface not implemented in Namespaced etcd client")
)
// unimplementedCluster implements clientv3.Cluster, but panics on any call.
@@ -20,27 +20,27 @@
}
func (c *unimplementedCluster) MemberList(_ context.Context) (*clientv3.MemberListResponse, error) {
- panic(UnimplementedInNamespaced)
+ panic(ErrUnimplementedInNamespaced)
}
func (c *unimplementedCluster) MemberAdd(_ context.Context, _ []string) (*clientv3.MemberAddResponse, error) {
- panic(UnimplementedInNamespaced)
+ panic(ErrUnimplementedInNamespaced)
}
func (c *unimplementedCluster) MemberAddAsLearner(_ context.Context, _ []string) (*clientv3.MemberAddResponse, error) {
- panic(UnimplementedInNamespaced)
+ panic(ErrUnimplementedInNamespaced)
}
func (c *unimplementedCluster) MemberRemove(_ context.Context, _ uint64) (*clientv3.MemberRemoveResponse, error) {
- panic(UnimplementedInNamespaced)
+ panic(ErrUnimplementedInNamespaced)
}
func (c *unimplementedCluster) MemberUpdate(_ context.Context, _ uint64, _ []string) (*clientv3.MemberUpdateResponse, error) {
- panic(UnimplementedInNamespaced)
+ panic(ErrUnimplementedInNamespaced)
}
func (c *unimplementedCluster) MemberPromote(_ context.Context, _ uint64) (*clientv3.MemberPromoteResponse, error) {
- panic(UnimplementedInNamespaced)
+ panic(ErrUnimplementedInNamespaced)
}
// unimplementedAuth implements clientv3.Auth but panics on any call.
@@ -48,75 +48,75 @@
}
func (c *unimplementedAuth) Authenticate(ctx context.Context, name string, password string) (*clientv3.AuthenticateResponse, error) {
- panic(UnimplementedInNamespaced)
+ panic(ErrUnimplementedInNamespaced)
}
func (c *unimplementedAuth) AuthEnable(ctx context.Context) (*clientv3.AuthEnableResponse, error) {
- panic(UnimplementedInNamespaced)
+ panic(ErrUnimplementedInNamespaced)
}
func (c *unimplementedAuth) AuthDisable(ctx context.Context) (*clientv3.AuthDisableResponse, error) {
- panic(UnimplementedInNamespaced)
+ panic(ErrUnimplementedInNamespaced)
}
func (c *unimplementedAuth) AuthStatus(ctx context.Context) (*clientv3.AuthStatusResponse, error) {
- panic(UnimplementedInNamespaced)
+ panic(ErrUnimplementedInNamespaced)
}
func (c *unimplementedAuth) UserAdd(ctx context.Context, name string, password string) (*clientv3.AuthUserAddResponse, error) {
- panic(UnimplementedInNamespaced)
+ panic(ErrUnimplementedInNamespaced)
}
func (c *unimplementedAuth) UserAddWithOptions(ctx context.Context, name string, password string, opt *clientv3.UserAddOptions) (*clientv3.AuthUserAddResponse, error) {
- panic(UnimplementedInNamespaced)
+ panic(ErrUnimplementedInNamespaced)
}
func (c *unimplementedAuth) UserDelete(ctx context.Context, name string) (*clientv3.AuthUserDeleteResponse, error) {
- panic(UnimplementedInNamespaced)
+ panic(ErrUnimplementedInNamespaced)
}
func (c *unimplementedAuth) UserChangePassword(ctx context.Context, name string, password string) (*clientv3.AuthUserChangePasswordResponse, error) {
- panic(UnimplementedInNamespaced)
+ panic(ErrUnimplementedInNamespaced)
}
func (c *unimplementedAuth) UserGrantRole(ctx context.Context, user string, role string) (*clientv3.AuthUserGrantRoleResponse, error) {
- panic(UnimplementedInNamespaced)
+ panic(ErrUnimplementedInNamespaced)
}
func (c *unimplementedAuth) UserGet(ctx context.Context, name string) (*clientv3.AuthUserGetResponse, error) {
- panic(UnimplementedInNamespaced)
+ panic(ErrUnimplementedInNamespaced)
}
func (c *unimplementedAuth) UserList(ctx context.Context) (*clientv3.AuthUserListResponse, error) {
- panic(UnimplementedInNamespaced)
+ panic(ErrUnimplementedInNamespaced)
}
func (c *unimplementedAuth) UserRevokeRole(ctx context.Context, name string, role string) (*clientv3.AuthUserRevokeRoleResponse, error) {
- panic(UnimplementedInNamespaced)
+ panic(ErrUnimplementedInNamespaced)
}
func (c *unimplementedAuth) RoleAdd(ctx context.Context, name string) (*clientv3.AuthRoleAddResponse, error) {
- panic(UnimplementedInNamespaced)
+ panic(ErrUnimplementedInNamespaced)
}
func (c *unimplementedAuth) RoleGrantPermission(ctx context.Context, name string, key, rangeEnd string, permType clientv3.PermissionType) (*clientv3.AuthRoleGrantPermissionResponse, error) {
- panic(UnimplementedInNamespaced)
+ panic(ErrUnimplementedInNamespaced)
}
func (c *unimplementedAuth) RoleGet(ctx context.Context, role string) (*clientv3.AuthRoleGetResponse, error) {
- panic(UnimplementedInNamespaced)
+ panic(ErrUnimplementedInNamespaced)
}
func (c *unimplementedAuth) RoleList(ctx context.Context) (*clientv3.AuthRoleListResponse, error) {
- panic(UnimplementedInNamespaced)
+ panic(ErrUnimplementedInNamespaced)
}
func (c *unimplementedAuth) RoleRevokePermission(ctx context.Context, role string, key, rangeEnd string) (*clientv3.AuthRoleRevokePermissionResponse, error) {
- panic(UnimplementedInNamespaced)
+ panic(ErrUnimplementedInNamespaced)
}
func (c *unimplementedAuth) RoleDelete(ctx context.Context, role string) (*clientv3.AuthRoleDeleteResponse, error) {
- panic(UnimplementedInNamespaced)
+ panic(ErrUnimplementedInNamespaced)
}
// unimplementedMaintenance implements clientv3.Maintenance but panics on any call.
@@ -124,29 +124,29 @@
}
func (c *unimplementedMaintenance) AlarmList(ctx context.Context) (*clientv3.AlarmResponse, error) {
- panic(UnimplementedInNamespaced)
+ panic(ErrUnimplementedInNamespaced)
}
func (c *unimplementedMaintenance) AlarmDisarm(ctx context.Context, m *clientv3.AlarmMember) (*clientv3.AlarmResponse, error) {
- panic(UnimplementedInNamespaced)
+ panic(ErrUnimplementedInNamespaced)
}
func (c *unimplementedMaintenance) Defragment(ctx context.Context, endpoint string) (*clientv3.DefragmentResponse, error) {
- panic(UnimplementedInNamespaced)
+ panic(ErrUnimplementedInNamespaced)
}
func (c *unimplementedMaintenance) Status(ctx context.Context, endpoint string) (*clientv3.StatusResponse, error) {
- panic(UnimplementedInNamespaced)
+ panic(ErrUnimplementedInNamespaced)
}
func (c *unimplementedMaintenance) HashKV(ctx context.Context, endpoint string, rev int64) (*clientv3.HashKVResponse, error) {
- panic(UnimplementedInNamespaced)
+ panic(ErrUnimplementedInNamespaced)
}
func (c *unimplementedMaintenance) Snapshot(ctx context.Context) (io.ReadCloser, error) {
- panic(UnimplementedInNamespaced)
+ panic(ErrUnimplementedInNamespaced)
}
func (c *unimplementedMaintenance) MoveLeader(ctx context.Context, transfereeID uint64) (*clientv3.MoveLeaderResponse, error) {
- panic(UnimplementedInNamespaced)
+ panic(ErrUnimplementedInNamespaced)
}
diff --git a/metropolis/node/core/curator/impl_leader.go b/metropolis/node/core/curator/impl_leader.go
index d7c6222..ad557fc 100644
--- a/metropolis/node/core/curator/impl_leader.go
+++ b/metropolis/node/core/curator/impl_leader.go
@@ -73,13 +73,13 @@
}
var (
- // lostLeadership is returned by txnAsLeader if the transaction got canceled
+ // errLostLeadership is returned by txnAsLeader if the transaction got canceled
// because leadership was lost.
- lostLeadership = errors.New("lost leadership")
+ errLostLeadership = errors.New("lost leadership")
)
// txnAsLeader performs an etcd transaction guarded by continued leadership.
-// lostLeadership will be returned as an error in case the leadership is lost.
+// errLostLeadership will be returned as an error in case the leadership is lost.
func (l *leadership) txnAsLeader(ctx context.Context, ops ...clientv3.Op) (*clientv3.TxnResponse, error) {
var opsStr []string
for _, op := range ops {
@@ -118,7 +118,7 @@
}
}
rpc.Trace(ctx).Printf("txnAsLeader(...): rejected (lost leadership (key %s should've been at rev %d, is at rev %s)", l.lockKey, l.lockRev, lockRev)
- return nil, lostLeadership
+ return nil, errLostLeadership
}
rpc.Trace(ctx).Printf("txnAsLeader(...): ok")
return resp, nil
@@ -128,7 +128,7 @@
// directly exposed to RPC clients. If false is returned, the error was not
// converted and is returned verbatim.
func rpcError(err error) (error, bool) {
- if errors.Is(err, lostLeadership) {
+ if errors.Is(err, errLostLeadership) {
return status.Error(codes.Unavailable, "lost leadership"), true
}
if errors.Is(err, context.DeadlineExceeded) {
diff --git a/metropolis/node/core/curator/impl_leader_cluster_networking.go b/metropolis/node/core/curator/impl_leader_cluster_networking.go
index 4bd729d..6bfe82d 100644
--- a/metropolis/node/core/curator/impl_leader_cluster_networking.go
+++ b/metropolis/node/core/curator/impl_leader_cluster_networking.go
@@ -33,7 +33,7 @@
defer w.Close()
for {
nodeKV, err := w.Get(ctx, event.BacklogOnly[*nodeAtID]())
- if errors.Is(err, event.BacklogDone) {
+ if errors.Is(err, event.ErrBacklogDone) {
break
}
if err != nil {
diff --git a/metropolis/node/core/curator/impl_leader_curator.go b/metropolis/node/core/curator/impl_leader_curator.go
index d45fc79..9833410 100644
--- a/metropolis/node/core/curator/impl_leader_curator.go
+++ b/metropolis/node/core/curator/impl_leader_curator.go
@@ -109,7 +109,7 @@
nodes := make(map[string]*Node)
for {
nodeKV, err := w.Get(ctx, event.BacklogOnly[*nodeAtID]())
- if errors.Is(err, event.BacklogDone) {
+ if errors.Is(err, event.ErrBacklogDone) {
break
}
if err != nil {
diff --git a/metropolis/node/core/network/dhcp4c/dhcpc.go b/metropolis/node/core/network/dhcp4c/dhcpc.go
index bfb2676..4aeeb3d 100644
--- a/metropolis/node/core/network/dhcp4c/dhcpc.go
+++ b/metropolis/node/core/network/dhcp4c/dhcpc.go
@@ -482,13 +482,13 @@
err = s.handleMessage(offer, sentTime)
if err == nil {
return nil
- } else if !errors.Is(err, InvalidMsgErr) {
+ } else if !errors.Is(err, ErrInvalidMsg) {
return err
}
}
}
-var InvalidMsgErr = errors.New("invalid message")
+var ErrInvalidMsg = errors.New("invalid message")
func (c *Client) runState(ctx context.Context) error {
switch c.state {
@@ -516,7 +516,7 @@
return c.transitionToBound(offer, sentTime)
}
}
- return InvalidMsgErr
+ return ErrInvalidMsg
},
})
case stateRequesting:
@@ -541,7 +541,7 @@
c.requestingToDiscovering()
return nil
}
- return InvalidMsgErr
+ return ErrInvalidMsg
},
stateDeadlineExceeded: func() error {
c.requestingToDiscovering()
@@ -578,7 +578,7 @@
case dhcpv4.MessageTypeNak:
return c.leaseToDiscovering()
}
- return InvalidMsgErr
+ return ErrInvalidMsg
},
stateDeadlineExceeded: func() error {
c.state = stateRebinding
@@ -609,7 +609,7 @@
case dhcpv4.MessageTypeNak:
return c.leaseToDiscovering()
}
- return InvalidMsgErr
+ return ErrInvalidMsg
},
stateDeadlineExceeded: func() error {
return c.leaseToDiscovering()
diff --git a/metropolis/node/core/rpc/resolver/watcher.go b/metropolis/node/core/rpc/resolver/watcher.go
index d2715b6..c9fe47e 100644
--- a/metropolis/node/core/rpc/resolver/watcher.go
+++ b/metropolis/node/core/rpc/resolver/watcher.go
@@ -17,9 +17,9 @@
}
var (
- // ResolverClosed will be returned by the resolver to gRPC machinery whenever a
+ // ErrResolverClosed will be returned by the resolver to gRPC machinery whenever a
// resolver cannot be used anymore because it was Closed.
- ResolverClosed = errors.New("cluster resolver closed")
+ ErrResolverClosed = errors.New("cluster resolver closed")
)
// Build is called by gRPC on each Dial call. It spawns a new clientWatcher,
@@ -45,7 +45,7 @@
select {
case <-r.ctx.Done():
- return nil, ResolverClosed
+ return nil, ErrResolverClosed
case r.reqC <- &request{
ds: &requestDialOptionsSet{
options: options,
@@ -61,7 +61,7 @@
}
select {
case <-r.ctx.Done():
- return nil, ResolverClosed
+ return nil, ErrResolverClosed
case r.reqC <- req:
}
// This receive is uninterruptible by contract - as it's also uninterruptible on
@@ -94,7 +94,7 @@
if update == nil {
// A nil result means the channel is closed, which means this watcher has either
// closed or the resolver has been canceled. Abort loop.
- w.clientConn.ReportError(ResolverClosed)
+ w.clientConn.ReportError(ErrResolverClosed)
break
}
w.clientConn.UpdateState(resolver.State{
diff --git a/metropolis/pkg/event/etcd/etcd.go b/metropolis/pkg/event/etcd/etcd.go
index 14dfd99..71e8056 100644
--- a/metropolis/pkg/event/etcd/etcd.go
+++ b/metropolis/pkg/event/etcd/etcd.go
@@ -402,7 +402,7 @@
}
if backlogOnly && len(w.backlogged) == 0 {
- return empty, event.BacklogDone
+ return empty, event.ErrBacklogDone
}
// Update backlog from etcd if needed.
diff --git a/metropolis/pkg/event/etcd/etcd_test.go b/metropolis/pkg/event/etcd/etcd_test.go
index 45b5f98..f1eb5ed 100644
--- a/metropolis/pkg/event/etcd/etcd_test.go
+++ b/metropolis/pkg/event/etcd/etcd_test.go
@@ -776,15 +776,15 @@
// As expected, next call to Get with BacklogOnly fails - there truly is no new
// updates to emit.
_, err = watcher.Get(ctx, event.BacklogOnly[StringAt]())
- if want, got := event.BacklogDone, err; !errors.Is(got, want) {
+ if want, got := event.ErrBacklogDone, err; !errors.Is(got, want) {
t.Fatalf("Second Get: wanted %v, got %v", want, got)
}
// Implementation detail: even though there is a new value ('second'),
- // BacklogOnly will still return BacklogDone.
+ // BacklogOnly will still return ErrBacklogDone.
tc.put(t, k, "second")
_, err = watcher.Get(ctx, event.BacklogOnly[StringAt]())
- if want, got := event.BacklogDone, err; !errors.Is(got, want) {
+ if want, got := event.ErrBacklogDone, err; !errors.Is(got, want) {
t.Fatalf("Third Get: wanted %v, got %v", want, got)
}
@@ -836,11 +836,11 @@
tc.put(t, ks+"a", "val-100")
tc.put(t, ks+"b", "val-101")
- // Retrieve the rest of the backlog until BacklogDone is returned.
+ // Retrieve the rest of the backlog until ErrBacklogDone is returned.
nUpdates := 1
for {
g, err := w.Get(ctx, event.BacklogOnly[StringAt]())
- if errors.Is(err, event.BacklogDone) {
+ if errors.Is(err, event.ErrBacklogDone) {
break
}
if err != nil {
diff --git a/metropolis/pkg/event/event.go b/metropolis/pkg/event/event.go
index e38c427..a8b3526 100644
--- a/metropolis/pkg/event/event.go
+++ b/metropolis/pkg/event/event.go
@@ -179,7 +179,7 @@
}
// BacklogOnly will prevent Get from blocking on waiting for more updates from
-// etcd, by instead returning BacklogDone whenever no more data is currently
+// etcd, by instead returning ErrBacklogDone whenever no more data is currently
// locally available. This is different however, from establishing that there
// are no more pending updates from the etcd cluster - the only way to ensure
// the local client is up to date is by performing Get calls without this option
@@ -187,7 +187,7 @@
//
// This mode of retrieval should only be used for the retrieval of the existing
// data in the etcd cluster on the initial creation of the Watcher (by
-// repeatedly calling Get until BacklogDone is returned), and shouldn't be set
+// repeatedly calling Get until ErrBacklogDone is returned), and shouldn't be set
// for any subsequent call. Any use of this option after that initial fetch is
// undefined behaviour that exposes the internals of the Get implementation, and
// must not be relied on. However, in the future, this behaviour might be
@@ -203,10 +203,10 @@
}
var (
- // BacklogDone is returned by Get when BacklogOnly is set and there is no more
+ // ErrBacklogDone is returned by Get when BacklogOnly is set and there is no more
// event data stored in the Watcher client, ie. when the initial cluster state
// of the requested key has been retrieved.
- BacklogDone = errors.New("no more backlogged data")
+ ErrBacklogDone = errors.New("no more backlogged data")
)
// Pipe a Value's initial state and subsequent updates to an already existing