Skip to content

Commit fff8ff3

Browse files
authored
chore: Replace envoy xds v3 with dubbo xds v1 (#875)
1 parent fdcf1f5 commit fff8ff3

File tree

13 files changed

+125
-125
lines changed

13 files changed

+125
-125
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ jobs:
138138
uses: actions/checkout@v4
139139

140140
- name: Install Helm
141-
uses: azure/setup-helm@v3
141+
uses: azure/setup-helm@v1
142142
with:
143143
version: '3.13.0'
144144

dubbod/discovery/pkg/bootstrap/discovery.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import (
2222
"github.com/apache/dubbo-kubernetes/dubbod/discovery/pkg/networking/core"
2323
"github.com/apache/dubbo-kubernetes/dubbod/discovery/pkg/networking/grpcgen"
2424
"github.com/apache/dubbo-kubernetes/dubbod/discovery/pkg/xds"
25-
v3 "github.com/apache/dubbo-kubernetes/dubbod/discovery/pkg/xds/v3"
25+
v1 "github.com/apache/dubbo-kubernetes/dubbod/discovery/pkg/xds/v1"
2626
)
2727

2828
func InitGenerators(
@@ -32,19 +32,19 @@ func InitGenerators(
3232
env := s.Env
3333
generators := map[string]model.XdsResourceGenerator{}
3434
edsGen := &xds.EdsGenerator{Cache: s.Cache, EndpointIndex: env.EndpointIndex}
35-
generators[v3.ClusterType] = &xds.CdsGenerator{ConfigGenerator: cg}
36-
generators[v3.ListenerType] = &xds.LdsGenerator{ConfigGenerator: cg}
37-
generators[v3.RouteType] = &xds.RdsGenerator{ConfigGenerator: cg}
38-
generators[v3.EndpointType] = edsGen
35+
generators[v1.ClusterType] = &xds.CdsGenerator{ConfigGenerator: cg}
36+
generators[v1.ListenerType] = &xds.LdsGenerator{ConfigGenerator: cg}
37+
generators[v1.RouteType] = &xds.RdsGenerator{ConfigGenerator: cg}
38+
generators[v1.EndpointType] = edsGen
3939

4040
generators["grpc"] = &grpcgen.GrpcConfigGenerator{}
41-
generators["grpc/"+v3.EndpointType] = edsGen
42-
generators["grpc/"+v3.ListenerType] = generators["grpc"]
43-
generators["grpc/"+v3.RouteType] = generators["grpc"]
44-
generators["grpc/"+v3.ClusterType] = generators["grpc"]
41+
generators["grpc/"+v1.EndpointType] = edsGen
42+
generators["grpc/"+v1.ListenerType] = generators["grpc"]
43+
generators["grpc/"+v1.RouteType] = generators["grpc"]
44+
generators["grpc/"+v1.ClusterType] = generators["grpc"]
4545

4646
generators["api"] = apigen.NewGenerator(env.ConfigStore)
47-
generators["api/"+v3.EndpointType] = edsGen
47+
generators["api/"+v1.EndpointType] = edsGen
4848

4949
generators["event"] = xds.NewStatusGen(s)
5050
s.Generators = generators

dubbod/discovery/pkg/networking/grpcgen/cds.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import (
3030
"github.com/apache/dubbo-kubernetes/pkg/util/sets"
3131
cluster "github.com/dubbo-kubernetes/xds-api/cluster/v1"
3232
core "github.com/dubbo-kubernetes/xds-api/core/v1"
33-
tlsv3 "github.com/dubbo-kubernetes/xds-api/extensions/transport_sockets/tls/v1"
33+
tlsv1 "github.com/dubbo-kubernetes/xds-api/extensions/transport_sockets/tls/v1"
3434
)
3535

3636
type clusterBuilder struct {
@@ -393,13 +393,13 @@ func (b *clusterBuilder) applyTLSForCluster(c *cluster.Cluster, subset *networki
393393

394394
// buildUpstreamTLSContext builds an UpstreamTlsContext that conforms to gRPC xDS expectations,
395395
// reusing the common certificate-provider setup from buildCommonTLSContext.
396-
func (b *clusterBuilder) buildUpstreamTLSContext(c *cluster.Cluster, tlsSettings *networking.ClientTLSSettings) *tlsv3.UpstreamTlsContext {
396+
func (b *clusterBuilder) buildUpstreamTLSContext(c *cluster.Cluster, tlsSettings *networking.ClientTLSSettings) *tlsv1.UpstreamTlsContext {
397397
common := buildCommonTLSContext()
398398
if common == nil {
399399
return nil
400400
}
401401

402-
tlsContext := &tlsv3.UpstreamTlsContext{
402+
tlsContext := &tlsv1.UpstreamTlsContext{
403403
CommonTlsContext: common,
404404
}
405405
// SNI must be the service hostname, not the cluster name

dubbod/discovery/pkg/networking/grpcgen/grpcgen.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ package grpcgen
1818

1919
import (
2020
"github.com/apache/dubbo-kubernetes/dubbod/discovery/pkg/model"
21-
v3 "github.com/apache/dubbo-kubernetes/dubbod/discovery/pkg/xds/v3"
21+
v1 "github.com/apache/dubbo-kubernetes/dubbod/discovery/pkg/xds/v1"
2222
dubbolog "github.com/apache/dubbo-kubernetes/pkg/log"
23-
tlsv3 "github.com/dubbo-kubernetes/xds-api/extensions/transport_sockets/tls/v1"
23+
tlsv1 "github.com/dubbo-kubernetes/xds-api/extensions/transport_sockets/tls/v1"
2424
)
2525

2626
var log = dubbolog.RegisterScope("grpcgen", "xDS Generator for Proxyless gRPC")
@@ -37,14 +37,14 @@ func (g *GrpcConfigGenerator) Generate(proxy *model.Proxy, w *model.WatchedResou
3737
}
3838

3939
switch w.TypeUrl {
40-
case v3.ListenerType:
40+
case v1.ListenerType:
4141
// Pass requested names to BuildListeners to ensure consistent behavior
4242
// When requestedNames is empty (wildcard), BuildListeners generates all listeners
4343
// When requestedNames is non-empty, BuildListeners only generates requested listeners
4444
return g.BuildListeners(proxy, req.Push, requestedNames), model.DefaultXdsLogDetails, nil
45-
case v3.ClusterType:
45+
case v1.ClusterType:
4646
return g.BuildClusters(proxy, req.Push, requestedNames), model.DefaultXdsLogDetails, nil
47-
case v3.RouteType:
47+
case v1.RouteType:
4848
resources, logDetails := g.BuildHTTPRoutes(proxy, req, requestedNames)
4949
return resources, logDetails, nil
5050
}
@@ -55,25 +55,25 @@ func (g *GrpcConfigGenerator) Generate(proxy *model.Proxy, w *model.WatchedResou
5555
// buildCommonTLSContext creates a TLS context that matches gRPC xDS expectations.
5656
// - Uses certificate provider "default" for workload certs and root CA
5757
// - Does not configure explicit SAN matches (left to future hardening)
58-
func buildCommonTLSContext() *tlsv3.CommonTlsContext {
59-
return &tlsv3.CommonTlsContext{
58+
func buildCommonTLSContext() *tlsv1.CommonTlsContext {
59+
return &tlsv1.CommonTlsContext{
6060
// Workload certificate provider instance (SPIFFE workload cert chain)
61-
TlsCertificateCertificateProviderInstance: &tlsv3.CommonTlsContext_CertificateProviderInstance{
61+
TlsCertificateCertificateProviderInstance: &tlsv1.CommonTlsContext_CertificateProviderInstance{
6262
InstanceName: "default",
6363
CertificateName: "default",
6464
},
6565
// Root CA provider instance
66-
ValidationContextType: &tlsv3.CommonTlsContext_CombinedValidationContext{
67-
CombinedValidationContext: &tlsv3.CommonTlsContext_CombinedCertificateValidationContext{
68-
ValidationContextCertificateProviderInstance: &tlsv3.CommonTlsContext_CertificateProviderInstance{
66+
ValidationContextType: &tlsv1.CommonTlsContext_CombinedValidationContext{
67+
CombinedValidationContext: &tlsv1.CommonTlsContext_CombinedCertificateValidationContext{
68+
ValidationContextCertificateProviderInstance: &tlsv1.CommonTlsContext_CertificateProviderInstance{
6969
InstanceName: "default",
7070
CertificateName: "ROOTCA",
7171
},
7272
// DefaultValidationContext: Configure basic certificate validation
7373
// The certificate provider instance (ROOTCA) provides the root CA for validation
7474
// For gRPC proxyless, we rely on the certificate provider for root CA validation
7575
// SAN matching can be added later if needed for stricter validation
76-
DefaultValidationContext: &tlsv3.CertificateValidationContext{
76+
DefaultValidationContext: &tlsv1.CertificateValidationContext{
7777
// Trust the root CA from the certificate provider
7878
// The certificate provider instance "default" with "ROOTCA" will provide
7979
// the root CA certificates for validating peer certificates

dubbod/discovery/pkg/networking/grpcgen/lds.go

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ import (
3030
"github.com/apache/dubbo-kubernetes/pkg/util/sets"
3131
"github.com/apache/dubbo-kubernetes/pkg/wellknown"
3232
core "github.com/dubbo-kubernetes/xds-api/core/v1"
33-
routerv3 "github.com/dubbo-kubernetes/xds-api/extensions/filters/v1/http/router"
34-
hcmv3 "github.com/dubbo-kubernetes/xds-api/extensions/filters/v1/network/http_connection_manager"
35-
tlsv3 "github.com/dubbo-kubernetes/xds-api/extensions/transport_sockets/tls/v1"
33+
routerv1 "github.com/dubbo-kubernetes/xds-api/extensions/filters/v1/http/router"
34+
hcmv1 "github.com/dubbo-kubernetes/xds-api/extensions/filters/v1/network/http_connection_manager"
35+
tlsv1 "github.com/dubbo-kubernetes/xds-api/extensions/transport_sockets/tls/v1"
3636
listener "github.com/dubbo-kubernetes/xds-api/listener/v1"
3737
route "github.com/dubbo-kubernetes/xds-api/route/v1"
3838
discovery "github.com/dubbo-kubernetes/xds-api/service/discovery/v1"
@@ -213,7 +213,7 @@ func buildInboundListeners(node *model.Proxy, push *model.PushContext, names []s
213213
// "missing HttpConnectionManager filter", gRPC proxyless clients require HttpConnectionManager
214214
// in the FilterChain for inbound listeners.
215215
routeName := fmt.Sprintf("%d", listenPort)
216-
var hcm *hcmv3.HttpConnectionManager
216+
var hcm *hcmv1.HttpConnectionManager
217217

218218
// For Gateway Pods (router type), use RDS to get route configuration from HTTPRoute
219219
// This allows Gateway to route external traffic to backend services based on HTTPRoute rules
@@ -223,11 +223,11 @@ func buildInboundListeners(node *model.Proxy, push *model.PushContext, names []s
223223
}
224224
log.Infof(" Gateway Pod (router) using RDS for listener %s, routeName=%s, node.ID=%s, node.Type=%v, service=%s", name, routeName, node.ID, node.Type, si.Service.Attributes.Name)
225225
// Gateway Pods need RDS to route traffic based on HTTPRoute
226-
hcm = &hcmv3.HttpConnectionManager{
227-
CodecType: hcmv3.HttpConnectionManager_AUTO,
226+
hcm = &hcmv1.HttpConnectionManager{
227+
CodecType: hcmv1.HttpConnectionManager_AUTO,
228228
StatPrefix: fmt.Sprintf("inbound_%d", listenPort),
229-
RouteSpecifier: &hcmv3.HttpConnectionManager_Rds{
230-
Rds: &hcmv3.Rds{
229+
RouteSpecifier: &hcmv1.HttpConnectionManager_Rds{
230+
Rds: &hcmv1.Rds{
231231
ConfigSource: &core.ConfigSource{
232232
ConfigSourceSpecifier: &core.ConfigSource_Ads{
233233
Ads: &core.AggregatedConfigSource{},
@@ -236,11 +236,11 @@ func buildInboundListeners(node *model.Proxy, push *model.PushContext, names []s
236236
RouteConfigName: routeName,
237237
},
238238
},
239-
HttpFilters: []*hcmv3.HttpFilter{
239+
HttpFilters: []*hcmv1.HttpFilter{
240240
{
241241
Name: "filters.http.router",
242-
ConfigType: &hcmv3.HttpFilter_TypedConfig{
243-
TypedConfig: protoconv.MessageToAny(&routerv3.Router{}),
242+
ConfigType: &hcmv1.HttpFilter_TypedConfig{
243+
TypedConfig: protoconv.MessageToAny(&routerv1.Router{}),
244244
},
245245
},
246246
},
@@ -250,10 +250,10 @@ func buildInboundListeners(node *model.Proxy, push *model.PushContext, names []s
250250
// For regular service Pods, use inline RouteConfig with NonForwardingAction
251251
// Use inline RouteConfig instead of RDS to avoid triggering additional RDS requests that cause push loops
252252
// For proxyless gRPC, inline configuration is preferred to minimize round-trips
253-
hcm = &hcmv3.HttpConnectionManager{
254-
CodecType: hcmv3.HttpConnectionManager_AUTO,
253+
hcm = &hcmv1.HttpConnectionManager{
254+
CodecType: hcmv1.HttpConnectionManager_AUTO,
255255
StatPrefix: fmt.Sprintf("inbound_%d", listenPort),
256-
RouteSpecifier: &hcmv3.HttpConnectionManager_RouteConfig{
256+
RouteSpecifier: &hcmv1.HttpConnectionManager_RouteConfig{
257257
RouteConfig: &route.RouteConfiguration{
258258
Name: routeName,
259259
VirtualHosts: []*route.VirtualHost{
@@ -274,11 +274,11 @@ func buildInboundListeners(node *model.Proxy, push *model.PushContext, names []s
274274
},
275275
},
276276
},
277-
HttpFilters: []*hcmv3.HttpFilter{
277+
HttpFilters: []*hcmv1.HttpFilter{
278278
{
279279
Name: "filters.http.router",
280-
ConfigType: &hcmv3.HttpFilter_TypedConfig{
281-
TypedConfig: protoconv.MessageToAny(&routerv3.Router{}),
280+
ConfigType: &hcmv1.HttpFilter_TypedConfig{
281+
TypedConfig: protoconv.MessageToAny(&routerv1.Router{}),
282282
},
283283
},
284284
},
@@ -359,7 +359,7 @@ func buildDownstreamTransportSocket(mode model.MutualTLSMode) *core.TransportSoc
359359
// For STRICT mTLS, we require client certificates and validate them
360360
// The validation context is already configured in buildCommonTLSContext
361361
// via the certificate provider instance (ROOTCA)
362-
tlsContext := &tlsv3.DownstreamTlsContext{
362+
tlsContext := &tlsv1.DownstreamTlsContext{
363363
CommonTlsContext: common,
364364
RequireClientCertificate: wrapperspb.Bool(true),
365365
// Note: gRPC proxyless uses certificate provider for validation
@@ -516,11 +516,11 @@ func buildOutboundListeners(node *model.Proxy, push *model.PushContext, filter l
516516
// For gRPC proxyless, outbound listeners MUST use ApiListener with RDS
517517
// This is the correct pattern used by Dubbo for gRPC xDS clients
518518
// Using FilterChain with inline RouteConfig causes the gRPC client to remain in IDLE state
519-
hcm := &hcmv3.HttpConnectionManager{
520-
CodecType: hcmv3.HttpConnectionManager_AUTO,
519+
hcm := &hcmv1.HttpConnectionManager{
520+
CodecType: hcmv1.HttpConnectionManager_AUTO,
521521
StatPrefix: fmt.Sprintf("outbound_%d_%s", port, svc.Attributes.Name),
522-
RouteSpecifier: &hcmv3.HttpConnectionManager_Rds{
523-
Rds: &hcmv3.Rds{
522+
RouteSpecifier: &hcmv1.HttpConnectionManager_Rds{
523+
Rds: &hcmv1.Rds{
524524
ConfigSource: &core.ConfigSource{
525525
ConfigSourceSpecifier: &core.ConfigSource_Ads{
526526
Ads: &core.AggregatedConfigSource{},
@@ -529,11 +529,11 @@ func buildOutboundListeners(node *model.Proxy, push *model.PushContext, filter l
529529
RouteConfigName: routeName,
530530
},
531531
},
532-
HttpFilters: []*hcmv3.HttpFilter{
532+
HttpFilters: []*hcmv1.HttpFilter{
533533
{
534534
Name: "filters.http.router",
535-
ConfigType: &hcmv3.HttpFilter_TypedConfig{
536-
TypedConfig: protoconv.MessageToAny(&routerv3.Router{}),
535+
ConfigType: &hcmv1.HttpFilter_TypedConfig{
536+
TypedConfig: protoconv.MessageToAny(&routerv1.Router{}),
537537
},
538538
},
539539
},

dubbod/discovery/pkg/xds/ads.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import (
2626
"github.com/apache/dubbo-kubernetes/pkg/maps"
2727

2828
"github.com/apache/dubbo-kubernetes/dubbod/discovery/pkg/model"
29-
v3 "github.com/apache/dubbo-kubernetes/dubbod/discovery/pkg/xds/v3"
29+
v1 "github.com/apache/dubbo-kubernetes/dubbod/discovery/pkg/xds/v1"
3030
"github.com/apache/dubbo-kubernetes/pkg/util/sets"
3131
"github.com/apache/dubbo-kubernetes/pkg/xds"
3232
core "github.com/dubbo-kubernetes/xds-api/core/v1"
@@ -323,8 +323,8 @@ func (s *DiscoveryServer) pushConnection(con *Connection, pushEv *Event) error {
323323
}
324324

325325
func (s *DiscoveryServer) processRequest(req *discovery.DiscoveryRequest, con *Connection) error {
326-
stype := v3.GetShortType(req.TypeUrl)
327-
if req.TypeUrl == v3.HealthInfoType {
326+
stype := v1.GetShortType(req.TypeUrl)
327+
if req.TypeUrl == v1.HealthInfoType {
328328
return nil
329329
}
330330

@@ -414,11 +414,11 @@ func (s *DiscoveryServer) processRequest(req *discovery.DiscoveryRequest, con *C
414414
}
415415

416416
func (s *DiscoveryServer) processDeltaRequest(req *discovery.DeltaDiscoveryRequest, con *Connection) error {
417-
stype := v3.GetShortType(req.TypeUrl)
417+
stype := v1.GetShortType(req.TypeUrl)
418418
deltaLog.Infof("%s: REQ %s resources sub:%d unsub:%d nonce:%s", stype,
419419
con.ID(), len(req.ResourceNamesSubscribe), len(req.ResourceNamesUnsubscribe), req.ResponseNonce)
420420

421-
if req.TypeUrl == v3.HealthInfoType {
421+
if req.TypeUrl == v1.HealthInfoType {
422422
return nil
423423
}
424424

@@ -444,7 +444,7 @@ func (s *DiscoveryServer) processDeltaRequest(req *discovery.DeltaDiscoveryReque
444444
if err != nil {
445445
return err
446446
}
447-
if req.TypeUrl != v3.ClusterType {
447+
if req.TypeUrl != v1.ClusterType {
448448
return nil
449449
}
450450
return s.forceEDSPush(con)
@@ -465,10 +465,10 @@ func newDeltaConnection(peerAddr string, stream DeltaDiscoveryStream) *Connectio
465465
}
466466

467467
var PushOrder = []string{
468-
v3.ClusterType,
469-
v3.EndpointType,
470-
v3.ListenerType,
471-
v3.RouteType,
468+
v1.ClusterType,
469+
v1.EndpointType,
470+
v1.ListenerType,
471+
v1.RouteType,
472472
}
473473

474474
var KnownOrderedTypeUrls = sets.New(PushOrder...)

dubbod/discovery/pkg/xds/delta.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import (
2323

2424
dubbogrpc "github.com/apache/dubbo-kubernetes/dubbod/discovery/pkg/grpc"
2525
"github.com/apache/dubbo-kubernetes/dubbod/discovery/pkg/model"
26-
v3 "github.com/apache/dubbo-kubernetes/dubbod/discovery/pkg/xds/v3"
26+
v1 "github.com/apache/dubbo-kubernetes/dubbod/discovery/pkg/xds/v1"
2727
"github.com/apache/dubbo-kubernetes/pkg/util/sets"
2828
discovery "github.com/dubbo-kubernetes/xds-api/service/discovery/v1"
2929
"github.com/google/uuid"
@@ -35,15 +35,15 @@ import (
3535
var deltaLog = dubbolog.RegisterScope("delta", "delta xds debugging")
3636

3737
func (s *DiscoveryServer) forceEDSPush(con *Connection) error {
38-
if dwr := con.proxy.GetWatchedResource(v3.EndpointType); dwr != nil {
38+
if dwr := con.proxy.GetWatchedResource(v1.EndpointType); dwr != nil {
3939
request := &model.PushRequest{
4040
Full: true,
4141
Push: con.proxy.LastPushContext,
4242
Reason: model.NewReasonStats(model.DependentResource),
4343
Start: con.proxy.LastPushTime,
4444
Forced: true,
4545
}
46-
deltaLog.Infof("%s: FORCE %s PUSH for warming.", v3.GetShortType(v3.EndpointType), con.ID())
46+
deltaLog.Infof("%s: FORCE %s PUSH for warming.", v1.GetShortType(v1.EndpointType), con.ID())
4747
return s.pushDeltaXds(con, dwr, request)
4848
}
4949
return nil
@@ -138,7 +138,7 @@ func (s *DiscoveryServer) receiveDelta(con *Connection, identities []string) {
138138
return
139139
}
140140
if firstRequest {
141-
if req.TypeUrl == v3.HealthInfoType {
141+
if req.TypeUrl == v1.HealthInfoType {
142142
deltaLog.Warnf("%q %s send health check probe before normal xDS request", con.Peer(), con.ID())
143143
continue
144144
}
@@ -164,7 +164,7 @@ func (s *DiscoveryServer) receiveDelta(con *Connection, identities []string) {
164164
unsubscribeStr = " unsubscribe:[" + strings.Join(req.ResourceNamesUnsubscribe, ", ") + "]"
165165
}
166166
deltaLog.Infof("%s: RAW DELTA REQ %s sub:%d%s nonce:%s%s",
167-
v3.GetShortType(req.TypeUrl), con.ID(), len(req.ResourceNamesSubscribe), subscribeStr,
167+
v1.GetShortType(req.TypeUrl), con.ID(), len(req.ResourceNamesSubscribe), subscribeStr,
168168
req.ResponseNonce, unsubscribeStr)
169169

170170
select {
@@ -254,7 +254,7 @@ func deltaWatchedResources(existing sets.String, request *discovery.DeltaDiscove
254254
}
255255

256256
func shouldRespondDelta(con *Connection, request *discovery.DeltaDiscoveryRequest) bool {
257-
stype := v3.GetShortType(request.TypeUrl)
257+
stype := v1.GetShortType(request.TypeUrl)
258258

259259
if request.ErrorDetail != nil {
260260
errCode := codes.Code(request.ErrorDetail.Code)
@@ -336,7 +336,7 @@ func (conn *Connection) sendDelta(res *discovery.DeltaDiscoveryResponse, newReso
336336
}
337337
err := sendResonse()
338338
if status.Convert(err).Code() == codes.DeadlineExceeded {
339-
deltaLog.Infof("Timeout writing %s: %v", conn.ID(), v3.GetShortType(res.TypeUrl))
339+
deltaLog.Infof("Timeout writing %s: %v", conn.ID(), v1.GetShortType(res.TypeUrl))
340340
}
341341
return err
342342
}

dubbod/discovery/pkg/xds/discovery.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ func NewDiscoveryServer(env *model.Environment, clusterAliases map[string]string
9999
}
100100

101101
func (s *DiscoveryServer) Register(rpcs *grpc.Server) {
102-
// Register v3 server
102+
// Register v1 server
103103
discovery.RegisterAggregatedDiscoveryServiceServer(rpcs, s)
104104
}
105105

0 commit comments

Comments
 (0)