consul/proto/pbsubscribe/subscribe.go
Chris S. Kim 29a297d3e9
Refactor client RPC timeouts (#14965)
Fix an issue where rpc_hold_timeout was being used as the timeout for non-blocking queries. Users should be able to tune read timeouts without fiddling with rpc_hold_timeout. A new configuration `rpc_read_timeout` is created.

Refactor some implementation from the original PR 11500 to remove the misleading linkage between RPCInfo's timeout (used to retry in case of certain modes of failures) and the client RPC timeouts.
2022-10-18 15:05:09 -04:00

54 lines
1.5 KiB
Go

package pbsubscribe
import (
"time"
"github.com/hashicorp/consul/acl"
)
// RequestDatacenter implements structs.RPCInfo
func (req *SubscribeRequest) RequestDatacenter() string {
return req.Datacenter
}
// IsRead implements structs.RPCInfo
func (req *SubscribeRequest) IsRead() bool {
return true
}
// AllowStaleRead implements structs.RPCInfo
func (req *SubscribeRequest) AllowStaleRead() bool {
return true
}
// TokenSecret implements structs.RPCInfo
func (req *SubscribeRequest) TokenSecret() string {
return req.Token
}
// SetTokenSecret implements structs.RPCInfo
func (req *SubscribeRequest) SetTokenSecret(token string) {
req.Token = token
}
// HasTimedOut implements structs.RPCInfo
func (req *SubscribeRequest) HasTimedOut(start time.Time, rpcHoldTimeout, _, _ time.Duration) (bool, error) {
return time.Since(start) > rpcHoldTimeout, nil
}
// EnterpriseMeta returns the EnterpriseMeta encoded in the request's Subject.
func (req *SubscribeRequest) EnterpriseMeta() acl.EnterpriseMeta {
if req.GetWildcardSubject() {
// Note: EnterpriseMeta is ignored for the wildcard subject (as it will
// receive all events in the topic regardless of partition, namespace etc).
return acl.EnterpriseMeta{}
}
if sub := req.GetNamedSubject(); sub != nil {
return acl.NewEnterpriseMetaWithPartition(sub.Partition, sub.Namespace)
}
// Deprecated top-level Partition and Namespace fields.
return acl.NewEnterpriseMetaWithPartition(req.Partition, req.Namespace)
}