blob: 2961e6be04686fb1ceb983e6f0486b1ab0ec9843 [file] [log] [blame]
/*
* 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 xds
import (
"context"
)
import (
discoveryv3 "github.com/envoyproxy/go-control-plane/envoy/service/discovery/v3"
"google.golang.org/protobuf/types/known/anypb"
"google.golang.org/protobuf/types/known/structpb"
)
// DiscoveryRequest defines interface over real Envoy's DiscoveryRequest.
type DiscoveryRequest interface {
NodeId() string
// Node returns either a v2 or v3 Node
Node() interface{}
Metadata() *structpb.Struct
VersionInfo() string
GetTypeUrl() string
GetResponseNonce() string
GetResourceNames() []string
HasErrors() bool
ErrorMsg() string
}
// DiscoveryResponse defines interface over real Envoy's DiscoveryResponse.
type DiscoveryResponse interface {
GetTypeUrl() string
VersionInfo() string
GetResources() []*anypb.Any
GetNonce() string
}
type DeltaDiscoveryRequest interface {
NodeId() string
// Node returns either a v2 or v3 Node
Node() interface{}
Metadata() *structpb.Struct
GetTypeUrl() string
GetResponseNonce() string
GetResourceNamesSubscribe() []string
GetInitialResourceVersions() map[string]string
HasErrors() bool
ErrorMsg() string
}
// DeltaDiscoveryResponse defines interface over real Envoy's DeltaDiscoveryResponse.
type DeltaDiscoveryResponse interface {
GetTypeUrl() string
GetResources() []*discoveryv3.Resource
GetRemovedResources() []string
GetNonce() string
}
// Callbacks defines Callbacks for xDS streaming requests. The difference over real go-control-plane Callbacks is that it takes an DiscoveryRequest / DiscoveryResponse interface.
// It helps us to implement Callbacks once for many different versions of Envoy API.
type Callbacks interface {
// OnStreamOpen is called once an xDS stream is opened with a stream ID and the type URL (or "" for ADS).
// Returning an error will end processing and close the stream. OnStreamClosed will still be called.
OnStreamOpen(context.Context, int64, string) error
// OnStreamClosed is called immediately prior to closing an xDS stream with a stream ID.
OnStreamClosed(int64)
// OnStreamRequest is called once a request is received on a stream.
// Returning an error will end processing and close the stream. OnStreamClosed will still be called.
OnStreamRequest(int64, DiscoveryRequest) error
// OnStreamResponse is called immediately prior to sending a response on a stream.
OnStreamResponse(int64, DiscoveryRequest, DiscoveryResponse)
}
type DeltaCallbacks interface {
// OnDeltaStreamOpen is called once an xDS stream is opened with a stream ID and the type URL (or "" for ADS).
// Returning an error will end processing and close the stream. OnDeltaStreamClosed will still be called.
OnDeltaStreamOpen(context.Context, int64, string) error
// OnDeltaStreamClosed is called immediately prior to closing an xDS stream with a stream ID.
OnDeltaStreamClosed(int64)
// OnStreamDeltaRequest is called once a request is received on a stream.
// Returning an error will end processing and close the stream. OnDeltaStreamClosed will still be called.
OnStreamDeltaRequest(int64, DeltaDiscoveryRequest) error
// OnStreamDeltaResponse is called immediately prior to sending a response on a stream.
OnStreamDeltaResponse(int64, DeltaDiscoveryRequest, DeltaDiscoveryResponse)
}
// RestCallbacks defines rest.Callbacks for xDS fetch requests. The difference over real go-control-plane
// Callbacks is that it takes an DiscoveryRequest / DiscoveryResponse interface.
// It helps us to implement Callbacks once for many different versions of Envoy API.
type RestCallbacks interface {
// OnFetchRequest is called when a new rest request comes in.
// Returning an error will end processing. OnFetchResponse will not be called.
OnFetchRequest(ctx context.Context, request DiscoveryRequest) error
// OnFetchResponse is called immediately prior to sending a rest response.
OnFetchResponse(request DiscoveryRequest, response DiscoveryResponse)
}
// MultiCallbacks implements callbacks for both rest and streaming xDS requests.
type MultiCallbacks interface {
Callbacks
RestCallbacks
}