From 81a19f4ce3998cfd7ddb88942635807c47036840 Mon Sep 17 00:00:00 2001 From: robin shine Date: Wed, 2 Oct 2013 16:47:42 +0800 Subject: [PATCH] Reject git operation when server is not ready. --- .../com/pmease/commons/jetty/JettyPlugin.java | 20 ++++++++----- .../java/com/pmease/gitop/core/GitFilter.java | 30 ++++++++++++------- 2 files changed, 31 insertions(+), 19 deletions(-) diff --git a/commons.jetty/src/main/java/com/pmease/commons/jetty/JettyPlugin.java b/commons.jetty/src/main/java/com/pmease/commons/jetty/JettyPlugin.java index 89585435ce..e1fd380d33 100644 --- a/commons.jetty/src/main/java/com/pmease/commons/jetty/JettyPlugin.java +++ b/commons.jetty/src/main/java/com/pmease/commons/jetty/JettyPlugin.java @@ -4,6 +4,7 @@ import java.io.IOException; import java.util.EnumSet; import java.util.Set; +import javax.inject.Provider; import javax.servlet.DispatcherType; import javax.servlet.Filter; import javax.servlet.FilterChain; @@ -29,16 +30,19 @@ public class JettyPlugin extends AbstractPlugin { private ServletContextHandler contextHandler; - private final Set serverConfigurators; + private final Provider> serverConfiguratorsProvider; - private final Set servletContextConfigurators; + private final Provider> servletConfiguratorsProvider; + /* + * Inject providers here to avoid circurlar dependencies when dependency graph gets complicated + */ @Inject public JettyPlugin( - Set serverConfigurators, - Set servletContextConfigurators) { - this.serverConfigurators = serverConfigurators; - this.servletContextConfigurators = servletContextConfigurators; + Provider> serverConfiguratorsProvider, + Provider> servletConfiguratorsProvider) { + this.serverConfiguratorsProvider = serverConfiguratorsProvider; + this.servletConfiguratorsProvider = servletConfiguratorsProvider; } @Override @@ -80,7 +84,7 @@ public class JettyPlugin extends AbstractPlugin { contextHandler.addFilter(DisableTraceFilter.class, "/*", EnumSet.of(DispatcherType.REQUEST)); - for (ServletConfigurator configurator: servletContextConfigurators) + for (ServletConfigurator configurator: servletConfiguratorsProvider.get()) configurator.configure(contextHandler); /* @@ -92,7 +96,7 @@ public class JettyPlugin extends AbstractPlugin { server.setHandler(contextHandler); - for (ServerConfigurator configurator: serverConfigurators) + for (ServerConfigurator configurator: serverConfiguratorsProvider.get()) configurator.configure(server); return server; diff --git a/gitop.core/src/main/java/com/pmease/gitop/core/GitFilter.java b/gitop.core/src/main/java/com/pmease/gitop/core/GitFilter.java index a1786cac80..24990c0312 100644 --- a/gitop.core/src/main/java/com/pmease/gitop/core/GitFilter.java +++ b/gitop.core/src/main/java/com/pmease/gitop/core/GitFilter.java @@ -35,10 +35,13 @@ public class GitFilter implements Filter { private static final String INFO_REFS = "info/refs"; + private final Gitop gitop; + private final ProjectManager projectManager; @Inject - public GitFilter(ProjectManager projectManager) { + public GitFilter(Gitop gitop, ProjectManager projectManager) { + this.gitop = gitop; this.projectManager = projectManager; } @@ -147,17 +150,22 @@ public class GitFilter implements Filter { FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; - try { - if (GitSmartHttpTools.isInfoRefs(httpRequest)) { - processRefs(httpRequest, httpResponse); - } else if (GitSmartHttpTools.isReceivePack(httpRequest) || GitSmartHttpTools.isUploadPack(httpRequest)) { - processPacks(httpRequest, httpResponse); - } else { - chain.doFilter(request, response); + + if (gitop.isReady()) { + try { + if (GitSmartHttpTools.isInfoRefs(httpRequest)) { + processRefs(httpRequest, httpResponse); + } else if (GitSmartHttpTools.isReceivePack(httpRequest) || GitSmartHttpTools.isUploadPack(httpRequest)) { + processPacks(httpRequest, httpResponse); + } else { + chain.doFilter(request, response); + } + } catch (GeneralException e) { + logger.error("Error serving git request", e); + GitSmartHttpTools.sendError(httpRequest, httpResponse, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); } - } catch (GeneralException e) { - logger.error("Error serving git request", e); - GitSmartHttpTools.sendError(httpRequest, httpResponse, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); + } else { + GitSmartHttpTools.sendError(httpRequest, httpResponse, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Server is not ready."); } }