mirror of https://github.com/grpc/grpc-java.git
all: log picker when updating balancing state
Let `ManagedChannelImpl` log picker update when updating balancing state.
This commit is contained in:
parent
14e63fea61
commit
1ed538f253
|
|
@ -432,6 +432,11 @@ public final class AutoConfiguredLoadBalancerFactory {
|
||||||
public PickResult pickSubchannel(PickSubchannelArgs args) {
|
public PickResult pickSubchannel(PickSubchannelArgs args) {
|
||||||
return PickResult.withNoResult();
|
return PickResult.withNoResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return MoreObjects.toStringHelper(EmptyPicker.class).toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final class FailingPicker extends SubchannelPicker {
|
private static final class FailingPicker extends SubchannelPicker {
|
||||||
|
|
|
||||||
|
|
@ -812,6 +812,13 @@ final class ManagedChannelImpl extends ManagedChannel implements
|
||||||
public PickResult pickSubchannel(PickSubchannelArgs args) {
|
public PickResult pickSubchannel(PickSubchannelArgs args) {
|
||||||
return panicPickResult;
|
return panicPickResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return MoreObjects.toStringHelper(PanicSubchannelPicker.class)
|
||||||
|
.add("panicPickResult", panicPickResult)
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
updateSubchannelPicker(new PanicSubchannelPicker());
|
updateSubchannelPicker(new PanicSubchannelPicker());
|
||||||
|
|
@ -1146,7 +1153,8 @@ final class ManagedChannelImpl extends ManagedChannel implements
|
||||||
// It's not appropriate to report SHUTDOWN state from lb.
|
// It's not appropriate to report SHUTDOWN state from lb.
|
||||||
// Ignore the case of newState == SHUTDOWN for now.
|
// Ignore the case of newState == SHUTDOWN for now.
|
||||||
if (newState != SHUTDOWN) {
|
if (newState != SHUTDOWN) {
|
||||||
channelLogger.log(ChannelLogLevel.INFO, "Entering {0} state", newState);
|
channelLogger.log(
|
||||||
|
ChannelLogLevel.INFO, "Entering {0} state with picker: {1}", newState, newPicker);
|
||||||
channelStateManager.gotoState(newState);
|
channelStateManager.gotoState(newState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -173,14 +173,23 @@ final class OobChannel extends ManagedChannel implements InternalInstrumented<Ch
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
subchannelPicker = new SubchannelPicker() {
|
final class OobSubchannelPicker extends SubchannelPicker {
|
||||||
final PickResult result = PickResult.withSubchannel(subchannelImpl);
|
final PickResult result = PickResult.withSubchannel(subchannelImpl);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PickResult pickSubchannel(PickSubchannelArgs args) {
|
public PickResult pickSubchannel(PickSubchannelArgs args) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return MoreObjects.toStringHelper(OobSubchannelPicker.class)
|
||||||
|
.add("result", result)
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
subchannelPicker = new OobSubchannelPicker();
|
||||||
delayedTransport.reprocess(subchannelPicker);
|
delayedTransport.reprocess(subchannelPicker);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -253,14 +262,23 @@ final class OobChannel extends ManagedChannel implements InternalInstrumented<Ch
|
||||||
delayedTransport.reprocess(subchannelPicker);
|
delayedTransport.reprocess(subchannelPicker);
|
||||||
break;
|
break;
|
||||||
case TRANSIENT_FAILURE:
|
case TRANSIENT_FAILURE:
|
||||||
delayedTransport.reprocess(new SubchannelPicker() {
|
final class OobErrorPicker extends SubchannelPicker {
|
||||||
final PickResult errorResult = PickResult.withError(newState.getStatus());
|
final PickResult errorResult = PickResult.withError(newState.getStatus());
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PickResult pickSubchannel(PickSubchannelArgs args) {
|
public PickResult pickSubchannel(PickSubchannelArgs args) {
|
||||||
return errorResult;
|
return errorResult;
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return MoreObjects.toStringHelper(OobErrorPicker.class)
|
||||||
|
.add("errorResult", errorResult)
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
delayedTransport.reprocess(new OobErrorPicker());
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
// Do nothing
|
// Do nothing
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ import static io.grpc.ConnectivityState.CONNECTING;
|
||||||
import static io.grpc.ConnectivityState.SHUTDOWN;
|
import static io.grpc.ConnectivityState.SHUTDOWN;
|
||||||
import static io.grpc.ConnectivityState.TRANSIENT_FAILURE;
|
import static io.grpc.ConnectivityState.TRANSIENT_FAILURE;
|
||||||
|
|
||||||
|
import com.google.common.base.MoreObjects;
|
||||||
import io.grpc.ConnectivityState;
|
import io.grpc.ConnectivityState;
|
||||||
import io.grpc.ConnectivityStateInfo;
|
import io.grpc.ConnectivityStateInfo;
|
||||||
import io.grpc.EquivalentAddressGroup;
|
import io.grpc.EquivalentAddressGroup;
|
||||||
|
|
@ -135,6 +136,11 @@ final class PickFirstLoadBalancer extends LoadBalancer {
|
||||||
public PickResult pickSubchannel(PickSubchannelArgs args) {
|
public PickResult pickSubchannel(PickSubchannelArgs args) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return MoreObjects.toStringHelper(Picker.class).add("result", result).toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Picker that requests connection during the first pick, and returns noResult. */
|
/** Picker that requests connection during the first pick, and returns noResult. */
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
import static com.google.common.base.Preconditions.checkState;
|
import static com.google.common.base.Preconditions.checkState;
|
||||||
|
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
|
import com.google.common.base.MoreObjects;
|
||||||
import io.grpc.ConnectivityState;
|
import io.grpc.ConnectivityState;
|
||||||
import io.grpc.ConnectivityStateInfo;
|
import io.grpc.ConnectivityStateInfo;
|
||||||
import io.grpc.ExperimentalApi;
|
import io.grpc.ExperimentalApi;
|
||||||
|
|
@ -56,14 +57,21 @@ public final class GracefulSwitchLoadBalancer extends ForwardingLoadBalancer {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleNameResolutionError(final Status error) {
|
public void handleNameResolutionError(final Status error) {
|
||||||
|
class ErrorPicker extends SubchannelPicker {
|
||||||
|
@Override
|
||||||
|
public PickResult pickSubchannel(PickSubchannelArgs args) {
|
||||||
|
return PickResult.withError(error);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return MoreObjects.toStringHelper(ErrorPicker.class).add("error", error).toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
helper.updateBalancingState(
|
helper.updateBalancingState(
|
||||||
ConnectivityState.TRANSIENT_FAILURE,
|
ConnectivityState.TRANSIENT_FAILURE,
|
||||||
new SubchannelPicker() {
|
new ErrorPicker());
|
||||||
@Override
|
|
||||||
public PickResult pickSubchannel(PickSubchannelArgs args) {
|
|
||||||
return PickResult.withError(error);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ import static io.grpc.ConnectivityState.SHUTDOWN;
|
||||||
import static io.grpc.ConnectivityState.TRANSIENT_FAILURE;
|
import static io.grpc.ConnectivityState.TRANSIENT_FAILURE;
|
||||||
|
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
|
import com.google.common.base.MoreObjects;
|
||||||
import com.google.common.base.Objects;
|
import com.google.common.base.Objects;
|
||||||
import com.google.common.base.Preconditions;
|
import com.google.common.base.Preconditions;
|
||||||
|
|
||||||
|
|
@ -428,6 +429,11 @@ final class RoundRobinLoadBalancer extends LoadBalancer {
|
||||||
return PickResult.withSubchannel(subchannel != null ? subchannel : nextSubchannel());
|
return PickResult.withSubchannel(subchannel != null ? subchannel : nextSubchannel());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return MoreObjects.toStringHelper(ReadyPicker.class).add("list", list).toString();
|
||||||
|
}
|
||||||
|
|
||||||
private Subchannel nextSubchannel() {
|
private Subchannel nextSubchannel() {
|
||||||
int size = list.size();
|
int size = list.size();
|
||||||
int i = indexUpdater.incrementAndGet(this);
|
int i = indexUpdater.incrementAndGet(this);
|
||||||
|
|
@ -476,6 +482,11 @@ final class RoundRobinLoadBalancer extends LoadBalancer {
|
||||||
return picker instanceof EmptyPicker && (Objects.equal(status, ((EmptyPicker) picker).status)
|
return picker instanceof EmptyPicker && (Objects.equal(status, ((EmptyPicker) picker).status)
|
||||||
|| (status.isOk() && ((EmptyPicker) picker).status.isOk()));
|
|| (status.isOk() && ((EmptyPicker) picker).status.isOk()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return MoreObjects.toStringHelper(EmptyPicker.class).add("status", status).toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -2862,7 +2862,7 @@ public class ManagedChannelImplTest {
|
||||||
timer.forwardNanos(1234);
|
timer.forwardNanos(1234);
|
||||||
updateBalancingStateSafely(helper, CONNECTING, mockPicker);
|
updateBalancingStateSafely(helper, CONNECTING, mockPicker);
|
||||||
assertThat(getStats(channel).channelTrace.events).contains(new ChannelTrace.Event.Builder()
|
assertThat(getStats(channel).channelTrace.events).contains(new ChannelTrace.Event.Builder()
|
||||||
.setDescription("Entering CONNECTING state")
|
.setDescription("Entering CONNECTING state with picker: mockPicker")
|
||||||
.setSeverity(ChannelTrace.Event.Severity.CT_INFO)
|
.setSeverity(ChannelTrace.Event.Severity.CT_INFO)
|
||||||
.setTimestampNanos(timer.getTicker().read())
|
.setTimestampNanos(timer.getTicker().read())
|
||||||
.build());
|
.build());
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ import static io.grpc.ConnectivityState.SHUTDOWN;
|
||||||
import static io.grpc.ConnectivityState.TRANSIENT_FAILURE;
|
import static io.grpc.ConnectivityState.TRANSIENT_FAILURE;
|
||||||
|
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
|
import com.google.common.base.MoreObjects;
|
||||||
import com.google.common.base.Objects;
|
import com.google.common.base.Objects;
|
||||||
import com.google.common.base.Stopwatch;
|
import com.google.common.base.Stopwatch;
|
||||||
import com.google.protobuf.util.Durations;
|
import com.google.protobuf.util.Durations;
|
||||||
|
|
@ -1051,5 +1052,12 @@ final class GrpclbState {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return MoreObjects.toStringHelper(RoundRobinPicker.class)
|
||||||
|
.add("dropList", dropList)
|
||||||
|
.add("pickList", pickList)
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -413,6 +413,13 @@ final class ClientLoadCounter {
|
||||||
ClientStreamTracer.Factory originFactory) {
|
ClientStreamTracer.Factory originFactory) {
|
||||||
return new LoadRecordingStreamTracerFactory(counter, originFactory);
|
return new LoadRecordingStreamTracerFactory(counter, originFactory);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return MoreObjects.toStringHelper(LoadRecordingSubchannelPicker.class)
|
||||||
|
.add("delegate", delegate)
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -445,5 +452,12 @@ final class ClientLoadCounter {
|
||||||
ClientStreamTracer.Factory originFactory) {
|
ClientStreamTracer.Factory originFactory) {
|
||||||
return orcaPerRequestUtil.newOrcaClientStreamTracerFactory(originFactory, listener);
|
return orcaPerRequestUtil.newOrcaClientStreamTracerFactory(originFactory, listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return MoreObjects.toStringHelper(MetricsObservingSubchannelPicker.class)
|
||||||
|
.add("delegate", delegate)
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue