Send 503 on IOException in ViewFilter.

Previously the filter propagated the IOException up the stack.
Explicitly log and send an 503 when an IOException occurs during parse
in ViewFilter.

Change-Id: Ibe77cd12d687f54abb2271b1caa326f524bad7d2
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/ViewFilter.java b/gitiles-servlet/src/main/java/com/google/gitiles/ViewFilter.java
index 4f60c12..90b84f5 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/ViewFilter.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/ViewFilter.java
@@ -18,6 +18,7 @@
 import static com.google.common.base.Preconditions.checkNotNull;
 
 import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND;
+import static javax.servlet.http.HttpServletResponse.SC_SERVICE_UNAVAILABLE;
 
 import java.io.IOException;
 import java.util.Map;
@@ -31,11 +32,14 @@
 import org.eclipse.jgit.http.server.ServletUtils;
 import org.eclipse.jgit.http.server.glue.WrappedRequest;
 import org.eclipse.jgit.lib.Config;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.google.common.collect.Sets;
 
 /** Filter to parse URLs and convert them to {@link GitilesView}s. */
 public class ViewFilter extends AbstractHttpFilter {
+  private static final Logger log = LoggerFactory.getLogger(ViewFilter.class);
   // TODO(dborowitz): Make this public in JGit (or implement getRegexGroup
   // upstream).
   private static final String REGEX_GROUPS_ATTRIBUTE =
@@ -93,7 +97,15 @@
   @Override
   public void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain chain)
       throws IOException, ServletException {
-    GitilesView.Builder view = parse(req);
+    GitilesView.Builder view;
+    try {
+      view = parse(req);
+    } catch (IOException err) {
+      String name = urls.getHostName(req);
+      log.warn("Cannot parse view" + (name != null ? " for " + name : ""), err);
+      res.setStatus(SC_SERVICE_UNAVAILABLE);
+      return;
+    }
     if (view == null) {
       res.setStatus(SC_NOT_FOUND);
       return;