dubbo.apache.org/dubbo-go/v3@v3.1.1/xds/client/loadreport.go (about)

     1  /*
     2   * Licensed to the Apache Software Foundation (ASF) under one or more
     3   * contributor license agreements.  See the NOTICE file distributed with
     4   * this work for additional information regarding copyright ownership.
     5   * The ASF licenses this file to You under the Apache License, Version 2.0
     6   * (the "License"); you may not use this file except in compliance with
     7   * the License.  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  /*
    19   *
    20   * Copyright 2019 gRPC authors.
    21   *
    22   */
    23  
    24  package client
    25  
    26  import (
    27  	"dubbo.apache.org/dubbo-go/v3/xds/client/load"
    28  	"dubbo.apache.org/dubbo-go/v3/xds/client/resource"
    29  )
    30  
    31  // ReportLoad starts an load reporting stream to the given server. If the server
    32  // is not an empty string, and is different from the management server, a new
    33  // ClientConn will be created.
    34  //
    35  // The same options used for creating the Client will be used (including
    36  // NodeProto, and dial options if necessary).
    37  //
    38  // It returns a Store for the user to report loads, a function to cancel the
    39  // load reporting stream.
    40  func (c *clientImpl) ReportLoad(server string) (*load.Store, func()) {
    41  	// TODO: load reporting with federation also needs find the authority for
    42  	// this server first, then reports load to it. Currently always report to
    43  	// the default authority. This is needed to avoid a nil pointer panic.
    44  	a, unref, err := c.findAuthority(resource.ParseName(""))
    45  	if err != nil {
    46  		return nil, func() {}
    47  	}
    48  	store, cancelF := a.reportLoad(server)
    49  	return store, func() {
    50  		cancelF()
    51  		unref()
    52  	}
    53  }