MCPcopy
hub / github.com/grpc/grpc-go / sendNewPickerLocked

Method sendNewPickerLocked

balancer/rls/balancer.go:527–571  ·  view source on GitHub ↗

sendNewPickerLocked pushes a new picker on to the channel. Note that regardless of what connectivity state is reported, the policy will return its own picker, and not a picker that unconditionally queues (typically used for IDLE or CONNECTING) or a picker that unconditionally fails (typically used

()

Source from the content-addressed store, hash-verified

525//
526// Caller must hold lb.stateMu.
527func (b *rlsBalancer) sendNewPickerLocked() {
528 aggregatedState := b.aggregatedConnectivityState()
529
530 // Acquire a separate reference for the picker. This is required to ensure
531 // that the wrapper held by the old picker is not closed when the default
532 // target changes in the config, and a new wrapper is created for the new
533 // default target. See handleChildPolicyConfigUpdate() for how config changes
534 // affecting the default target are handled.
535 if b.defaultPolicy != nil {
536 b.defaultPolicy.acquireRef()
537 }
538
539 picker := &rlsPicker{
540 kbm: b.lbCfg.kbMap,
541 origEndpoint: b.bopts.Target.Endpoint(),
542 lb: b,
543 defaultPolicy: b.defaultPolicy,
544 ctrlCh: b.ctrlCh,
545 maxAge: b.lbCfg.maxAge,
546 staleAge: b.lbCfg.staleAge,
547 bg: b.bg,
548 rlsServerTarget: b.lbCfg.lookupService,
549 grpcTarget: b.bopts.Target.String(),
550 metricsRecorder: b.cc.MetricsRecorder(),
551 }
552 picker.logger = internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf("[rls-picker %p] ", picker))
553 state := balancer.State{
554 ConnectivityState: aggregatedState,
555 Picker: picker,
556 }
557
558 if !b.inhibitPickerUpdates {
559 b.logger.Infof("New balancer.State: %+v", state)
560 b.cc.UpdateState(state)
561 } else {
562 b.logger.Infof("Delaying picker update: %+v", state)
563 }
564
565 if b.lastPicker != nil {
566 if b.defaultPolicy != nil {
567 b.defaultPolicy.releaseRef()
568 }
569 }
570 b.lastPicker = picker
571}
572
573func (b *rlsBalancer) sendNewPicker() {
574 b.stateMu.Lock()

Callers 3

runMethod · 0.95
sendNewPickerMethod · 0.95

Calls 8

acquireRefMethod · 0.80
EndpointMethod · 0.80
releaseRefMethod · 0.80
StringMethod · 0.65
MetricsRecorderMethod · 0.65
InfofMethod · 0.65
UpdateStateMethod · 0.65

Tested by

no test coverage detected