This is an automated email from the ASF dual-hosted git repository. elsloo pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-trafficcontrol.git
commit d97717764c308d6b72642adf2fce885d9c349fd5 Author: Rawlin Peters <rawlin_pet...@comcast.com> AuthorDate: Thu Feb 1 17:11:03 2018 -0700 Fix steering race condition in TR Don't proactively remove Steering data for delivery services not yet in the CRConfig.json. This data is not "invalid" and can safely be kept. This fixes the race condition where a user updates steering assignments for delivery services that don't exist in CRConfig yet that causes the steering delivery service to be unusable. --- .../traffic_router/core/config/ConfigHandler.java | 1 - .../traffic_router/core/ds/SteeringWatcher.java | 24 +++------------------- 2 files changed, 3 insertions(+), 22 deletions(-) diff --git a/traffic_router/core/src/main/java/com/comcast/cdn/traffic_control/traffic_router/core/config/ConfigHandler.java b/traffic_router/core/src/main/java/com/comcast/cdn/traffic_control/traffic_router/core/config/ConfigHandler.java index c13b4e6..d458651 100644 --- a/traffic_router/core/src/main/java/com/comcast/cdn/traffic_control/traffic_router/core/config/ConfigHandler.java +++ b/traffic_router/core/src/main/java/com/comcast/cdn/traffic_control/traffic_router/core/config/ConfigHandler.java @@ -207,7 +207,6 @@ public class ConfigHandler { federationsWatcher.configure(config); steeringWatcher.configure(config); - steeringWatcher.setCacheRegister(cacheRegister); trafficRouterManager.setCacheRegister(cacheRegister); trafficRouterManager.getTrafficRouter().setRequestHeaders(parseRequestHeaders(config.get("requestHeaders"))); trafficRouterManager.getTrafficRouter().configurationChanged(); diff --git a/traffic_router/core/src/main/java/com/comcast/cdn/traffic_control/traffic_router/core/ds/SteeringWatcher.java b/traffic_router/core/src/main/java/com/comcast/cdn/traffic_control/traffic_router/core/ds/SteeringWatcher.java index 66174ce..74b0c4b 100644 --- a/traffic_router/core/src/main/java/com/comcast/cdn/traffic_control/traffic_router/core/ds/SteeringWatcher.java +++ b/traffic_router/core/src/main/java/com/comcast/cdn/traffic_control/traffic_router/core/ds/SteeringWatcher.java @@ -15,17 +15,12 @@ package com.comcast.cdn.traffic_control.traffic_router.core.ds; -import com.comcast.cdn.traffic_control.traffic_router.core.cache.CacheRegister; import com.comcast.cdn.traffic_control.traffic_router.core.util.AbstractResourceWatcher; import org.apache.log4j.Logger; -import java.util.ArrayList; -import java.util.List; - public class SteeringWatcher extends AbstractResourceWatcher { private static final Logger LOGGER = Logger.getLogger(SteeringWatcher.class); private SteeringRegistry steeringRegistry; - private CacheRegister cacheRegister; public static final String DEFAULT_STEERING_DATA_URL = "https://${toHostname}/internal/api/1.2/steering.json"; @@ -33,26 +28,13 @@ public class SteeringWatcher extends AbstractResourceWatcher { setDatabaseUrl(DEFAULT_STEERING_DATA_URL); } - public void setCacheRegister(final CacheRegister cacheRegister) { - this.cacheRegister = cacheRegister; - } - @Override public boolean useData(final String data) { try { + // NOTE: it is likely that the steering data will contain xml_ids for delivery services + // that haven't been added to the CRConfig yet. This is okay because the SteeringRegistry + // will only be queried for Delivery Service xml_ids that exist in CRConfig steeringRegistry.update(data); - if (cacheRegister != null) { - final List<String> invalidOnes = new ArrayList<String>(); - - for (final Steering steering : steeringRegistry.getAll()) { - if (cacheRegister.getDeliveryService(steering.getDeliveryService()) == null) { - LOGGER.warn("Steering data from " + dataBaseURL + " contains delivery service id reference '" + steering.getDeliveryService() + "' that's not in cr-config"); - invalidOnes.add(steering.getDeliveryService()); - } - } - - steeringRegistry.removeAll(invalidOnes); - } return true; } catch (Exception e) { -- To stop receiving notification emails like this one, please contact els...@apache.org.