Skip to content

Commit 478ba2c

Browse files
author
Anthony Romano
committed
etcdserver: consolidate error checking for v3_server functions
Duplicated error checking code moved into raftRequest/raftRequestOnce.
1 parent 05603c4 commit 478ba2c

File tree

2 files changed

+69
-132
lines changed

2 files changed

+69
-132
lines changed

etcdserver/server.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -1366,8 +1366,7 @@ func (s *EtcdServer) applyEntryNormal(e *raftpb.Entry) {
13661366
Action: pb.AlarmRequest_ACTIVATE,
13671367
Alarm: pb.AlarmType_NOSPACE,
13681368
}
1369-
r := pb.InternalRaftRequest{Alarm: a}
1370-
s.processInternalRaftRequest(s.ctx, r)
1369+
s.raftRequest(s.ctx, pb.InternalRaftRequest{Alarm: a})
13711370
s.w.Trigger(id, ar)
13721371
})
13731372
}

etcdserver/v3_server.go

+68-130
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import (
1919
"encoding/binary"
2020
"time"
2121

22+
"github.com/gogo/protobuf/proto"
23+
2224
"github.com/coreos/etcd/auth"
2325
pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
2426
"github.com/coreos/etcd/etcdserver/membership"
@@ -99,25 +101,19 @@ func (s *EtcdServer) Range(ctx context.Context, r *pb.RangeRequest) (*pb.RangeRe
99101
}
100102

101103
func (s *EtcdServer) Put(ctx context.Context, r *pb.PutRequest) (*pb.PutResponse, error) {
102-
result, err := s.processInternalRaftRequest(ctx, pb.InternalRaftRequest{Put: r})
104+
resp, err := s.raftRequest(ctx, pb.InternalRaftRequest{Put: r})
103105
if err != nil {
104106
return nil, err
105107
}
106-
if result.err != nil {
107-
return nil, result.err
108-
}
109-
return result.resp.(*pb.PutResponse), nil
108+
return resp.(*pb.PutResponse), nil
110109
}
111110

112111
func (s *EtcdServer) DeleteRange(ctx context.Context, r *pb.DeleteRangeRequest) (*pb.DeleteRangeResponse, error) {
113-
result, err := s.processInternalRaftRequest(ctx, pb.InternalRaftRequest{DeleteRange: r})
112+
resp, err := s.raftRequest(ctx, pb.InternalRaftRequest{DeleteRange: r})
114113
if err != nil {
115114
return nil, err
116115
}
117-
if result.err != nil {
118-
return nil, result.err
119-
}
120-
return result.resp.(*pb.DeleteRangeResponse), nil
116+
return resp.(*pb.DeleteRangeResponse), nil
121117
}
122118

123119
func (s *EtcdServer) Txn(ctx context.Context, r *pb.TxnRequest) (*pb.TxnResponse, error) {
@@ -139,14 +135,11 @@ func (s *EtcdServer) Txn(ctx context.Context, r *pb.TxnRequest) (*pb.TxnResponse
139135
}
140136
return resp, err
141137
}
142-
result, err := s.processInternalRaftRequest(ctx, pb.InternalRaftRequest{Txn: r})
138+
resp, err := s.raftRequest(ctx, pb.InternalRaftRequest{Txn: r})
143139
if err != nil {
144140
return nil, err
145141
}
146-
if result.err != nil {
147-
return nil, result.err
148-
}
149-
return result.resp.(*pb.TxnResponse), nil
142+
return resp.(*pb.TxnResponse), nil
150143
}
151144

152145
func isTxnSerializable(r *pb.TxnRequest) bool {
@@ -211,25 +204,19 @@ func (s *EtcdServer) LeaseGrant(ctx context.Context, r *pb.LeaseGrantRequest) (*
211204
// only use positive int64 id's
212205
r.ID = int64(s.reqIDGen.Next() & ((1 << 63) - 1))
213206
}
214-
result, err := s.processInternalRaftRequestOnce(ctx, pb.InternalRaftRequest{LeaseGrant: r})
207+
resp, err := s.raftRequestOnce(ctx, pb.InternalRaftRequest{LeaseGrant: r})
215208
if err != nil {
216209
return nil, err
217210
}
218-
if result.err != nil {
219-
return nil, result.err
220-
}
221-
return result.resp.(*pb.LeaseGrantResponse), nil
211+
return resp.(*pb.LeaseGrantResponse), nil
222212
}
223213

