in pkg/controller/service/listeners.go [651:883]
func isNeedUpdate(reqCtx *RequestContext, local model.ListenerAttribute, remote model.ListenerAttribute) (bool, model.ListenerAttribute) {
update := deepcopy.Copy(remote).(model.ListenerAttribute)
needUpdate := false
updateDetail := ""
if remote.Description != local.Description {
needUpdate = true
update.Description = local.Description
updateDetail += fmt.Sprintf("Description changed: %v - %v ;",
remote.Description, local.Description)
}
if remote.VGroupId != local.VGroupId {
needUpdate = true
update.VGroupId = local.VGroupId
updateDetail += fmt.Sprintf("VGroupId changed: %v - %v ;",
remote.VGroupId, local.VGroupId)
}
if local.Scheduler != "" &&
remote.Scheduler != local.Scheduler {
needUpdate = true
update.Scheduler = local.Scheduler
updateDetail += fmt.Sprintf("Scheduler changed: %v - %v ;",
remote.Scheduler, local.Scheduler)
}
if local.Protocol == model.TCP &&
local.PersistenceTimeout != nil && remote.PersistenceTimeout != nil &&
*remote.PersistenceTimeout != *local.PersistenceTimeout {
needUpdate = true
update.PersistenceTimeout = local.PersistenceTimeout
updateDetail += fmt.Sprintf("PersistenceTimeout changed: %v - %v ;",
*remote.PersistenceTimeout, *local.PersistenceTimeout)
}
// The cert id is necessary for https, so skip to check whether it is blank
if local.Protocol == model.HTTPS &&
remote.CertId != local.CertId {
needUpdate = true
update.CertId = local.CertId
updateDetail += fmt.Sprintf("CertId changed: %v - %v ;",
remote.CertId, local.CertId)
}
if local.Protocol == model.HTTPS &&
local.EnableHttp2 != "" &&
remote.EnableHttp2 != local.EnableHttp2 {
needUpdate = true
update.EnableHttp2 = local.EnableHttp2
updateDetail += fmt.Sprintf("EnableHttp2 changed: %v - %v ;",
remote.EnableHttp2, local.EnableHttp2)
}
// acl
if local.AclStatus != "" &&
remote.AclStatus != local.AclStatus {
needUpdate = true
update.AclStatus = local.AclStatus
updateDetail += fmt.Sprintf("AclStatus changed: %v - %v ;",
remote.AclStatus, local.AclStatus)
}
if local.AclStatus == model.OnFlag &&
local.AclId != "" &&
remote.AclId != local.AclId {
needUpdate = true
update.AclId = local.AclId
updateDetail += fmt.Sprintf("AclId changed: %v - %v ;",
remote.AclId, local.AclId)
}
if local.AclStatus == model.OnFlag &&
local.AclType != "" &&
remote.AclType != local.AclType {
needUpdate = true
update.AclType = local.AclType
updateDetail += fmt.Sprintf("AclType changed: %v - %v ;",
remote.AclType, local.AclType)
}
// idle timeout
if Is7LayerProtocol(local.Protocol) &&
local.IdleTimeout != 0 &&
remote.IdleTimeout != local.IdleTimeout {
needUpdate = true
update.IdleTimeout = local.IdleTimeout
updateDetail += fmt.Sprintf("IdleTimeout changed: %v - %v ;",
remote.IdleTimeout, local.IdleTimeout)
}
// session
if Is7LayerProtocol(local.Protocol) &&
local.StickySession != "" &&
remote.StickySession != local.StickySession {
needUpdate = true
update.StickySession = local.StickySession
updateDetail += fmt.Sprintf("StickySession changed: %v - %v ;",
remote.StickySession, local.StickySession)
}
if Is7LayerProtocol(local.Protocol) &&
local.StickySessionType != "" &&
remote.StickySessionType != local.StickySessionType {
needUpdate = true
update.StickySessionType = local.StickySessionType
updateDetail += fmt.Sprintf("StickySessionType changed: %v - %v ;",
remote.StickySessionType, local.StickySessionType)
}
if Is7LayerProtocol(local.Protocol) &&
local.Cookie != "" &&
remote.Cookie != local.Cookie {
needUpdate = true
update.Cookie = local.Cookie
updateDetail += fmt.Sprintf("Cookie changed: %v - %v ;",
remote.Cookie, local.Cookie)
}
if Is7LayerProtocol(local.Protocol) &&
local.CookieTimeout != 0 &&
remote.CookieTimeout != local.CookieTimeout {
needUpdate = true
update.CookieTimeout = local.CookieTimeout
updateDetail += fmt.Sprintf("CookieTimeout changed: %v - %v ;",
remote.CookieTimeout, local.CookieTimeout)
}
// connection drain
if Is4LayerProtocol(local.Protocol) &&
local.ConnectionDrain != "" &&
remote.ConnectionDrain != local.ConnectionDrain {
needUpdate = true
update.ConnectionDrain = local.ConnectionDrain
updateDetail += fmt.Sprintf("ConnectionDrain changed: %v - %v ;",
remote.ConnectionDrain, local.ConnectionDrain)
}
if Is4LayerProtocol(local.Protocol) &&
local.ConnectionDrain == model.OnFlag &&
local.ConnectionDrainTimeout != 0 &&
remote.ConnectionDrainTimeout != local.ConnectionDrainTimeout {
needUpdate = true
update.ConnectionDrainTimeout = local.ConnectionDrainTimeout
updateDetail += fmt.Sprintf("ConnectionDrainTimeout changed: %v - %v ;",
remote.ConnectionDrainTimeout, local.ConnectionDrainTimeout)
}
//x-forwarded-for
if Is7LayerProtocol(local.Protocol) &&
local.XForwardedForProto != "" &&
remote.XForwardedForProto != local.XForwardedForProto {
needUpdate = true
update.XForwardedForProto = local.XForwardedForProto
updateDetail += fmt.Sprintf("XForwardedForProto changed: %v - %v ;",
remote.XForwardedForProto, local.XForwardedForProto)
}
// health check
if local.HealthCheckConnectPort != 0 &&
remote.HealthCheckConnectPort != local.HealthCheckConnectPort {
needUpdate = true
update.HealthCheckConnectPort = local.HealthCheckConnectPort
updateDetail += fmt.Sprintf("HealthCheckConnectPort changed: %v - %v ;",
remote.HealthCheckConnectPort, local.HealthCheckConnectPort)
}
if local.HealthCheckInterval != 0 &&
remote.HealthCheckInterval != local.HealthCheckInterval {
needUpdate = true
update.HealthCheckInterval = local.HealthCheckInterval
updateDetail += fmt.Sprintf("HealthCheckInterval changed: %v - %v ;",
remote.HealthCheckInterval, local.HealthCheckInterval)
}
if local.HealthyThreshold != 0 &&
remote.HealthyThreshold != local.HealthyThreshold {
needUpdate = true
update.HealthyThreshold = local.HealthyThreshold
updateDetail += fmt.Sprintf("HealthyThreshold changed: %v - %v ;",
remote.HealthyThreshold, local.HealthyThreshold)
}
if local.UnhealthyThreshold != 0 &&
remote.UnhealthyThreshold != local.UnhealthyThreshold {
needUpdate = true
update.UnhealthyThreshold = local.UnhealthyThreshold
updateDetail += fmt.Sprintf("UnhealthyThreshold changed: %v - %v ;",
remote.UnhealthyThreshold, local.UnhealthyThreshold)
}
if local.Protocol == model.TCP &&
local.HealthCheckType != "" &&
remote.HealthCheckType != local.HealthCheckType {
needUpdate = true
update.HealthCheckType = local.HealthCheckType
updateDetail += fmt.Sprintf("HealthCheckType changed: %v - %v ;",
remote.HealthCheckType, local.HealthCheckType)
}
if local.Protocol != model.UDP &&
local.HealthCheckDomain != "" &&
remote.HealthCheckDomain != local.HealthCheckDomain {
needUpdate = true
update.HealthCheckDomain = local.HealthCheckDomain
updateDetail += fmt.Sprintf("HealthCheckDomain changed: %v - %v ;",
remote.HealthCheckDomain, local.HealthCheckDomain)
}
if local.Protocol != model.UDP &&
local.HealthCheckURI != "" &&
remote.HealthCheckURI != local.HealthCheckURI {
needUpdate = true
update.HealthCheckURI = local.HealthCheckURI
updateDetail += fmt.Sprintf("HealthCheckURI changed: %v - %v ;",
remote.HealthCheckURI, local.HealthCheckURI)
}
if local.Protocol != model.UDP &&
local.HealthCheckHttpCode != "" &&
remote.HealthCheckHttpCode != local.HealthCheckHttpCode {
needUpdate = true
update.HealthCheckHttpCode = local.HealthCheckHttpCode
updateDetail += fmt.Sprintf("HealthCheckHttpCode changed: %v - %v ;",
remote.HealthCheckHttpCode, local.HealthCheckHttpCode)
}
if Is4LayerProtocol(local.Protocol) &&
local.HealthCheckConnectTimeout != 0 &&
remote.HealthCheckConnectTimeout != local.HealthCheckConnectTimeout {
needUpdate = true
update.HealthCheckConnectTimeout = local.HealthCheckConnectTimeout
updateDetail += fmt.Sprintf("HealthCheckConnectTimeout changed: %v - %v ;",
remote.HealthCheckConnectTimeout, local.HealthCheckConnectTimeout)
}
if Is7LayerProtocol(local.Protocol) &&
local.HealthCheck != "" &&
remote.HealthCheck != local.HealthCheck {
needUpdate = true
update.HealthCheck = local.HealthCheck
updateDetail += fmt.Sprintf("HealthCheck changed: %v - %v ;",
remote.HealthCheck, local.HealthCheck)
}
if Is7LayerProtocol(local.Protocol) &&
local.HealthCheckTimeout != 0 &&
remote.HealthCheckTimeout != local.HealthCheckTimeout {
needUpdate = true
update.HealthCheckTimeout = local.HealthCheckTimeout
updateDetail += fmt.Sprintf("HealthCheckTimeout changed: %v - %v ;",
remote.HealthCheckTimeout, local.HealthCheckTimeout)
}
reqCtx.Ctx = context.WithValue(reqCtx.Ctx, dryrun.ContextMessage, updateDetail)
reqCtx.Log.Info(fmt.Sprintf("try to update listener %d, detail %s", local.ListenerPort, updateDetail))
return needUpdate, update
}