all: log picker when updating balancing state

Let `ManagedChannelImpl` log picker update when updating balancing state.
This commit is contained in:
ZHANG Dapeng 2020-01-28 09:55:04 -08:00 committed by GitHub
parent 14e63fea61
commit 1ed538f253
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 100 additions and 22 deletions

View File

@ -432,6 +432,11 @@ public final class AutoConfiguredLoadBalancerFactory {
public PickResult pickSubchannel(PickSubchannelArgs args) {
return PickResult.withNoResult();
}
@Override
public String toString() {
return MoreObjects.toStringHelper(EmptyPicker.class).toString();
}
}
private static final class FailingPicker extends SubchannelPicker {

View File

@ -812,6 +812,13 @@ final class ManagedChannelImpl extends ManagedChannel implements
public PickResult pickSubchannel(PickSubchannelArgs args) {
return panicPickResult;
}
@Override
public String toString() {
return MoreObjects.toStringHelper(PanicSubchannelPicker.class)
.add("panicPickResult", panicPickResult)
.toString();
}
}
updateSubchannelPicker(new PanicSubchannelPicker());
@ -1146,7 +1153,8 @@ final class ManagedChannelImpl extends ManagedChannel implements
// It's not appropriate to report SHUTDOWN state from lb.
// Ignore the case of newState == SHUTDOWN for now.
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);
}
}

View File

@ -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);
@Override
public PickResult pickSubchannel(PickSubchannelArgs args) {
return result;
}
};
@Override
public String toString() {
return MoreObjects.toStringHelper(OobSubchannelPicker.class)
.add("result", result)
.toString();
}
}
subchannelPicker = new OobSubchannelPicker();
delayedTransport.reprocess(subchannelPicker);
}
@ -253,14 +262,23 @@ final class OobChannel extends ManagedChannel implements InternalInstrumented<Ch
delayedTransport.reprocess(subchannelPicker);
break;
case TRANSIENT_FAILURE:
delayedTransport.reprocess(new SubchannelPicker() {
final class OobErrorPicker extends SubchannelPicker {
final PickResult errorResult = PickResult.withError(newState.getStatus());
@Override
public PickResult pickSubchannel(PickSubchannelArgs args) {
return errorResult;
}
});
@Override
public String toString() {
return MoreObjects.toStringHelper(OobErrorPicker.class)
.add("errorResult", errorResult)
.toString();
}
}
delayedTransport.reprocess(new OobErrorPicker());
break;
default:
// Do nothing

View File

@ -21,6 +21,7 @@ import static io.grpc.ConnectivityState.CONNECTING;
import static io.grpc.ConnectivityState.SHUTDOWN;
import static io.grpc.ConnectivityState.TRANSIENT_FAILURE;
import com.google.common.base.MoreObjects;
import io.grpc.ConnectivityState;
import io.grpc.ConnectivityStateInfo;
import io.grpc.EquivalentAddressGroup;
@ -135,6 +136,11 @@ final class PickFirstLoadBalancer extends LoadBalancer {
public PickResult pickSubchannel(PickSubchannelArgs args) {
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. */

View File

@ -20,6 +20,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.MoreObjects;
import io.grpc.ConnectivityState;
import io.grpc.ConnectivityStateInfo;
import io.grpc.ExperimentalApi;
@ -56,14 +57,21 @@ public final class GracefulSwitchLoadBalancer extends ForwardingLoadBalancer {
@Override
public void handleNameResolutionError(final Status error) {
helper.updateBalancingState(
ConnectivityState.TRANSIENT_FAILURE,
new SubchannelPicker() {
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(
ConnectivityState.TRANSIENT_FAILURE,
new ErrorPicker());
}
@Override

View File

@ -24,6 +24,7 @@ import static io.grpc.ConnectivityState.SHUTDOWN;
import static io.grpc.ConnectivityState.TRANSIENT_FAILURE;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.MoreObjects;
import com.google.common.base.Objects;
import com.google.common.base.Preconditions;
@ -428,6 +429,11 @@ final class RoundRobinLoadBalancer extends LoadBalancer {
return PickResult.withSubchannel(subchannel != null ? subchannel : nextSubchannel());
}
@Override
public String toString() {
return MoreObjects.toStringHelper(ReadyPicker.class).add("list", list).toString();
}
private Subchannel nextSubchannel() {
int size = list.size();
int i = indexUpdater.incrementAndGet(this);
@ -476,6 +482,11 @@ final class RoundRobinLoadBalancer extends LoadBalancer {
return picker instanceof EmptyPicker && (Objects.equal(status, ((EmptyPicker) picker).status)
|| (status.isOk() && ((EmptyPicker) picker).status.isOk()));
}
@Override
public String toString() {
return MoreObjects.toStringHelper(EmptyPicker.class).add("status", status).toString();
}
}
/**

View File

@ -2862,7 +2862,7 @@ public class ManagedChannelImplTest {
timer.forwardNanos(1234);
updateBalancingStateSafely(helper, CONNECTING, mockPicker);
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)
.setTimestampNanos(timer.getTicker().read())
.build());

View File

@ -26,6 +26,7 @@ import static io.grpc.ConnectivityState.SHUTDOWN;
import static io.grpc.ConnectivityState.TRANSIENT_FAILURE;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.MoreObjects;
import com.google.common.base.Objects;
import com.google.common.base.Stopwatch;
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();
}
}
}

View File

@ -413,6 +413,13 @@ final class ClientLoadCounter {
ClientStreamTracer.Factory 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) {
return orcaPerRequestUtil.newOrcaClientStreamTracerFactory(originFactory, listener);
}
@Override
public String toString() {
return MoreObjects.toStringHelper(MetricsObservingSubchannelPicker.class)
.add("delegate", delegate)
.toString();
}
}
}