224214
func (s *EtcdServer) LeaseRevoke(ctx context.Context, r *pb.LeaseRevokeRequest) (*pb.LeaseRevokeResponse, error) {
225-
result, err := s.processInternalRaftRequestOnce(ctx, pb.InternalRaftRequest{LeaseRevoke: r})
215+
resp, err := s.raftRequestOnce(ctx, pb.InternalRaftRequest{LeaseRevoke: r})
226216
if err != nil {
227217
return nil, err
228218
}
229-
if result.err != nil {
230-
return nil, result.err
231-
}
232-
return result.resp.(*pb.LeaseRevokeResponse), nil
219+
return resp.(*pb.LeaseRevokeResponse), nil
233220
}
234221

235222
func (s *EtcdServer) LeaseRenew(ctx context.Context, id lease.LeaseID) (int64, error) {
@@ -325,46 +312,35 @@ func (s *EtcdServer) waitLeader(ctx context.Context) (*membership.Member, error)
325312
}
326313

327314
func (s *EtcdServer) Alarm(ctx context.Context, r *pb.AlarmRequest) (*pb.AlarmResponse, error) {
328-
result, err := s.processInternalRaftRequestOnce(ctx, pb.InternalRaftRequest{Alarm: r})
315+
resp, err := s.raftRequestOnce(ctx, pb.InternalRaftRequest{Alarm: r})
329316
if err != nil {
330317
return nil, err
331318
}
332-
if result.err != nil {
333-
return nil, result.err
334-
}
335-
return result.resp.(*pb.AlarmResponse), nil
319+
return resp.(*pb.AlarmResponse), nil
336320
}
337321

338322
func (s *EtcdServer) AuthEnable(ctx context.Context, r *pb.AuthEnableRequest) (*pb.AuthEnableResponse, error) {
339-
result, err := s.processInternalRaftRequestOnce(ctx, pb.InternalRaftRequest{AuthEnable: r})
323+
resp, err := s.raftRequestOnce(ctx, pb.InternalRaftRequest{AuthEnable: r})
340324
if err != nil {
341325
return nil, err
342326
}
343-
if result.err != nil {
344-
return nil, result.err
345-
}
346-
return result.resp.(*pb.AuthEnableResponse), nil
327+
return resp.(*pb.AuthEnableResponse), nil
347328
}
348329

349330
func (s *EtcdServer) AuthDisable(ctx context.Context, r *pb.AuthDisableRequest) (*pb.AuthDisableResponse, error) {
350-
result, err := s.processInternalRaftRequest(ctx, pb.InternalRaftRequest{AuthDisable: r})
331+
resp, err := s.raftRequest(ctx, pb.InternalRaftRequest{AuthDisable: r})
351332
if err != nil {
352333
return nil, err
353334
}
354-
if result.err != nil {
355-
return nil, result.err
356-
}
357-
return result.resp.(*pb.AuthDisableResponse), nil
335+
return resp.(*pb.AuthDisableResponse), nil
358336
}
359337

