Merge pull request #524 from metamx/fix-router2

Small fixes to router
diff --git a/pom.xml b/pom.xml
index 87bf8b6..b51fbb3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -79,7 +79,7 @@
             <dependency>
                 <groupId>com.metamx</groupId>
                 <artifactId>http-client</artifactId>
-                <version>0.9.2</version>
+                <version>0.9.4</version>
             </dependency>
             <dependency>
                 <groupId>com.metamx</groupId>
diff --git a/server/src/main/java/io/druid/server/coordinator/rules/PeriodLoadRule.java b/server/src/main/java/io/druid/server/coordinator/rules/PeriodLoadRule.java
index e996fa9..3f650c8 100644
--- a/server/src/main/java/io/druid/server/coordinator/rules/PeriodLoadRule.java
+++ b/server/src/main/java/io/druid/server/coordinator/rules/PeriodLoadRule.java
@@ -94,6 +94,6 @@
   public boolean appliesTo(Interval interval, DateTime referenceTimestamp)
   {
     final Interval currInterval = new Interval(period, referenceTimestamp);
-    return currInterval.overlaps(interval);
+    return currInterval.contains(interval);
   }
 }
diff --git a/server/src/main/java/io/druid/server/router/CoordinatorRuleManager.java b/server/src/main/java/io/druid/server/router/CoordinatorRuleManager.java
index adf8e6f..bcd5ba9 100644
--- a/server/src/main/java/io/druid/server/router/CoordinatorRuleManager.java
+++ b/server/src/main/java/io/druid/server/router/CoordinatorRuleManager.java
@@ -30,8 +30,8 @@
 import com.metamx.common.lifecycle.LifecycleStop;
 import com.metamx.common.logger.Logger;
 import com.metamx.http.client.HttpClient;
-import com.metamx.http.client.response.StatusResponseHandler;
-import com.metamx.http.client.response.StatusResponseHolder;
+import com.metamx.http.client.response.FullResponseHandler;
+import com.metamx.http.client.response.FullResponseHolder;
 import io.druid.client.selector.Server;
 import io.druid.concurrent.Execs;
 import io.druid.curator.discovery.ServerDiscoverySelector;
@@ -39,6 +39,7 @@
 import io.druid.guice.annotations.Global;
 import io.druid.guice.annotations.Json;
 import io.druid.server.coordinator.rules.Rule;
+import org.jboss.netty.handler.codec.http.HttpResponseStatus;
 import org.joda.time.Duration;
 
 import java.net.URL;
@@ -60,7 +61,7 @@
   private final Supplier<TieredBrokerConfig> config;
   private final ServerDiscoverySelector selector;
 
-  private final StatusResponseHandler responseHandler;
+  private final FullResponseHandler responseHandler;
   private final AtomicReference<ConcurrentHashMap<String, List<Rule>>> rules;
 
   private volatile ScheduledExecutorService exec;
@@ -82,7 +83,7 @@
     this.config = config;
     this.selector = selector;
 
-    this.responseHandler = new StatusResponseHandler(Charsets.UTF_8);
+    this.responseHandler = new FullResponseHandler(Charsets.UTF_8);
     this.rules = new AtomicReference<>(
         new ConcurrentHashMap<String, List<Rule>>()
     );
@@ -137,6 +138,7 @@
     return started;
   }
 
+  @SuppressWarnings("unchecked")
   public void poll()
   {
     try {
@@ -145,11 +147,19 @@
         return;
       }
 
-      StatusResponseHolder response = httpClient.get(new URL(url))
-                                                .go(responseHandler)
-                                                .get();
+      FullResponseHolder response = httpClient.get(new URL(url))
+                                              .go(responseHandler)
+                                              .get();
 
-      ConcurrentHashMap<String, List<Rule>> newRules = new ConcurrentHashMap<String, List<Rule>>(
+      if (response.getStatus().equals(HttpResponseStatus.FOUND)) {
+        url = response.getResponse().getHeader("Location");
+        log.info("Redirecting rule request to [%s]", url);
+        response = httpClient.get(new URL(url))
+                             .go(responseHandler)
+                             .get();
+      }
+
+      ConcurrentHashMap<String, List<Rule>> newRules = new ConcurrentHashMap<>(
           (Map<String, List<Rule>>) jsonMapper.readValue(
               response.getContent(), new TypeReference<Map<String, List<Rule>>>()
           {
diff --git a/server/src/test/java/io/druid/server/coordinator/rules/PeriodLoadRuleTest.java b/server/src/test/java/io/druid/server/coordinator/rules/PeriodLoadRuleTest.java
index afd2551..63d3384 100644
--- a/server/src/test/java/io/druid/server/coordinator/rules/PeriodLoadRuleTest.java
+++ b/server/src/test/java/io/druid/server/coordinator/rules/PeriodLoadRuleTest.java
@@ -49,7 +49,7 @@
 
     Assert.assertTrue(rule.appliesTo(builder.interval(new Interval("2012-01-01/2012-12-31")).build(), now));
     Assert.assertTrue(rule.appliesTo(builder.interval(new Interval("1000-01-01/2012-12-31")).build(), now));
-    Assert.assertTrue(rule.appliesTo(builder.interval(new Interval("0500-01-01/2100-12-31")).build(), now));
+    Assert.assertFalse(rule.appliesTo(builder.interval(new Interval("0500-01-01/2100-12-31")).build(), now));
   }
 
   @Test
@@ -64,7 +64,7 @@
     );
 
     Assert.assertTrue(rule.appliesTo(builder.interval(new Interval(now.minusWeeks(1), now)).build(), now));
-    Assert.assertTrue(
+    Assert.assertFalse(
         rule.appliesTo(
             builder.interval(new Interval(now.minusDays(1), now.plusDays(1)))
                    .build(),