/
edssubscriber.go
63 lines (58 loc) · 2.32 KB
/
edssubscriber.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package v2
import (
"errors"
envoy_api_v2 "github.com/envoyproxy/go-control-plane/envoy/api/v2"
envoy_api_v2_core1 "github.com/envoyproxy/go-control-plane/envoy/api/v2/core"
ads "github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2"
"mosn.io/mosn/pkg/log"
"mosn.io/mosn/pkg/types"
)
func (c *ADSClient) reqEndpoints(streamClient ads.AggregatedDiscoveryService_StreamAggregatedResourcesClient, clusterNames []string) error {
if streamClient == nil {
return errors.New("stream client is nil")
}
err := streamClient.Send(&envoy_api_v2.DiscoveryRequest{
VersionInfo: "",
ResourceNames: clusterNames,
TypeUrl: "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment",
ResponseNonce: "",
ErrorDetail: nil,
Node: &envoy_api_v2_core1.Node{
Id: types.GetGlobalXdsInfo().ServiceNode,
Cluster: types.GetGlobalXdsInfo().ServiceCluster,
Metadata: types.GetGlobalXdsInfo().Metadata,
},
})
if err != nil {
log.DefaultLogger.Errorf("get endpoints fail: %v", err)
return err
}
return nil
}
func (c *ADSClient) handleEndpointsResp(resp *envoy_api_v2.DiscoveryResponse) []*envoy_api_v2.ClusterLoadAssignment {
lbAssignments := make([]*envoy_api_v2.ClusterLoadAssignment, 0, len(resp.Resources))
for _, res := range resp.Resources {
lbAssignment := envoy_api_v2.ClusterLoadAssignment{}
if err := lbAssignment.Unmarshal(res.GetValue()); err != nil {
log.DefaultLogger.Errorf("ADSClient unmarshal lbAssignment fail: %v", err)
}
lbAssignments = append(lbAssignments, &lbAssignment)
}
return lbAssignments
}