forked from Deuxfleurs/tricot
Don't do the hack with same_site and same_node, separate lb flags
This commit is contained in:
parent
3c5aa3680e
commit
f163d1d348
2 changed files with 42 additions and 22 deletions
|
@ -247,8 +247,8 @@ async fn select_target_and_proxy(
|
|||
.as_ref()
|
||||
.map(|x| x.len() as i32)
|
||||
.unwrap_or(0),
|
||||
ent.same_node,
|
||||
ent.same_site,
|
||||
(ent.flags.same_node || ent.flags.site_lb || ent.flags.global_lb),
|
||||
(ent.flags.same_site || ent.flags.global_lb),
|
||||
-ent.calls_in_progress.load(Ordering::SeqCst),
|
||||
-ent.last_call.load(Ordering::SeqCst),
|
||||
)
|
||||
|
@ -260,8 +260,8 @@ async fn select_target_and_proxy(
|
|||
"target_addr",
|
||||
proxy_to.target_addr.to_string(),
|
||||
));
|
||||
tags.push(KeyValue::new("same_node", proxy_to.same_node));
|
||||
tags.push(KeyValue::new("same_site", proxy_to.same_site));
|
||||
tags.push(KeyValue::new("same_node", proxy_to.flags.same_node));
|
||||
tags.push(KeyValue::new("same_site", proxy_to.flags.same_site));
|
||||
|
||||
proxy_to.last_call.fetch_max(
|
||||
(received_time - https_config.time_origin).as_millis() as i64,
|
||||
|
|
|
@ -64,12 +64,8 @@ pub struct ProxyEntry {
|
|||
/// Is the target serving HTTPS instead of HTTP?
|
||||
pub https_target: bool,
|
||||
|
||||
/// Is the target the same node as we are running on?
|
||||
/// (if yes priorize it over other matching targets)
|
||||
pub same_node: bool,
|
||||
/// Is the target the same site as this node?
|
||||
/// (if yes priorize it over other matching targets)
|
||||
pub same_site: bool,
|
||||
/// Flags for target selection
|
||||
pub flags: ProxyEntryFlags,
|
||||
|
||||
/// Add the following headers to all responses returned
|
||||
/// when matching this rule
|
||||
|
@ -81,6 +77,21 @@ pub struct ProxyEntry {
|
|||
pub last_call: atomic::AtomicI64,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
pub struct ProxyEntryFlags {
|
||||
/// Is the target the same node as we are running on?
|
||||
/// (if yes priorize it over other matching targets)
|
||||
pub same_node: bool,
|
||||
/// Is the target the same site as this node?
|
||||
/// (if yes priorize it over other matching targets)
|
||||
pub same_site: bool,
|
||||
|
||||
/// Is site-wide load balancing enabled for this service?
|
||||
pub site_lb: bool,
|
||||
/// Is global load balancing enabled for this service?
|
||||
pub global_lb: bool,
|
||||
}
|
||||
|
||||
impl std::fmt::Display for ProxyEntry {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
if self.https_target {
|
||||
|
@ -94,11 +105,16 @@ impl std::fmt::Display for ProxyEntry {
|
|||
self.path_prefix.as_deref().unwrap_or_default(),
|
||||
self.priority
|
||||
)?;
|
||||
if self.same_node {
|
||||
if self.flags.same_node {
|
||||
write!(f, " OURSELF")?;
|
||||
} else if self.same_site {
|
||||
} else if self.flags.same_site {
|
||||
write!(f, " SAME_SITE")?;
|
||||
}
|
||||
if self.flags.global_lb {
|
||||
write!(f, " GLOBAL-LB")?;
|
||||
} else if self.flags.site_lb {
|
||||
write!(f, " SITE-LB")?;
|
||||
}
|
||||
if !self.add_headers.is_empty() {
|
||||
write!(f, " +Headers: {:?}", self.add_headers)?;
|
||||
}
|
||||
|
@ -126,8 +142,7 @@ fn parse_tricot_tag(
|
|||
tag: &str,
|
||||
target_addr: SocketAddr,
|
||||
add_headers: &[(String, String)],
|
||||
same_node: bool,
|
||||
same_site: bool,
|
||||
flags: ProxyEntryFlags,
|
||||
) -> Option<ProxyEntry> {
|
||||
let splits = tag.split(' ').collect::<Vec<_>>();
|
||||
if (splits.len() != 2 && splits.len() != 3)
|
||||
|
@ -162,8 +177,7 @@ fn parse_tricot_tag(
|
|||
target_addr,
|
||||
https_target: (splits[0] == "tricot-https"),
|
||||
host,
|
||||
same_node,
|
||||
same_site,
|
||||
flags,
|
||||
path_prefix,
|
||||
priority,
|
||||
add_headers: add_headers.to_vec(),
|
||||
|
@ -206,12 +220,19 @@ fn parse_consul_catalog(
|
|||
};
|
||||
let addr = SocketAddr::new(ip_addr, svc.port);
|
||||
|
||||
let (same_node, same_site) = if svc.tags.contains(&"tricot-global-lb".into()) {
|
||||
(false, false)
|
||||
let (site_lb, global_lb) = if svc.tags.contains(&"tricot-global-lb".into()) {
|
||||
(false, true)
|
||||
} else if svc.tags.contains(&"tricot-site-lb".into()) {
|
||||
(false, same_site)
|
||||
(true, false)
|
||||
} else {
|
||||
(same_node, same_site)
|
||||
(false, false)
|
||||
};
|
||||
|
||||
let flags = ProxyEntryFlags {
|
||||
same_node,
|
||||
same_site,
|
||||
site_lb,
|
||||
global_lb,
|
||||
};
|
||||
|
||||
let mut add_headers = vec![];
|
||||
|
@ -227,8 +248,7 @@ fn parse_consul_catalog(
|
|||
tag,
|
||||
addr,
|
||||
&add_headers[..],
|
||||
same_node,
|
||||
same_site,
|
||||
flags,
|
||||
) {
|
||||
entries.push(ent);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue