peering: initial sync (#12842)
- Add endpoints related to peering: read, list, generate token, initiate peering
- Update node/service/check table indexing to account for peers
- Foundational changes for pushing service updates to a peer
- Plumb peer name through Health.ServiceNodes path
see: ENT-1765, ENT-1280, ENT-1283, ENT-1283, ENT-1756, ENT-1739, ENT-1750, ENT-1679,
ENT-1709, ENT-1704, ENT-1690, ENT-1689, ENT-1702, ENT-1701, ENT-1683, ENT-1663,
ENT-1650, ENT-1678, ENT-1628, ENT-1658, ENT-1640, ENT-1637, ENT-1597, ENT-1634,
ENT-1613, ENT-1616, ENT-1617, ENT-1591, ENT-1588, ENT-1596, ENT-1572, ENT-1555
Co-authored-by: R.B. Boyer <rb@hashicorp.com>
Co-authored-by: freddygv <freddy@hashicorp.com>
Co-authored-by: Chris S. Kim <ckim@hashicorp.com>
Co-authored-by: Evan Culver <eculver@hashicorp.com>
Co-authored-by: Nitya Dhanushkodi <nitya@hashicorp.com>
3 years ago
package pbpeering
import "time"
// TODO(peering): These are byproducts of not embedding
// types in our protobuf definitions and are temporary;
// Hoping to replace them with 1 or 2 methods per request
// using https://github.com/hashicorp/consul/pull/12507
// RequestDatacenter implements structs.RPCInfo
func ( req * GenerateTokenRequest ) RequestDatacenter ( ) string {
return req . Datacenter
}
// IsRead implements structs.RPCInfo
func ( req * GenerateTokenRequest ) IsRead ( ) bool {
return false
}
// AllowStaleRead implements structs.RPCInfo
func ( req * GenerateTokenRequest ) AllowStaleRead ( ) bool {
return false
}
// TokenSecret implements structs.RPCInfo
func ( req * GenerateTokenRequest ) TokenSecret ( ) string {
return req . Token
}
// SetTokenSecret implements structs.RPCInfo
func ( req * GenerateTokenRequest ) SetTokenSecret ( token string ) {
req . Token = token
}
// HasTimedOut implements structs.RPCInfo
func ( req * GenerateTokenRequest ) HasTimedOut ( start time . Time , rpcHoldTimeout , _ , _ time . Duration ) ( bool , error ) {
return time . Since ( start ) > rpcHoldTimeout , nil
}
// Timeout implements structs.RPCInfo
func ( msg * GenerateTokenRequest ) Timeout ( rpcHoldTimeout time . Duration , maxQueryTime time . Duration , defaultQueryTime time . Duration ) time . Duration {
return rpcHoldTimeout
}
// IsRead implements structs.RPCInfo
func ( req * InitiateRequest ) IsRead ( ) bool {
return false
}
// AllowStaleRead implements structs.RPCInfo
func ( req * InitiateRequest ) AllowStaleRead ( ) bool {
return false
}
// TokenSecret implements structs.RPCInfo
func ( req * InitiateRequest ) TokenSecret ( ) string {
return req . Token
}
// SetTokenSecret implements structs.RPCInfo
func ( req * InitiateRequest ) SetTokenSecret ( token string ) {
req . Token = token
}
// HasTimedOut implements structs.RPCInfo
func ( req * InitiateRequest ) HasTimedOut ( start time . Time , rpcHoldTimeout , _ , _ time . Duration ) ( bool , error ) {
return time . Since ( start ) > rpcHoldTimeout , nil
}
// Timeout implements structs.RPCInfo
func ( msg * InitiateRequest ) Timeout ( rpcHoldTimeout time . Duration , maxQueryTime time . Duration , defaultQueryTime time . Duration ) time . Duration {
return rpcHoldTimeout
}
// ShouldDial returns true when the peering was stored via the peering initiation endpoint,
// AND the peering is not marked as terminated by our peer.
// If we generated a token for this peer we did not store our server addresses under PeerServerAddresses.
// These server addresses are for dialing, and only the peer initiating the peering will do the dialing.
func ( p * Peering ) ShouldDial ( ) bool {
return len ( p . PeerServerAddresses ) > 0 && p . State != PeeringState_TERMINATED
}
func ( x ReplicationMessage_Response_Operation ) GoString ( ) string {
return x . String ( )
}