(e raftpb.Entry)
| 397 | } |
| 398 | |
| 399 | func (n *node) applyProposal(e raftpb.Entry) (uint64, error) { |
| 400 | x.AssertTrue(len(e.Data) > 0) |
| 401 | |
| 402 | var p pb.ZeroProposal |
| 403 | key := binary.BigEndian.Uint64(e.Data[:8]) |
| 404 | if err := proto.Unmarshal(e.Data[8:], &p); err != nil { |
| 405 | return key, err |
| 406 | } |
| 407 | span := trace.SpanFromContext(n.Proposals.Ctx(key)) |
| 408 | |
| 409 | n.server.Lock() |
| 410 | defer n.server.Unlock() |
| 411 | |
| 412 | state := n.server.state |
| 413 | state.Counter = e.Index |
| 414 | if len(p.Cid) > 0 { |
| 415 | if len(state.Cid) > 0 { |
| 416 | return key, errInvalidProposal |
| 417 | } |
| 418 | state.Cid = p.Cid |
| 419 | } |
| 420 | if p.MaxRaftId > 0 { |
| 421 | if p.MaxRaftId <= state.MaxRaftId { |
| 422 | return key, errInvalidProposal |
| 423 | } |
| 424 | state.MaxRaftId = p.MaxRaftId |
| 425 | n.server.nextRaftId = x.Max(n.server.nextRaftId, p.MaxRaftId+1) |
| 426 | } |
| 427 | if p.SnapshotTs != nil { |
| 428 | for gid, ts := range p.SnapshotTs { |
| 429 | if group, ok := state.Groups[gid]; ok { |
| 430 | group.SnapshotTs = x.Max(group.SnapshotTs, ts) |
| 431 | } |
| 432 | } |
| 433 | } |
| 434 | if p.Member != nil { |
| 435 | if err := n.handleMemberProposal(p.Member); err != nil { |
| 436 | span.AddEvent(fmt.Sprintf("While applying membership proposal: %+v", err)) |
| 437 | glog.Errorf("While applying membership proposal: %+v", err) |
| 438 | return key, err |
| 439 | } |
| 440 | } |
| 441 | if p.Tablet != nil { |
| 442 | if err := n.handleTabletProposal(p.Tablet); err != nil { |
| 443 | span.AddEvent(fmt.Sprintf("While applying tablet proposal: %v", err)) |
| 444 | glog.Errorf("While applying tablet proposal: %v", err) |
| 445 | return key, err |
| 446 | } |
| 447 | } |
| 448 | |
| 449 | if len(p.Tablets) > 0 { |
| 450 | if err := n.handleBulkTabletProposal(p.Tablets); err != nil { |
| 451 | span.AddEvent(fmt.Sprintf("While applying bulk tablet proposal: %v", err)) |
| 452 | glog.Errorf("While applying bulk tablet proposal: %v", err) |
| 453 | return key, err |
| 454 | } |
| 455 | } |
| 456 |
no test coverage detected