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.

Reply via email to