360338
func (s *EtcdServer) Authenticate(ctx context.Context, r *pb.AuthenticateRequest) (*pb.AuthenticateResponse, error) {
361-
var result *applyResult
362-
363-
err := s.linearizableReadNotify(ctx)
364-
if err != nil {
339+
if err := s.linearizableReadNotify(ctx); err != nil {
365340
return nil, err
366341
}
367342

343+
var resp proto.Message
368344
for {
369345
checkedRevision, err := s.AuthStore().CheckPassword(r.Name, r.Password)
370346
if err != nil {
@@ -385,166 +361,141 @@ func (s *EtcdServer) Authenticate(ctx context.Context, r *pb.AuthenticateRequest
385361
SimpleToken: st,
386362
}
387363

388-
result, err = s.processInternalRaftRequestOnce(ctx, pb.InternalRaftRequest{Authenticate: internalReq})
364+
resp, err = s.raftRequestOnce(ctx, pb.InternalRaftRequest{Authenticate: internalReq})
389365
if err != nil {
390366
return nil, err
391367
}
392-
if result.err != nil {
393-
return nil, result.err
394-
}
395-
396-
if checkedRevision != s.AuthStore().Revision() {
397-
plog.Infof("revision when password checked is obsolete, retrying")
398-
continue
368+
if checkedRevision == s.AuthStore().Revision() {
369+
break
399370
}
400-
401-
break
371+
plog.Infof("revision when password checked is obsolete, retrying")
402372
}
403373

404-
return result.resp.(*pb.AuthenticateResponse), nil
374+
return resp.(*pb.AuthenticateResponse), nil
405375
}
406376

407377
func (s *EtcdServer) UserAdd(ctx context.Context, r *pb.AuthUserAddRequest) (*pb.AuthUserAddResponse, error) {
408-
result, err := s.processInternalRaftRequest(ctx, pb.InternalRaftRequest{AuthUserAdd: r})
378+
resp, err := s.raftRequest(ctx, pb.InternalRaftRequest{AuthUserAdd: r})
409379
if err != nil {
410380
return nil, err
411381
}
412-
if result.err != nil {
413-
return nil, result.err
414-
}
415-
return result.resp.(*pb.AuthUserAddResponse), nil
382+
return resp.(*pb.AuthUserAddResponse), nil
416383
}
417384

418385
func (s *EtcdServer) UserDelete(ctx context.Context, r *pb.AuthUserDeleteRequest) (*pb.AuthUserDeleteResponse, error) {
419-
result, err := s.processInternalRaftRequest(ctx, pb.InternalRaftRequest{AuthUserDelete: r})
386+
resp, err := s.raftRequest(ctx, pb.InternalRaftRequest{AuthUserDelete: r})
420387
if err != nil {
421388
return nil, err
422389
}
423-
if result.err != nil {
424-
return nil, result.err
425-
}
426-
return result.resp.(*pb.AuthUserDeleteResponse), nil
390+
return resp.(*pb.AuthUserDeleteResponse), nil
427391
}
428392

429393
func (s *EtcdServer) UserChangePassword(ctx context.Context, r *pb.AuthUserChangePasswordRequest) (*pb.AuthUserChangePasswordResponse, error) {
430-
result, err := s.processInternalRaftRequest(ctx, pb.InternalRaftRequest{AuthUserChangePassword: r})
394+
resp, err := s.raftRequest(ctx, pb.InternalRaftRequest{AuthUserChangePassword: r})
431395
if err != nil {
432396
return nil, err
433397
}
434-
if result.err != nil {
435-
return nil, result.err
436-
}
437-
return result.resp.(*pb.AuthUserChangePasswordResponse), nil
398+
return resp.(*pb.AuthUserChangePasswordResponse), nil
438399
}
439400

440401
func (s *EtcdServer) UserGrantRole(ctx context.Context, r *pb.AuthUserGrantRoleRequest) (*pb.AuthUserGrantRoleResponse, error) {
441-
result, err := s.processInternalRaftRequest(ctx, pb.InternalRaftRequest{AuthUserGrantRole: r})
402+
resp, err := s.raftRequest(ctx, pb.InternalRaftRequest{AuthUserGrantRole: r})
442403
if err != nil {
443404
return nil, err
444405
}
445-
if result.err != nil {
446-
return nil, result.err
447-
}
448-
return result.resp.(*pb.AuthUserGrantRoleResponse), nil
406+
return resp.(*pb.AuthUserGrantRoleResponse), nil
449407
}
450408

451409
func (s *EtcdServer) UserGet(ctx context.Context, r *pb.AuthUserGetRequest) (*pb.AuthUserGetResponse, error) {
452-
result, err := s.processInternalRaftRequest(ctx, pb.InternalRaftRequest{AuthUserGet: r})
410+
resp, err := s.raftRequest(ctx, pb.InternalRaftRequest{AuthUserGet: r})
453411
if err != nil {
454412
return nil, err
455413
}
456-
if result.err != nil {
457-
return nil, result.err
458-
}
459-
return result.resp.(*pb.AuthUserGetResponse), nil
414+
return resp.(*pb.AuthUserGetResponse), nil
460415
}
461416

462417
func (s *EtcdServer) UserList(ctx context.Context, r *pb.AuthUserListRequest) (*pb.AuthUserListResponse, error) {
463-
result, err := s.processInternalRaftRequest(ctx, pb.InternalRaftRequest{AuthUserList: r})
418+
resp, err := s.raftRequest(ctx, pb.InternalRaftRequest{AuthUserList: r})
464419
if err != nil {
465420
return nil, err
466421
}
467-
if result.err != nil {
468-
return nil, result.err
469-
}
470-
return result.resp.(*pb.AuthUserListResponse), nil
422+
return resp.(*pb.AuthUserListResponse), nil
471423
}
472424

473425
func (s *EtcdServer) UserRevokeRole(ctx context.Context, r *pb.AuthUserRevokeRoleRequest) (*pb.AuthUserRevokeRoleResponse, error) {
474-
result, err := s.processInternalRaftRequest(ctx, pb.InternalRaftRequest{AuthUserRevokeRole: r})
426+
resp, err := s.raftRequest(ctx, pb.InternalRaftRequest{AuthUserRevokeRole: r})
475427
if err != nil {
476428
return nil, err
477429
}
478-
if result.err != nil {
479-
return nil, result.err
480-
}
481-
return result.resp.(*pb.AuthUserRevokeRoleResponse), nil
430+
return resp.(*pb.AuthUserRevokeRoleResponse), nil
482431
}
483432

484433
func (s *EtcdServer) RoleAdd(ctx context.Context, r *pb.AuthRoleAddRequest) (*pb.AuthRoleAddResponse, error) {
485-
result, err := s.processInternalRaftRequest(ctx, pb.InternalRaftRequest{AuthRoleAdd: r})
434+
resp, err := s.raftRequest(ctx, pb.InternalRaftRequest{AuthRoleAdd: r})
486435
if err != nil {
487436
return nil, err
488437
}
489-
if result.err != nil {
490-
return nil, result.err
491-
}
492-
return result.resp.(*pb.AuthRoleAddResponse), nil
438+
return resp.(*pb.AuthRoleAddResponse), nil
493439
}
494440

495441
func (s *EtcdServer) RoleGrantPermission(ctx context.Context, r *pb.AuthRoleGrantPermissionRequest) (*pb.AuthRoleGrantPermissionResponse, error) {
496-
result, err := s.processInternalRaftRequest(ctx, pb.InternalRaftRequest{AuthRoleGrantPermission: r})
442+
resp, err := s.raftRequest(ctx, pb.InternalRaftRequest{AuthRoleGrantPermission: r})
497443
if err != nil {
498444
return nil, err
499445
}
500-
if result.err != nil {
501-
return nil, result.err
502-
}
503-
return result.resp.(*pb.AuthRoleGrantPermissionResponse), nil
446+
return resp.(*pb.AuthRoleGrantPermissionResponse), nil
504447
}
505448

506449
func (s *EtcdServer) RoleGet(ctx context.Context, r *pb.AuthRoleGetRequest) (*pb.AuthRoleGetResponse, error) {
507-
result, err := s.processInternalRaftRequest(ctx, pb.InternalRaftRequest{AuthRoleGet: r})
450+
resp, err := s.raftRequest(ctx, pb.InternalRaftRequest{AuthRoleGet: r})
508451
if err != nil {
509452
return nil, err
510453
}
511-
if result.err != nil {
512-
return nil, result.err
513-
}
514-
return result.resp.(*pb.AuthRoleGetResponse), nil
454+
return resp.(*pb.AuthRoleGetResponse), nil
515455
}
516456

517457
func (s *EtcdServer) RoleList(ctx context.Context, r *pb.AuthRoleListRequest) (*pb.AuthRoleListResponse, error) {
518-
result, err := s.processInternalRaftRequest(ctx, pb.InternalRaftRequest{AuthRoleList: r})
458+
resp, err := s.raftRequest(ctx, pb.InternalRaftRequest{AuthRoleList: r})
519459
if err != nil {
520460
return nil, err
521461
}
522-
if result.err != nil {
523-
return nil, result.err
524-
}
525-
return result.resp.(*pb.AuthRoleListResponse), nil
462+
return resp.(*pb.AuthRoleListResponse), nil
526463
}
527464

528465
func (s *EtcdServer) RoleRevokePermission(ctx context.Context, r *pb.AuthRoleRevokePermissionRequest) (*pb.AuthRoleRevokePermissionResponse, error) {
529-
result, err := s.processInternalRaftRequest(ctx, pb.InternalRaftRequest{AuthRoleRevokePermission: r})
466+
resp, err := s.raftRequest(ctx, pb.InternalRaftRequest{AuthRoleRevokePermission: r})
530467
if err != nil {
531468
return nil, err
532469
}
533-
if result.err != nil {
534-
return nil, result.err
535-
}
536-
return result.resp.(*pb.AuthRoleRevokePermissionResponse), nil
470+
return resp.(*pb.AuthRoleRevokePermissionResponse), nil
537471
}
538472

539473
func (s *EtcdServer) RoleDelete(ctx context.Context, r *pb.AuthRoleDeleteRequest) (*pb.AuthRoleDeleteResponse, error) {
540-
result, err := s.processInternalRaftRequest(ctx, pb.InternalRaftRequest{AuthRoleDelete: r})
474+
resp, err := s.raftRequest(ctx, pb.InternalRaftRequest{AuthRoleDelete: r})
475+
if err != nil {
476+
return nil, err
477+
}
478+
return resp.(*pb.AuthRoleDeleteResponse), nil
479+
}
480+
481+
func (s *EtcdServer) raftRequestOnce(ctx context.Context, r pb.InternalRaftRequest) (proto.Message, error) {
482+
result, err := s.processInternalRaftRequestOnce(ctx, r)
541483
if err != nil {
542484
return nil, err
543485
}
544486
if result.err != nil {
545487
return nil, result.err
546488
}
547-
return result.resp.(*pb.AuthRoleDeleteResponse), nil
489+
return result.resp, nil
490+
}
491+
492+
func (s *EtcdServer) raftRequest(ctx context.Context, r pb.InternalRaftRequest) (proto.Message, error) {
493+
for {
494+
resp, err := s.raftRequestOnce(ctx, r)
495+
if err != auth.ErrAuthOldRevision {
496+
return resp, err
497+
}
498+
}
548499
}
549500

550501
// doSerialize handles the auth logic, with permissions checked by "chk", for a serialized request "get". Returns a non-nil error on authentication failure.
@@ -629,19 +580,6 @@ func (s *EtcdServer) processInternalRaftRequestOnce(ctx context.Context, r pb.In
629580
}
630581
}
631582

632-
func (s *EtcdServer) processInternalRaftRequest(ctx context.Context, r pb.InternalRaftRequest) (*applyResult, error) {
633-
var result *applyResult
634-
var err error
635-
for {
636-
result, err = s.processInternalRaftRequestOnce(ctx, r)
637-
if err != auth.ErrAuthOldRevision {
638-
break
639-
}
640-
}
641-
642-
return result, err
643-
}
644-
645583
// Watchable returns a watchable interface attached to the etcdserver.
646584
func (s *EtcdServer) Watchable() mvcc.WatchableKV { return s.KV() }
647585

0 commit comments

Comments
 (0)