MCPcopy
hub / github.com/dgraph-io/dgraph / applyProposal

Method applyProposal

dgraph/cmd/zero/raft.go:399–488  ·  view source on GitHub ↗
(e raftpb.Entry)

Source from the content-addressed store, hash-verified

397}
398
399func (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

Callers 1

RunMethod · 0.95

Calls 13

handleMemberProposalMethod · 0.95
handleTabletProposalMethod · 0.95
applySnapshotMethod · 0.95
deleteNamespaceMethod · 0.95
AssertTrueFunction · 0.92
MaxFunction · 0.92
InfofMethod · 0.80
updateCommitStatusMethod · 0.80
CtxMethod · 0.45
LockMethod · 0.45
UnlockMethod · 0.45

Tested by

no test coverage detected