MCPcopy Index your code
hub / github.com/dgraph-io/dgraph / createProposals

Method createProposals

dgraph/cmd/zero/zero.go:344–405  ·  view source on GitHub ↗
(dst *pb.Group)

Source from the content-addressed store, hash-verified

342}
343
344func (s *Server) createProposals(dst *pb.Group) ([]*pb.ZeroProposal, error) {
345 var res []*pb.ZeroProposal
346 if len(dst.Members) > 1 {
347 return res, errors.Errorf("Create Proposal: Invalid group: %+v", dst)
348 }
349
350 s.RLock()
351 defer s.RUnlock()
352 // There is only one member. We use for loop because we don't know what the mid is.
353 for mid, dstMember := range dst.Members {
354 group, has := s.state.Groups[dstMember.GroupId]
355 if !has {
356 return res, errors.Errorf("Unknown group for member: %+v", dstMember)
357 }
358 srcMember, has := group.Members[mid]
359 if !has {
360 return res, errors.Errorf("Unknown member: %+v", dstMember)
361 }
362 if srcMember.Addr != dstMember.Addr ||
363 srcMember.Leader != dstMember.Leader {
364
365 proposal := &pb.ZeroProposal{
366 Member: dstMember,
367 }
368 res = append(res, proposal)
369 }
370 if !dstMember.Leader {
371 // Don't continue to tablets if request is not from the leader.
372 return res, nil
373 }
374 if dst.SnapshotTs > group.SnapshotTs {
375 res = append(res, &pb.ZeroProposal{
376 SnapshotTs: map[uint32]uint64{dstMember.GroupId: dst.SnapshotTs},
377 })
378 }
379 }
380
381 var tablets []*pb.Tablet
382 for key, dstTablet := range dst.Tablets {
383 group, has := s.state.Groups[dstTablet.GroupId]
384 if !has {
385 return res, errors.Errorf("Unknown group for tablet: %+v", dstTablet)
386 }
387 srcTablet, has := group.Tablets[key]
388 if !has {
389 // Tablet moved to new group
390 continue
391 }
392
393 s := float64(srcTablet.OnDiskBytes)
394 d := float64(dstTablet.OnDiskBytes)
395 if dstTablet.Remove || (s == 0 && d > 0) || (s > 0 && math.Abs(d/s-1) > 0.1) {
396 dstTablet.Force = false
397 tablets = append(tablets, dstTablet)
398 }
399 }
400
401 if len(tablets) > 0 {

Callers 1

UpdateMembershipMethod · 0.95

Calls 3

RLockMethod · 0.80
RUnlockMethod · 0.80
ErrorfMethod · 0.45

Tested by

no test coverage detected