mirror of https://github.com/grpc/grpc-java.git
xds: let ChannelLogger log more useful information
This commit is contained in:
parent
8e59a2d1e5
commit
0b27e2862d
|
|
@ -20,6 +20,7 @@ import static com.google.common.base.Preconditions.checkArgument;
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
|
import com.google.common.base.MoreObjects;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import io.grpc.LoadBalancer.PickResult;
|
import io.grpc.LoadBalancer.PickResult;
|
||||||
import io.grpc.LoadBalancer.PickSubchannelArgs;
|
import io.grpc.LoadBalancer.PickSubchannelArgs;
|
||||||
|
|
@ -51,6 +52,14 @@ final class InterLocalityPicker extends SubchannelPicker {
|
||||||
SubchannelPicker getPicker() {
|
SubchannelPicker getPicker() {
|
||||||
return childPicker;
|
return childPicker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return MoreObjects.toStringHelper(this)
|
||||||
|
.add("weight", weight)
|
||||||
|
.add("childPicker", childPicker)
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
InterLocalityPicker(List<WeightedChildPicker> weightedChildPickers) {
|
InterLocalityPicker(List<WeightedChildPicker> weightedChildPickers) {
|
||||||
|
|
@ -99,4 +108,12 @@ final class InterLocalityPicker extends SubchannelPicker {
|
||||||
|
|
||||||
return childPicker.pickSubchannel(args);
|
return childPicker.pickSubchannel(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return MoreObjects.toStringHelper(this)
|
||||||
|
.add("weightedChildPickers", weightedChildPickers)
|
||||||
|
.add("totalWeight", totalWeight)
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,6 @@ 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.MoreObjects;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import io.grpc.ChannelLogger.ChannelLogLevel;
|
|
||||||
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 +134,14 @@ interface LocalityStore {
|
||||||
}
|
}
|
||||||
return delegate.pickSubchannel(args);
|
return delegate.pickSubchannel(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return MoreObjects.toStringHelper(this)
|
||||||
|
.add("dropOverloads", dropOverloads)
|
||||||
|
.add("delegate", delegate)
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final PickerFactory pickerFactoryImpl =
|
private static final PickerFactory pickerFactoryImpl =
|
||||||
|
|
@ -324,8 +331,6 @@ interface LocalityStore {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state != null) {
|
if (state != null) {
|
||||||
helper.getChannelLogger().log(
|
|
||||||
ChannelLogLevel.INFO, "Picker updated - state: {0}, picker: {1}", state, picker);
|
|
||||||
helper.updateBalancingState(state, picker);
|
helper.updateBalancingState(state, picker);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -385,6 +390,14 @@ interface LocalityStore {
|
||||||
public PickResult pickSubchannel(PickSubchannelArgs args) {
|
public PickResult pickSubchannel(PickSubchannelArgs args) {
|
||||||
return statsStore.interceptPickResult(delegate.pickSubchannel(args), locality);
|
return statsStore.interceptPickResult(delegate.pickSubchannel(args), locality);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return MoreObjects.toStringHelper(this)
|
||||||
|
.add("delegate", delegate)
|
||||||
|
.add("locality", locality)
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
currentChildState = newState;
|
currentChildState = newState;
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,7 @@ import io.envoyproxy.envoy.api.v2.endpoint.LocalityLbEndpoints;
|
||||||
import io.envoyproxy.envoy.service.discovery.v2.AggregatedDiscoveryServiceGrpc;
|
import io.envoyproxy.envoy.service.discovery.v2.AggregatedDiscoveryServiceGrpc;
|
||||||
import io.envoyproxy.envoy.type.FractionalPercent;
|
import io.envoyproxy.envoy.type.FractionalPercent;
|
||||||
import io.envoyproxy.envoy.type.FractionalPercent.DenominatorType;
|
import io.envoyproxy.envoy.type.FractionalPercent.DenominatorType;
|
||||||
|
import io.grpc.ChannelLogger.ChannelLogLevel;
|
||||||
import io.grpc.EquivalentAddressGroup;
|
import io.grpc.EquivalentAddressGroup;
|
||||||
import io.grpc.LoadBalancer.Helper;
|
import io.grpc.LoadBalancer.Helper;
|
||||||
import io.grpc.ManagedChannel;
|
import io.grpc.ManagedChannel;
|
||||||
|
|
@ -195,6 +196,9 @@ final class XdsComms {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
helper.getChannelLogger().log(
|
||||||
|
ChannelLogLevel.DEBUG,
|
||||||
|
"Received an EDS response: {0}", clusterLoadAssignment);
|
||||||
if (!firstEdsResponseReceived) {
|
if (!firstEdsResponseReceived) {
|
||||||
firstEdsResponseReceived = true;
|
firstEdsResponseReceived = true;
|
||||||
adsStreamCallback.onWorking();
|
adsStreamCallback.onWorking();
|
||||||
|
|
@ -277,7 +281,7 @@ final class XdsComms {
|
||||||
this.localityStore = localityStore;
|
this.localityStore = localityStore;
|
||||||
|
|
||||||
// Assuming standard mode, and send EDS request only
|
// Assuming standard mode, and send EDS request only
|
||||||
xdsRequestWriter.onNext(
|
DiscoveryRequest edsRequest =
|
||||||
DiscoveryRequest.newBuilder()
|
DiscoveryRequest.newBuilder()
|
||||||
.setNode(Node.newBuilder()
|
.setNode(Node.newBuilder()
|
||||||
.setMetadata(Struct.newBuilder()
|
.setMetadata(Struct.newBuilder()
|
||||||
|
|
@ -288,7 +292,9 @@ final class XdsComms {
|
||||||
.putFields(
|
.putFields(
|
||||||
"endpoints_required",
|
"endpoints_required",
|
||||||
Value.newBuilder().setBoolValue(true).build())))
|
Value.newBuilder().setBoolValue(true).build())))
|
||||||
.setTypeUrl(EDS_TYPE_URL).build());
|
.setTypeUrl(EDS_TYPE_URL).build();
|
||||||
|
helper.getChannelLogger().log(ChannelLogLevel.DEBUG, "Sending EDS request {0}", edsRequest);
|
||||||
|
xdsRequestWriter.onNext(edsRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
AdsStream(AdsStream adsStream) {
|
AdsStream(AdsStream adsStream) {
|
||||||
|
|
|
||||||
|
|
@ -81,6 +81,7 @@ class XdsLbState {
|
||||||
if (xdsComms != null) {
|
if (xdsComms != null) {
|
||||||
xdsComms.refreshAdsStream();
|
xdsComms.refreshAdsStream();
|
||||||
} else {
|
} else {
|
||||||
|
// TODO(zdapeng): pass a helper that has the right ChannelLogger for the oobChannel
|
||||||
xdsComms = new XdsComms(channel, helper, adsStreamCallback, localityStore);
|
xdsComms = new XdsComms(channel, helper, adsStreamCallback, localityStore);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -158,6 +158,8 @@ final class XdsLoadBalancer extends LoadBalancer {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!fallbackManager.isInFallbackMode()) {
|
if (!fallbackManager.isInFallbackMode()) {
|
||||||
|
delegate.getChannelLogger().log(
|
||||||
|
ChannelLogLevel.INFO, "Picker updated - state: {0}, picker: {1}", newState, newPicker);
|
||||||
delegate.updateBalancingState(newState, newPicker);
|
delegate.updateBalancingState(newState, newPicker);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -349,6 +351,8 @@ final class XdsLoadBalancer extends LoadBalancer {
|
||||||
void cancelFallback() {
|
void cancelFallback() {
|
||||||
cancelFallbackTimer();
|
cancelFallbackTimer();
|
||||||
if (fallbackBalancer != null) {
|
if (fallbackBalancer != null) {
|
||||||
|
helper.getChannelLogger().log(
|
||||||
|
ChannelLogLevel.INFO, "Shutting down XDS fallback balancer");
|
||||||
fallbackBalancer.shutdown();
|
fallbackBalancer.shutdown();
|
||||||
fallbackBalancer = null;
|
fallbackBalancer = null;
|
||||||
}
|
}
|
||||||
|
|
@ -362,7 +366,7 @@ final class XdsLoadBalancer extends LoadBalancer {
|
||||||
cancelFallbackTimer();
|
cancelFallbackTimer();
|
||||||
|
|
||||||
helper.getChannelLogger().log(
|
helper.getChannelLogger().log(
|
||||||
ChannelLogLevel.INFO, "Using fallback policy");
|
ChannelLogLevel.INFO, "Using XDS fallback policy");
|
||||||
|
|
||||||
final class FallbackBalancerHelper extends ForwardingLoadBalancerHelper {
|
final class FallbackBalancerHelper extends ForwardingLoadBalancerHelper {
|
||||||
LoadBalancer balancer;
|
LoadBalancer balancer;
|
||||||
|
|
@ -374,6 +378,9 @@ final class XdsLoadBalancer extends LoadBalancer {
|
||||||
// ignore updates from a misbehaving shutdown fallback balancer
|
// ignore updates from a misbehaving shutdown fallback balancer
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
helper.getChannelLogger().log(
|
||||||
|
ChannelLogLevel.INFO,
|
||||||
|
"Picker updated - state: {0}, picker: {1}", newState, newPicker);
|
||||||
super.updateBalancingState(newState, newPicker);
|
super.updateBalancingState(newState, newPicker);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.mockito.Mockito.doReturn;
|
import static org.mockito.Mockito.doReturn;
|
||||||
import static org.mockito.Mockito.inOrder;
|
import static org.mockito.Mockito.inOrder;
|
||||||
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.never;
|
||||||
import static org.mockito.Mockito.times;
|
import static org.mockito.Mockito.times;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
|
|
@ -43,6 +44,7 @@ import io.envoyproxy.envoy.api.v2.endpoint.LocalityLbEndpoints;
|
||||||
import io.envoyproxy.envoy.service.discovery.v2.AggregatedDiscoveryServiceGrpc.AggregatedDiscoveryServiceImplBase;
|
import io.envoyproxy.envoy.service.discovery.v2.AggregatedDiscoveryServiceGrpc.AggregatedDiscoveryServiceImplBase;
|
||||||
import io.envoyproxy.envoy.type.FractionalPercent;
|
import io.envoyproxy.envoy.type.FractionalPercent;
|
||||||
import io.envoyproxy.envoy.type.FractionalPercent.DenominatorType;
|
import io.envoyproxy.envoy.type.FractionalPercent.DenominatorType;
|
||||||
|
import io.grpc.ChannelLogger;
|
||||||
import io.grpc.LoadBalancer;
|
import io.grpc.LoadBalancer;
|
||||||
import io.grpc.LoadBalancer.Helper;
|
import io.grpc.LoadBalancer.Helper;
|
||||||
import io.grpc.LoadBalancerProvider;
|
import io.grpc.LoadBalancerProvider;
|
||||||
|
|
@ -146,6 +148,7 @@ public class XdsCommsTest {
|
||||||
cleanupRule.register(InProcessChannelBuilder.forName(serverName).directExecutor().build());
|
cleanupRule.register(InProcessChannelBuilder.forName(serverName).directExecutor().build());
|
||||||
doReturn("fake_authority").when(helper).getAuthority();
|
doReturn("fake_authority").when(helper).getAuthority();
|
||||||
doReturn(syncContext).when(helper).getSynchronizationContext();
|
doReturn(syncContext).when(helper).getSynchronizationContext();
|
||||||
|
doReturn(mock(ChannelLogger.class)).when(helper).getChannelLogger();
|
||||||
lbRegistry.register(new LoadBalancerProvider() {
|
lbRegistry.register(new LoadBalancerProvider() {
|
||||||
@Override
|
@Override
|
||||||
public boolean isAvailable() {
|
public boolean isAvailable() {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue