mirror of https://github.com/grpc/grpc-node.git
				
				
				
			gts fix
This commit is contained in:
		
							parent
							
								
									265b39b6de
								
							
						
					
					
						commit
						6e202e0b53
					
				| 
						 | 
				
			
			@ -20,10 +20,7 @@ import {
 | 
			
		|||
  ChannelControlHelper,
 | 
			
		||||
  createLoadBalancer,
 | 
			
		||||
} from './load-balancer';
 | 
			
		||||
import {
 | 
			
		||||
  SubchannelAddress,
 | 
			
		||||
  Subchannel,
 | 
			
		||||
} from './subchannel';
 | 
			
		||||
import { SubchannelAddress, Subchannel } from './subchannel';
 | 
			
		||||
import { LoadBalancingConfig } from './load-balancing-config';
 | 
			
		||||
import { ChannelOptions } from './channel-options';
 | 
			
		||||
import { ConnectivityState } from './channel';
 | 
			
		||||
| 
						 | 
				
			
			@ -38,8 +35,14 @@ export class ChildLoadBalancerHandler implements LoadBalancer {
 | 
			
		|||
  private ChildPolicyHelper = class {
 | 
			
		||||
    private child: LoadBalancer | null = null;
 | 
			
		||||
    constructor(private parent: ChildLoadBalancerHandler) {}
 | 
			
		||||
    createSubchannel(subchannelAddress: SubchannelAddress, subchannelArgs: ChannelOptions): Subchannel {
 | 
			
		||||
      return this.parent.channelControlHelper.createSubchannel(subchannelAddress, subchannelArgs);
 | 
			
		||||
    createSubchannel(
 | 
			
		||||
      subchannelAddress: SubchannelAddress,
 | 
			
		||||
      subchannelArgs: ChannelOptions
 | 
			
		||||
    ): Subchannel {
 | 
			
		||||
      return this.parent.channelControlHelper.createSubchannel(
 | 
			
		||||
        subchannelAddress,
 | 
			
		||||
        subchannelArgs
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
    updateState(connectivityState: ConnectivityState, picker: Picker): void {
 | 
			
		||||
      if (this.calledByPendingChild()) {
 | 
			
		||||
| 
						 | 
				
			
			@ -69,7 +72,7 @@ export class ChildLoadBalancerHandler implements LoadBalancer {
 | 
			
		|||
    private calledByCurrentChild(): boolean {
 | 
			
		||||
      return this.child === this.parent.currentChild;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  constructor(private readonly channelControlHelper: ChannelControlHelper) {}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -79,12 +82,19 @@ export class ChildLoadBalancerHandler implements LoadBalancer {
 | 
			
		|||
   * @param lbConfig
 | 
			
		||||
   * @param attributes
 | 
			
		||||
   */
 | 
			
		||||
  updateAddressList(addressList: SubchannelAddress[], lbConfig: LoadBalancingConfig | null, attributes: { [key: string]: unknown; }): void {
 | 
			
		||||
  updateAddressList(
 | 
			
		||||
    addressList: SubchannelAddress[],
 | 
			
		||||
    lbConfig: LoadBalancingConfig | null,
 | 
			
		||||
    attributes: { [key: string]: unknown }
 | 
			
		||||
  ): void {
 | 
			
		||||
    if (lbConfig === null) {
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
    let childToUpdate: LoadBalancer;
 | 
			
		||||
    if (this.currentChild === null || this.currentChild.getTypeName() !== lbConfig.name) {
 | 
			
		||||
    if (
 | 
			
		||||
      this.currentChild === null ||
 | 
			
		||||
      this.currentChild.getTypeName() !== lbConfig.name
 | 
			
		||||
    ) {
 | 
			
		||||
      const newHelper = new this.ChildPolicyHelper(this);
 | 
			
		||||
      const newChild = createLoadBalancer(lbConfig.name, newHelper)!;
 | 
			
		||||
      newHelper.setChild(newChild);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -123,7 +123,9 @@ export function isLoadBalancerNameRegistered(typeName: string): boolean {
 | 
			
		|||
  return typeName in registeredLoadBalancerTypes;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function getFirstUsableConfig(configs: LoadBalancingConfig[]): LoadBalancingConfig | null {
 | 
			
		||||
export function getFirstUsableConfig(
 | 
			
		||||
  configs: LoadBalancingConfig[]
 | 
			
		||||
): LoadBalancingConfig | null {
 | 
			
		||||
  for (const config of configs) {
 | 
			
		||||
    if (config.name in registeredLoadBalancerTypes) {
 | 
			
		||||
      return config;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -73,21 +73,34 @@ export interface PriorityLoadBalancingConfig {
 | 
			
		|||
  priority: PriorityLbConfig;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export type LoadBalancingConfig = PickFirstLoadBalancingConfig | RoundRobinLoadBalancingConfig | XdsLoadBalancingConfig | GrpcLbLoadBalancingConfig | PriorityLoadBalancingConfig;
 | 
			
		||||
export type LoadBalancingConfig =
 | 
			
		||||
  | PickFirstLoadBalancingConfig
 | 
			
		||||
  | RoundRobinLoadBalancingConfig
 | 
			
		||||
  | XdsLoadBalancingConfig
 | 
			
		||||
  | GrpcLbLoadBalancingConfig
 | 
			
		||||
  | PriorityLoadBalancingConfig;
 | 
			
		||||
 | 
			
		||||
export function isRoundRobinLoadBalancingConfig(lbconfig: LoadBalancingConfig): lbconfig is RoundRobinLoadBalancingConfig {
 | 
			
		||||
export function isRoundRobinLoadBalancingConfig(
 | 
			
		||||
  lbconfig: LoadBalancingConfig
 | 
			
		||||
): lbconfig is RoundRobinLoadBalancingConfig {
 | 
			
		||||
  return lbconfig.name === 'round_robin';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function isXdsLoadBalancingConfig(lbconfig: LoadBalancingConfig): lbconfig is XdsLoadBalancingConfig {
 | 
			
		||||
export function isXdsLoadBalancingConfig(
 | 
			
		||||
  lbconfig: LoadBalancingConfig
 | 
			
		||||
): lbconfig is XdsLoadBalancingConfig {
 | 
			
		||||
  return lbconfig.name === 'xds';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function isGrpcLbLoadBalancingConfig(lbconfig: LoadBalancingConfig): lbconfig is GrpcLbLoadBalancingConfig {
 | 
			
		||||
export function isGrpcLbLoadBalancingConfig(
 | 
			
		||||
  lbconfig: LoadBalancingConfig
 | 
			
		||||
): lbconfig is GrpcLbLoadBalancingConfig {
 | 
			
		||||
  return lbconfig.name === 'grpclb';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function isPriorityLoadBalancingConfig(lbconfig: LoadBalancingConfig): lbconfig is PriorityLoadBalancingConfig {
 | 
			
		||||
export function isPriorityLoadBalancingConfig(
 | 
			
		||||
  lbconfig: LoadBalancingConfig
 | 
			
		||||
): lbconfig is PriorityLoadBalancingConfig {
 | 
			
		||||
  return lbconfig.name === 'priority';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -146,7 +159,7 @@ export function validateConfig(obj: any): LoadBalancingConfig {
 | 
			
		|||
    if (obj['round_robin'] instanceof Object) {
 | 
			
		||||
      return {
 | 
			
		||||
        name: 'round_robin',
 | 
			
		||||
        round_robin: {} 
 | 
			
		||||
        round_robin: {},
 | 
			
		||||
      };
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			@ -156,13 +169,13 @@ export function validateConfig(obj: any): LoadBalancingConfig {
 | 
			
		|||
    }
 | 
			
		||||
    return {
 | 
			
		||||
      name: 'xds',
 | 
			
		||||
      xds: validateXdsConfig(obj.xds)
 | 
			
		||||
      xds: validateXdsConfig(obj.xds),
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
  if ('grpclb' in obj) {
 | 
			
		||||
    return {
 | 
			
		||||
      name: 'grpclb',
 | 
			
		||||
      grpclb: validateGrpcLbConfig(obj.grpclb)
 | 
			
		||||
      grpclb: validateGrpcLbConfig(obj.grpclb),
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
  throw new Error('No recognized load balancing policy configured');
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -95,7 +95,9 @@ export class ResolvingLoadBalancer implements LoadBalancer {
 | 
			
		|||
  ) {
 | 
			
		||||
    this.updateState(ConnectivityState.IDLE, new QueuePicker(this));
 | 
			
		||||
    this.childLoadBalancer = new ChildLoadBalancerHandler({
 | 
			
		||||
      createSubchannel: channelControlHelper.createSubchannel.bind(channelControlHelper),
 | 
			
		||||
      createSubchannel: channelControlHelper.createSubchannel.bind(
 | 
			
		||||
        channelControlHelper
 | 
			
		||||
      ),
 | 
			
		||||
      requestReresolution: () => {
 | 
			
		||||
        /* If the backoffTimeout is running, we're still backing off from
 | 
			
		||||
         * making resolve requests, so we shouldn't make another one here.
 | 
			
		||||
| 
						 | 
				
			
			@ -111,7 +113,7 @@ export class ResolvingLoadBalancer implements LoadBalancer {
 | 
			
		|||
        this.latestChildState = newState;
 | 
			
		||||
        this.latestChildPicker = picker;
 | 
			
		||||
        this.updateState(newState, picker);
 | 
			
		||||
      }
 | 
			
		||||
      },
 | 
			
		||||
    });
 | 
			
		||||
    this.innerResolver = createResolver(target, {
 | 
			
		||||
      onSuccessfulResolution: (
 | 
			
		||||
| 
						 | 
				
			
			@ -152,11 +154,12 @@ export class ResolvingLoadBalancer implements LoadBalancer {
 | 
			
		|||
          workingServiceConfig = serviceConfig;
 | 
			
		||||
          this.previousServiceConfig = serviceConfig;
 | 
			
		||||
        }
 | 
			
		||||
        const workingConfigList = workingServiceConfig?.loadBalancingConfig ?? [];
 | 
			
		||||
        const workingConfigList =
 | 
			
		||||
          workingServiceConfig?.loadBalancingConfig ?? [];
 | 
			
		||||
        if (workingConfigList.length === 0) {
 | 
			
		||||
          workingConfigList.push({
 | 
			
		||||
            name: 'pick_first',
 | 
			
		||||
            pick_first: {}
 | 
			
		||||
            pick_first: {},
 | 
			
		||||
          });
 | 
			
		||||
        }
 | 
			
		||||
        const loadBalancingConfig = getFirstUsableConfig(workingConfigList);
 | 
			
		||||
| 
						 | 
				
			
			@ -170,7 +173,11 @@ export class ResolvingLoadBalancer implements LoadBalancer {
 | 
			
		|||
          });
 | 
			
		||||
          return;
 | 
			
		||||
        }
 | 
			
		||||
        this.childLoadBalancer.updateAddressList(addressList, loadBalancingConfig, attributes);
 | 
			
		||||
        this.childLoadBalancer.updateAddressList(
 | 
			
		||||
          addressList,
 | 
			
		||||
          loadBalancingConfig,
 | 
			
		||||
          attributes
 | 
			
		||||
        );
 | 
			
		||||
      },
 | 
			
		||||
      onError: (error: StatusObject) => {
 | 
			
		||||
        this.handleResolutionFailure(error);
 | 
			
		||||
| 
						 | 
				
			
			@ -182,7 +189,7 @@ export class ResolvingLoadBalancer implements LoadBalancer {
 | 
			
		|||
        this.updateResolution();
 | 
			
		||||
        this.continueResolving = false;
 | 
			
		||||
      } else {
 | 
			
		||||
        this.updateState(this.latestChildState, this.latestChildPicker)
 | 
			
		||||
        this.updateState(this.latestChildState, this.latestChildPicker);
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue