gitee.com/ks-custle/core-gm@v0.0.0-20230922171213-b83bdd97b62c/grpc/xds/internal/xdsclient/loadreport.go (about)

     1  /*
     2   *
     3   * Copyright 2019 gRPC authors.
     4   *
     5   * Licensed under the Apache License, Version 2.0 (the "License");
     6   * you may not use this file except in compliance with the License.
     7   * You may obtain a copy of the License at
     8   *
     9   *     http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    16   */
    17  
    18  package xdsclient
    19  
    20  import (
    21  	"gitee.com/ks-custle/core-gm/grpc/xds/internal/xdsclient/load"
    22  	"gitee.com/ks-custle/core-gm/grpc/xds/internal/xdsclient/xdsresource"
    23  )
    24  
    25  // ReportLoad starts an load reporting stream to the given server. If the server
    26  // is not an empty string, and is different from the management server, a new
    27  // ClientConn will be created.
    28  //
    29  // The same options used for creating the Client will be used (including
    30  // NodeProto, and dial options if necessary).
    31  //
    32  // It returns a Store for the user to report loads, a function to cancel the
    33  // load reporting stream.
    34  func (c *clientImpl) ReportLoad(server string) (*load.Store, func()) {
    35  	// TODO: load reporting with federation also needs find the authority for
    36  	// this server first, then reports load to it. Currently always report to
    37  	// the default authority. This is needed to avoid a nil pointer panic.
    38  	a, unref, err := c.findAuthority(xdsresource.ParseName(""))
    39  	if err != nil {
    40  		return nil, func() {}
    41  	}
    42  	store, cancelF := a.reportLoad(server)
    43  	return store, func() {
    44  		cancelF()
    45  		unref()
    46  	}
    47  }