diff options
author | Bjørn Christian Seime <bjorncs@yahoo-inc.com> | 2017-05-16 14:24:00 +0200 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@yahoo-inc.com> | 2017-05-16 14:24:00 +0200 |
commit | 958dc05771460cf6264b0ed03a812d152d429deb (patch) | |
tree | 39a4a69cf0385e4c343a408087f57ac6c03abdbd /config-model | |
parent | a51888e2d82738c5b12a1a233ae772399c78bb4a (diff) |
Remove Manhattan integration
Diffstat (limited to 'config-model')
2 files changed, 0 insertions, 316 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ManhattanContainerModelBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ManhattanContainerModelBuilder.java deleted file mode 100644 index f6ed6c2eb7d..00000000000 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ManhattanContainerModelBuilder.java +++ /dev/null @@ -1,172 +0,0 @@ -// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.model.container.xml; - -import com.yahoo.component.ComponentId; -import com.yahoo.config.model.ConfigModelContext; -import com.yahoo.container.jdisc.config.MetricDefaultsConfig; -import com.yahoo.vespa.defaults.Defaults; -import com.yahoo.vespa.model.container.ContainerCluster; -import com.yahoo.vespa.model.container.component.AccessLogComponent; -import com.yahoo.vespa.model.container.component.Component; -import com.yahoo.vespa.model.container.component.FileStatusHandlerComponent; -import com.yahoo.vespa.model.container.http.ConnectorFactory; -import com.yahoo.vespa.model.container.http.FilterChains; -import com.yahoo.vespa.model.container.http.Http; -import com.yahoo.vespa.model.container.http.JettyHttpServer; -import org.w3c.dom.Element; - -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.logging.Level; - -import static com.google.common.base.Preconditions.checkNotNull; -import static com.yahoo.collections.CollectionUtil.first; -import static com.yahoo.container.core.AccessLogConfig.FileHandler.RotateScheme; -import static com.yahoo.vespa.model.container.xml.BundleMapper.absoluteBundlePath; - -/** - * @author tonytv - */ -public final class ManhattanContainerModelBuilder extends ContainerModelBuilder { - - static final String MANHATTAN_FILE_NAME_PATTERN = Defaults.getDefaults().vespaHome() + "logs/jdisc_core/access.%Y-%m-%d-%H"; - static final String MANHATTAN_ROTATION_INTERVAL = "0 60 ..."; - static final RotateScheme.Enum MANHATTAN_ROTATION_SCHEME = RotateScheme.DATE; - static final String MANHATTAN_SYMLINK_NAME = "access"; - - public interface BundleFiles { - // TODO: move constants to the DH code base. - Set<Path> dhBundles = new HashSet<>(Arrays.asList( - Paths.get("apache_avro/avro.jar"), - Paths.get("apache_avro/commons-compress.jar"), - Paths.get("apache_avro/paranamer.jar"), - Paths.get("apache_avro/jackson-core-asl.jar"), - Paths.get("apache_avro/jackson-mapper-asl.jar"), - Paths.get("dh_rainbow_client_api_java.jar"), - Paths.get("dh_rainbow_util_batch_java.jar"), - Paths.get("dh_rainbow_util_java.jar"))); - } - - private final int httpPort; - private JettyHttpServer jettyHttpServer; - - public ManhattanContainerModelBuilder(int httpPort) { - super(true, Networking.enable); - this.httpPort = httpPort; - } - - @Override - protected void addBundlesForPlatformComponents(ContainerCluster cluster) { - super.addBundlesForPlatformComponents(cluster); - BundleFiles.dhBundles.forEach( - bundleFile -> cluster.addPlatformBundle(absoluteBundlePath(bundleFile))); - } - - @Override - protected void setDefaultMetricConsumerFactory(ContainerCluster cluster) { - cluster.setDefaultMetricConsumerFactory(MetricDefaultsConfig.Factory.Enum.YAMAS_SCOREBOARD); - } - - @Override - protected void addAccessLogs(ContainerCluster cluster, Element spec) { - warnIfAccessLogsDefined(spec); - - checkNotNull(jettyHttpServer, "addHttp must be called first"); - cluster.addComponent(createManhattanAccessLog()); - } - - private Component createManhattanAccessLog() { - return new AccessLogComponent(AccessLogComponent.AccessLogType.yApacheAccessLog, - MANHATTAN_FILE_NAME_PATTERN, - MANHATTAN_ROTATION_INTERVAL, - MANHATTAN_ROTATION_SCHEME, - MANHATTAN_SYMLINK_NAME); - } - - private void warnIfAccessLogsDefined(Element spec) { - List<Element> accessLogElements = getAccessLogElements(spec); - if (!accessLogElements.isEmpty()) { - logManhattanInfo("Ignoring " + accessLogElements.size() + - " access log elements in services.xml, using default yapache access logging instead."); - } - } - - @Override - protected void addDefaultHandlers(ContainerCluster cluster) { - addDefaultHandlersExceptStatus(cluster); - } - - @Override - protected void addStatusHandlers(ContainerCluster cluster, ConfigModelContext configModelContext) { - addStatusHandlerForJDiscStatusPackage(cluster, "status.html"); //jdisc_status - addStatusHandlerForJDiscStatusPackage(cluster, "akamai"); //jdisc_akamai - } - - private static void addStatusHandlerForJDiscStatusPackage(ContainerCluster cluster, String name) { - cluster.addComponent( - new FileStatusHandlerComponent(name + "-status-handler", Defaults.getDefaults().vespaHome() + "libexec/jdisc/" + name, - "http://*/" + name, "https://*/" + name)); - } - - @Override - protected void addHttp(Element spec, ContainerCluster cluster) { - super.addHttp(spec, cluster); - ensureHasHttp(cluster); - ensureOneHttpServer(cluster.getHttp()); - } - - private void ensureHasHttp(ContainerCluster cluster) { - if (cluster.getHttp() == null) - cluster.setHttp(createHttp()); - } - - private Http createHttp() { - Http http = new Http(Collections.<Http.Binding>emptyList()); - http.setFilterChains(new FilterChains(http)); - return http; - } - - private void ensureOneHttpServer(Http http) { - if (http.getHttpServer() == null || http.getHttpServer().getConnectorFactories().isEmpty()) { - JettyHttpServer jettyHttpServer = new JettyHttpServer(new ComponentId("main-http-server")); - http.setHttpServer(jettyHttpServer); - ConnectorFactory connectorFactory = new ConnectorFactory("main-http-connector", - httpPort, null); - http.getHttpServer().addConnector(connectorFactory); - } else { - removeAllButOneConnector(http.getHttpServer()); - ConnectorFactory connectorFactory = first(http.getHttpServer().getConnectorFactories()); - connectorFactory.setListenPort(httpPort); - } - jettyHttpServer = http.getHttpServer(); - } - - private void removeAllButOneConnector(JettyHttpServer jettyHttpServer) { - int removed = 0; - - if (jettyHttpServer.getConnectorFactories().size() > 1) { - for (int i = jettyHttpServer.getConnectorFactories().size() - 1; i > 0; i--) { - ConnectorFactory c = jettyHttpServer.getConnectorFactories().get(i); - jettyHttpServer.removeConnector(c); - ++removed; - } - } - - if (removed > 0) { - logManhattanInfo("Using only the first http server " + jettyHttpServer.getConnectorFactories().get(0).getName()); - } - } - - private static <E> List<E> tail(List<E> list) { - return list.subList(1, list.size()); - } - - private void logManhattanInfo(String message) { - log.log(Level.INFO, "[Manhattan] " + message); - } -} diff --git a/config-model/src/test/scala/com/yahoo/vespa/model/container/xml/ManhattanContainerModelBuilderTest.scala b/config-model/src/test/scala/com/yahoo/vespa/model/container/xml/ManhattanContainerModelBuilderTest.scala deleted file mode 100644 index 4a437994656..00000000000 --- a/config-model/src/test/scala/com/yahoo/vespa/model/container/xml/ManhattanContainerModelBuilderTest.scala +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.model.container.xml - - -import org.junit.Test -import scala.xml.{PrettyPrinter, Elem} - -import ManhattanContainerModelBuilderTest._ -import com.yahoo.config.model.test.MockRoot -import org.apache.commons.io.IOUtils -import com.yahoo.vespa.model.container.ContainerCluster -import com.yahoo.vespa.model.container.component.{Component, AccessLogComponent} -import scala.collection.JavaConversions._ -import scala.reflect.ClassTag -import com.yahoo.config.model.producer.AbstractConfigProducer -import com.yahoo.osgi.provider.model.ComponentModel -import org.junit.Assert.{assertThat, assertNotNull} -import org.hamcrest.CoreMatchers.is -import com.yahoo.container.handler.VipStatusHandler -import com.yahoo.config.model.builder.xml.XmlHelper.getDocumentBuilder -import com.yahoo.vespa.model.container.search.searchchain.FederationSearcherTest -import com.yahoo.container.jdisc.config.HttpServerConfig -import com.yahoo.config.model.deploy.DeployState - -import scala.language.reflectiveCalls - -/** - * @author tonytv - */ -class ManhattanContainerModelBuilderTest { - - val emptyJDiscElement = <jdisc version="1.0" /> - - @Test - def multiple_access_logs_configured() { - val container = buildManhattanContainer( - <jdisc version="1.0"> - <accesslog type="yapache" fileNamePattern="myPattern" /> - <accesslog type="vespa" fileNamePattern="myPattern" /> - </jdisc>) - } - - @Test - def status_html_and_akamai_handlers_configured() { - val container = buildManhattanContainer(emptyJDiscElement) - - val vipStatusComponents = getComponentsWithModelClass[VipStatusHandler](container) - val ids = vipStatusComponents map { _.model.getComponentId.getName } - - assertThat(ids.toSet, is(Set("status.html-status-handler", "akamai-status-handler"))) - } - - @Test - def http_server_added_automatically() { - val container = buildManhattanContainer(emptyJDiscElement) - - assertThat(((container.getHttp.getHttpServer != null) && (container.getHttp.getHttpServer.getConnectorFactories.size() == 1)), is(true)) - assertThat(container.getHttp.getHttpServer.getConnectorFactories.head.getListenPort, is(httpPort)) - } - - @Test - def only_the_first_http_server_is_kept() { - val container = buildManhattanContainer( - <jdisc version="1.0"> - <http> - <server id="server1" port="123" /> - <server id="server2" port="456" /> - </http> - </jdisc>) - - assertThat(((container.getHttp.getHttpServer != null) && (container.getHttp.getHttpServer.getConnectorFactories.size() == 1)), is(true)) - assertThat(container.getHttp.getHttpServer.getComponentId.getName, is("jdisc-jetty")) - assertThat(container.getHttp.getHttpServer.getConnectorFactories.head.getName, is("server1")) - assertThat(container.getHttp.getHttpServer.getConnectorFactories.head.getListenPort, is(httpPort)) - } - - @Test - def filters_and_bindings_are_preserved() { - val container = buildManhattanContainer( - <jdisc version="1.0"> - <http> - <filtering> - <filter id="my-filter" /> - <request-chain id="my-chain"> - <filter id="my-filter" /> - <binding>http://*:123/my-binding</binding> - </request-chain> - </filtering> - <server id="server1" port="123" /> - </http> - </jdisc>) - - val binding = container.getHttp.getBindings.head - assertThat(binding.filterId.getName, is("my-chain")) - assertThat(binding.binding, is("http://*:123/my-binding")) - - val filterChains = container.getHttp.getFilterChains - assertNotNull("Missing filter", filterChains.componentsRegistry().getComponent("my-filter")) - assertNotNull("Missing chain", filterChains.allChains().getComponent("my-chain")) - } -} - -object ManhattanContainerModelBuilderTest { - type ACP = AbstractConfigProducer[_] - type COMPONENT = Component[_ <: ACP, _ <: ComponentModel] - - val httpPort = 9876 - - def getComponents[T <: COMPONENT](cluster: ContainerCluster)(implicit tag: ClassTag[T]): Iterable[T] = { - fixType(cluster.getComponentsMap.values()) collect { case c: T => c } - } - - def getComponentsWithModelClass[T <: AnyRef](cluster: ContainerCluster)(implicit tag: ClassTag[T]) = { - val className = tag.runtimeClass.getName - fixType(cluster.getAllComponents) filter { _.model.getClassId.getName == className } - } - - def modelClassIdMatches(name: String): PartialFunction[COMPONENT, COMPONENT] = { - case c: COMPONENT if c.model.getClassId.getName == name => c - } - - def fixType(components: java.util.Collection[_ <: Component[_, _]]): java.util.Collection[COMPONENT] = - components.asInstanceOf[java.util.Collection[COMPONENT]] - - def buildManhattanContainer(elem: Elem) = { - val root = new MockRoot() - val containerModel = new ManhattanContainerModelBuilder(httpPort).build(DeployState.createTestState(), null, root, domElement(elem)) - root.freezeModelTopology() - containerModel.getCluster() - } - - def xmlStringBuilder(elem: Elem) = { - val printer = new PrettyPrinter(240, 2) - val builder = new StringBuilder - builder.append("<?xml version='1.0' encoding='utf-8' ?>\n") - printer.format(elem, builder) - builder - } - - def domElement(elem: Elem) = { - val stream = IOUtils.toInputStream(xmlStringBuilder(elem)) - getDocumentBuilder.parse(stream).getDocumentElement - } -} |