Skip to content

Commit c3e312c

Browse files
committed
server: fix unexported-return using interfaces
Signed-off-by: adeyemi <[email protected]>
1 parent 8f447cf commit c3e312c

File tree

9 files changed

+30
-18
lines changed

9 files changed

+30
-18
lines changed

server/auth/store.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -938,7 +938,7 @@ func (as *authStore) IsAuthEnabled() bool {
938938
}
939939

940940
// NewAuthStore creates a new AuthStore.
941-
func NewAuthStore(lg *zap.Logger, be AuthBackend, tp TokenProvider, bcryptCost int) *authStore {
941+
func NewAuthStore(lg *zap.Logger, be AuthBackend, tp TokenProvider, bcryptCost int) AuthStore {
942942
if lg == nil {
943943
lg = zap.NewNop()
944944
}

server/auth/store_test.go

+6-3
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"time"
2626

2727
"github.com/stretchr/testify/assert"
28+
"github.com/stretchr/testify/require"
2829
"go.uber.org/zap/zaptest"
2930
"golang.org/x/crypto/bcrypt"
3031
"google.golang.org/grpc/metadata"
@@ -116,12 +117,14 @@ func setupAuthStore(t *testing.T) (store *authStore, teardownfunc func(t *testin
116117

117118
// The UserAdd function cannot generate old etcd version user data (user's option is nil)
118119
// add special users through the underlying interface
119-
addUserWithNoOption(as)
120+
asImpl, ok := as.(*authStore)
121+
require.Truef(t, ok, "addUserWithNoOption: needs an AuthStore implementation")
122+
addUserWithNoOption(asImpl)
120123

121124
tearDown := func(_ *testing.T) {
122125
as.Close()
123126
}
124-
return as, tearDown
127+
return asImpl, tearDown
125128
}
126129

127130
func addUserWithNoOption(as *authStore) {
@@ -136,7 +139,7 @@ func addUserWithNoOption(as *authStore) {
136139
as.refreshRangePermCache(tx)
137140
}
138141

139-
func enableAuthAndCreateRoot(as *authStore) error {
142+
func enableAuthAndCreateRoot(as AuthStore) error {
140143
_, err := as.UserAdd(&pb.AuthUserAddRequest{Name: "root", HashedPassword: encodePassword("root"), Options: &authpb.UserAddOptions{NoPassword: false}})
141144
if err != nil {
142145
return err

server/etcdserver/adapters.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ type serverVersionAdapter struct {
3333
*EtcdServer
3434
}
3535

36-
func NewServerVersionAdapter(s *EtcdServer) *serverVersionAdapter {
36+
func NewServerVersionAdapter(s *EtcdServer) serverversion.Server {
3737
return &serverVersionAdapter{
3838
EtcdServer: s,
3939
}

server/storage/mvcc/kvstore.go

+1
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ type store struct {
8282

8383
// NewStore returns a new store. It is useful to create a store inside
8484
// mvcc pkg. It should only be used for testing externally.
85+
// revive:disable-next-line:unexported-return this is used internally in the mvcc pkg
8586
func NewStore(lg *zap.Logger, b backend.Backend, le lease.Lessor, cfg StoreConfig) *store {
8687
if lg == nil {
8788
lg = zap.NewNop()

server/storage/mvcc/watchable_store.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ var _ WatchableKV = (*watchableStore)(nil)
7676
// cancel operations.
7777
type cancelFunc func()
7878

79-
func New(lg *zap.Logger, b backend.Backend, le lease.Lessor, cfg StoreConfig) *watchableStore {
79+
func New(lg *zap.Logger, b backend.Backend, le lease.Lessor, cfg StoreConfig) WatchableKV {
8080
s := newWatchableStore(lg, b, le, cfg)
8181
s.wg.Add(2)
8282
go s.syncWatchersLoop()

server/storage/mvcc/watchable_store_test.go

+13-8
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ func TestWatch(t *testing.T) {
4444
defer w.Close()
4545

4646
w.Watch(0, testKey, nil, 0)
47-
if !s.synced.contains(string(testKey)) {
47+
if !s.(*watchableStore).synced.contains(string(testKey)) {
4848
// the key must have had an entry in synced
4949
t.Errorf("existence = false, want true")
5050
}
@@ -67,7 +67,7 @@ func TestNewWatcherCancel(t *testing.T) {
6767
t.Error(err)
6868
}
6969

70-
if s.synced.contains(string(testKey)) {
70+
if s.(*watchableStore).synced.contains(string(testKey)) {
7171
// the key shoud have been deleted
7272
t.Errorf("existence = true, want false")
7373
}
@@ -340,7 +340,9 @@ func TestWatchNoEventLossOnCompact(t *testing.T) {
340340
require.NoError(t, err)
341341
}
342342
// fill up w.Chan() with 1 buf via 2 compacted watch response
343-
s.syncWatchers([]mvccpb.Event{})
343+
sImpl, ok := s.(*watchableStore)
344+
require.Truef(t, ok, "TestWatchNoEventLossOnCompact: needs a WatchableKV implementation")
345+
sImpl.syncWatchers([]mvccpb.Event{})
344346

345347
for len(watchers) > 0 {
346348
resp := <-w.Chan()
@@ -355,7 +357,7 @@ func TestWatchNoEventLossOnCompact(t *testing.T) {
355357
require.Equalf(t, nextRev, ev.Kv.ModRevision, "got event revision %d but want %d for watcher with watch ID %d", ev.Kv.ModRevision, nextRev, resp.WatchID)
356358
nextRev++
357359
}
358-
if nextRev == s.rev()+1 {
360+
if nextRev == sImpl.rev()+1 {
359361
delete(watchers, resp.WatchID)
360362
}
361363
}
@@ -566,10 +568,13 @@ func TestWatchBatchUnsynced(t *testing.T) {
566568
}
567569
assert.Equal(t, tc.expectRevisionBatches, revisionBatches)
568570

569-
s.store.revMu.Lock()
570-
defer s.store.revMu.Unlock()
571-
assert.Equal(t, 1, s.synced.size())
572-
assert.Equal(t, 0, s.unsynced.size())
571+
sImpl, ok := s.(*watchableStore)
572+
require.Truef(t, ok, "TestWatchBatchUnsynced: needs a WatchableKV implementation")
573+
574+
sImpl.store.revMu.Lock()
575+
defer sImpl.store.revMu.Unlock()
576+
assert.Equal(t, 1, sImpl.synced.size())
577+
assert.Equal(t, 0, sImpl.unsynced.size())
573578
})
574579
}
575580
}

server/storage/schema/auth.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ type authBackend struct {
4040

4141
var _ auth.AuthBackend = (*authBackend)(nil)
4242

43-
func NewAuthBackend(lg *zap.Logger, be backend.Backend) *authBackend {
43+
func NewAuthBackend(lg *zap.Logger, be backend.Backend) auth.AuthBackend {
4444
return &authBackend{
4545
be: be,
4646
lg: lg,

server/storage/schema/schema.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,10 @@ func UnsafeMigrate(lg *zap.Logger, tx backend.UnsafeReadWriter, w WALVersion, ta
7373
if target.LessThan(current) {
7474
minVersion := w.MinimalEtcdVersion()
7575
if minVersion != nil && target.LessThan(*minVersion) {
76-
return fmt.Errorf("cannot downgrade storage, WAL contains newer entries")
76+
// Occasionally we may see this error during downgrade test due to ClusterVersionSet,
77+
// which is harmless. Please read https://github.com/etcd-io/etcd/pull/13405#discussion_r1890378185.
78+
return fmt.Errorf("cannot downgrade storage, WAL contains newer entries, as the target version (%s) is lower than the version (%s) detected from WAL logs",
79+
target.String(), minVersion.String())
7780
}
7881
}
7982
return plan.unsafeExecute(lg, tx)

server/storage/wal/version.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,8 @@ func visitEntryData(entryType raftpb.EntryType, data []byte, visitor Visitor) er
112112
break
113113
}
114114
msg = proto.MessageReflect(&raftReq)
115-
if raftReq.ClusterVersionSet != nil {
116-
ver, err := semver.NewVersion(raftReq.ClusterVersionSet.Ver)
115+
if raftReq.DowngradeVersionTest != nil {
116+
ver, err := semver.NewVersion(raftReq.DowngradeVersionTest.Ver)
117117
if err != nil {
118118
return err
119119
}

0 commit comments

Comments
 (0)