@@ -19,6 +19,8 @@ import (
19
19
"encoding/binary"
20
20
"time"
21
21
22
+ "github.com/gogo/protobuf/proto"
23
+
22
24
"github.com/coreos/etcd/auth"
23
25
pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
24
26
"github.com/coreos/etcd/etcdserver/membership"
@@ -99,25 +101,19 @@ func (s *EtcdServer) Range(ctx context.Context, r *pb.RangeRequest) (*pb.RangeRe
99
101
}
100
102
101
103
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 })
103
105
if err != nil {
104
106
return nil , err
105
107
}
106
- if result .err != nil {
107
- return nil , result .err
108
- }
109
- return result .resp .(* pb.PutResponse ), nil
108
+ return resp .(* pb.PutResponse ), nil
110
109
}
111
110
112
111
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 })
114
113
if err != nil {
115
114
return nil , err
116
115
}
117
- if result .err != nil {
118
- return nil , result .err
119
- }
120
- return result .resp .(* pb.DeleteRangeResponse ), nil
116
+ return resp .(* pb.DeleteRangeResponse ), nil
121
117
}
122
118
123
119
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
139
135
}
140
136
return resp , err
141
137
}
142
- result , err := s .processInternalRaftRequest (ctx , pb.InternalRaftRequest {Txn : r })
138
+ resp , err := s .raftRequest (ctx , pb.InternalRaftRequest {Txn : r })
143
139
if err != nil {
144
140
return nil , err
145
141
}
146
- if result .err != nil {
147
- return nil , result .err
148
- }
149
- return result .resp .(* pb.TxnResponse ), nil
142
+ return resp .(* pb.TxnResponse ), nil
150
143
}
151
144
152
145
func isTxnSerializable (r * pb.TxnRequest ) bool {
@@ -211,25 +204,19 @@ func (s *EtcdServer) LeaseGrant(ctx context.Context, r *pb.LeaseGrantRequest) (*
211
204
// only use positive int64 id's
212
205
r .ID = int64 (s .reqIDGen .Next () & ((1 << 63 ) - 1 ))
213
206
}
214
- result , err := s .processInternalRaftRequestOnce (ctx , pb.InternalRaftRequest {LeaseGrant : r })
207
+ resp , err := s .raftRequestOnce (ctx , pb.InternalRaftRequest {LeaseGrant : r })
215
208
if err != nil {
216
209
return nil , err
217
210
}
218
- if result .err != nil {
219
- return nil , result .err
220
- }
221
- return result .resp .(* pb.LeaseGrantResponse ), nil
211
+ return resp .(* pb.LeaseGrantResponse ), nil
222
212
}
223
213
224
214
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 })
226
216
if err != nil {
227
217
return nil , err
228
218
}
229
- if result .err != nil {
230
- return nil , result .err
231
- }
232
- return result .resp .(* pb.LeaseRevokeResponse ), nil
219
+ return resp .(* pb.LeaseRevokeResponse ), nil
233
220
}
234
221
235
222
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)
325
312
}
326
313
327
314
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 })
329
316
if err != nil {
330
317
return nil , err
331
318
}
332
- if result .err != nil {
333
- return nil , result .err
334
- }
335
- return result .resp .(* pb.AlarmResponse ), nil
319
+ return resp .(* pb.AlarmResponse ), nil
336
320
}
337
321
338
322
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 })
340
324
if err != nil {
341
325
return nil , err
342
326
}
343
- if result .err != nil {
344
- return nil , result .err
345
- }
346
- return result .resp .(* pb.AuthEnableResponse ), nil
327
+ return resp .(* pb.AuthEnableResponse ), nil
347
328
}
348
329
349
330
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 })
351
332
if err != nil {
352
333
return nil , err
353
334
}
354
- if result .err != nil {
355
- return nil , result .err
356
- }
357
- return result .resp .(* pb.AuthDisableResponse ), nil
335
+ return resp .(* pb.AuthDisableResponse ), nil
358
336
}
359
337
360
338
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 {
365
340
return nil , err
366
341
}
367
342
343
+ var resp proto.Message
368
344
for {
369
345
checkedRevision , err := s .AuthStore ().CheckPassword (r .Name , r .Password )
370
346
if err != nil {
@@ -385,166 +361,141 @@ func (s *EtcdServer) Authenticate(ctx context.Context, r *pb.AuthenticateRequest
385
361
SimpleToken : st ,
386
362
}
387
363
388
- result , err = s .processInternalRaftRequestOnce (ctx , pb.InternalRaftRequest {Authenticate : internalReq })
364
+ resp , err = s .raftRequestOnce (ctx , pb.InternalRaftRequest {Authenticate : internalReq })
389
365
if err != nil {
390
366
return nil , err
391
367
}
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
399
370
}
400
-
401
- break
371
+ plog .Infof ("revision when password checked is obsolete, retrying" )
402
372
}
403
373
404
- return result . resp .(* pb.AuthenticateResponse ), nil
374
+ return resp .(* pb.AuthenticateResponse ), nil
405
375
}
406
376
407
377
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 })
409
379
if err != nil {
410
380
return nil , err
411
381
}
412
- if result .err != nil {
413
- return nil , result .err
414
- }
415
- return result .resp .(* pb.AuthUserAddResponse ), nil
382
+ return resp .(* pb.AuthUserAddResponse ), nil
416
383
}
417
384
418
385
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 })
420
387
if err != nil {
421
388
return nil , err
422
389
}
423
- if result .err != nil {
424
- return nil , result .err
425
- }
426
- return result .resp .(* pb.AuthUserDeleteResponse ), nil
390
+ return resp .(* pb.AuthUserDeleteResponse ), nil
427
391
}
428
392
429
393
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 })
431
395
if err != nil {
432
396
return nil , err
433
397
}
434
- if result .err != nil {
435
- return nil , result .err
436
- }
437
- return result .resp .(* pb.AuthUserChangePasswordResponse ), nil
398
+ return resp .(* pb.AuthUserChangePasswordResponse ), nil
438
399
}
439
400
440
401
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 })
442
403
if err != nil {
443
404
return nil , err
444
405
}
445
- if result .err != nil {
446
- return nil , result .err
447
- }
448
- return result .resp .(* pb.AuthUserGrantRoleResponse ), nil
406
+ return resp .(* pb.AuthUserGrantRoleResponse ), nil
449
407
}
450
408
451
409
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 })
453
411
if err != nil {
454
412
return nil , err
455
413
}
456
- if result .err != nil {
457
- return nil , result .err
458
- }
459
- return result .resp .(* pb.AuthUserGetResponse ), nil
414
+ return resp .(* pb.AuthUserGetResponse ), nil
460
415
}
461
416
462
417
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 })
464
419
if err != nil {
465
420
return nil , err
466
421
}
467
- if result .err != nil {
468
- return nil , result .err
469
- }
470
- return result .resp .(* pb.AuthUserListResponse ), nil
422
+ return resp .(* pb.AuthUserListResponse ), nil
471
423
}
472
424
473
425
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 })
475
427
if err != nil {
476
428
return nil , err
477
429
}
478
- if result .err != nil {
479
- return nil , result .err
480
- }
481
- return result .resp .(* pb.AuthUserRevokeRoleResponse ), nil
430
+ return resp .(* pb.AuthUserRevokeRoleResponse ), nil
482
431
}
483
432
484
433
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 })
486
435
if err != nil {
487
436
return nil , err
488
437
}
489
- if result .err != nil {
490
- return nil , result .err
491
- }
492
- return result .resp .(* pb.AuthRoleAddResponse ), nil
438
+ return resp .(* pb.AuthRoleAddResponse ), nil
493
439
}
494
440
495
441
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 })
497
443
if err != nil {
498
444
return nil , err
499
445
}
500
- if result .err != nil {
501
- return nil , result .err
502
- }
503
- return result .resp .(* pb.AuthRoleGrantPermissionResponse ), nil
446
+ return resp .(* pb.AuthRoleGrantPermissionResponse ), nil
504
447
}
505
448
506
449
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 })
508
451
if err != nil {
509
452
return nil , err
510
453
}
511
- if result .err != nil {
512
- return nil , result .err
513
- }
514
- return result .resp .(* pb.AuthRoleGetResponse ), nil
454
+ return resp .(* pb.AuthRoleGetResponse ), nil
515
455
}
516
456
517
457
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 })
519
459
if err != nil {
520
460
return nil , err
521
461
}
522
- if result .err != nil {
523
- return nil , result .err
524
- }
525
- return result .resp .(* pb.AuthRoleListResponse ), nil
462
+ return resp .(* pb.AuthRoleListResponse ), nil
526
463
}
527
464
528
465
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 })
530
467
if err != nil {
531
468
return nil , err
532
469
}
533
- if result .err != nil {
534
- return nil , result .err
535
- }
536
- return result .resp .(* pb.AuthRoleRevokePermissionResponse ), nil
470
+ return resp .(* pb.AuthRoleRevokePermissionResponse ), nil
537
471
}
538
472
539
473
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 )
541
483
if err != nil {
542
484
return nil , err
543
485
}
544
486
if result .err != nil {
545
487
return nil , result .err
546
488
}
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
+ }
548
499
}
549
500
550
501
// 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
629
580
}
630
581
}
631
582
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
-
645
583
// Watchable returns a watchable interface attached to the etcdserver.
646
584
func (s * EtcdServer ) Watchable () mvcc.WatchableKV { return s .KV () }
647
585
0 commit comments