changes to support new PQ enterprise fields (#16793)
This commit is contained in:
parent
bd4a01f38f
commit
baa1fd3cd6
|
@ -0,0 +1,3 @@
|
||||||
|
```release-note:improvement
|
||||||
|
connect: **(Enterprise Only)** Add support for specifying "Partition" and "Namespace" in Prepared Queries failover rules.
|
||||||
|
```
|
|
@ -718,13 +718,13 @@ func queryFailover(q queryServer, query structs.PreparedQuery,
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// This will help us filter unknown DCs supplied by the user.
|
// This will help us filter unknown targets supplied by the user.
|
||||||
known := make(map[string]struct{})
|
known := make(map[string]struct{})
|
||||||
for _, dc := range nearest {
|
for _, dc := range nearest {
|
||||||
known[dc] = struct{}{}
|
known[dc] = struct{}{}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build a candidate list of DCs to try, starting with the nearest N
|
// Build a candidate list of failover targets to try, starting with the nearest N target
|
||||||
// from RTTs.
|
// from RTTs.
|
||||||
var targets []structs.QueryFailoverTarget
|
var targets []structs.QueryFailoverTarget
|
||||||
index := make(map[string]struct{})
|
index := make(map[string]struct{})
|
||||||
|
@ -739,9 +739,9 @@ func queryFailover(q queryServer, query structs.PreparedQuery,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Then add any DCs explicitly listed that weren't selected above.
|
// Then add any targets explicitly listed that weren't selected above.
|
||||||
for _, target := range query.Service.Failover.AsTargets() {
|
for _, target := range query.Service.Failover.AsTargets() {
|
||||||
// This will prevent a log of other log spammage if we do not
|
// This will prevent a log of other log spam if we do not
|
||||||
// attempt to talk to datacenters we don't know about.
|
// attempt to talk to datacenters we don't know about.
|
||||||
if dc := target.Datacenter; dc != "" {
|
if dc := target.Datacenter; dc != "" {
|
||||||
if _, ok := known[dc]; !ok {
|
if _, ok := known[dc]; !ok {
|
||||||
|
@ -753,15 +753,16 @@ func queryFailover(q queryServer, query structs.PreparedQuery,
|
||||||
// from the NearestN list.
|
// from the NearestN list.
|
||||||
if _, ok := index[dc]; !ok {
|
if _, ok := index[dc]; !ok {
|
||||||
targets = append(targets, target)
|
targets = append(targets, target)
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if target.Peer != "" {
|
if target.Peer != "" || target.PartitionOrEmpty() != "" || target.NamespaceOrEmpty() != "" {
|
||||||
targets = append(targets, target)
|
targets = append(targets, target)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now try the selected DCs in priority order.
|
// Now try the selected targets in priority order.
|
||||||
failovers := 0
|
failovers := 0
|
||||||
for _, target := range targets {
|
for _, target := range targets {
|
||||||
// This keeps track of how many iterations we actually run.
|
// This keeps track of how many iterations we actually run.
|
||||||
|
@ -775,9 +776,10 @@ func queryFailover(q queryServer, query structs.PreparedQuery,
|
||||||
// through this slice across successive RPC calls.
|
// through this slice across successive RPC calls.
|
||||||
reply.Nodes = nil
|
reply.Nodes = nil
|
||||||
|
|
||||||
// Reset PeerName because it may have been set by a previous failover
|
// Reset Peer, because it may have been set by a previous failover
|
||||||
// target.
|
// target.
|
||||||
query.Service.Peer = target.Peer
|
query.Service.Peer = target.Peer
|
||||||
|
query.Service.EnterpriseMeta = target.EnterpriseMeta
|
||||||
dc := target.Datacenter
|
dc := target.Datacenter
|
||||||
if target.Peer != "" {
|
if target.Peer != "" {
|
||||||
dc = q.GetLocalDC()
|
dc = q.GetLocalDC()
|
||||||
|
@ -800,6 +802,7 @@ func queryFailover(q queryServer, query structs.PreparedQuery,
|
||||||
"service", query.Service.Service,
|
"service", query.Service.Service,
|
||||||
"peerName", query.Service.Peer,
|
"peerName", query.Service.Peer,
|
||||||
"datacenter", dc,
|
"datacenter", dc,
|
||||||
|
"enterpriseMeta", query.Service.EnterpriseMeta,
|
||||||
"error", err,
|
"error", err,
|
||||||
)
|
)
|
||||||
continue
|
continue
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -16,7 +16,7 @@ type preparedQueryCreateResponse struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// preparedQueryCreate makes a new prepared query.
|
// preparedQueryCreate makes a new prepared query.
|
||||||
func (s *HTTPHandlers) preparedQueryCreate(resp http.ResponseWriter, req *http.Request) (interface{}, error) {
|
func (s *HTTPHandlers) preparedQueryCreate(_ http.ResponseWriter, req *http.Request) (interface{}, error) {
|
||||||
args := structs.PreparedQueryRequest{
|
args := structs.PreparedQueryRequest{
|
||||||
Op: structs.PreparedQueryCreate,
|
Op: structs.PreparedQueryCreate,
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,6 +47,8 @@ type QueryFailoverTarget struct {
|
||||||
|
|
||||||
// Datacenter specifies a datacenter to try during failover.
|
// Datacenter specifies a datacenter to try during failover.
|
||||||
Datacenter string
|
Datacenter string
|
||||||
|
|
||||||
|
acl.EnterpriseMeta
|
||||||
}
|
}
|
||||||
|
|
||||||
// QueryDNSOptions controls settings when query results are served over DNS.
|
// QueryDNSOptions controls settings when query results are served over DNS.
|
||||||
|
|
|
@ -26,6 +26,14 @@ type QueryFailoverTarget struct {
|
||||||
|
|
||||||
// Datacenter specifies a datacenter to try during failover.
|
// Datacenter specifies a datacenter to try during failover.
|
||||||
Datacenter string
|
Datacenter string
|
||||||
|
|
||||||
|
// Partition specifies a partition to try during failover
|
||||||
|
// Note: Partition are available only in Consul Enterprise
|
||||||
|
Partition string
|
||||||
|
|
||||||
|
// Namespace specifies a namespace to try during failover
|
||||||
|
// Note: Namespaces are available only in Consul Enterprise
|
||||||
|
Namespace string
|
||||||
}
|
}
|
||||||
|
|
||||||
// QueryDNSOptions controls settings when query results are served over DNS.
|
// QueryDNSOptions controls settings when query results are served over DNS.
|
||||||
|
|
|
@ -10,7 +10,7 @@ The `/query` endpoints create, update, destroy, and execute prepared queries.
|
||||||
|
|
||||||
Prepared queries allow you to register a complex service query and then execute
|
Prepared queries allow you to register a complex service query and then execute
|
||||||
it later by specifying the query ID or name. Consul returns a set of healthy nodes that provide a given
|
it later by specifying the query ID or name. Consul returns a set of healthy nodes that provide a given
|
||||||
service. Refer to
|
service. Refer to
|
||||||
[Enable Dynamic DNS Queries](/consul/docs/services/discovery/dns-dynamic-lookups) for additional information.
|
[Enable Dynamic DNS Queries](/consul/docs/services/discovery/dns-dynamic-lookups) for additional information.
|
||||||
|
|
||||||
Check the [Geo Failover tutorial](/consul/tutorials/developer-discovery/automate-geo-failover) for details and
|
Check the [Geo Failover tutorial](/consul/tutorials/developer-discovery/automate-geo-failover) for details and
|
||||||
|
@ -212,6 +212,12 @@ The table below shows this endpoint's support for
|
||||||
- `Datacenter` `(string: "")` - Specifies a WAN federated datacenter to forward the
|
- `Datacenter` `(string: "")` - Specifies a WAN federated datacenter to forward the
|
||||||
query to.
|
query to.
|
||||||
|
|
||||||
|
- `Partition` `(string: "")` <EnterpriseAlert inline /> - Specifies a Partition to forward the
|
||||||
|
query to.
|
||||||
|
|
||||||
|
- `Namespace` `(string: "")` <EnterpriseAlert inline /> - Specifies a Namespace to forward the
|
||||||
|
query to.
|
||||||
|
|
||||||
- `IgnoreCheckIDs` `(array<string>: nil)` - Specifies a list of check IDs that
|
- `IgnoreCheckIDs` `(array<string>: nil)` - Specifies a list of check IDs that
|
||||||
should be ignored when filtering unhealthy instances. This is mostly useful
|
should be ignored when filtering unhealthy instances. This is mostly useful
|
||||||
in an emergency or as a temporary measure when a health check is found to be
|
in an emergency or as a temporary measure when a health check is found to be
|
||||||
|
|
Loading…
Reference in New Issue